diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 6621d59b7c23..000000000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,4 +0,0 @@ -When reviewing code: -* do not review changes in files with `.expected` extension (they are automatically ensured to be correct). -* in `.ql` and `.qll` files, do not try to review the code itself as you don't understand the programming language - well enough to make comments in these languages. You can still check for typos or comment improvements. diff --git a/.github/workflows/check-change-note.yml b/.github/workflows/check-change-note.yml index 70b78ce72944..3330e6e1136d 100644 --- a/.github/workflows/check-change-note.yml +++ b/.github/workflows/check-change-note.yml @@ -16,6 +16,7 @@ on: - "shared/**/*.qll" - "!**/experimental/**" - "!ql/**" + - "!rust/**" - ".github/workflows/check-change-note.yml" jobs: diff --git a/.github/workflows/check-overlay-annotations.yml b/.github/workflows/check-overlay-annotations.yml deleted file mode 100644 index 5369dfd49d00..000000000000 --- a/.github/workflows/check-overlay-annotations.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Check overlay annotations - -on: - push: - branches: - - main - - 'rc/*' - pull_request: - branches: - - main - - 'rc/*' - -permissions: - contents: read - -jobs: - sync: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Check overlay annotations - run: python config/add-overlay-annotations.py --check java - diff --git a/.github/workflows/ql-for-ql-dataset_measure.yml b/.github/workflows/ql-for-ql-dataset_measure.yml index c3441ffa4074..d133eb0ad350 100644 --- a/.github/workflows/ql-for-ql-dataset_measure.yml +++ b/.github/workflows/ql-for-ql-dataset_measure.yml @@ -53,7 +53,7 @@ jobs: - name: Create database run: | "${CODEQL}" database create \ - --search-path "${{ github.workspace }}" \ + --search-path "${{ github.workspace }}" --threads 4 \ --language ql --source-root "${{ github.workspace }}/repo" \ "${{ runner.temp }}/database" diff --git a/Cargo.lock b/Cargo.lock index 263b16482a98..9e7905aa99b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -419,7 +419,6 @@ dependencies = [ "lazy_static", "rayon", "regex", - "serde_json", "tracing", "tracing-subscriber", "tree-sitter", diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index c6a0df46cfc1..f5e82a8647a6 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.13-dev +version: 0.4.12 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.md b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.md index 486b3cb24972..36622d127d80 100644 --- a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.md +++ b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.md @@ -1,4 +1,6 @@ -## Overview +# Environment Path Injection + +## Description GitHub Actions allow to define the system PATH variable by writing to a file pointed to by the `GITHUB_PATH` environment variable. Writing to this file appends a directory to the system PATH variable and automatically makes it available to all subsequent actions in the current job. @@ -10,11 +12,11 @@ echo "$HOME/.local/bin" >> $GITHUB_PATH If an attacker can control the contents of the system PATH, they are able to influence what commands are run in subsequent steps of the same job. -## Recommendation +## Recommendations Do not allow untrusted data to influence the system PATH: Avoid using untrusted data sources (e.g., artifact content) to define the system PATH. -## Example +## Examples ### Incorrect Usage @@ -34,4 +36,4 @@ If an attacker can manipulate the value being set, such as through artifact down ## References -- GitHub Docs: [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions). +- [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions) diff --git a/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.md b/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.md index 486b3cb24972..36622d127d80 100644 --- a/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.md +++ b/actions/ql/src/Security/CWE-077/EnvPathInjectionMedium.md @@ -1,4 +1,6 @@ -## Overview +# Environment Path Injection + +## Description GitHub Actions allow to define the system PATH variable by writing to a file pointed to by the `GITHUB_PATH` environment variable. Writing to this file appends a directory to the system PATH variable and automatically makes it available to all subsequent actions in the current job. @@ -10,11 +12,11 @@ echo "$HOME/.local/bin" >> $GITHUB_PATH If an attacker can control the contents of the system PATH, they are able to influence what commands are run in subsequent steps of the same job. -## Recommendation +## Recommendations Do not allow untrusted data to influence the system PATH: Avoid using untrusted data sources (e.g., artifact content) to define the system PATH. -## Example +## Examples ### Incorrect Usage @@ -34,4 +36,4 @@ If an attacker can manipulate the value being set, such as through artifact down ## References -- GitHub Docs: [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions). +- [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions) diff --git a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.md b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.md index 94cdc439fbda..cc35402b804d 100644 --- a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.md +++ b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.md @@ -1,4 +1,6 @@ -## Overview +# Environment Variable Injection + +## Description GitHub Actions allow to define environment variables by writing to a file pointed to by the `GITHUB_ENV` environment variable: @@ -35,7 +37,7 @@ steps: If an attacker can control the values assigned to environment variables and there is no sanitization in place, the attacker will be able to inject additional variables by injecting new lines or `{delimiters}`. -## Recommendation +## Recommendations 1. **Do not allow untrusted data to influence environment variables**: @@ -62,7 +64,7 @@ If an attacker can control the values assigned to environment variables and ther } >> "$GITHUB_ENV" ``` -## Example +## Examples ### Example of Vulnerability @@ -111,5 +113,5 @@ An attacker is be able to run arbitrary code by injecting environment variables ## References -- GitHub Docs: [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions). -- Synacktiv: [GitHub Actions Exploitation: Repo Jacking and Environment Manipulation](https://www.synacktiv.com/publications/github-actions-exploitation-repo-jacking-and-environment-manipulation). +- [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions) +- [GitHub Actions Exploitation: Repo Jacking and Environment Manipulation](https://www.synacktiv.com/publications/github-actions-exploitation-repo-jacking-and-environment-manipulation) diff --git a/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.md b/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.md index d604ccf19652..5d2c61150972 100644 --- a/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.md +++ b/actions/ql/src/Security/CWE-077/EnvVarInjectionMedium.md @@ -1,4 +1,6 @@ -## Overview +# Environment Variable Injection + +## Description GitHub Actions allow to define environment variables by writing to a file pointed to by the `GITHUB_ENV` environment variable: @@ -35,7 +37,7 @@ steps: If an attacker can control the values assigned to environment variables and there is no sanitization in place, the attacker will be able to inject additional variables by injecting new lines or `{delimiters}`. -## Recommendation +## Recommendations 1. **Do not allow untrusted data to influence environment variables**: @@ -62,7 +64,7 @@ If an attacker can control the values assigned to environment variables and ther } >> "$GITHUB_ENV" ``` -## Example +## Examples ### Example of Vulnerability @@ -111,5 +113,5 @@ An attacker would be able to run arbitrary code by injecting environment variabl ## References -- GitHub Docs: [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions). -- Synacktiv: [GitHub Actions Exploitation: Repo Jacking and Environment Manipulation](https://www.synacktiv.com/publications/github-actions-exploitation-repo-jacking-and-environment-manipulation). +- [Workflow commands for GitHub Actions](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions) +- [GitHub Actions Exploitation: Repo Jacking and Environment Manipulation](https://www.synacktiv.com/publications/github-actions-exploitation-repo-jacking-and-environment-manipulation) diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.md b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.md index 1c8c016dade8..f2e494468112 100644 --- a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.md +++ b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.md @@ -1,16 +1,18 @@ -## Overview +# Code Injection in GitHub Actions + +## Description Using user-controlled input in GitHub Actions may lead to code injection in contexts like _run:_ or _script:_. Code injection in GitHub Actions may allow an attacker to exfiltrate any secrets used in the workflow and the temporary GitHub repository authorization token. The token may have write access to the repository, allowing an attacker to make changes to the repository. -## Recommendation +## Recommendations The best practice to avoid code injection vulnerabilities in GitHub workflows is to set the untrusted input value of the expression to an intermediate environment variable and then use the environment variable using the native syntax of the shell/script interpreter (that is, not _${{ env.VAR }}_). It is also recommended to limit the permissions of any tokens used by a workflow such as the GITHUB_TOKEN. -## Example +## Examples ### Incorrect Usage diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionMedium.md b/actions/ql/src/Security/CWE-094/CodeInjectionMedium.md index 1c8c016dade8..f2e494468112 100644 --- a/actions/ql/src/Security/CWE-094/CodeInjectionMedium.md +++ b/actions/ql/src/Security/CWE-094/CodeInjectionMedium.md @@ -1,16 +1,18 @@ -## Overview +# Code Injection in GitHub Actions + +## Description Using user-controlled input in GitHub Actions may lead to code injection in contexts like _run:_ or _script:_. Code injection in GitHub Actions may allow an attacker to exfiltrate any secrets used in the workflow and the temporary GitHub repository authorization token. The token may have write access to the repository, allowing an attacker to make changes to the repository. -## Recommendation +## Recommendations The best practice to avoid code injection vulnerabilities in GitHub workflows is to set the untrusted input value of the expression to an intermediate environment variable and then use the environment variable using the native syntax of the shell/script interpreter (that is, not _${{ env.VAR }}_). It is also recommended to limit the permissions of any tokens used by a workflow such as the GITHUB_TOKEN. -## Example +## Examples ### Incorrect Usage diff --git a/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.md b/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.md index d9c02b6d7f79..91360a30ed88 100644 --- a/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.md +++ b/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.md @@ -1,11 +1,13 @@ -## Overview +# Use of Actions with known vulnerabilities + +## Description The security of the workflow and the repository could be compromised by GitHub Actions workflows that utilize GitHub Actions with known vulnerabilities. -## Recommendation +## Recommendations Either remove the component from the workflow or upgrade it to a version that is not vulnerable. ## References -- GitHub Docs: [Keeping your actions up to date with Dependabot](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot). +- [GitHub Docs: Keeping your actions up to date with Dependabot](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot) diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md index e932fcf50fdc..9385759dae95 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.md @@ -1,21 +1,12 @@ -## Overview +# Actions Job and Workflow Permissions are not set -If a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`. - -## Recommendation - -Add the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task. - -## Example +## Description -### Incorrect Usage +If a GitHub Actions job or workflow has no explicit permissions set, then the repository permissions are used. Repositories created under organizations inherit the organization permissions. The organizations or repositories created before February 2023 have the default permissions set to read-write. Often these permissions do not adhere to the principle of least privilege and can be reduced to read-only, leaving the `write` permission only to a specific types as `issues: write` or `pull-requests: write`. -```yaml -name: "My workflow" -# No permissions block -``` +## Recommendations -### Correct Usage +Add the `permissions` key to the job or the root of workflow (in this case it is applied to all jobs in the workflow that do not have their own `permissions` key) and assign the least privileges required to complete the task: ```yaml name: "My workflow" @@ -36,4 +27,4 @@ jobs: ## References -- GitHub Docs: [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs). +- [Assigning permissions to jobs](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/assigning-permissions-to-jobs) diff --git a/actions/ql/src/Security/CWE-285/ImproperAccessControl.md b/actions/ql/src/Security/CWE-285/ImproperAccessControl.md index f8596c4c3471..594f381d8ce0 100644 --- a/actions/ql/src/Security/CWE-285/ImproperAccessControl.md +++ b/actions/ql/src/Security/CWE-285/ImproperAccessControl.md @@ -1,12 +1,14 @@ -## Overview +# Improper Access Control + +## Description Sometimes labels are used to approve GitHub Actions. An authorization check may not be properly implemented, allowing an attacker to mutate the code after it has been reviewed and approved by label. -## Recommendation +## Recommendations When using labels, make sure that the code cannot be modified after it has been reviewed and the label has been set. -## Example +## Examples ### Incorrect Usage @@ -55,4 +57,4 @@ jobs: ## References -- GitHub Docs: [Events that trigger workflows](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request_target). +- [Events that trigger workflows](https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request_target) diff --git a/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.md b/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.md index b56acf07ad63..9351af5cf1e2 100644 --- a/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.md +++ b/actions/ql/src/Security/CWE-312/ExcessiveSecretsExposure.md @@ -1,12 +1,14 @@ -## Overview +# Excessive Secrets Exposure + +## Description When the workflow runner cannot determine what secrets are needed to run the workflow, it will pass all the available secrets to the runner including organization and repository secrets. This violates the least privileged principle and increases the impact of a potential vulnerability affecting the workflow. -## Recommendation +## Recommendations Only pass those secrets that are needed by the workflow. Avoid using expressions such as `toJSON(secrets)` or dynamically accessed secrets such as `secrets[format('GH_PAT_%s', matrix.env)]` since the workflow will need to receive all secrets to decide at runtime which one needs to be used. -## Example +## Examples ### Incorrect Usage @@ -46,5 +48,5 @@ env: ## References -- GitHub Docs: [Using secrets in GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#using-encrypted-secrets-in-a-workflow). -- poutine: [Job uses all secrets](https://github.com/boostsecurityio/poutine/blob/main/docs/content/en/rules/job_all_secrets.md). +- [Using secrets in GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#using-encrypted-secrets-in-a-workflow) +- [Job uses all secrets](https://github.com/boostsecurityio/poutine/blob/main/docs/content/en/rules/job_all_secrets.md) diff --git a/actions/ql/src/Security/CWE-312/SecretsInArtifacts.md b/actions/ql/src/Security/CWE-312/SecretsInArtifacts.md index bf658864ed7e..5b05c9a118fa 100644 --- a/actions/ql/src/Security/CWE-312/SecretsInArtifacts.md +++ b/actions/ql/src/Security/CWE-312/SecretsInArtifacts.md @@ -1,4 +1,6 @@ -## Overview +# Storage of sensitive information in GitHub Actions artifact + +## Description Sensitive information included in a GitHub Actions artifact can allow an attacker to access the sensitive information if the artifact is published. @@ -8,8 +10,6 @@ Only store information that is meant to be publicly available in a GitHub Action ## Example -### Incorrect Usage - The following example uses `actions/checkout` to checkout code which stores the GITHUB_TOKEN in the \`.git/config\` file and then stores the contents of the \`.git\` repository into the artifact: ```yaml @@ -28,8 +28,6 @@ jobs: path: . ``` -### Correct Usage - The issue has been fixed below, where the `actions/upload-artifact` uses a version (v4+) which does not include hidden files or directories into the artifact. ```yaml diff --git a/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.md b/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.md index 031bd5957881..c33b89fdcec6 100644 --- a/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.md +++ b/actions/ql/src/Security/CWE-312/UnmaskedSecretExposure.md @@ -1,12 +1,14 @@ -## Overview +# Unmasked Secret Exposure + +## Description Secrets derived from other secrets are not known to the workflow runner, and therefore are not masked unless explicitly registered. -## Recommendation +## Recommendations Avoid defining non-plain secrets. For example, do not define a new secret containing a JSON object and then read properties out of it from the workflow, since these read values will not be masked by the workflow runner. -## Example +## Examples ### Incorrect Usage @@ -32,4 +34,4 @@ Avoid defining non-plain secrets. For example, do not define a new secret contai ## References -- GitHub Docs: [Using secrets in GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#using-encrypted-secrets-in-a-workflow). +- [Using secrets in GitHub Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#using-encrypted-secrets-in-a-workflow) diff --git a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.md b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.md index f75028a27e61..667c41dc153e 100644 --- a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.md +++ b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.md @@ -1,4 +1,6 @@ -## Overview +# Cache Poisoning in GitHub Actions + +## Description GitHub Actions cache poisoning is a technique that allows an attacker to inject malicious content into the Action's cache from unprivileged workflow, potentially leading to code execution in privileged workflows. @@ -21,7 +23,7 @@ In GitHub Actions, cache scopes are primarily determined by the branch structure Due to the above design, if something is cached in the context of the default branch (e.g., `main`), it becomes accessible to any feature branch derived from `main`. -## Recommendation +## Recommendations 1. Avoid using caching in workflows that handle sensitive operations like releases. 2. If caching must be used: @@ -32,7 +34,7 @@ Due to the above design, if something is cached in the context of the default br 4. Never run untrusted code in the context of the default branch. 5. Sign the cache value cryptographically and verify the signature before usage. -## Example +## Examples ### Incorrect Usage @@ -76,6 +78,6 @@ jobs: ## References -- Adnan Khan's Blog: [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/). -- GitHub Docs: [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). -- Scribe Security Blog: [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/). +- [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/) +- [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) +- [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/) diff --git a/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.md b/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.md index 849b771a8ff0..c12fb7998929 100644 --- a/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.md +++ b/actions/ql/src/Security/CWE-349/CachePoisoningViaDirectCache.md @@ -1,4 +1,6 @@ -## Overview +# Cache Poisoning in GitHub Actions + +## Description GitHub Actions cache poisoning is a technique that allows an attacker to inject malicious content into the Action's cache from unprivileged workflow, potentially leading to code execution in privileged workflows. @@ -21,7 +23,7 @@ In GitHub Actions, cache scopes are primarily determined by the branch structure Due to the above design, if something is cached in the context of the default branch (e.g., `main`), it becomes accessible to any feature branch derived from `main`. -## Recommendation +## Recommendations 1. Avoid using caching in workflows that handle sensitive operations like releases. 2. If caching must be used: @@ -32,7 +34,7 @@ Due to the above design, if something is cached in the context of the default br 4. Never run untrusted code in the context of the default branch. 5. Sign the cache value cryptographically and verify the signature before usage. -## Example +## Examples ### Incorrect Usage @@ -121,6 +123,6 @@ jobs: ## References -- Adnan Khan's Blog: [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/). -- GitHub Docs: [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). -- Scribe Security Blog: [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/). +- [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/) +- [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) +- [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/) diff --git a/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.md b/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.md index fefd6d61a44d..c777e1980393 100644 --- a/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.md +++ b/actions/ql/src/Security/CWE-349/CachePoisoningViaPoisonableStep.md @@ -1,4 +1,6 @@ -## Overview +# Cache Poisoning in GitHub Actions + +## Description GitHub Actions cache poisoning is a technique that allows an attacker to inject malicious content into the Action's cache from unprivileged workflow, potentially leading to code execution in privileged workflows. @@ -21,7 +23,7 @@ In GitHub Actions, cache scopes are primarily determined by the branch structure Due to the above design, if something is cached in the context of the default branch (e.g., `main`), it becomes accessible to any feature branch derived from `main`. -## Recommendation +## Recommendations 1. Avoid using caching in workflows that handle sensitive operations like releases. 2. If caching must be used: @@ -32,7 +34,7 @@ Due to the above design, if something is cached in the context of the default br 4. Never run untrusted code in the context of the default branch. 5. Sign the cache value cryptographically and verify the signature before usage. -## Example +## Examples ### Incorrect Usage @@ -78,6 +80,6 @@ jobs: ## References -- Adnan Khan's Blog: [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/). -- GitHub Docs: [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). -- Scribe Security Blog: [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/). +- [The Monsters in Your Build Cache – GitHub Actions Cache Poisoning](https://adnanthekhan.com/2024/05/06/the-monsters-in-your-build-cache-github-actions-cache-poisoning/) +- [GitHub Actions Caching Documentation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows) +- [Cache Poisoning in GitHub Actions](https://scribesecurity.com/blog/github-cache-poisoning/) diff --git a/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.md b/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.md index c1912b97fa8f..4e9b389834e8 100644 --- a/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.md +++ b/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUCritical.md @@ -1,15 +1,17 @@ -## Overview +# Untrusted Checkout TOCTOU (Time-of-check to time-of-use) + +## Description Untrusted Checkout is protected by a security check but the checked-out branch can be changed after the check. -## Recommendation +## Recommendations Verify that the code has not been modified after the security check. This may be achieved differently depending on the type of check: - Deployment Environment Approval: Make sure to use a non-mutable reference to the code to be executed. For example use a `sha` instead of a `ref`. - Label Gates: Make sure to use a non-mutable reference to the code to be executed. For example use a `sha` instead of a `ref`. -## Example +## Examples ### Incorrect Usage (Deployment Environment Approval) @@ -97,4 +99,4 @@ jobs: ## References -- [ActionsTOCTOU](https://github.com/AdnaneKhan/ActionsTOCTOU). +- [ActionsTOCTOU](https://github.com/AdnaneKhan/ActionsTOCTOU) diff --git a/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.md b/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.md index c1912b97fa8f..4e9b389834e8 100644 --- a/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.md +++ b/actions/ql/src/Security/CWE-367/UntrustedCheckoutTOCTOUHigh.md @@ -1,15 +1,17 @@ -## Overview +# Untrusted Checkout TOCTOU (Time-of-check to time-of-use) + +## Description Untrusted Checkout is protected by a security check but the checked-out branch can be changed after the check. -## Recommendation +## Recommendations Verify that the code has not been modified after the security check. This may be achieved differently depending on the type of check: - Deployment Environment Approval: Make sure to use a non-mutable reference to the code to be executed. For example use a `sha` instead of a `ref`. - Label Gates: Make sure to use a non-mutable reference to the code to be executed. For example use a `sha` instead of a `ref`. -## Example +## Examples ### Incorrect Usage (Deployment Environment Approval) @@ -97,4 +99,4 @@ jobs: ## References -- [ActionsTOCTOU](https://github.com/AdnaneKhan/ActionsTOCTOU). +- [ActionsTOCTOU](https://github.com/AdnaneKhan/ActionsTOCTOU) diff --git a/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueCritical.md b/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueCritical.md index eedb3871230e..1e7ea120cbaa 100644 --- a/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueCritical.md +++ b/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueCritical.md @@ -1,4 +1,6 @@ -## Overview +# If Condition Always Evaluates to True + +## Description GitHub Workflow Expressions (`${{ ... }}`) used in the `if` condition of jobs or steps must not contain extra characters or spaces. Otherwise, the condition is invariably evaluated to `true`. @@ -12,7 +14,7 @@ To avoid the vulnerability where an `if` condition always evaluates to `true`, i 2. Avoid multiline or spaced-out conditional expressions that might inadvertently introduce unwanted characters or formatting. 3. Test the workflow to ensure the `if` conditions behave as expected under different scenarios. -## Example +## Examples ### Correct Usage @@ -58,4 +60,4 @@ To avoid the vulnerability where an `if` condition always evaluates to `true`, i ## References -- GitHub actions/runner Issues: [Expression Always True](https://github.com/actions/runner/issues/1173). +- [Expression Always True Github Issue](https://github.com/actions/runner/issues/1173) diff --git a/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueHigh.md b/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueHigh.md index eedb3871230e..1e7ea120cbaa 100644 --- a/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueHigh.md +++ b/actions/ql/src/Security/CWE-571/ExpressionIsAlwaysTrueHigh.md @@ -1,4 +1,6 @@ -## Overview +# If Condition Always Evaluates to True + +## Description GitHub Workflow Expressions (`${{ ... }}`) used in the `if` condition of jobs or steps must not contain extra characters or spaces. Otherwise, the condition is invariably evaluated to `true`. @@ -12,7 +14,7 @@ To avoid the vulnerability where an `if` condition always evaluates to `true`, i 2. Avoid multiline or spaced-out conditional expressions that might inadvertently introduce unwanted characters or formatting. 3. Test the workflow to ensure the `if` conditions behave as expected under different scenarios. -## Example +## Examples ### Correct Usage @@ -58,4 +60,4 @@ To avoid the vulnerability where an `if` condition always evaluates to `true`, i ## References -- GitHub actions/runner Issues: [Expression Always True](https://github.com/actions/runner/issues/1173). +- [Expression Always True Github Issue](https://github.com/actions/runner/issues/1173) diff --git a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.md b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.md index 932dad198fce..aa7bcf4b0bf7 100644 --- a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.md +++ b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.md @@ -1,14 +1,16 @@ -## Overview +# Artifact poisoning + +## Description The workflow downloads artifacts that may be poisoned by an attacker in previously triggered workflows. If the contents of these artifacts are not correctly extracted, stored and verified, they may lead to repository compromise if untrusted code gets executed in a privileged job. -## Recommendation +## Recommendations - Always consider artifacts content as untrusted. - Extract the contents of artifacts to a temporary folder so they cannot override existing files. - Verify the contents of the artifacts downloaded. If an artifact is expected to contain a numeric value, verify it before using it. -## Example +## Examples ### Incorrect Usage @@ -67,4 +69,4 @@ jobs: ## References -- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +- [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) diff --git a/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.md b/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.md index 932dad198fce..aa7bcf4b0bf7 100644 --- a/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.md +++ b/actions/ql/src/Security/CWE-829/ArtifactPoisoningMedium.md @@ -1,14 +1,16 @@ -## Overview +# Artifact poisoning + +## Description The workflow downloads artifacts that may be poisoned by an attacker in previously triggered workflows. If the contents of these artifacts are not correctly extracted, stored and verified, they may lead to repository compromise if untrusted code gets executed in a privileged job. -## Recommendation +## Recommendations - Always consider artifacts content as untrusted. - Extract the contents of artifacts to a temporary folder so they cannot override existing files. - Verify the contents of the artifacts downloaded. If an artifact is expected to contain a numeric value, verify it before using it. -## Example +## Examples ### Incorrect Usage @@ -67,4 +69,4 @@ jobs: ## References -- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +- [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) diff --git a/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.md b/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.md index 16551e9c89a7..f8ea2fdc82fe 100644 --- a/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.md +++ b/actions/ql/src/Security/CWE-829/UnpinnedActionsTag.md @@ -1,12 +1,14 @@ -## Overview +# Unpinned tag for 3rd party Action in workflow + +## Description Using a tag for a 3rd party Action that is not pinned to a commit can lead to executing an untrusted Action through a supply chain attack. -## Recommendation +## Recommendations Pinning an action to a full length commit SHA is currently the only way to use a non-immutable action as an immutable release. Pinning to a particular SHA helps mitigate the risk of a bad actor adding a backdoor to the action's repository, as they would need to generate a SHA-1 collision for a valid Git object payload. When selecting a SHA, you should verify it is from the action's repository and not a repository fork. -## Example +## Examples ### Incorrect Usage @@ -22,4 +24,4 @@ Pinning an action to a full length commit SHA is currently the only way to use a ## References -- GitHub Docs: [Using third-party actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-third-party-actions). +- [Using third-party actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-third-party-actions) \ No newline at end of file diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md index 50e81cc240ca..71ba2032a9d0 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md @@ -1,8 +1,10 @@ -## Overview +# Execution of Untrusted Checked-out Code + +## Description GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. -## Recommendation +## Recommendations - Avoid using `pull_request_target` unless necessary. - Employ unprivileged `pull_request` workflows followed by `workflow_run` for privileged operations. @@ -12,7 +14,7 @@ The best practice is to handle the potentially untrusted pull request via the ** The artifacts downloaded from the first workflow should be considered untrusted and must be verified. -## Example +## Examples ### Incorrect Usage @@ -132,4 +134,4 @@ jobs: ## References -- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +- [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md index 50e81cc240ca..71ba2032a9d0 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md @@ -1,8 +1,10 @@ -## Overview +# Execution of Untrusted Checked-out Code + +## Description GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. -## Recommendation +## Recommendations - Avoid using `pull_request_target` unless necessary. - Employ unprivileged `pull_request` workflows followed by `workflow_run` for privileged operations. @@ -12,7 +14,7 @@ The best practice is to handle the potentially untrusted pull request via the ** The artifacts downloaded from the first workflow should be considered untrusted and must be verified. -## Example +## Examples ### Incorrect Usage @@ -132,4 +134,4 @@ jobs: ## References -- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +- [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md index 50e81cc240ca..71ba2032a9d0 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md @@ -1,8 +1,10 @@ -## Overview +# Execution of Untrusted Checked-out Code + +## Description GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job. -## Recommendation +## Recommendations - Avoid using `pull_request_target` unless necessary. - Employ unprivileged `pull_request` workflows followed by `workflow_run` for privileged operations. @@ -12,7 +14,7 @@ The best practice is to handle the potentially untrusted pull request via the ** The artifacts downloaded from the first workflow should be considered untrusted and must be verified. -## Example +## Examples ### Incorrect Usage @@ -132,4 +134,4 @@ jobs: ## References -- GitHub Security Lab Research: [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +- [Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/) diff --git a/actions/ql/src/Violations Of Best Practice/CodeQL/UnnecessaryUseOfAdvancedConfig.md b/actions/ql/src/Violations Of Best Practice/CodeQL/UnnecessaryUseOfAdvancedConfig.md index a64f69af8d68..21a56e8d84d6 100644 --- a/actions/ql/src/Violations Of Best Practice/CodeQL/UnnecessaryUseOfAdvancedConfig.md +++ b/actions/ql/src/Violations Of Best Practice/CodeQL/UnnecessaryUseOfAdvancedConfig.md @@ -1,11 +1,13 @@ -## Overview +# Unneccesary use of advanced configuration + +## Description The CodeQL workflow does not use any custom settings and could be simplified by switching to the CodeQL default setup. -## Recommendation +## Recommendations If there is no reason to have a custom configuration switch to the CodeQL default setup. ## References -- GitHub Docs: [Configuring Default Setup for a repository](https://docs.github.com/en/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning#configuring-default-setup-for-a-repository). +- [GitHub Docs: Configuring Default Setup for a repository](https://docs.github.com/en/code-security/code-scanning/enabling-code-scanning/configuring-default-setup-for-code-scanning#configuring-default-setup-for-a-repository) \ No newline at end of file diff --git a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.md b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.md index 27ef5fce7009..92e480e4a7ae 100644 --- a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.md +++ b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.md @@ -1,16 +1,18 @@ -## Overview +# Argument Injection in GitHub Actions + +## Description Passing user-controlled arguments to certain commands in the context of `Run` steps may lead to arbitrary code execution. Argument injection in GitHub Actions may allow an attacker to exfiltrate any secrets used in the workflow and the temporary GitHub repository authorization token. The token may have write access to the repository, allowing the attacker to make changes to the repository. -## Recommendation +## Recommendations When possible avoid passing user-controlled data to commands which may spawn new processes using some of their arguments. It is also recommended to limit the permissions of any tokens used by a workflow such as the GITHUB_TOKEN. -## Example +## Examples ### Incorrect Usage @@ -33,7 +35,7 @@ An attacker may set the body of an Issue comment to `BAR/g;1e whoami;#` and the ## References -- Common Weakness Enumeration: [CWE-88](https://cwe.mitre.org/data/definitions/88.html). -- [Argument Injection Vectors](https://sonarsource.github.io/argument-injection-vectors/). -- Argument Injection Vectors: [Argument Injection Explained](https://sonarsource.github.io/argument-injection-vectors/explained/). -- [GTFOBins](https://gtfobins.github.io/). +- [Common Weakness Enumeration: CWE-88](https://cwe.mitre.org/data/definitions/88.html). +- [Argument Injection Explained](https://sonarsource.github.io/argument-injection-vectors/explained/) +- [Argument Injection Vectors](https://sonarsource.github.io/argument-injection-vectors/) +- [GTFOBins](https://gtfobins.github.io/) diff --git a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.md b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.md index bd3f84a2c089..4957297be92a 100644 --- a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.md +++ b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionMedium.md @@ -1,16 +1,18 @@ -## Overview +# Argument Injection in GitHub Actions + +## Description Passing user-controlled arguments to certain commands in the context of `Run` steps may lead to arbitrary code execution. Argument injection in GitHub Actions may allow an attacker to exfiltrate any secrets used in the workflow and the temporary GitHub repository authorization token. The token may have write access to the repository, allowing the attacker to make changes to the repository. -## Recommendation +## Recommendations When possible avoid passing user-controlled data to commands which may spawn new processes using some of their arguments. It is also recommended to limit the permissions of any tokens used by a workflow such as the GITHUB_TOKEN. -## Example +## Examples ### Incorrect Usage @@ -33,7 +35,7 @@ An attacker may set the body of an Issue comment to `BAR|g;1e whoami;#` and the ## References -- Common Weakness Enumeration: [CWE-88](https://cwe.mitre.org/data/definitions/88.html). -- [Argument Injection Vectors](https://sonarsource.github.io/argument-injection-vectors/). -- Argument Injection Vectors: [Argument Injection Explained](https://sonarsource.github.io/argument-injection-vectors/explained/). -- [GTFOBins](https://gtfobins.github.io/). +- [Common Weakness Enumeration: CWE-88](https://cwe.mitre.org/data/definitions/88.html). +- [Argument Injection Explained](https://sonarsource.github.io/argument-injection-vectors/explained/) +- [Argument Injection Vectors](https://sonarsource.github.io/argument-injection-vectors/) +- [GTFOBins](https://gtfobins.github.io/) diff --git a/actions/ql/src/experimental/Security/CWE-829/UnversionedImmutableAction.md b/actions/ql/src/experimental/Security/CWE-829/UnversionedImmutableAction.md index 5101eebceee4..754c54b9ca06 100644 --- a/actions/ql/src/experimental/Security/CWE-829/UnversionedImmutableAction.md +++ b/actions/ql/src/experimental/Security/CWE-829/UnversionedImmutableAction.md @@ -1,12 +1,14 @@ -## Overview +# Unversioned Immutable Action + +## Description This action is eligible for Immutable Actions, a new GitHub feature that is currently only available for internal users. Immutable Actions are released as packages in the GitHub package registry instead of resolved from a pinned SHA at the repository. The Immutable Action provides the same immutability as pinning the version to a SHA but with improved readability and additional security guarantees. -## Recommendation +## Recommendations For internal users: when using [immutable actions](https://github.com/github/package-registry-team/blob/main/docs/immutable-actions/immutable-actions-howto.md) use the full semantic version of the action. This will ensure that the action is resolved to the exact version stored in the GitHub package registry. -## Example +## Examples ### Incorrect Usage @@ -23,4 +25,4 @@ For internal users: when using [immutable actions](https://github.com/github/pac ## References -- [Consuming immutable actions](). +- [Consuming immutable actions]() diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 4a4bdde8147c..442839b0dcf2 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.5-dev +version: 0.6.4 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/config/add-overlay-annotations.py b/config/add-overlay-annotations.py index 85b42026d8d7..c6e3db24ae07 100644 --- a/config/add-overlay-annotations.py +++ b/config/add-overlay-annotations.py @@ -17,16 +17,16 @@ #!/usr/bin/python3 import sys import os -import re from difflib import context_diff -OVERLAY_PATTERN = re.compile(r'overlay\[[a-zA-Z?_-]+\]') def has_overlay_annotations(lines): ''' Check whether the given lines contain any overlay[...] annotations. ''' - return any(OVERLAY_PATTERN.search(line) for line in lines) + overlays = ["local", "local?", "global", "caller", "caller?"] + annotations = [f"overlay[{t}]" for t in overlays] + return any(ann in line for ann in annotations for line in lines) def is_line_comment(line): diff --git a/config/dbscheme-fragments.json b/config/dbscheme-fragments.json index c2a9a5e734b9..c56289ff1716 100644 --- a/config/dbscheme-fragments.json +++ b/config/dbscheme-fragments.json @@ -1,19 +1,16 @@ { "files": [ - "cpp/ql/lib/semmlecode.cpp.dbscheme", "javascript/ql/lib/semmlecode.javascript.dbscheme", "python/ql/lib/semmlecode.python.dbscheme", "ruby/ql/lib/ruby.dbscheme", "ql/ql/src/ql.dbscheme" ], "fragments": [ - "/*- Compilations -*/", "/*- External data -*/", "/*- Files and folders -*/", "/*- Diagnostic messages -*/", "/*- Diagnostic messages: severity -*/", "/*- Source location prefix -*/", - "/*- Database metadata -*/", "/*- Lines of code -*/", "/*- Configuration files with key value pairs -*/", "/*- YAML -*/", @@ -23,7 +20,6 @@ "/*- DEPRECATED: Snapshot date -*/", "/*- DEPRECATED: Duplicate code -*/", "/*- DEPRECATED: Version control data -*/", - "/*- C++ dbscheme -*/", "/*- JavaScript-specific part -*/", "/*- Ruby dbscheme -*/", "/*- Erb dbscheme -*/", @@ -35,4 +31,4 @@ "/*- Python dbscheme -*/", "/*- Empty location -*/" ] -} +} \ No newline at end of file diff --git a/config/opcode-qldoc.py b/config/opcode-qldoc.py index 1c892ee3c85b..e379e6a3ea96 100644 --- a/config/opcode-qldoc.py +++ b/config/opcode-qldoc.py @@ -8,9 +8,9 @@ start_qldoc_re = re.compile(r'^\s*/\*\*') # Start of a QLDoc comment end_qldoc_re = re.compile(r'\*/\s*$') # End of a QLDoc comment blank_qldoc_line_re = re.compile(r'^\s*\*\s*$') # A line in a QLDoc comment with only the '*' -instruction_class_re = re.compile(r'^class (?P[A-Za-z0-9]+)Instruction\s') # Declaration of an `Instruction` class -opcode_base_class_re = re.compile(r'^abstract class (?P[A-Za-z0-9]+)Opcode\s') # Declaration of an `Opcode` base class -opcode_class_re = re.compile(r'^ class (?P[A-Za-z0-9]+)\s') # Declaration of an `Opcode` class +instruction_class_re = re.compile(r'^class (?P[A-aa-z0-9]+)Instruction\s') # Declaration of an `Instruction` class +opcode_base_class_re = re.compile(r'^abstract class (?P[A-aa-z0-9]+)Opcode\s') # Declaration of an `Opcode` base class +opcode_class_re = re.compile(r'^ class (?P[A-aa-z0-9]+)\s') # Declaration of an `Opcode` class script_dir = path.realpath(path.dirname(__file__)) instruction_path = path.realpath(path.join(script_dir, '../cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll')) diff --git a/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/old.dbscheme b/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/old.dbscheme deleted file mode 100644 index 5491582ac851..000000000000 --- a/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/old.dbscheme +++ /dev/null @@ -1,2428 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/5491582ac8511726e12fae3e2399000f9201cd9a/semmlecode.cpp.dbscheme b/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/semmlecode.cpp.dbscheme deleted file mode 100644 index 827dbc206ea5..000000000000 --- a/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2451 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/** - * 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 -); - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/5491582ac8511726e12fae3e2399000f9201cd9a/upgrade.properties b/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/upgrade.properties deleted file mode 100644 index 1a8afbbb9c3a..000000000000 --- a/cpp/downgrades/5491582ac8511726e12fae3e2399000f9201cd9a/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Remove unused external_package tables from the dbscheme -compatibility: full diff --git a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/builtintypes.ql b/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/builtintypes.ql deleted file mode 100644 index 9088493ce34c..000000000000 --- a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/builtintypes.ql +++ /dev/null @@ -1,14 +0,0 @@ -class BuiltinType extends @builtintype { - string toString() { none() } -} - -from BuiltinType type, string name, int kind, int kind_new, int size, int sign, int alignment -where - builtintypes(type, name, kind, size, sign, alignment) and - if - type instanceof @complex_fp16 or - type instanceof @complex_std_bfloat16 or - type instanceof @complex_std_float16 - then kind_new = 2 - else kind_new = kind -select type, name, kind_new, size, sign, alignment diff --git a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme b/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme deleted file mode 100644 index 7bc12b02a436..000000000000 --- a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme +++ /dev/null @@ -1,2509 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme b/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme deleted file mode 100644 index e38346051783..000000000000 --- a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2506 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties b/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties deleted file mode 100644 index c8d1d2d3c3a3..000000000000 --- a/cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties +++ /dev/null @@ -1,3 +0,0 @@ -description: Introduce new complex 16-bit floating-point types -compatibility: backwards -builtintypes.rel: run builtintypes.qlo diff --git a/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme b/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme deleted file mode 100644 index 827dbc206ea5..000000000000 --- a/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme +++ /dev/null @@ -1,2451 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/** - * 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 -); - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme b/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme deleted file mode 100644 index e70d0b653187..000000000000 --- a/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2475 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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_default ; - -/** - * 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( - /** 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 -); - -/** 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 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 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 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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 ref -); -var_def(unique int id: @var_decl ref); -var_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr ref -); - -type_decls( - unique int id: @type_decl, - int type_id: @type ref, - int location: @location ref -); -type_def(unique int id: @type_decl ref); -type_decl_top( - unique int type_decl: @type_decl ref -); -type_requires( - int id: @type_decl ref, - int constraint: @expr ref -); - -namespace_decls( - unique int id: @namespace_decl, - int namespace_id: @namespace ref, - int location: @location ref, - int bodylocation: @location 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 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 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 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 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 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 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 ref -); - -@declaredtype = @usertype ; - -@declaration = @function - | @declaredtype - | @variable - | @enumconstant - | @frienddecl - | @concept_template; - -@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 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 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 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 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 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 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties b/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties deleted file mode 100644 index c77161910eea..000000000000 --- a/cpp/downgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: sync dbscheme and delete svn tables -compatibility: full diff --git a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/downgrades.ql b/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/downgrades.ql deleted file mode 100644 index 973fdeaba7c5..000000000000 --- a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/downgrades.ql +++ /dev/null @@ -1,161 +0,0 @@ -class Accessible extends @accessible { - string toString() { none() } -} - -class Container extends @container { - string toString() { none() } -} - -class Expr extends @expr { - string toString() { none() } -} - -class Initialiser extends @initialiser { - string toString() { none() } -} - -class Location extends @location_default { - string toString() { none() } -} - -class Stmt extends @stmt { - string toString() { none() } -} - -predicate isLocationDefault(Location l) { - diagnostics(_, _, _, _, _, l) - or - macroinvocations(_, _, l, _) - or - fun_decls(_, _, _, _, l) - or - var_decls(_, _, _, _, l) - or - type_decls(_, _, l) - or - namespace_decls(_, _, l, _) - or - namespace_decls(_, _, _, l) - or - usings(_, _, l, _) - or - static_asserts(_, _, _, l, _) - or - enumconstants(_, _, _, _, _, l) - or - concept_templates(_, _, l) - or - attributes(_, _, _, _, l) - or - attribute_args(_, _, _, _, l) - or - derivations(_, _, _, _, l) - or - frienddecls(_, _, _, l) - or - comments(_, _, l) - or - namequalifiers(_, _, _, l) - or - lambda_capture(_, _, _, _, _, _, l) - or - preprocdirects(_, _, l) - or - xmllocations(_, l) - or - locations_default(l, _, 0, 0, 0, 0) // For containers. -} - -predicate isLocationExpr(Location l) { - initialisers(_, _, _, l) - or - exprs(_, _, l) -} - -predicate isLocationStmt(Location l) { stmts(_, _, l) } - -newtype TExprOrStmtLocation = - TExprLocation(Location l, Container c, int startLine, int startColumn, int endLine, int endColumn) { - isLocationExpr(l) and - (isLocationDefault(l) or isLocationStmt(l)) and - locations_default(l, c, startLine, startColumn, endLine, endColumn) - } or - TStmtLocation(Location l, Container c, int startLine, int startColumn, int endLine, int endColumn) { - isLocationStmt(l) and - (isLocationDefault(l) or isLocationExpr(l)) and - locations_default(l, c, startLine, startColumn, endLine, endColumn) - } - -module Fresh = QlBuiltins::NewEntity; - -class NewLocationBase = @location_default or Fresh::EntityId; - -class NewLocation extends NewLocationBase { - string toString() { none() } -} - -query predicate new_locations_default( - NewLocation l, Container c, int startLine, int startColumn, int endLine, int endColumn -) { - isLocationDefault(l) and - locations_default(l, c, startLine, startColumn, endLine, endColumn) -} - -query predicate new_locations_expr( - NewLocation l, Container c, int startLine, int startColumn, int endLine, int endColumn -) { - exists(Location l_old | - isLocationExpr(l_old) and - locations_default(l_old, c, startLine, startColumn, endLine, endColumn) - | - if not isLocationDefault(l_old) and not isLocationStmt(l) - then l = l_old - else l = Fresh::map(TExprLocation(l_old, c, startLine, startColumn, endLine, endColumn)) - ) -} - -query predicate new_locations_stmt( - NewLocation l, Container c, int startLine, int startColumn, int endLine, int endColumn -) { - exists(Location l_old | - isLocationStmt(l_old) and - locations_default(l_old, c, startLine, startColumn, endLine, endColumn) - | - if not isLocationDefault(l_old) and not isLocationExpr(l) - then l = l_old - else l = Fresh::map(TStmtLocation(l_old, c, startLine, startColumn, endLine, endColumn)) - ) -} - -query predicate new_exprs(Expr e, int kind, NewLocation l) { - exists(Location l_old, Container c, int startLine, int startColumn, int endLine, int endColumn | - exprs(e, kind, l_old) and - locations_default(l_old, c, startLine, startColumn, endLine, endColumn) - | - if not isLocationDefault(l_old) and not isLocationStmt(l) - then l = l_old - else l = Fresh::map(TExprLocation(l_old, c, startLine, startColumn, endLine, endColumn)) - ) -} - -query predicate new_initialisers(Initialiser i, Accessible v, Expr e, NewLocation l) { - exists(Location l_old, Container c, int startLine, int startColumn, int endLine, int endColumn | - initialisers(i, v, e, l_old) and - locations_default(l_old, c, startLine, startColumn, endLine, endColumn) - | - if not isLocationDefault(l_old) and not isLocationStmt(l) - then l = l_old - else l = Fresh::map(TExprLocation(l_old, c, startLine, startColumn, endLine, endColumn)) - ) -} - -query predicate new_stmts(Stmt s, int kind, NewLocation l) { - exists(Location l_old, Container c, int startLine, int startColumn, int endLine, int endColumn | - stmts(s, kind, l_old) and - locations_default(l_old, c, startLine, startColumn, endLine, endColumn) - | - if not isLocationDefault(l_old) and not isLocationExpr(l) - then l = l_old - else l = Fresh::map(TStmtLocation(l_old, c, startLine, startColumn, endLine, endColumn)) - ) -} diff --git a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme b/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme deleted file mode 100644 index e70d0b653187..000000000000 --- a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme +++ /dev/null @@ -1,2475 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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_default ; - -/** - * 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( - /** 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 -); - -/** 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 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 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 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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 ref -); -var_def(unique int id: @var_decl ref); -var_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr ref -); - -type_decls( - unique int id: @type_decl, - int type_id: @type ref, - int location: @location ref -); -type_def(unique int id: @type_decl ref); -type_decl_top( - unique int type_decl: @type_decl ref -); -type_requires( - int id: @type_decl ref, - int constraint: @expr ref -); - -namespace_decls( - unique int id: @namespace_decl, - int namespace_id: @namespace ref, - int location: @location ref, - int bodylocation: @location 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 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 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 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 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 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 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 ref -); - -@declaredtype = @usertype ; - -@declaration = @function - | @declaredtype - | @variable - | @enumconstant - | @frienddecl - | @concept_template; - -@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 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 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 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 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 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 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme b/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme deleted file mode 100644 index 7bc12b02a436..000000000000 --- a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2509 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties b/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties deleted file mode 100644 index 25f408d9b7e5..000000000000 --- a/cpp/downgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties +++ /dev/null @@ -1,8 +0,0 @@ -description: Merge location tables -compatibility: partial -locations_default.rel: run downgrades.ql new_locations_default -locations_expr.rel: run downgrades.ql new_locations_expr -locations_stmt.rel: run downgrades.ql new_locations_stmt -exprs.rel: run downgrades.ql new_exprs -initialisers.rel: run downgrades.ql new_initialisers -stmts.rel: run downgrades.ql new_stmts diff --git a/cpp/ql/lib/change-notes/2025-06-20-oracle-oci-models.md b/cpp/ql/lib/change-notes/2025-06-20-oracle-oci-models.md deleted file mode 100644 index 09661e619385..000000000000 --- a/cpp/ql/lib/change-notes/2025-06-20-oracle-oci-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `sql-injection` sink models for the Oracle Call Interface (OCI) database library functions `OCIStmtPrepare` and `OCIStmtPrepare2`. diff --git a/cpp/ql/lib/change-notes/2025-06-24-float16 copy.md b/cpp/ql/lib/change-notes/2025-06-24-float16 copy.md deleted file mode 100644 index 0e88694e1169..000000000000 --- a/cpp/ql/lib/change-notes/2025-06-24-float16 copy.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The analysis of C/C++ code targeting 64-bit Arm platforms has been improved. This includes support for the Arm-specific builtin functions, support for the `arm_neon.h` header and Neon vector types, and support for the `fp8` scalar type. The `arm_sve.h` header and scalable vectors are only partially supported at this point. diff --git a/cpp/ql/lib/change-notes/2025-06-24-float16.md b/cpp/ql/lib/change-notes/2025-06-24-float16.md deleted file mode 100644 index 24737d2b4065..000000000000 --- a/cpp/ql/lib/change-notes/2025-06-24-float16.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for `__fp16 _Complex` and `__bf16 _Complex` types diff --git a/cpp/ql/lib/change-notes/2025-06-27-locations.md b/cpp/ql/lib/change-notes/2025-06-27-locations.md deleted file mode 100644 index 55acf55ee87e..000000000000 --- a/cpp/ql/lib/change-notes/2025-06-27-locations.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: deprecated ---- -* The `UnknownDefaultLocation`, `UnknownExprLocation`, and `UnknownStmtLocation` classes have been deprecated. Use `UnknownLocation` instead. diff --git a/cpp/ql/lib/experimental/quantum/Language.qll b/cpp/ql/lib/experimental/quantum/Language.qll index 53cf7292b12f..168c25cdfaa0 100644 --- a/cpp/ql/lib/experimental/quantum/Language.qll +++ b/cpp/ql/lib/experimental/quantum/Language.qll @@ -8,7 +8,7 @@ module CryptoInput implements InputSig { class LocatableElement = Language::Locatable; - class UnknownLocation = Language::UnknownLocation; + class UnknownLocation = Language::UnknownDefaultLocation; LocatableElement dfn_to_element(DataFlow::Node node) { result = node.asExpr() or @@ -56,7 +56,7 @@ module ArtifactFlowConfig implements DataFlow::ConfigSig { module ArtifactFlow = DataFlow::Global; /** - * An artifact output to node input configuration + * Artifact output to node input configuration */ abstract class AdditionalFlowInputStep extends DataFlow::Node { abstract DataFlow::Node getOutput(); @@ -91,8 +91,9 @@ module GenericDataSourceFlowConfig implements DataFlow::ConfigSig { module GenericDataSourceFlow = TaintTracking::Global; -private class ConstantDataSource extends Crypto::GenericConstantSourceInstance instanceof OpenSslGenericSourceCandidateLiteral -{ +private class ConstantDataSource extends Crypto::GenericConstantSourceInstance instanceof Literal { + ConstantDataSource() { this instanceof OpenSslGenericSourceCandidateLiteral } + override DataFlow::Node getOutputNode() { result.asExpr() = this } override predicate flowsTo(Crypto::FlowAwareElement other) { diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll index f802e58d0a76..d46c2f691916 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/AlgToAVCFlow.qll @@ -48,7 +48,7 @@ module KnownOpenSslAlgorithmToAlgorithmValueConsumerConfig implements DataFlow:: module KnownOpenSslAlgorithmToAlgorithmValueConsumerFlow = DataFlow::Global; -module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerConfig implements DataFlow::ConfigSig { +module RSAPaddingAlgorithmToPaddingAlgorithmValueConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source.asExpr() instanceof OpenSslPaddingLiteral } predicate isSink(DataFlow::Node sink) { @@ -60,8 +60,8 @@ module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerConfig implements DataF } } -module RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow = - DataFlow::Global; +module RSAPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow = + DataFlow::Global; class OpenSslAlgorithmAdditionalFlowStep extends AdditionalFlowInputStep { OpenSslAlgorithmAdditionalFlowStep() { exists(AlgorithmPassthroughCall c | c.getInNode() = this) } @@ -114,11 +114,11 @@ class CopyAndDupAlgorithmPassthroughCall extends AlgorithmPassthroughCall { override DataFlow::Node getOutNode() { result = outNode } } -class NidToPointerPassthroughCall extends AlgorithmPassthroughCall { +class NIDToPointerPassthroughCall extends AlgorithmPassthroughCall { DataFlow::Node inNode; DataFlow::Node outNode; - NidToPointerPassthroughCall() { + NIDToPointerPassthroughCall() { this.getTarget().getName() in ["OBJ_nid2obj", "OBJ_nid2ln", "OBJ_nid2sn"] and inNode.asExpr() = this.getArgument(0) and outNode.asExpr() = this @@ -150,11 +150,11 @@ class PointerToPointerPassthroughCall extends AlgorithmPassthroughCall { override DataFlow::Node getOutNode() { result = outNode } } -class PointerToNidPassthroughCall extends AlgorithmPassthroughCall { +class PointerToNIDPassthroughCall extends AlgorithmPassthroughCall { DataFlow::Node inNode; DataFlow::Node outNode; - PointerToNidPassthroughCall() { + PointerToNIDPassthroughCall() { this.getTarget().getName() in ["OBJ_obj2nid", "OBJ_ln2nid", "OBJ_sn2nid", "OBJ_txt2nid"] and ( inNode.asIndirectExpr() = this.getArgument(0) diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll index 4bd4b4497660..ba5f65a2203f 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/BlockAlgorithmInstance.qll @@ -5,35 +5,36 @@ private import experimental.quantum.OpenSSL.AlgorithmInstances.KnownAlgorithmCon private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.DirectAlgorithmValueConsumer private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumerBase private import AlgToAVCFlow -private import codeql.quantum.experimental.Standardization::Types::KeyOpAlg as KeyOpAlg /** * Given a `KnownOpenSslBlockModeAlgorithmExpr`, converts this to a block family type. * Does not bind if there is no mapping (no mapping to 'unknown' or 'other'). */ predicate knownOpenSslConstantToBlockModeFamilyType( - KnownOpenSslBlockModeAlgorithmExpr e, KeyOpAlg::ModeOfOperationType type + KnownOpenSslBlockModeAlgorithmExpr e, Crypto::TBlockCipherModeOfOperationType type ) { exists(string name | name = e.(KnownOpenSslAlgorithmExpr).getNormalizedName() and ( - name = "CBC" and type instanceof KeyOpAlg::CBC + name.matches("CBC") and type instanceof Crypto::CBC or - name = "CFB%" and type instanceof KeyOpAlg::CFB + name.matches("CFB%") and type instanceof Crypto::CFB or - name = "CTR" and type instanceof KeyOpAlg::CTR + name.matches("CTR") and type instanceof Crypto::CTR or - name = "GCM" and type instanceof KeyOpAlg::GCM + name.matches("GCM") and type instanceof Crypto::GCM or - name = "OFB" and type instanceof KeyOpAlg::OFB + name.matches("OFB") and type instanceof Crypto::OFB or - name = "XTS" and type instanceof KeyOpAlg::XTS + name.matches("XTS") and type instanceof Crypto::XTS or - name = "CCM" and type instanceof KeyOpAlg::CCM + name.matches("CCM") and type instanceof Crypto::CCM or - name = "CCM" and type instanceof KeyOpAlg::CCM + name.matches("GCM") and type instanceof Crypto::GCM or - name = "ECB" and type instanceof KeyOpAlg::ECB + name.matches("CCM") and type instanceof Crypto::CCM + or + name.matches("ECB") and type instanceof Crypto::ECB ) ) } @@ -63,10 +64,10 @@ class KnownOpenSslBlockModeConstantAlgorithmInstance extends OpenSslAlgorithmIns getterCall = this } - override KeyOpAlg::ModeOfOperationType getModeType() { + override Crypto::TBlockCipherModeOfOperationType getModeType() { knownOpenSslConstantToBlockModeFamilyType(this, result) or - not knownOpenSslConstantToBlockModeFamilyType(this, _) and result = KeyOpAlg::OtherMode() + not knownOpenSslConstantToBlockModeFamilyType(this, _) and result = Crypto::OtherMode() } // NOTE: I'm not going to attempt to parse out the mode specific part, so returning diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll index 47ffd67924a6..0fb8ecf95398 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/CipherAlgorithmInstance.qll @@ -33,9 +33,9 @@ predicate knownOpenSslConstantToCipherFamilyType( or name.matches("CAST5%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::CAST5()) or - name.matches("2DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DOUBLE_DES()) + name.matches("2DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DoubleDES()) or - name.matches("3DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::TRIPLE_DES()) + name.matches("3DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::TripleDES()) or name.matches("DES%") and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DES()) or @@ -113,7 +113,7 @@ class KnownOpenSslCipherConstantAlgorithmInstance extends OpenSslAlgorithmInstan this.(KnownOpenSslCipherAlgorithmExpr).getExplicitKeySize() = result } - override KeyOpAlg::AlgorithmType getAlgorithmType() { + override Crypto::KeyOpAlg::Algorithm getAlgorithmType() { knownOpenSslConstantToCipherFamilyType(this, result) or not knownOpenSslConstantToCipherFamilyType(this, _) and diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll index 82a2b1357f27..78cba4962864 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/EllipticCurveAlgorithmInstance.qll @@ -39,14 +39,8 @@ class KnownOpenSslEllipticCurveConstantAlgorithmInstance extends OpenSslAlgorith result = this.(Call).getTarget().getName() } - override Crypto::EllipticCurveFamilyType getEllipticCurveFamilyType() { - if - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getParsedEllipticCurveName(), _, - _) - then - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getParsedEllipticCurveName(), _, - result) - else result = Crypto::OtherEllipticCurveType() + override Crypto::TEllipticCurveType getEllipticCurveType() { + Crypto::ellipticCurveNameToKeySizeAndFamilyMapping(this.getParsedEllipticCurveName(), _, result) } override string getParsedEllipticCurveName() { @@ -54,7 +48,7 @@ class KnownOpenSslEllipticCurveConstantAlgorithmInstance extends OpenSslAlgorith } override int getKeySize() { - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.(KnownOpenSslAlgorithmExpr) + Crypto::ellipticCurveNameToKeySizeAndFamilyMapping(this.(KnownOpenSslAlgorithmExpr) .getNormalizedName(), result, _) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll index 2be84b68f616..0cc8e24f0a6c 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/HashAlgorithmInstance.qll @@ -11,21 +11,21 @@ predicate knownOpenSslConstantToHashFamilyType( exists(string name | name = e.(KnownOpenSslAlgorithmExpr).getNormalizedName() and ( - name = "BLAKE2B" and type instanceof Crypto::BLAKE2B + name.matches("BLAKE2B") and type instanceof Crypto::BLAKE2B or - name = "BLAKE2S" and type instanceof Crypto::BLAKE2S + name.matches("BLAKE2S") and type instanceof Crypto::BLAKE2S or - name.matches("GOST%") and type instanceof Crypto::GOST_HASH + name.matches("GOST%") and type instanceof Crypto::GOSTHash or - name = "MD2" and type instanceof Crypto::MD2 + name.matches("MD2") and type instanceof Crypto::MD2 or - name = "MD4" and type instanceof Crypto::MD4 + name.matches("MD4") and type instanceof Crypto::MD4 or - name = "MD5" and type instanceof Crypto::MD5 + name.matches("MD5") and type instanceof Crypto::MD5 or - name = "MDC2" and type instanceof Crypto::MDC2 + name.matches("MDC2") and type instanceof Crypto::MDC2 or - name = "POLY1305" and type instanceof Crypto::POLY1305 + name.matches("POLY1305") and type instanceof Crypto::POLY1305 or name.matches(["SHA", "SHA1"]) and type instanceof Crypto::SHA1 or @@ -33,13 +33,13 @@ predicate knownOpenSslConstantToHashFamilyType( or name.matches("SHA3-%") and type instanceof Crypto::SHA3 or - name = "SHAKE" and type instanceof Crypto::SHAKE + name.matches(["SHAKE"]) and type instanceof Crypto::SHAKE or - name = "SM3" and type instanceof Crypto::SM3 + name.matches("SM3") and type instanceof Crypto::SM3 or - name = "RIPEMD160" and type instanceof Crypto::RIPEMD160 + name.matches("RIPEMD160") and type instanceof Crypto::RIPEMD160 or - name = "WHIRLPOOL" and type instanceof Crypto::WHIRLPOOL + name.matches("WHIRLPOOL") and type instanceof Crypto::WHIRLPOOL ) ) } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll index 4328253f1a4f..9d60547a45ad 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/KnownAlgorithmConstants.qll @@ -210,8 +210,7 @@ string getAlgorithmAlias(string alias) { } /** - * Holds for aliases of known algorithms defined by users - * (through obj_name_add and various macros pointing to this function). + * Finds aliases of known alagorithms defined by users (through obj_name_add and various macros pointing to this function) * * The `target` and `alias` are converted to lowercase to be of a standard form. */ @@ -223,7 +222,7 @@ predicate customAliases(string target, string alias) { } /** - * Holds for a hard-coded mapping of known algorithm aliases in OpenSsl. + * A hard-coded mapping of known algorithm aliases in OpenSsl. * This was derived by applying the same kind of logic foun din `customAliases` to the * OpenSsl code base directly. * diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll index 97b183b7e7d3..2e476824316b 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/MACAlgorithmInstance.qll @@ -7,7 +7,7 @@ private import experimental.quantum.OpenSSL.Operations.OpenSSLOperations private import AlgToAVCFlow class KnownOpenSslMacConstantAlgorithmInstance extends OpenSslAlgorithmInstance, - Crypto::MacAlgorithmInstance instanceof KnownOpenSslMacAlgorithmExpr + Crypto::MACAlgorithmInstance instanceof KnownOpenSslMacAlgorithmExpr { OpenSslAlgorithmValueConsumer getterCall; @@ -39,14 +39,14 @@ class KnownOpenSslMacConstantAlgorithmInstance extends OpenSslAlgorithmInstance, result = this.(Call).getTarget().getName() } - override Crypto::MacType getMacType() { - this instanceof KnownOpenSslHMacAlgorithmExpr and result = Crypto::HMAC() + override Crypto::TMACType getMacType() { + this instanceof KnownOpenSslHMacAlgorithmExpr and result instanceof Crypto::THMAC or - this instanceof KnownOpenSslCMacAlgorithmExpr and result = Crypto::CMAC() + this instanceof KnownOpenSslCMacAlgorithmExpr and result instanceof Crypto::TCMAC } } -class KnownOpenSslHMacConstantAlgorithmInstance extends Crypto::HmacAlgorithmInstance, +class KnownOpenSslHMacConstantAlgorithmInstance extends Crypto::HMACAlgorithmInstance, KnownOpenSslMacConstantAlgorithmInstance { override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { @@ -54,15 +54,13 @@ class KnownOpenSslHMacConstantAlgorithmInstance extends Crypto::HmacAlgorithmIns then // ASSUMPTION: if there is an explicit hash algorithm, it is already modeled // and we can simply grab that model's AVC - this.(OpenSslAlgorithmInstance).getAvc() = result + exists(OpenSslAlgorithmInstance inst | inst.getAvc() = result and inst = this) else - // ASSUMPTION: If no explicit algorithm is given, then find - // where the current AVC traces to a HashAlgorithmIO consuming operation step. - // TODO: need to consider getting reset values, tracing down to the first set for now - exists(OperationStep s, AvcContextCreationStep avc | - avc = this.getAvc() and - avc.flowsToOperationStep(s) and - s.getAlgorithmValueConsumerForInput(HashAlgorithmIO()) = result + // ASSUMPTION: If no explicit algorithm is given, then it is assumed to be configured by + // a signature operation + exists(Crypto::SignatureOperationInstance s | + s.getHashAlgorithmValueConsumer() = result and + s.getAnAlgorithmValueConsumer() = this.getAvc() ) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll index d487e05d0660..7a34b69ddf54 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/PaddingAlgorithmInstance.qll @@ -5,7 +5,6 @@ private import experimental.quantum.OpenSSL.AlgorithmInstances.KnownAlgorithmCon private import AlgToAVCFlow private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.DirectAlgorithmValueConsumer private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumerBase -private import codeql.quantum.experimental.Standardization::Types::KeyOpAlg as KeyOpAlg /** * A class to define padding specific integer values. @@ -29,18 +28,18 @@ class OpenSslPaddingLiteral extends Literal { * Does not bind if there is no mapping (no mapping to 'unknown' or 'other'). */ predicate knownOpenSslConstantToPaddingFamilyType( - KnownOpenSslPaddingAlgorithmExpr e, KeyOpAlg::PaddingSchemeType type + KnownOpenSslPaddingAlgorithmExpr e, Crypto::TPaddingType type ) { exists(string name | name = e.(KnownOpenSslAlgorithmExpr).getNormalizedName() and ( - name = "OAEP" and type = KeyOpAlg::OAEP() + name.matches("OAEP") and type = Crypto::OAEP() or - name = "PSS" and type = KeyOpAlg::PSS() + name.matches("PSS") and type = Crypto::PSS() or - name = "PKCS7" and type = KeyOpAlg::PKCS7() + name.matches("PKCS7") and type = Crypto::PKCS7() or - name = "PKCS1V15" and type = KeyOpAlg::PKCS1_V1_5() + name.matches("PKCS1V15") and type = Crypto::PKCS1_v1_5() ) ) } @@ -86,7 +85,7 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta // Source is `this` src.asExpr() = this and // This traces to a padding-specific consumer - RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow::flow(src, sink) + RSAPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow::flow(src, sink) ) and isPaddingSpecificConsumer = true } @@ -99,24 +98,24 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta override OpenSslAlgorithmValueConsumer getAvc() { result = getterCall } - KeyOpAlg::PaddingSchemeType getKnownPaddingType() { - this.(Literal).getValue().toInt() in [1, 7, 8] and result = KeyOpAlg::PKCS1_V1_5() + Crypto::TPaddingType getKnownPaddingType() { + this.(Literal).getValue().toInt() in [1, 7, 8] and result = Crypto::PKCS1_v1_5() or - this.(Literal).getValue().toInt() = 3 and result = KeyOpAlg::NoPadding() + this.(Literal).getValue().toInt() = 3 and result = Crypto::NoPadding() or - this.(Literal).getValue().toInt() = 4 and result = KeyOpAlg::OAEP() + this.(Literal).getValue().toInt() = 4 and result = Crypto::OAEP() or - this.(Literal).getValue().toInt() = 5 and result = KeyOpAlg::ANSI_X9_23() + this.(Literal).getValue().toInt() = 5 and result = Crypto::ANSI_X9_23() or - this.(Literal).getValue().toInt() = 6 and result = KeyOpAlg::PSS() + this.(Literal).getValue().toInt() = 6 and result = Crypto::PSS() } - override KeyOpAlg::PaddingSchemeType getPaddingType() { + override Crypto::TPaddingType getPaddingType() { isPaddingSpecificConsumer = true and ( result = this.getKnownPaddingType() or - not exists(this.getKnownPaddingType()) and result = KeyOpAlg::OtherPadding() + not exists(this.getKnownPaddingType()) and result = Crypto::OtherPadding() ) or isPaddingSpecificConsumer = false and @@ -144,7 +143,7 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta // this instanceof Literal and // this.getValue().toInt() in [0, 1, 3, 4, 5, 6, 7, 8] // // TODO: trace to padding-specific consumers -// RsaPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow +// RSAPaddingAlgorithmToPaddingAlgorithmValueConsumerFlow // } // override string getRawPaddingAlgorithmName() { result = this.(Literal).getValue().toString() } // override Crypto::TPaddingType getPaddingType() { @@ -162,18 +161,18 @@ class KnownOpenSslPaddingConstantAlgorithmInstance extends OpenSslAlgorithmInsta // else result = Crypto::OtherPadding() // } // } -class OaepPaddingAlgorithmInstance extends Crypto::OaepPaddingAlgorithmInstance, +class OAEPPaddingAlgorithmInstance extends Crypto::OAEPPaddingAlgorithmInstance, KnownOpenSslPaddingConstantAlgorithmInstance { - OaepPaddingAlgorithmInstance() { - this.(Crypto::PaddingAlgorithmInstance).getPaddingType() = KeyOpAlg::OAEP() + OAEPPaddingAlgorithmInstance() { + this.(Crypto::PaddingAlgorithmInstance).getPaddingType() = Crypto::OAEP() } - override Crypto::HashAlgorithmInstance getOaepEncodingHashAlgorithm() { + override Crypto::HashAlgorithmInstance getOAEPEncodingHashAlgorithm() { none() //TODO } - override Crypto::HashAlgorithmInstance getMgf1HashAlgorithm() { + override Crypto::HashAlgorithmInstance getMGF1HashAlgorithm() { none() //TODO } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll index cc2e5771ffc8..afd67410c0ad 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmInstances/SignatureAlgorithmInstance.qll @@ -73,7 +73,7 @@ class KnownOpenSslSignatureConstantAlgorithmInstance extends OpenSslAlgorithmIns none() } - override KeyOpAlg::AlgorithmType getAlgorithmType() { + override KeyOpAlg::Algorithm getAlgorithmType() { knownOpenSslConstantToSignatureFamilyType(this, result) or not knownOpenSslConstantToSignatureFamilyType(this, _) and diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll index d200cf2a0961..a4a65ead63d8 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/DirectAlgorithmValueConsumer.qll @@ -4,10 +4,10 @@ private import experimental.quantum.OpenSSL.AlgorithmInstances.KnownAlgorithmCon private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumerBase /** - * A call that is considered to inherently 'consume' an algorithm value. - * E.g., cases like EVP_MD5(), - * where there is no input, rather it directly gets an algorithm - * and returns it. Also includes operations directly using an algorithm + * Cases like EVP_MD5(), + * there is no input, rather it directly gets an algorithm + * and returns it. + * Also includes operations directly using an algorithm * like AES_encrypt(). */ class DirectAlgorithmValueConsumer extends OpenSslAlgorithmValueConsumer instanceof OpenSslAlgorithmCall diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll index 114cf78a112e..a03114b276d2 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/AlgorithmValueConsumers/HashAlgorithmValueConsumer.qll @@ -7,7 +7,7 @@ private import experimental.quantum.OpenSSL.AlgorithmInstances.OpenSSLAlgorithmI abstract class HashAlgorithmValueConsumer extends OpenSslAlgorithmValueConsumer { } /** - * An EVP_Q_Digest directly consumes algorithm constant values + * EVP_Q_Digest directly consumes algorithm constant values */ class Evp_Q_Digest_Algorithm_Consumer extends HashAlgorithmValueConsumer { Evp_Q_Digest_Algorithm_Consumer() { this.(Call).getTarget().getName() = "EVP_Q_digest" } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/CtxFlow.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/CtxFlow.qll new file mode 100644 index 000000000000..63ec3e181325 --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/CtxFlow.qll @@ -0,0 +1,221 @@ +//TODO: model as data on open APIs should be able to get common flows, and obviate some of this +// e.g., copy/dup calls, need to ingest those models for openSSL and refactor. +/** + * In OpenSSL, flow between 'context' parameters is often used to + * store state/config of how an operation will eventually be performed. + * Tracing algorithms and configurations to operations therefore + * requires tracing context parameters for many OpenSSL apis. + * + * This library provides a dataflow analysis to track context parameters + * between any two functions accepting openssl context parameters. + * The dataflow takes into consideration flowing through duplication and copy calls + * as well as flow through flow killers (free/reset calls). + * + * TODO: we may need to revisit 'free' as a dataflow killer, depending on how + * we want to model use after frees. + * + * This library also provides classes to represent context Types and relevant + * arguments/expressions. + */ + +import semmle.code.cpp.dataflow.new.DataFlow + +/** + * An openSSL CTX type, which is type for which the stripped underlying type + * matches the pattern 'evp_%ctx_%st'. + * This includes types like: + * - EVP_CIPHER_CTX + * - EVP_MD_CTX + * - EVP_PKEY_CTX + */ +class CtxType extends Type { + CtxType() { + // It is possible for users to use the underlying type of the CTX variables + // these have a name matching 'evp_%ctx_%st + this.getUnspecifiedType().stripType().getName().matches("evp_%ctx_%st") + or + // In principal the above check should be sufficient, but in case of build mode none issues + // i.e., if a typedef cannot be resolved, + // or issues with properly stubbing test cases, we also explicitly check for the wrapping type defs + // i.e., patterns matching 'EVP_%_CTX' + exists(Type base | base = this or base = this.(DerivedType).getBaseType() | + base.getName().matches("EVP_%_CTX") + ) + } +} + +/** + * A pointer to a CtxType + */ +class CtxPointerExpr extends Expr { + CtxPointerExpr() { + this.getType() instanceof CtxType and + this.getType() instanceof PointerType + } +} + +/** + * A call argument of type CtxPointerExpr. + */ +class CtxPointerArgument extends CtxPointerExpr { + CtxPointerArgument() { exists(Call c | c.getAnArgument() = this) } + + Call getCall() { result.getAnArgument() = this } +} + +/** + * A call returning a CtxPointerExpr. + */ +private class CtxPointerReturn extends CtxPointerExpr instanceof Call { + Call getCall() { result = this } +} + +/** + * A call whose target contains 'free' or 'reset' and has an argument of type + * CtxPointerArgument. + */ +private class CtxClearCall extends Call { + CtxClearCall() { + this.getTarget().getName().toLowerCase().matches(["%free%", "%reset%"]) and + this.getAnArgument() instanceof CtxPointerArgument + } +} + +abstract private class CtxPassThroughCall extends Call { + abstract DataFlow::Node getNode1(); + + abstract DataFlow::Node getNode2(); +} + +/** + * A call whose target contains 'copy' and has an argument of type + * CtxPointerArgument. + */ +private class CtxCopyOutArgCall extends CtxPassThroughCall { + DataFlow::Node n1; + DataFlow::Node n2; + + CtxCopyOutArgCall() { + this.getTarget().getName().toLowerCase().matches("%copy%") and + n1.asExpr() = this.getAnArgument() and + n1.getType() instanceof CtxType and + n2.asDefiningArgument() = this.getAnArgument() and + n2.getType() instanceof CtxType and + n1.asDefiningArgument() != n2.asExpr() + } + + override DataFlow::Node getNode1() { result = n1 } + + override DataFlow::Node getNode2() { result = n2 } +} + +/** + * A call whose target contains 'dup' and has an argument of type + * CtxPointerArgument. + */ +private class CtxCopyReturnCall extends CtxPassThroughCall, CtxPointerExpr { + DataFlow::Node n1; + + CtxCopyReturnCall() { + this.getTarget().getName().toLowerCase().matches("%dup%") and + n1.asExpr() = this.getAnArgument() and + n1.getType() instanceof CtxType + } + + override DataFlow::Node getNode1() { result = n1 } + + override DataFlow::Node getNode2() { result.asExpr() = this } +} + +/** + * A call to `EVP_PKEY_paramgen` acts as a kind of pass through. + * It's output pkey is eventually used in a new operation generating + * a fresh context pointer (e.g., `EVP_PKEY_CTX_new`). + * It is easier to model this as a pass through + * than to model the flow from the paramgen to the new key generation. + */ +private class CtxParamGenCall extends CtxPassThroughCall { + DataFlow::Node n1; + DataFlow::Node n2; + + CtxParamGenCall() { + this.getTarget().getName() = "EVP_PKEY_paramgen" and + n1.asExpr() = this.getArgument(0) and + ( + n2.asExpr() = this.getArgument(1) + or + n2.asDefiningArgument() = this.getArgument(1) + ) + } + + override DataFlow::Node getNode1() { result = n1 } + + override DataFlow::Node getNode2() { result = n2 } +} + +/** + * If the current node gets is an argument to a function + * that returns a pointer type, immediately flow through. + * NOTE: this passthrough is required if we allow + * intermediate steps to go into variables that are not a CTX type. + * See for example `CtxParamGenCall`. + */ +private class CallArgToCtxRet extends CtxPassThroughCall, CtxPointerExpr { + DataFlow::Node n1; + DataFlow::Node n2; + + CallArgToCtxRet() { + this.getAnArgument() = n1.asExpr() and + n2.asExpr() = this + } + + override DataFlow::Node getNode1() { result = n1 } + + override DataFlow::Node getNode2() { result = n2 } +} + +/** + * A source Ctx of interest is any argument or return of type CtxPointerExpr. + */ +class CtxPointerSource extends CtxPointerExpr { + CtxPointerSource() { + this instanceof CtxPointerReturn or + this instanceof CtxPointerArgument + } + + DataFlow::Node asNode() { + result.asExpr() = this + or + result.asDefiningArgument() = this + } +} + +/** + * Flow from any CtxPointerSource to other CtxPointerSource. + */ +module OpenSslCtxSourceToSourceFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { exists(CtxPointerSource s | s.asNode() = source) } + + predicate isSink(DataFlow::Node sink) { exists(CtxPointerSource s | s.asNode() = sink) } + + predicate isBarrier(DataFlow::Node node) { + exists(CtxClearCall c | c.getAnArgument() = node.asExpr()) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(CtxPassThroughCall c | c.getNode1() = node1 and c.getNode2() = node2) + } +} + +module OpenSslCtxSourceToArgumentFlow = DataFlow::Global; + +/** + * Holds if there is a context flow from the source to the sink. + */ +predicate ctxSrcToSrcFlow(CtxPointerSource source, CtxPointerSource sink) { + exists(DataFlow::Node a, DataFlow::Node b | + OpenSslCtxSourceToArgumentFlow::flow(a, b) and + a = source.asNode() and + b = sink.asNode() + ) +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll deleted file mode 100644 index 44e30ddf9fc9..000000000000 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/CipherOperation.qll +++ /dev/null @@ -1,273 +0,0 @@ -import experimental.quantum.Language -private import OpenSSLOperationBase -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -import EVPPKeyCtxInitializer - -/** - * A base class for all EVP cipher operations. - */ -abstract class EvpCipherInitializer extends OperationStep { - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and - type = PrimaryAlgorithmIO() and - // Constants that are not equal to zero or - // non-constants (e.g., variable accesses, which require data-flow to determine the value) - // A zero (null) value typically indicates use of this operation step to initialize - // other out parameters in a multi-step initialization. - (exists(result.asExpr().getValue()) implies result.asExpr().getValue().toInt() != 0) - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -/** - * A base class for EVP cipher/decrypt/encrypt 'ex' operations. - */ -abstract class EvpEXInitializer extends EvpCipherInitializer { - override DataFlow::Node getInput(IOType type) { - result = super.getInput(type) - or - ( - // Constants that are not equal to zero or - // non-constants (e.g., variable accesses, which require data-flow to determine the value) - // A zero (null) value typically indicates use of this operation step to initialize - // other out parameters in a multi-step initialization. - result.asExpr() = this.getArgument(3) and type = KeyIO() - or - result.asExpr() = this.getArgument(4) and type = IVorNonceIO() - ) and - (exists(result.asExpr().getValue()) implies result.asExpr().getValue().toInt() != 0) - } -} - -/** - * A base class for EVP cipher/decrypt/encrypt 'ex2' operations. - */ -abstract class EvpEX2Initializer extends EvpCipherInitializer { - override DataFlow::Node getInput(IOType type) { - result = super.getInput(type) - or - result.asExpr() = this.getArgument(2) and type = KeyIO() - or - result.asExpr() = this.getArgument(3) and type = IVorNonceIO() - } -} - -/** - * A Call to an EVP Cipher/Encrypt/Decrypt initialization operation. - */ -class EvpCipherEXInitCall extends EvpEXInitializer { - EvpCipherEXInitCall() { - this.getTarget().getName() in ["EVP_EncryptInit_ex", "EVP_DecryptInit_ex", "EVP_CipherInit_ex"] - } - - override DataFlow::Node getInput(IOType type) { - result = super.getInput(type) - or - // NOTE: for EncryptInit and DecryptInit there is no subtype arg - // the subtype is determined automatically by the initializer based on the operation name - this.getTarget().getName().toLowerCase().matches("%cipherinit%") and - result.asExpr() = this.getArgument(5) and - type = KeyOperationSubtypeIO() - } -} - -class Evp_Cipher_EX2_or_Simple_Init_Call extends EvpEX2Initializer { - Evp_Cipher_EX2_or_Simple_Init_Call() { - this.getTarget().getName() in [ - "EVP_EncryptInit_ex2", "EVP_DecryptInit_ex2", "EVP_CipherInit_ex2", "EVP_EncryptInit", - "EVP_DecryptInit", "EVP_CipherInit" - ] - } - - override DataFlow::Node getInput(IOType type) { - result = super.getInput(type) - or - this.getTarget().getName().toLowerCase().matches("%cipherinit%") and - result.asExpr() = this.getArgument(4) and - type = KeyOperationSubtypeIO() - } -} - -/** - * A call to EVP_Pkey_encrypt_init, EVP_Pkey_decrypt_init, or their 'ex' variants. - */ -class EvpPkeyEncryptDecryptInit extends OperationStep { - EvpPkeyEncryptDecryptInit() { - this.getTarget().getName() in [ - "EVP_PKEY_encrypt_init", "EVP_PKEY_encrypt_init_ex", "EVP_PKEY_decrypt_init", - "EVP_PKEY_decrypt_init_ex" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = OsslParamIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -class EvpCipherInitSKeyCall extends EvpEX2Initializer { - EvpCipherInitSKeyCall() { this.getTarget().getName() = "EVP_CipherInit_SKEY" } - - override DataFlow::Node getInput(IOType type) { - result = super.getInput(type) - or - result.asExpr() = this.getArgument(5) and - type = KeyOperationSubtypeIO() - } -} - -//EVP_PKEY_encrypt_init -/** - * A Call to EVP_Cipher/Encrypt/DecryptUpdate. - * https://docs.openssl.org/3.2/man3/EVP_CipherUpdate - */ -class EvpCipherUpdateCall extends OperationStep { - EvpCipherUpdateCall() { - this.getTarget().getName() in ["EVP_EncryptUpdate", "EVP_DecryptUpdate", "EVP_CipherUpdate"] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(1) and type = CiphertextIO() - or - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = UpdateStep() } -} - -/** - * A base configuration for all EVP cipher operations. - */ -abstract class EvpCipherOperationFinalStep extends OperationStep { - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = FinalStep() } -} - -/** - * A Call to EVP_Cipher. - */ -class EvpCipherCall extends EvpCipherOperationFinalStep { - EvpCipherCall() { this.getTarget().getName() = "EVP_Cipher" } - - override DataFlow::Node getInput(IOType type) { - super.getInput(type) = result - or - result.asExpr() = this.getArgument(2) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - super.getOutput(type) = result - or - result.asExpr() = this.getArgument(1) and type = CiphertextIO() - } -} - -/** - * A Call to an EVP Cipher/Encrypt/Decrypt final operation. - */ -class EvpCipherFinalCall extends EvpCipherOperationFinalStep { - EvpCipherFinalCall() { - this.getTarget().getName() in [ - "EVP_EncryptFinal_ex", "EVP_DecryptFinal_ex", "EVP_CipherFinal_ex", "EVP_EncryptFinal", - "EVP_DecryptFinal", "EVP_CipherFinal" - ] - } - - override DataFlow::Node getOutput(IOType type) { - super.getOutput(type) = result - or - result.asDefiningArgument() = this.getArgument(1) and - type = CiphertextIO() - // TODO: could indicate text lengths here, as well - } -} - -/** - * A call to a PKEY_encrypt or PKEY_decrypt operation. - * https://docs.openssl.org/3.2/man3/EVP_PKEY_decrypt/ - * https://docs.openssl.org/3.2/man3/EVP_PKEY_encrypt - */ -class EvpPKeyCipherOperation extends EvpCipherOperationFinalStep { - EvpPKeyCipherOperation() { - this.getTarget().getName() in ["EVP_PKEY_encrypt", "EVP_PKEY_decrypt"] - } - - override DataFlow::Node getInput(IOType type) { - super.getInput(type) = result - or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - super.getOutput(type) = result - or - result.asExpr() = this.getArgument(1) and type = CiphertextIO() - // TODO: could indicate text lengths here, as well - } -} - -/** - * An EVP cipher operation instance. - * Any operation step that is a final operation step for EVP cipher operation steps. - */ -class EvpCipherOperationInstance extends Crypto::KeyOperationInstance instanceof EvpCipherOperationFinalStep -{ - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - super.getPrimaryAlgorithmValueConsumer() = result - } - - override Crypto::KeyOperationSubtype getKeyOperationSubtype() { - result instanceof Crypto::TEncryptMode and - super.getTarget().getName().toLowerCase().matches("%encrypt%") - or - result instanceof Crypto::TDecryptMode and - super.getTarget().getName().toLowerCase().matches("%decrypt%") - or - super.getTarget().getName().toLowerCase().matches("%cipher%") and - resolveKeyOperationSubTypeOperationStep(super - .getDominatingInitializersToStep(KeyOperationSubtypeIO())) = result - } - - override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { - super.getDominatingInitializersToStep(IVorNonceIO()).getInput(IVorNonceIO()) = result - } - - override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { - super.getDominatingInitializersToStep(KeyIO()).getInput(KeyIO()) = result - } - - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - super.getOutputStepFlowingToStep(CiphertextIO()).getOutput(CiphertextIO()) = result - } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { - super.getDominatingInitializersToStep(PlaintextIO()).getInput(PlaintextIO()) = result - } -} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll new file mode 100644 index 000000000000..65eebae585b3 --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/ECKeyGenOperation.qll @@ -0,0 +1,33 @@ +private import experimental.quantum.Language +private import OpenSSLOperationBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers +private import semmle.code.cpp.dataflow.new.DataFlow + +class ECKeyGenOperation extends OpenSslOperation, Crypto::KeyGenerationOperationInstance { + ECKeyGenOperation() { this.(Call).getTarget().getName() = "EC_KEY_generate_key" } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(0) } + + override Crypto::KeyArtifactType getOutputKeyType() { result = Crypto::TAsymmetricKeyType() } + + override Crypto::ArtifactOutputDataFlowNode getOutputKeyArtifact() { + result.asExpr() = this.(Call).getArgument(0) + } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + none() // no explicit key size, inferred from algorithm + } + + override int getKeySizeFixed() { + none() + // TODO: marked as none as the operation itself has no key size, it + // comes from the algorithm source, but note we could grab the + // algorithm source and get the key size (see below). + // We may need to reconsider what is the best approach here. + // result = + // this.getAnAlgorithmValueConsumer() + // .getAKnownAlgorithmSource() + // .(Crypto::EllipticCurveInstance) + // .getKeySize() + } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll new file mode 100644 index 000000000000..1f5bf9e442ca --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPCipherOperation.qll @@ -0,0 +1,181 @@ +private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.CtxFlow +private import OpenSSLOperationBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers + +// TODO: need to add key consumer +abstract class Evp_Cipher_Initializer extends EvpKeyOperationSubtypeInitializer, + EvpPrimaryAlgorithmInitializer, EvpKeyInitializer, EvpIVInitializer +{ + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } +} + +abstract class Evp_EX_Initializer extends Evp_Cipher_Initializer { + override Expr getKeyArg() { + // Null key indicates the key is not actually set + // This pattern can occur during a multi-step initialization + // TODO/Note: not flowing 0 to the sink, assuming a direct use of NULL for now + result = this.(Call).getArgument(3) and + (exists(result.getValue()) implies result.getValue().toInt() != 0) + } + + override Expr getIVArg() { + // Null IV indicates the IV is not actually set + // This occurs given that setting the IV sometimes requires first setting the IV size. + // TODO/Note: not flowing 0 to the sink, assuming a direct use of NULL for now + result = this.(Call).getArgument(4) and + (exists(result.getValue()) implies result.getValue().toInt() != 0) + } +} + +abstract class Evp_EX2_Initializer extends Evp_Cipher_Initializer { + override Expr getKeyArg() { result = this.(Call).getArgument(2) } + + override Expr getIVArg() { result = this.(Call).getArgument(3) } +} + +class EvpCipherEXInitCall extends Evp_EX_Initializer { + EvpCipherEXInitCall() { + this.(Call).getTarget().getName() in [ + "EVP_EncryptInit_ex", "EVP_DecryptInit_ex", "EVP_CipherInit_ex" + ] + } + + override Expr getKeyOperationSubtypeArg() { + // NOTE: for EncryptInit and DecryptInit there is no subtype arg + // the subtype is determined automatically by the initializer based on the operation name + this.(Call).getTarget().getName().toLowerCase().matches("%cipherinit%") and + result = this.(Call).getArgument(5) + } +} + +// if this.(Call).getTarget().getName().toLowerCase().matches("%encrypt%") +// then result instanceof Crypto::TEncryptMode +// else +// if this.(Call).getTarget().getName().toLowerCase().matches("%decrypt%") +// then result instanceof Crypto::TDecryptMode +class Evp_Cipher_EX2_or_Simple_Init_Call extends Evp_EX2_Initializer { + Evp_Cipher_EX2_or_Simple_Init_Call() { + this.(Call).getTarget().getName() in [ + "EVP_EncryptInit_ex2", "EVP_DecryptInit_ex2", "EVP_CipherInit_ex2", "EVP_EncryptInit", + "EVP_DecryptInit", "EVP_CipherInit" + ] + } + + override Expr getKeyOperationSubtypeArg() { + this.(Call).getTarget().getName().toLowerCase().matches("%cipherinit%") and + result = this.(Call).getArgument(4) + } +} + +class Evp_CipherInit_SKey_Call extends Evp_EX2_Initializer { + Evp_CipherInit_SKey_Call() { this.(Call).getTarget().getName() = "EVP_CipherInit_SKEY" } + + override Expr getKeyOperationSubtypeArg() { result = this.(Call).getArgument(5) } +} + +class Evp_Cipher_Update_Call extends EvpUpdate { + Evp_Cipher_Update_Call() { + this.(Call).getTarget().getName() in [ + "EVP_EncryptUpdate", "EVP_DecryptUpdate", "EVP_CipherUpdate" + ] + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getInputArg() { result = this.(Call).getArgument(3) } + + override Expr getOutputArg() { result = this.(Call).getArgument(1) } +} + +/** + * see: https://docs.openssl.org/master/man3/EVP_EncryptInit/#synopsis + * Base configuration for all EVP cipher operations. + */ +abstract class Evp_Cipher_Operation extends EvpOperation, Crypto::KeyOperationInstance { + override Expr getOutputArg() { result = this.(Call).getArgument(1) } + + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { + result instanceof Crypto::TEncryptMode and + this.(Call).getTarget().getName().toLowerCase().matches("%encrypt%") + or + result instanceof Crypto::TDecryptMode and + this.(Call).getTarget().getName().toLowerCase().matches("%decrypt%") + or + result = this.getInitCall().(EvpKeyOperationSubtypeInitializer).getKeyOperationSubtype() and + this.(Call).getTarget().getName().toLowerCase().matches("%cipher%") + } + + override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { + this.getInitCall().(EvpIVInitializer).getIVArg() = result.asExpr() + } + + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { + this.getInitCall().(EvpKeyInitializer).getKeyArg() = result.asExpr() + // todo: or track to the EVP_PKEY_CTX_new + } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EvpOperation.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EvpOperation.super.getInputConsumer() + } +} + +class Evp_Cipher_Call extends EvpOperation, Evp_Cipher_Operation { + Evp_Cipher_Call() { this.(Call).getTarget().getName() = "EVP_Cipher" } + + override Expr getInputArg() { result = this.(Call).getArgument(2) } + + override Expr getAlgorithmArg() { + result = this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class Evp_Cipher_Final_Call extends EvpFinal, Evp_Cipher_Operation { + Evp_Cipher_Final_Call() { + this.(Call).getTarget().getName() in [ + "EVP_EncryptFinal_ex", "EVP_DecryptFinal_ex", "EVP_CipherFinal_ex", "EVP_EncryptFinal", + "EVP_DecryptFinal", "EVP_CipherFinal" + ] + } + + /** + * Output is both from update calls and from the final call. + */ + override Expr getOutputArg() { + result = EvpFinal.super.getOutputArg() + or + result = Evp_Cipher_Operation.super.getOutputArg() + } + + override Expr getAlgorithmArg() { + result = this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +/** + * https://docs.openssl.org/3.2/man3/EVP_PKEY_decrypt/ + * https://docs.openssl.org/3.2/man3/EVP_PKEY_encrypt + */ +class Evp_PKey_Cipher_Operation extends Evp_Cipher_Operation { + Evp_PKey_Cipher_Operation() { + this.(Call).getTarget().getName() in ["EVP_PKEY_encrypt", "EVP_PKEY_decrypt"] + } + + override Expr getInputArg() { result = this.(Call).getArgument(3) } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getAlgorithmArg() { + result = this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() + } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll new file mode 100644 index 000000000000..b99c5432a1a0 --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPHashOperation.qll @@ -0,0 +1,106 @@ +/** + * https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis + */ + +private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.CtxFlow +private import OpenSSLOperationBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers + +class Evp_DigestInit_Variant_Calls extends EvpPrimaryAlgorithmInitializer { + Evp_DigestInit_Variant_Calls() { + this.(Call).getTarget().getName() in [ + "EVP_DigestInit", "EVP_DigestInit_ex", "EVP_DigestInit_ex2" + ] + } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class Evp_Digest_Update_Call extends EvpUpdate { + Evp_Digest_Update_Call() { this.(Call).getTarget().getName() = "EVP_DigestUpdate" } + + override Expr getInputArg() { result = this.(Call).getArgument(1) } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +//https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis +class Evp_Q_Digest_Operation extends EvpOperation, Crypto::HashOperationInstance { + Evp_Q_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Q_digest" } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } + + override EvpInitializer getInitCall() { + // This variant of digest does not use an init + // and even if it were used, the init would be ignored/undefined + none() + } + + override Expr getInputArg() { result = this.(Call).getArgument(3) } + + override Expr getOutputArg() { result = this.(Call).getArgument(5) } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EvpOperation.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EvpOperation.super.getInputConsumer() + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class Evp_Digest_Operation extends EvpOperation, Crypto::HashOperationInstance { + Evp_Digest_Operation() { this.(Call).getTarget().getName() = "EVP_Digest" } + + // There is no context argument for this function + override CtxPointerSource getContext() { none() } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(4) } + + override EvpPrimaryAlgorithmInitializer getInitCall() { + // This variant of digest does not use an init + // and even if it were used, the init would be ignored/undefined + none() + } + + override Expr getInputArg() { result = this.(Call).getArgument(0) } + + override Expr getOutputArg() { result = this.(Call).getArgument(2) } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EvpOperation.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EvpOperation.super.getInputConsumer() + } +} + +class Evp_Digest_Final_Call extends EvpFinal, Crypto::HashOperationInstance { + Evp_Digest_Final_Call() { + this.(Call).getTarget().getName() in [ + "EVP_DigestFinal", "EVP_DigestFinal_ex", "EVP_DigestFinalXOF" + ] + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getOutputArg() { result = this.(Call).getArgument(1) } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EvpFinal.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EvpFinal.super.getInputConsumer() + } + + override Expr getAlgorithmArg() { + result = this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() + } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPKeyGenOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPKeyGenOperation.qll new file mode 100644 index 000000000000..47f341e17b1a --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPKeyGenOperation.qll @@ -0,0 +1,96 @@ +private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.CtxFlow +private import OpenSSLOperationBase +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers + +class EvpKeyGenInitialize extends EvpPrimaryAlgorithmInitializer { + EvpKeyGenInitialize() { + this.(Call).getTarget().getName() in [ + "EVP_PKEY_keygen_init", + "EVP_PKEY_paramgen_init" + ] + } + + /** + * Gets the algorithm argument. + * In this case the algorithm is encoded through the context argument. + * The context may be directly created from an algorithm consumer, + * or from a new operation off of a prior key. Either way, + * we will treat this argument as the algorithm argument. + */ + override Expr getAlgorithmArg() { result = this.getContext() } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class EvpKeyGenOperation extends EvpOperation, Crypto::KeyGenerationOperationInstance { + DataFlow::Node keyResultNode; + + EvpKeyGenOperation() { + this.(Call).getTarget().getName() in ["EVP_RSA_gen", "EVP_PKEY_Q_keygen"] and + keyResultNode.asExpr() = this + or + this.(Call).getTarget().getName() in ["EVP_PKEY_generate", "EVP_PKEY_keygen"] and + keyResultNode.asDefiningArgument() = this.(Call).getArgument(1) + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getAlgorithmArg() { + this.(Call).getTarget().getName() = "EVP_PKEY_Q_keygen" and + result = this.(Call).getArgument(0) + or + result = this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() + } + + override Crypto::KeyArtifactType getOutputKeyType() { result = Crypto::TAsymmetricKeyType() } + + override Expr getInputArg() { none() } + + override Expr getOutputArg() { result = keyResultNode.asExpr() } + + override Crypto::ArtifactOutputDataFlowNode getOutputKeyArtifact() { result = keyResultNode } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + this.(Call).getTarget().getName() = "EVP_PKEY_Q_keygen" and + result = DataFlow::exprNode(this.(Call).getArgument(3)) and + // Arg 3 (0 based) is only a key size if the 'type' parameter is RSA, however, + // as a crude approximation, assume that if the type of the argument is not a derived type + // the argument must specify a key size (this is to avoid tracing if "rsa" is in the type parameter) + not this.(Call).getArgument(3).getType().getUnderlyingType() instanceof DerivedType + or + this.(Call).getTarget().getName() = "EVP_RSA_gen" and + result = DataFlow::exprNode(this.(Call).getArgument(0)) + or + result = DataFlow::exprNode(this.getInitCall().(EvpKeySizeInitializer).getKeySizeArg()) + } +} + +/** + * A call to `EVP_PKEY_new_mac_key` that creatse a new generic MAC key. + * Signature: EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); + */ +class EvpNewMacKey extends EvpOperation, Crypto::KeyGenerationOperationInstance { + DataFlow::Node keyResultNode; + + EvpNewMacKey() { + this.(Call).getTarget().getName() = "EVP_PKEY_new_mac_key" and keyResultNode.asExpr() = this + } + + override CtxPointerSource getContext() { none() } + + override Crypto::KeyArtifactType getOutputKeyType() { result = Crypto::TSymmetricKeyType() } + + override Expr getOutputArg() { result = keyResultNode.asExpr() } + + override Crypto::ArtifactOutputDataFlowNode getOutputKeyArtifact() { result = keyResultNode } + + override Expr getInputArg() { none() } + + override Expr getAlgorithmArg() { result = this.(Call).getArgument(0) } + + override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { + result = DataFlow::exprNode(this.(Call).getArgument(3)) + } +} +/// TODO: https://docs.openssl.org/3.0/man3/EVP_PKEY_new/#synopsis diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll index 2208407e53ca..d7060931317f 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPPKeyCtxInitializer.qll @@ -6,6 +6,7 @@ */ import cpp +private import experimental.quantum.OpenSSL.CtxFlow private import OpenSSLOperations /** @@ -13,66 +14,49 @@ private import OpenSSLOperations * These calls initialize the context from a prior key. * The key may be generated previously, or merely had it's * parameters set (e.g., `EVP_PKEY_paramgen`). + * NOTE: for the case of `EVP_PKEY_paramgen`, these calls + * are encoded as context passthroughs, and any operation + * will get all associated initializers for the paramgen + * at the final keygen operation automatically. */ -class EvpNewKeyCtx extends OperationStep instanceof Call { +class EvpNewKeyCtx extends EvpKeyInitializer { Expr keyArg; EvpNewKeyCtx() { - this.getTarget().getName() = "EVP_PKEY_CTX_new" and - keyArg = this.getArgument(0) + this.(Call).getTarget().getName() = "EVP_PKEY_CTX_new" and + keyArg = this.(Call).getArgument(0) or - this.getTarget().getName() = "EVP_PKEY_CTX_new_from_pkey" and - keyArg = this.getArgument(1) + this.(Call).getTarget().getName() = "EVP_PKEY_CTX_new_from_pkey" and + keyArg = this.(Call).getArgument(1) } - override DataFlow::Node getInput(IOType type) { - result.asExpr() = keyArg and type = KeyIO() - or - this.getTarget().getName() = "EVP_PKEY_CTX_new_from_pkey" and - result.asExpr() = this.getArgument(0) and - type = OsslLibContextIO() - } - - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = ContextIO() } + /** + * Context is returned + */ + override CtxPointerSource getContext() { result = this } - override OperationStepType getStepType() { result = ContextCreationStep() } + override Expr getKeyArg() { result = keyArg } } /** * A call to "EVP_PKEY_CTX_set_ec_paramgen_curve_nid". + * Note that this is a primary algorithm as the pattenr is to specify an "EC" context, + * then set the specific curve later. Although the curve is set later, it is the primary + * algorithm intended for an operation. */ -class EvpCtxSetEcParamgenCurveNidInitializer extends OperationStep { - EvpCtxSetEcParamgenCurveNidInitializer() { - this.getTarget().getName() = "EVP_PKEY_CTX_set_ec_paramgen_curve_nid" +class EvpCtxSetPrimaryAlgorithmInitializer extends EvpPrimaryAlgorithmInitializer { + EvpCtxSetPrimaryAlgorithmInitializer() { + this.(Call).getTarget().getName() = "EVP_PKEY_CTX_set_ec_paramgen_curve_nid" } - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() - } + override Expr getAlgorithmArg() { result = this.(Call).getArgument(1) } - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } -/** - * A call to the following: - * - `EVP_PKEY_CTX_set_signature_md` - * - `EVP_PKEY_CTX_set_rsa_mgf1_md_name` - * - `EVP_PKEY_CTX_set_rsa_mgf1_md` - * - `EVP_PKEY_CTX_set_rsa_oaep_md_name` - * - `EVP_PKEY_CTX_set_rsa_oaep_md` - * - `EVP_PKEY_CTX_set_dsa_paramgen_md` - * - `EVP_PKEY_CTX_set_dh_kdf_md` - * - `EVP_PKEY_CTX_set_ecdh_kdf_md` - */ -class EvpCtxSetHashInitializer extends OperationStep { - EvpCtxSetHashInitializer() { - this.getTarget().getName() in [ +class EvpCtxSetHashAlgorithmInitializer extends EvpHashAlgorithmInitializer { + EvpCtxSetHashAlgorithmInitializer() { + this.(Call).getTarget().getName() in [ "EVP_PKEY_CTX_set_signature_md", "EVP_PKEY_CTX_set_rsa_mgf1_md_name", "EVP_PKEY_CTX_set_rsa_mgf1_md", "EVP_PKEY_CTX_set_rsa_oaep_md_name", "EVP_PKEY_CTX_set_rsa_oaep_md", "EVP_PKEY_CTX_set_dsa_paramgen_md", @@ -80,95 +64,56 @@ class EvpCtxSetHashInitializer extends OperationStep { ] } - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = HashAlgorithmIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } + override Expr getHashAlgorithmArg() { result = this.(Call).getArgument(1) } - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } -/** - * A call to `EVP_PKEY_CTX_set_rsa_keygen_bits`, `EVP_PKEY_CTX_set_dsa_paramgen_bits`, - * or `EVP_CIPHER_CTX_set_key_length`. - */ -class EvpCtxSetKeySizeInitializer extends OperationStep { +class EvpCtxSetKeySizeInitializer extends EvpKeySizeInitializer { + Expr arg; + EvpCtxSetKeySizeInitializer() { - this.getTarget().getName() in [ + this.(Call).getTarget().getName() in [ "EVP_PKEY_CTX_set_rsa_keygen_bits", "EVP_PKEY_CTX_set_dsa_paramgen_bits", "EVP_CIPHER_CTX_set_key_length" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() + ] and + arg = this.(Call).getArgument(1) or - result.asExpr() = this.getArgument(1) and type = KeySizeIO() + this.(Call).getTarget().getName() = "EVP_PKEY_CTX_set_mac_key" and + arg = this.(Call).getArgument(2) } - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } + override Expr getKeySizeArg() { result = arg } - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } -class EvpCtxSetMacKeyInitializer extends OperationStep { - EvpCtxSetMacKeyInitializer() { this.getTarget().getName() = "EVP_PKEY_CTX_set_mac_key" } +class EvpCtxSetKeyInitializer extends EvpKeyInitializer { + EvpCtxSetKeyInitializer() { this.(Call).getTarget().getName() = "EVP_PKEY_CTX_set_mac_key" } - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(2) and type = KeySizeIO() - or - // the raw key that is configured into the output key - result.asExpr() = this.getArgument(1) and type = KeyIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } + override Expr getKeyArg() { result = this.(Call).getArgument(1) } - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } -class EvpCtxSetPaddingInitializer extends OperationStep { +class EvpCtxSetPaddingInitializer extends EvpPaddingInitializer { EvpCtxSetPaddingInitializer() { - this.getTarget().getName() in ["EVP_PKEY_CTX_set_rsa_padding", "EVP_CIPHER_CTX_set_padding"] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = PaddingAlgorithmIO() + this.(Call).getTarget().getName() in [ + "EVP_PKEY_CTX_set_rsa_padding", "EVP_CIPHER_CTX_set_padding" + ] } - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } + override Expr getPaddingArg() { result = this.(Call).getArgument(1) } - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } -class EvpCtxSetSaltLengthInitializer extends OperationStep { +class EvpCtxSetSaltLengthInitializer extends EvpSaltLengthInitializer { EvpCtxSetSaltLengthInitializer() { - this.getTarget().getName() = "EVP_PKEY_CTX_set_rsa_pss_saltlen" + this.(Call).getTarget().getName() = "EVP_PKEY_CTX_set_rsa_pss_saltlen" } - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = SaltLengthIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } + override Expr getSaltLengthArg() { result = this.(Call).getArgument(1) } - override OperationStepType getStepType() { result = InitializerStep() } + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPSignatureOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPSignatureOperation.qll new file mode 100644 index 000000000000..41a828652917 --- /dev/null +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/EVPSignatureOperation.qll @@ -0,0 +1,200 @@ +/** + * Provides classes for modeling OpenSSL's EVP signature operations + */ + +private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.AvcFlow +private import experimental.quantum.OpenSSL.CtxFlow +private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers +private import experimental.quantum.OpenSSL.Operations.OpenSSLOperations + +// TODO: verification functions +class EvpSignatureDigestInitializer extends EvpHashAlgorithmInitializer { + Expr arg; + + EvpSignatureDigestInitializer() { + this.(Call).getTarget().getName() in ["EVP_DigestSignInit_ex", "EVP_DigestSignInit"] and + arg = this.(Call).getArgument(2) + or + this.(Call).getTarget().getName() in ["EVP_SignInit", "EVP_SignInit_ex"] and + arg = this.(Call).getArgument(1) + } + + override Expr getHashAlgorithmArg() { result = arg } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class EvpSignatureKeyInitializer extends EvpKeyInitializer { + Expr arg; + + EvpSignatureKeyInitializer() { + this.(Call).getTarget().getName() = "EVP_DigestSignInit_ex" and + arg = this.(Call).getArgument(5) + or + this.(Call).getTarget().getName() = "EVP_DigestSignInit" and + arg = this.(Call).getArgument(4) + } + + override Expr getKeyArg() { result = arg } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class EvpSignaturePrimaryAlgorithmInitializer extends EvpPrimaryAlgorithmInitializer { + Expr arg; + + EvpSignaturePrimaryAlgorithmInitializer() { + // signature algorithm + this.(Call).getTarget().getName() in ["EVP_PKEY_sign_init_ex2", "EVP_PKEY_sign_message_init"] and + arg = this.(Call).getArgument(1) + or + // configuration through the context argument + this.(Call).getTarget().getName() in ["EVP_PKEY_sign_init", "EVP_PKEY_sign_init_ex"] and + arg = this.getContext() + } + + override Expr getAlgorithmArg() { result = arg } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +class Evp_Signature_Update_Call extends EvpUpdate { + Evp_Signature_Update_Call() { + this.(Call).getTarget().getName() in [ + "EVP_DigestSignUpdate", "EVP_SignUpdate", "EVP_PKEY_sign_message_update" + ] + } + + /** + * Input is the message to sign. + */ + override Expr getInputArg() { result = this.(Call).getArgument(1) } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } +} + +/** + * We model output explicit output arguments as predicate to use it in constructors. + * The predicate must cover all EVP_Signature_Operation subclasses. + */ +pragma[inline] +private Expr signatureOperationOutputArg(Call call) { + if call.getTarget().getName() = "EVP_SignFinal_ex" + then result = call.getArgument(2) + else result = call.getArgument(1) +} + +/** + * The base configuration for all EVP signature operations. + */ +abstract class EvpSignatureOperation extends EvpOperation, Crypto::SignatureOperationInstance { + EvpSignatureOperation() { + this.(Call).getTarget().getName().matches("EVP_%") and + // NULL output argument means the call is to get the size of the signature and such call is not an operation + ( + not exists(signatureOperationOutputArg(this).getValue()) + or + signatureOperationOutputArg(this).getValue() != "0" + ) + } + + Expr getHashAlgorithmArg() { + this.getInitCall().(EvpHashAlgorithmInitializer).getHashAlgorithmArg() = result + } + + override Expr getAlgorithmArg() { + this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() = result + } + + override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + AvcToCallArgFlow::flow(result.(OpenSslAlgorithmValueConsumer).getResultNode(), + DataFlow::exprNode(this.getHashAlgorithmArg())) + } + + /** + * Signing, verification or unknown. + */ + override Crypto::KeyOperationSubtype getKeyOperationSubtype() { + // TODO: if this KeyOperationSubtype does not match initialization call's KeyOperationSubtype then we found a bug + if this.(Call).getTarget().getName().toLowerCase().matches("%sign%") + then result instanceof Crypto::TSignMode + else + if this.(Call).getTarget().getName().toLowerCase().matches("%verify%") + then result instanceof Crypto::TVerifyMode + else result instanceof Crypto::TUnknownKeyOperationMode + } + + override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { + // TODO: some signing operations may have explicit nonce generators + none() + } + + /** + * Keys provided in the initialization call or in a context are found by this method. + * Keys in explicit arguments are found by overridden methods in extending classes. + */ + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { + result = DataFlow::exprNode(this.getInitCall().(EvpKeyInitializer).getKeyArg()) + } + + override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = EvpOperation.super.getOutputArtifact() + } + + override Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = EvpOperation.super.getInputConsumer() + } + + /** + * TODO: only signing operations for now, change when verificaiton is added + */ + override Crypto::ConsumerInputDataFlowNode getSignatureConsumer() { none() } +} + +class Evp_Signature_Call extends EvpSignatureOperation { + Evp_Signature_Call() { this.(Call).getTarget().getName() in ["EVP_DigestSign", "EVP_PKEY_sign"] } + + /** + * Output is the signature. + */ + override Expr getOutputArg() { result = signatureOperationOutputArg(this) } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + /** + * Input is the message to sign. + */ + override Expr getInputArg() { result = this.(Call).getArgument(3) } +} + +class Evp_Signature_Final_Call extends EvpFinal, EvpSignatureOperation { + Evp_Signature_Final_Call() { + this.(Call).getTarget().getName() in [ + "EVP_DigestSignFinal", + "EVP_SignFinal_ex", + "EVP_SignFinal", + "EVP_PKEY_sign_message_final" + ] + } + + override CtxPointerSource getContext() { result = this.(Call).getArgument(0) } + + override Expr getAlgorithmArg() { + this.getInitCall().(EvpPrimaryAlgorithmInitializer).getAlgorithmArg() = result + } + + override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { + // key provided as an argument + this.(Call).getTarget().getName() in ["EVP_SignFinal", "EVP_SignFinal_ex"] and + result = DataFlow::exprNode(this.(Call).getArgument(3)) + or + // or find key in the initialization call + result = EvpSignatureOperation.super.getKeyConsumer() + } + + /** + * Output is the signature. + */ + override Expr getOutputArg() { result = signatureOperationOutputArg(this) } +} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll deleted file mode 100644 index 1878bfbe09f2..000000000000 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/HashOperation.qll +++ /dev/null @@ -1,134 +0,0 @@ -/** - * https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis - */ - -private import experimental.quantum.Language -private import OpenSSLOperationBase -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers - -/** - * A call to and EVP digest initializer, such as: - * - `EVP_DigestInit` - * - `EVP_DigestInit_ex` - * - `EVP_DigestInit_ex2` - */ -class EvpDigestInitVariantCalls extends OperationStep instanceof Call { - EvpDigestInitVariantCalls() { - this.getTarget().getName() in ["EVP_DigestInit", "EVP_DigestInit_ex", "EVP_DigestInit_ex2"] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and - type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -/** - * A call to `EVP_DigestUpdate`. - */ -class EvpDigestUpdateCall extends OperationStep instanceof Call { - EvpDigestUpdateCall() { this.getTarget().getName() = "EVP_DigestUpdate" } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and - type = ContextIO() - } - - override OperationStepType getStepType() { result = UpdateStep() } -} - -/** - * A base class for final digest operations. - */ -abstract class EvpFinalDigestOperationStep extends OperationStep { - override OperationStepType getStepType() { result = FinalStep() } -} - -/** - * A call to `EVP_Q_digest` - * https://docs.openssl.org/3.0/man3/EVP_DigestInit/#synopsis - */ -class EvpQDigestOperation extends EvpFinalDigestOperationStep instanceof Call { - EvpQDigestOperation() { this.getTarget().getName() = "EVP_Q_digest" } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(1) and type = PrimaryAlgorithmIO() - or - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and - type = ContextIO() - or - result.asDefiningArgument() = this.getArgument(5) and type = DigestIO() - } -} - -class EvpDigestOperation extends EvpFinalDigestOperationStep instanceof Call { - EvpDigestOperation() { this.getTarget().getName() = "EVP_Digest" } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(4) and type = PrimaryAlgorithmIO() - or - result.asExpr() = this.getArgument(0) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asDefiningArgument() = this.getArgument(2) and type = DigestIO() - } -} - -/** - * A call to EVP_DigestFinal variants - */ -class EvpDigestFinalCall extends EvpFinalDigestOperationStep instanceof Call { - EvpDigestFinalCall() { - this.getTarget().getName() in ["EVP_DigestFinal", "EVP_DigestFinal_ex", "EVP_DigestFinalXOF"] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and - type = ContextIO() - or - result.asDefiningArgument() = this.getArgument(1) and type = DigestIO() - } -} - -/** - * An openssl digest final hash operation instance - */ -class EvpDigestFinalOperationInstance extends Crypto::HashOperationInstance instanceof EvpFinalDigestOperationStep -{ - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - super.getPrimaryAlgorithmValueConsumer() = result - } - - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - super.getOutputStepFlowingToStep(DigestIO()).getOutput(DigestIO()) = result - } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { - super.getDominatingInitializersToStep(PlaintextIO()).getInput(PlaintextIO()) = result - } -} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll deleted file mode 100644 index 2c146aec97f5..000000000000 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/KeyGenOperation.qll +++ /dev/null @@ -1,204 +0,0 @@ -private import experimental.quantum.Language -private import OpenSSLOperationBase -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers - -/** - * A call to EC_KEY_generate_key, which is used to generate an EC key pair. - * Note: this is an operation, though the input parameter is a "EC_KEY*". - * EC_KEY is really an empty context for a key that hasn't been generated, hence - * we consider this an operation generating a key and not accepting a key input. - */ -class ECKeyGen extends OperationStep instanceof Call { - //, Crypto::KeyGenerationOperationInstance { - ECKeyGen() { this.(Call).getTarget().getName() = "EC_KEY_generate_key" } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.(Call).getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } - - override OperationStepType getStepType() { result = ContextCreationStep() } -} - -/** - * A call to EVP_PKEY_keygen_init or EVP_PKEY_paramgen_init. - */ -class EvpKeyGenInitialize extends OperationStep { - EvpKeyGenInitialize() { - this.getTarget().getName() in [ - "EVP_PKEY_keygen_init", - "EVP_PKEY_paramgen_init" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -abstract class KeyGenFinalOperationStep extends OperationStep { - override OperationStepType getStepType() { result = FinalStep() } -} - -/** - * A call to `EVP_PKEY_Q_keygen` - */ -class EvpPKeyQKeyGen extends KeyGenFinalOperationStep instanceof Call { - EvpPKeyQKeyGen() { this.getTarget().getName() = "EVP_PKEY_Q_keygen" } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this and type = KeyIO() - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - // When arg 3 is a derived type, it is a curve name, otherwise it is a key size for RSA if provided - // and arg 2 is the algorithm type - this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(3) and - type = PrimaryAlgorithmIO() - or - not this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(2) and - type = PrimaryAlgorithmIO() - or - not this.getArgument(3).getType().getUnderlyingType() instanceof DerivedType and - result.asExpr() = this.getArgument(3) and - type = KeySizeIO() - } -} - -/** - * A call to `EVP_RSA_gen` - */ -class EvpRsaGen extends KeyGenFinalOperationStep instanceof Call { - EvpRsaGen() { this.getTarget().getName() = "EVP_RSA_gen" } - - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = KeySizeIO() - } -} - -/** - * A call to RSA_generate_key - */ -class RsaGenerateKey extends KeyGenFinalOperationStep instanceof Call { - RsaGenerateKey() { this.getTarget().getName() = "RSA_generate_key" } - - override DataFlow::Node getOutput(IOType type) { result.asExpr() = this and type = KeyIO() } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = KeySizeIO() - } -} - -/** - * A call to RSA_generate_key_ex - */ -class RsaGenerateKeyEx extends KeyGenFinalOperationStep instanceof Call { - RsaGenerateKeyEx() { this.getTarget().getName() = "RSA_generate_key_ex" } - - override DataFlow::Node getOutput(IOType type) { - result.asDefiningArgument() = this.getArgument(0) and type = KeyIO() - } - - override DataFlow::Node getInput(IOType type) { - // arg 0 comes in as a blank RSA key, which we consider a context, - // on output it is considered a key - result.asExpr() = this.getArgument(0) and type = ContextIO() - } -} - -/** - * A call to `EVP_PKEY_generate` or `EVP_PKEY_keygen`. - */ -class EvpPkeyGen extends KeyGenFinalOperationStep instanceof Call { - EvpPkeyGen() { this.getTarget().getName() in ["EVP_PKEY_generate", "EVP_PKEY_keygen"] } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asDefiningArgument() = this.getArgument(1) and type = KeyIO() - or - result.asExpr() = this.getArgument(0) and type = ContextIO() - } -} - -/** - * A call to `EVP_PKEY_new_mac_key` that creates a new generic MAC key. - * - EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, const unsigned char *key, int keylen); - */ -class EvpNewMacKey extends KeyGenFinalOperationStep { - EvpNewMacKey() { this.getTarget().getName() = "EVP_PKEY_new_mac_key" } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - // the raw key that is configured into the output key - result.asExpr() = this.getArgument(2) and type = KeyIO() - or - result.asExpr() = this.getArgument(3) and type = KeySizeIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this and type = KeyIO() - or - result.asExpr() = this.getArgument(0) and type = ContextIO() - } -} - -/// TODO: https://docs.openssl.org/3.0/man3/EVP_PKEY_new/#synopsis -/** - * An `KeyGenerationOperationInstance` for the for all key gen final operation steps. - */ -class KeyGenOperationInstance extends Crypto::KeyGenerationOperationInstance instanceof KeyGenFinalOperationStep -{ - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - super.getPrimaryAlgorithmValueConsumer() = result - } - - override Crypto::KeyArtifactType getOutputKeyType() { result = Crypto::TAsymmetricKeyType() } - - override Crypto::ArtifactOutputDataFlowNode getOutputKeyArtifact() { - super.getOutputStepFlowingToStep(KeyIO()).getOutput(KeyIO()) = result - } - - override predicate hasKeyValueConsumer() { - exists(OperationStep s | s.flowsToOperationStep(this) and s.setsValue(KeyIO())) - } - - override Crypto::ConsumerInputDataFlowNode getKeySizeConsumer() { - super.getDominatingInitializersToStep(KeySizeIO()).getInput(KeySizeIO()) = result - } - - override int getKeySizeFixed() { - none() - // TODO: marked as none as the operation itself has no key size, it - // comes from the algorithm source, but note we could grab the - // algorithm source and get the key size (see below). - // We may need to reconsider what is the best approach here. - // result = - // this.getAnAlgorithmValueConsumer() - // .getAKnownAlgorithmSource() - // .(Crypto::EllipticCurveInstance) - // .getKeySize() - } - - override Crypto::ConsumerInputDataFlowNode getKeyValueConsumer() { - super.getDominatingInitializersToStep(KeyIO()).getInput(KeyIO()) = result - } -} diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll index f1ab394ad787..34d7f6acec8c 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperationBase.qll @@ -1,523 +1,316 @@ private import experimental.quantum.Language +private import experimental.quantum.OpenSSL.AvcFlow +private import experimental.quantum.OpenSSL.CtxFlow +private import experimental.quantum.OpenSSL.KeyFlow private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -import semmle.code.cpp.dataflow.new.DataFlow // Importing these intializers here to ensure the are part of any model that is // using OpenSslOperationBase. This further ensures that initializers are tied to opeartions // even if only importing the operation by itself. import EVPPKeyCtxInitializer -/** - * An openSSL CTX type, which is type for which the stripped underlying type - * matches the pattern 'evp_%ctx_%st'. - * This includes types like: - * - EVP_CIPHER_CTX - * - EVP_MD_CTX - * - EVP_PKEY_CTX - */ -class CtxType extends Type { - CtxType() { - // It is possible for users to use the underlying type of the CTX variables - // these have a name matching 'evp_%ctx_%st - this.getUnspecifiedType().stripType().getName().matches("evp_%ctx_%st") - or - // In principal the above check should be sufficient, but in case of build mode none issues - // i.e., if a typedef cannot be resolved, - // or issues with properly stubbing test cases, we also explicitly check for the wrapping type defs - // i.e., patterns matching 'EVP_%_CTX' - exists(Type base | base = this or base = this.(DerivedType).getBaseType() | - base.getName().matches("EVP_%_CTX") - ) - } -} +module EncValToInitEncArgConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source.asExpr().getValue().toInt() in [0, 1] } -/** - * A pointer to a CtxType - */ -class CtxPointerExpr extends Expr { - CtxPointerExpr() { - this.getType() instanceof CtxType and - this.getType() instanceof PointerType + predicate isSink(DataFlow::Node sink) { + exists(EvpKeyOperationSubtypeInitializer initCall | + sink.asExpr() = initCall.getKeyOperationSubtypeArg() + ) } } -/** - * A call argument of type CtxPointerExpr. - */ -class CtxPointerArgument extends CtxPointerExpr { - CtxPointerArgument() { exists(Call c | c.getAnArgument() = this) } - - Call getCall() { result.getAnArgument() = this } -} +module EncValToInitEncArgFlow = DataFlow::Global; -/** - * The type of inputs and ouputs for an `OperationStep`. - */ -newtype TIOType = - CiphertextIO() or - // Used for typical CTX types, but not for OSSL_PARAM or OSSL_LIB_CTX - // For OSSL_PARAM and OSSL_LIB_CTX use of OsslParamIO and OsslLibContextIO - ContextIO() or - DigestIO() or - HashAlgorithmIO() or - IVorNonceIO() or - KeyIO() or - KeyOperationSubtypeIO() or - KeySizeIO() or - // Used for OSSL_LIB_CTX - OsslLibContextIO() or - // Used for OSSL_PARAM - OsslParamIO() or - MacIO() or - PaddingAlgorithmIO() or - // Plaintext also includes a message for digest, signature, verification, and mac generation - PlaintextIO() or - PrimaryAlgorithmIO() or - RandomSourceIO() or - SaltLengthIO() or - SeedIO() or - SignatureIO() - -private string ioTypeToString(TIOType t) { - t = CiphertextIO() and result = "CiphertextIO" - or - t = ContextIO() and result = "ContextIO" +private predicate argToAvc(Expr arg, Crypto::AlgorithmValueConsumer avc) { + // NOTE: because we trace through keys to their sources we must consider that the arg is an avc + // Consider this example: + // EVP_PKEY *pkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, key, key_len); + // The key may trace into a signing operation. Tracing through the key we will get the arg taking `EVP_PKEY_HMAC` + // as the algorithm value consumer (the input node of the AVC). The output node of this AVC + // is the call return of `EVP_PKEY_new_mac_key`. If we trace from the AVC result to + // the input argument this will not be possible (from the return to the call argument is a backwards flow). + // Therefore, we must consider the input node of the AVC as the argument. + // This should only occur due to tracing through keys to find configuration data. + avc.getInputNode().asExpr() = arg or - t = DigestIO() and result = "DigestIO" - or - t = HashAlgorithmIO() and result = "HashAlgorithmIO" - or - t = IVorNonceIO() and result = "IVorNonceIO" - or - t = KeyIO() and result = "KeyIO" - or - t = KeyOperationSubtypeIO() and result = "KeyOperationSubtypeIO" - or - t = KeySizeIO() and result = "KeySizeIO" - or - t = OsslLibContextIO() and result = "OsslLibContextIO" - or - t = OsslParamIO() and result = "OsslParamIO" - or - t = MacIO() and result = "MacIO" - or - t = PaddingAlgorithmIO() and result = "PaddingAlgorithmIO" - or - t = PlaintextIO() and result = "PlaintextIO" - or - t = PrimaryAlgorithmIO() and result = "PrimaryAlgorithmIO" - or - t = RandomSourceIO() and result = "RandomSourceIO" - or - t = SaltLengthIO() and result = "SaltLengthIO" - or - t = SeedIO() and result = "SeedIO" - or - t = SignatureIO() and result = "SignatureIO" -} - -class IOType extends TIOType { - string toString() { - result = ioTypeToString(this) - or - not exists(ioTypeToString(this)) and result = "UnknownIOType" - } + AvcToCallArgFlow::flow(avc.(OpenSslAlgorithmValueConsumer).getResultNode(), + DataFlow::exprNode(arg)) } -//TODO: add more initializers as needed /** - * The type of step in an `OperationStep`. - * - `ContextCreationStep`: the creation of a context from an algorithm or key. - * for example `EVP_MD_CTX_create(EVP_sha256())` or `EVP_PKEY_CTX_new(pkey, NULL)` - * - `InitializerStep`: the initialization of an operation through some sort of shared/accumulated context - * for example `EVP_DigestInit_ex(ctx, EVP_sha256(), NULL)` - * - `UpdateStep`: any operation that has and update/final paradigm, the update represents an intermediate step in an operation, - * such as `EVP_DigestUpdate(ctx, data, len)` - * - `FinalStep`: an ultimate operation step. This may be an explicit 'final' in an update/final paradigm, but not necessarily. - * Any operation that does nto operate through an update/final paradigm is considered a final step. + * A class for all OpenSsl operations. */ -newtype OperationStepType = - // Context creation captures cases where a context is created from an algorithm or key - // - ContextCreationStep() or - InitializerStep() or - UpdateStep() or - FinalStep() - -/** - * A step in configuring an operation. - * Captures creation of contexts from algorithms or keys, - * initalization of configurations on contexts, - * update operations (intermediate steps in an operation) - * and the operation itself. - * - * NOTE: if an operation is configured through a means other than a call - * e.g., a pattern like ctx->alg = EVP_sha256() - * then this class will need to be modified to account for that paradigm. - * Currently, this is not a known pattern in OpenSSL. - */ -abstract class OperationStep extends Call { - /** - * Gets the output nodes from the given operation step. - * These are the nodes that flow connecting this step - * to any other step in the operation should follow. - */ - abstract DataFlow::Node getOutput(IOType type); - - /** - * Gets any output node from the given operation step. - */ - final DataFlow::Node getAnOutput() { result = this.getOutput(_) } - +abstract class OpenSslOperation extends Crypto::OperationInstance instanceof Call { /** - * Gets the input nodes for the given operation step. + * Gets the argument that specifies the algorithm for the operation. + * This argument might not be immediately present at the specified operation. + * For example, it might be set in an initialization call. + * Modelers of the operation are resonsible for linking the operation to any + * initialization calls, and providing that argument as a returned value here. */ - abstract DataFlow::Node getInput(IOType type); - - /** - * Gets any input node for the given operation step. - */ - final DataFlow::Node getAnInput() { result = this.getInput(_) } - - /** - * Gets the type of the step, e.g., ContextCreationStep, InitializerStep, UpdateStep, FinalStep. - */ - abstract OperationStepType getStepType(); - - /** - * Holds if this operation step flows to the given `OperationStep` `sink`. - * If `sink` is `this`, then this holds true. - */ - predicate flowsToOperationStep(OperationStep sink) { - sink = this or - OperationStepFlow::flow(this.getAnOutput(), sink.getAnInput()) - } + abstract Expr getAlgorithmArg(); /** - * Holds if this operation step flows from the given `OperationStep` (`source`). - * If `source` is `this`, then this holds true. + * Algorithm is specified in initialization call or is implicitly established by the key. */ - predicate flowsFromOperationStep(OperationStep source) { - source = this or - OperationStepFlow::flow(source.getAnOutput(), this.getAnInput()) + override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { + argToAvc(this.getAlgorithmArg(), result) } +} +/** + * A Call to an initialization function for an operation. + * These are not operations in the sense of Crypto::OperationInstance, + * but they are used to initialize the context for the operation. + * There may be multiple initialization calls for the same operation. + * Intended for use with EvPOperation. + */ +abstract class EvpInitializer extends Call { /** - * Holds if this operation step sets a value of the given `IOType`. + * Gets the context argument or return that ties together initialization, updates and/or final calls. + * The context is the context coming into the initializer and is the output as well. + * This is assumed to be the same argument. */ - predicate setsValue(IOType type) { exists(this.getInput(type)) } + abstract CtxPointerSource getContext(); +} - /** - * Gets operation steps that flow to `this` and set the given `IOType`. - * This checks for the last initializers that flow to the `this`, - * i.e., if a value is set then re-set, the last set operation step is returned, - * not both. - * Note: Any 'update' that sets a value is not considered to be 'resetting' an input. - * I.e., there is a difference between changing a configuration before use and - * the operation allows for multiple inputs (like plaintext for cipher update calls before final). - */ - OperationStep getDominatingInitializersToStep(IOType type) { - result.flowsToOperationStep(this) and - result.setsValue(type) and - ( - // Do not consider a 'reset' to occur on updates - result.getStepType() = UpdateStep() - or - not exists(OperationStep reset | - result != reset and - reset.setsValue(type) and - reset.flowsToOperationStep(this) and - result.flowsToOperationStep(reset) - ) - ) - } +/** + * A call to initialize a key size. + */ +abstract class EvpKeySizeInitializer extends EvpInitializer { + abstract Expr getKeySizeArg(); +} - /** - * Gets all output of `type` that flow to `this` - * if `this` is a final step and the output is not from - * a separate final step. - */ - OperationStep getOutputStepFlowingToStep(IOType type) { - this.getStepType() = FinalStep() and - result.flowsToOperationStep(this) and - exists(result.getOutput(type)) and - (result = this or result.getStepType() != FinalStep()) - } +/** + * A call to initialize a key operation subtype. + */ +abstract class EvpKeyOperationSubtypeInitializer extends EvpInitializer { + abstract Expr getKeyOperationSubtypeArg(); - /** - * Gets an AVC for the primary algorithm for this operation. - * A primary algorithm is an AVC that flows to a ctx input directly or - * an AVC that flows to a primary algorithm input directly. - * See `AvcContextCreationStep` for details about resetting scenarios. - * Gets the first OperationStep an AVC flows to. If a context input, - * the AVC is considered primary. - * If a primary algorithm input, then get the last set primary algorithm - * operation step (dominating operation step, see `getDominatingInitializersToStep`). - */ - Crypto::AlgorithmValueConsumer getPrimaryAlgorithmValueConsumer() { - exists(DataFlow::Node src, DataFlow::Node sink, IOType t, OperationStep avcSucc | - (t = PrimaryAlgorithmIO() or t = ContextIO()) and - avcSucc.flowsToOperationStep(this) and - src.asExpr() = result and - sink = avcSucc.getInput(t) and - AvcToOperationStepFlow::flow(src, sink) and - ( - // Case 1: the avcSucc step is a dominating initialization step - t = PrimaryAlgorithmIO() and - avcSucc = this.getDominatingInitializersToStep(PrimaryAlgorithmIO()) - or - // Case 2: the succ is a context input (any avcSucc is valid) - t = ContextIO() - ) - ) + private Crypto::KeyOperationSubtype intToCipherOperationSubtype(int i) { + i = 0 and + result instanceof Crypto::TEncryptMode + or + i = 1 and result instanceof Crypto::TDecryptMode } - /** - * Gets the algorithm value consumer for an input to `this` operation step - * of the given `type`. - * TODO: generalize to use this for `getPrimaryAlgorithmValueConsumer` - */ - Crypto::AlgorithmValueConsumer getAlgorithmValueConsumerForInput(IOType type) { - exists(DataFlow::Node src, DataFlow::Node sink | - AvcToOperationStepFlow::flow(src, sink) and - src.asExpr() = result and - sink = this.getInput(type) + Crypto::KeyOperationSubtype getKeyOperationSubtype() { + exists(DataFlow::Node a, DataFlow::Node b | + EncValToInitEncArgFlow::flow(a, b) and + b.asExpr() = this.getKeyOperationSubtypeArg() and + result = this.intToCipherOperationSubtype(a.asExpr().getValue().toInt()) ) + or + // Infer the subtype from the initialization call, and ignore the argument + this.(Call).getTarget().getName().toLowerCase().matches("%encrypt%") and + result instanceof Crypto::TEncryptMode + or + this.(Call).getTarget().getName().toLowerCase().matches("%decrypt%") and + result instanceof Crypto::TDecryptMode } } /** - * An AVC is considered to output a 'context type', however, - * each AVC has it's own output types in practice. - * Some output algorithm containers (`EVP_get_cipherbyname`) - * some output explicit contexts (`EVP_PKEY_CTX_new_from_name`). - * The output of an AVC cannot be determined to be a primary algorithm (PrimaryAlgorithmIO), that depends - * on the use of the AVC output. - * The use is assumed to be of two forms: - * - The AVC output flows to a known input that accepts an algorithm - * e.g., `EVP_DigestInit(ctx, type)` the `type` parameter is known to be the primary algorithm. - * `EVP_SignInit(ctx, type)` the `type` parameter is known to be a digest algorithm for the signature. - * - The AVC output flows to a context initialization step - * e.g., `pkey_ctx = EVP_PKEY_CTX_new_from_name(libctx, name, propquery)` this is an AVC call, but the - * API says the output is a context. It is consumed typically by something like: - * `ctx = EVP_PKEY_keygen_init(pkey_ctx)`, but note I cannot consider the `pkey_ctx` parameter to always be a primary algorithm, - * a key gen can be inited by a prior key as well, e.g., `ctx = EVP_PKEY_CTX_new(pkey, NULL)`. - * Hence, these initialization steps take in a context that may have come from an AVC or something else, - * and therefore cannot be considered a primary algorithm. - * Assumption: The first operation step an AVC flows to will be of the above two forms. - * Resetting Algorithm Concerns and Assumptions: - * What if a user resets the algorithm through another AVC call? - * How would we detect that and only look at the 'dominating' (last set) AVC? - * From an AVC, always assess the first operation step it flows to. - * If the first step is to a context input, then we assume that reset is not possible in the same path. - * I.e., a user cannot reset the algorithm without starting an entirely new operation step chain. - * See the use patterns for `pkey_ctx = EVP_PKEY_CTX_new_from_name(...)` mentioned above. A user cannot - * reset the algorithm without calling a new `ctx = EVP_PKEY_keygen_init(pkey_ctx)`, - * i.e., subsequent flow follows the `ctx` output. - * If the first step is to any other input, then we use the `getDominatingInitializersToStep` - * to find the last AVC that set the algorithm for the operation step. - * Domination checks must occur at an operation step (e.g., at a final operation). - * This operation step does not find the dominating AVC. - * If a primary algorithm is explicitly set and and AVC is set through a context input, - * we will use both cases as primary inputs. + * An primary algorithm initializer initializes the primary algorithm for a given operation. + * For example, for a signing operation, the algorithm initializer may initialize algorithms + * like RSA. Other algorithsm may be initialized on an operation, as part of a larger + * operation/protocol. For example, hashing operations on signing operations; however, + * these are not the primary algorithm. Any other algorithms initialized on an operation + * require a specialized initializer, such as EvpHashAlgorithmInitializer. */ -class AvcContextCreationStep extends OperationStep instanceof OpenSslAlgorithmValueConsumer { - override DataFlow::Node getOutput(IOType type) { - type = ContextIO() and result = super.getResultNode() - } - - override DataFlow::Node getInput(IOType type) { none() } - - override OperationStepType getStepType() { result = ContextCreationStep() } -} - -abstract private class CtxPassThroughCall extends Call { - abstract DataFlow::Node getNode1(); +abstract class EvpPrimaryAlgorithmInitializer extends EvpInitializer { + abstract Expr getAlgorithmArg(); - abstract DataFlow::Node getNode2(); + Crypto::AlgorithmValueConsumer getAlgorithmValueConsumer() { + argToAvc(this.getAlgorithmArg(), result) + } } /** - * A call whose target contains 'free' or 'reset' and has an argument of type - * CtxPointerArgument. + * A call to initialize a key. */ -private class CtxClearCall extends Call { - CtxClearCall() { - this.getTarget().getName().toLowerCase().matches(["%free%", "%reset%"]) and - this.getAnArgument() instanceof CtxPointerArgument - } +abstract class EvpKeyInitializer extends EvpInitializer { + abstract Expr getKeyArg(); } /** - * A call whose target contains 'copy' and has an argument of type - * CtxPointerArgument. + * A key initializer may initialize the algorithm and the key size through + * the key. Extend any instance of key initializer provide initialization + * of the algorithm and key size from the key. */ -private class CtxCopyOutArgCall extends CtxPassThroughCall { - DataFlow::Node n1; - DataFlow::Node n2; - - CtxCopyOutArgCall() { - this.getTarget().getName().toLowerCase().matches("%copy%") and - n1.asExpr() = this.getAnArgument() and - n1.getType() instanceof CtxType and - n2.asDefiningArgument() = this.getAnArgument() and - n2.getType() instanceof CtxType and - n1.asDefiningArgument() != n2.asExpr() +class EvpInitializerThroughKey extends EvpPrimaryAlgorithmInitializer, EvpKeySizeInitializer, + EvpKeyInitializer +{ + Expr arg; + CtxPointerSource context; + + EvpInitializerThroughKey() { + exists(EvpKeyInitializer keyInit | + arg = keyInit.getKeyArg() and this = keyInit and context = keyInit.getContext() + ) } - override DataFlow::Node getNode1() { result = n1 } - - override DataFlow::Node getNode2() { result = n2 } -} - -/** - * A call whose target contains 'dup' and has an argument of type - * CtxPointerArgument. - */ -private class CtxCopyReturnCall extends CtxPassThroughCall, CtxPointerExpr { - DataFlow::Node n1; + override CtxPointerSource getContext() { result = context } - CtxCopyReturnCall() { - this.getTarget().getName().toLowerCase().matches("%dup%") and - n1.asExpr() = this.getAnArgument() and - n1.getType() instanceof CtxType + override Expr getAlgorithmArg() { + result = + getSourceKeyCreationInstanceFromArg(this.getKeyArg()).(OpenSslOperation).getAlgorithmArg() } - override DataFlow::Node getNode1() { result = n1 } + override Expr getKeySizeArg() { + result = getSourceKeyCreationInstanceFromArg(this.getKeyArg()).getKeySizeConsumer().asExpr() + } - override DataFlow::Node getNode2() { result.asExpr() = this } + override Expr getKeyArg() { result = arg } } -// TODO: is this still needed? /** - * A call to `EVP_PKEY_paramgen` acts as a kind of pass through. - * It's output pkey is eventually used in a new operation generating - * a fresh context pointer (e.g., `EVP_PKEY_CTX_new`). - * It is easier to model this as a pass through - * than to model the flow from the paramgen to the new key generation. + * A default initializer for any key operation that accepts a key as input. + * A key initializer allows for a mechanic to go backwards to the key creation operation + * and find the algorithm and key size. + * If a user were to stipualte a key consumer for an operation but fail to indicate it as an + * initializer, automatic tracing to the creation operation would not occur. + * USERS SHOULD NOT NEED TO USE OR EXTEND THIS CLASS DIRECTLY. + * + * TODO: re-evaluate this approach */ -private class CtxParamGenCall extends CtxPassThroughCall { - DataFlow::Node n1; - DataFlow::Node n2; - - CtxParamGenCall() { - this.getTarget().getName() = "EVP_PKEY_paramgen" and - n1.asExpr() = this.getArgument(0) and - ( - n2.asExpr() = this.getArgument(1) - or - n2.asDefiningArgument() = this.getArgument(1) +class DefaultKeyInitializer extends EvpKeyInitializer instanceof Crypto::KeyOperationInstance { + Expr arg; + + DefaultKeyInitializer() { + exists(Call c | + c.getAChild*() = arg and + arg = this.(Crypto::KeyOperationInstance).getKeyConsumer().asExpr() and + c = this ) } - override DataFlow::Node getNode1() { result = n1 } + override Expr getKeyArg() { result = arg } - override DataFlow::Node getNode2() { result = n2 } + override CtxPointerSource getContext() { result = this.(EvpOperation).getContext() } +} + +abstract class EvpIVInitializer extends EvpInitializer { + abstract Expr getIVArg(); } -//TODO: I am not sure CallArgToCtxRet is needed anymore /** - * If the current node is an argument to a function - * that returns a pointer type, immediately flow through. - * NOTE: this passthrough is required if we allow - * intermediate steps to go into variables that are not a CTX type. - * See for example `CtxParamGenCall`. + * A call to initialize padding. */ -private class CallArgToCtxRet extends CtxPassThroughCall, CtxPointerExpr { - DataFlow::Node n1; - DataFlow::Node n2; - - CallArgToCtxRet() { - this.getAnArgument() = n1.asExpr() and - n2.asExpr() = this - } - - override DataFlow::Node getNode1() { result = n1 } +abstract class EvpPaddingInitializer extends EvpInitializer { + /** + * Gets the padding mode argument. + * e.g., `EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING)` argument 1 (0-based) + */ + abstract Expr getPaddingArg(); +} - override DataFlow::Node getNode2() { result = n2 } +/** + * A call to initialize a salt length. + */ +abstract class EvpSaltLengthInitializer extends EvpInitializer { + /** + * Gets the salt length argument. + * e.g., `EVP_PKEY_CTX_set_scrypt_salt_len(ctx, 16)` argument 1 (0-based) + */ + abstract Expr getSaltLengthArg(); } /** - * A flow configuration from any non-final `OperationStep` to any other `OperationStep`. + * A call to initialize a hash algorithm. */ -module OperationStepFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(OperationStep s | - s.getAnOutput() = source or - s.getAnInput() = source - ) - } +abstract class EvpHashAlgorithmInitializer extends EvpInitializer { + abstract Expr getHashAlgorithmArg(); - predicate isSink(DataFlow::Node sink) { - exists(OperationStep s | - s.getAnInput() = sink or - s.getAnOutput() = sink - ) + Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { + argToAvc(this.getHashAlgorithmArg(), result) } +} - predicate isBarrier(DataFlow::Node node) { - exists(CtxClearCall c | c.getAnArgument() = node.asExpr()) - } +/** + * A Call to an "update" function. + * These are not operations in the sense of Crypto::OperationInstance, + * but produce intermediate results for the operation that are later finalized + * (see EvpFinal). + * Intended for use with EvPOperation. + */ +abstract class EvpUpdate extends Call { + /** + * Gets the context argument that ties together initialization, updates and/or final calls. + */ + abstract CtxPointerSource getContext(); - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(CtxPassThroughCall c | c.getNode1() = node1 and c.getNode2() = node2) - or - // Flow out through all outputs from an operation step if more than one output - // is defined. - exists(OperationStep s | s.getAnInput() = node1 and s.getAnOutput() = node2) - // TODO: consideration for additional alises defined as follows: - // if an output from an operation step itself flows from the output of another operation step - // then the source of that flow's outputs (all of them) are potential aliases - } -} + /** + * Update calls always have some input data like plaintext or message digest. + */ + abstract Expr getInputArg(); -module OperationStepFlow = DataFlow::Global; + /** + * Update calls sometimes have some output data like a plaintext. + */ + Expr getOutputArg() { none() } +} /** - * A flow from AVC to the first `OperationStep` the AVC reaches as an input. + * The base class for all operations of the EVP API. + * This captures one-shot APIs (with and without an initilizer call) and final calls. + * Provides some default methods for Crypto::KeyOperationInstance class. */ -module AvcToOperationStepFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { - exists(AvcContextCreationStep s | s.getAnOutput() = source) - } +abstract class EvpOperation extends OpenSslOperation { + /** + * Gets the context argument that ties together initialization, updates and/or final calls. + */ + abstract CtxPointerSource getContext(); - predicate isSink(DataFlow::Node sink) { exists(OperationStep s | s.getAnInput() = sink) } + /** + * Some input data like plaintext or message digest. + * Either argument provided direcly in the call or all arguments that were provided in update calls. + */ + abstract Expr getInputArg(); - predicate isBarrier(DataFlow::Node node) { - exists(CtxClearCall c | c.getAnArgument() = node.asExpr()) - } + /** + * Some output data like ciphertext or signature. + */ + abstract Expr getOutputArg(); /** - * Only get the first operation step encountered. + * Finds the initialization call, may be none. */ - predicate isBarrierOut(DataFlow::Node node) { isSink(node) } + EvpInitializer getInitCall() { ctxSrcToSrcFlow(result.getContext(), this.getContext()) } - predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(CtxPassThroughCall c | c.getNode1() = node1 and c.getNode2() = node2) + Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { + result = DataFlow::exprNode(this.getOutputArg()) } -} - -module AvcToOperationStepFlow = DataFlow::Global; - -module EncValToInitEncArgConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node source) { source.asExpr().getValue().toInt() in [0, 1] } - predicate isSink(DataFlow::Node sink) { - exists(OperationStep s | sink = s.getInput(KeyOperationSubtypeIO())) + /** + * Input consumer is the input argument of the call. + */ + Crypto::ConsumerInputDataFlowNode getInputConsumer() { + result = DataFlow::exprNode(this.getInputArg()) } } -module EncValToInitEncArgFlow = DataFlow::Global; +/** + * An EVP final call, + * which is typicall used in an update/final pattern. + * Final operations are typically identified by "final" in the name, + * e.g., "EVP_DigestFinal", "EVP_EncryptFinal", etc. + * however, this is not a strict rule. + */ +abstract class EvpFinal extends EvpOperation { + /** + * All update calls that were executed before this final call. + */ + EvpUpdate getUpdateCalls() { ctxSrcToSrcFlow(result.getContext(), this.getContext()) } -private Crypto::KeyOperationSubtype intToCipherOperationSubtype(int i) { - i = 0 and - result instanceof Crypto::TEncryptMode - or - i = 1 and result instanceof Crypto::TDecryptMode -} + /** + * Gets the input data provided to all update calls. + * If more input data was provided in the final call, override the method. + */ + override Expr getInputArg() { result = this.getUpdateCalls().getInputArg() } -Crypto::KeyOperationSubtype resolveKeyOperationSubTypeOperationStep(OperationStep s) { - exists(DataFlow::Node src | - EncValToInitEncArgFlow::flow(src, s.getInput(KeyOperationSubtypeIO())) and - result = intToCipherOperationSubtype(src.asExpr().getValue().toInt()) - ) + /** + * Gets the output data provided to all update calls. + * If more output data was provided in the final call, override the method. + */ + override Expr getOutputArg() { result = this.getUpdateCalls().getOutputArg() } } diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll index be65ef3e1c05..78b8f8ce080d 100644 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll +++ b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/OpenSSLOperations.qll @@ -1,5 +1,6 @@ import OpenSSLOperationBase -import CipherOperation -import HashOperation -import SignatureOperation -import KeyGenOperation +import EVPCipherOperation +import EVPHashOperation +import ECKeyGenOperation +import EVPSignatureOperation +import EVPKeyGenOperation diff --git a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll b/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll deleted file mode 100644 index b9b498ee8df3..000000000000 --- a/cpp/ql/lib/experimental/quantum/OpenSSL/Operations/SignatureOperation.qll +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Provides classes for modeling OpenSSL's EVP signature operations - */ - -private import experimental.quantum.Language -private import experimental.quantum.OpenSSL.AvcFlow -private import experimental.quantum.OpenSSL.AlgorithmValueConsumers.OpenSSLAlgorithmValueConsumers -private import experimental.quantum.OpenSSL.Operations.OpenSSLOperations - -// TODO: verification functions -/** - * A base class for final signature operations. - */ -abstract class EvpSignatureFinalOperation extends OperationStep { - override OperationStepType getStepType() { result = FinalStep() } -} - -/** - * A call to EVP_DigestSignInit or EVP_DigestSignInit_ex. - */ -class EvpSignatureDigestInitializer extends OperationStep { - EvpSignatureDigestInitializer() { - this.getTarget().getName() in ["EVP_DigestSignInit_ex", "EVP_DigestSignInit"] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(3) and - type = OsslLibContextIO() - or - result.asExpr() = this.getArgument(2) and type = HashAlgorithmIO() - or - this.getTarget().getName() = "EVP_DigestSignInit" and - result.asExpr() = this.getArgument(4) and - type = KeyIO() - or - this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(5) and - type = KeyIO() - or - this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(6) and - type = OsslParamIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - // EVP_PKEY_CTX - result.asExpr() = this.getArgument(1) and type = ContextIO() - or - this.getTarget().getName() = "EVP_DigestSignInit_ex" and - result.asExpr() = this.getArgument(6) and - type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -/** - * A call to EVP_SignInit or EVP_SignInit_ex. - */ -class EvpSignInit extends OperationStep { - EvpSignInit() { this.getTarget().getName() in ["EVP_SignInit", "EVP_SignInit_ex"] } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = HashAlgorithmIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -/** - * A call to: - * - EVP_PKEY_sign_init_ex - * - EVP_PKEY_sign_init_ex2 - * - EVP_PKEY_sign_init - * - EVP_PKEY_sign_message_init - */ -class EvpPkeySignInit extends OperationStep { - EvpPkeySignInit() { - this.getTarget().getName() in [ - "EVP_PKEY_sign_init_ex", "EVP_PKEY_sign_init_ex2", "EVP_PKEY_sign_init", - "EVP_PKEY_sign_message_init" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - this.getTarget().getName() in ["EVP_PKEY_sign_init_ex2", "EVP_PKEY_sign_message_init"] and - result.asExpr() = this.getArgument(1) and - type = PrimaryAlgorithmIO() - or - this.getTarget().getName() = "EVP_PKEY_sign_init_ex" and - result.asExpr() = this.getArgument(1) and - type = OsslParamIO() - or - // Argument 2 (0 based) only exists for EVP_PKEY_sign_init_ex2 and EVP_PKEY_sign_message_init - result.asExpr() = this.getArgument(2) and type = OsslParamIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = InitializerStep() } -} - -/** - * A call to EVP_DIgestSignUpdate, EVP_SignUpdate or EVP_PKEY_sign_message_update. - */ -class EvpSignatureUpdateCall extends OperationStep { - EvpSignatureUpdateCall() { - this.getTarget().getName() in [ - "EVP_DigestSignUpdate", "EVP_SignUpdate", "EVP_PKEY_sign_message_update" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override OperationStepType getStepType() { result = UpdateStep() } -} - -/** - * A call to EVP_SignFinal or EVP_SignFinal_ex. - */ -class EvpSignFinal extends EvpSignatureFinalOperation { - EvpSignFinal() { this.getTarget().getName() in ["EVP_SignFinal_ex", "EVP_SignFinal"] } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(3) and type = KeyIO() - or - // params above 3 (0-based) only exist for EVP_SignFinal_ex - result.asExpr() = this.getArgument(4) and - type = OsslLibContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = SignatureIO() - } -} - -/** - * A call to EVP_DigestSign or EVP_PKEY_sign. - */ -class EvpDigestSign extends EvpSignatureFinalOperation { - EvpDigestSign() { this.getTarget().getName() in ["EVP_DigestSign", "EVP_PKEY_sign"] } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(3) and type = PlaintextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = SignatureIO() - } -} - -/** - * A call to EVP_DigestSignFinal or EVP_PKEY_sign_message_final. - */ -class EvpDigestAndPkeySignFinal extends EvpSignatureFinalOperation { - EvpDigestAndPkeySignFinal() { - this.getTarget().getName() in [ - "EVP_DigestSignFinal", - "EVP_PKEY_sign_message_final" - ] - } - - override DataFlow::Node getInput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - } - - override DataFlow::Node getOutput(IOType type) { - result.asExpr() = this.getArgument(0) and type = ContextIO() - or - result.asExpr() = this.getArgument(1) and type = SignatureIO() - } - - override OperationStepType getStepType() { result = FinalStep() } -} - -/** - * An EVP signature operation instance. - */ -class EvpSignatureOperationInstance extends Crypto::SignatureOperationInstance instanceof EvpSignatureFinalOperation -{ - override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - super.getPrimaryAlgorithmValueConsumer() = result - } - - /** - * Signing, verification or unknown. - */ - override Crypto::KeyOperationSubtype getKeyOperationSubtype() { - // TODO: if this KeyOperationSubtype does not match initialization call's KeyOperationSubtype then we found a bug - if super.getTarget().getName().toLowerCase().matches("%sign%") - then result instanceof Crypto::TSignMode - else - if super.getTarget().getName().toLowerCase().matches("%verify%") - then result instanceof Crypto::TVerifyMode - else result instanceof Crypto::TUnknownKeyOperationMode - } - - override Crypto::ConsumerInputDataFlowNode getNonceConsumer() { - // TODO: some signing operations may have explicit nonce generators - none() - } - - /** - * Keys provided in the initialization call or in a context are found by this method. - * Keys in explicit arguments are found by overridden methods in extending classes. - */ - override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { - super.getDominatingInitializersToStep(KeyIO()).getInput(KeyIO()) = result - } - - override Crypto::ArtifactOutputDataFlowNode getOutputArtifact() { - super.getOutputStepFlowingToStep(SignatureIO()).getOutput(SignatureIO()) = result - } - - override Crypto::ConsumerInputDataFlowNode getInputConsumer() { - super.getDominatingInitializersToStep(PlaintextIO()).getInput(PlaintextIO()) = result - } - - /** - * TODO: only signing operations for now, change when verificaiton is added - */ - override Crypto::ConsumerInputDataFlowNode getSignatureConsumer() { none() } - - override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { - super - .getDominatingInitializersToStep(HashAlgorithmIO()) - .getAlgorithmValueConsumerForInput(HashAlgorithmIO()) = result - } -} diff --git a/cpp/ql/lib/ext/Oracle.oci.model.yml b/cpp/ql/lib/ext/Oracle.oci.model.yml deleted file mode 100644 index eb172fcdb59a..000000000000 --- a/cpp/ql/lib/ext/Oracle.oci.model.yml +++ /dev/null @@ -1,8 +0,0 @@ -# partial model of the Oracle Call Interface (OCI) library -extensions: - - addsTo: - pack: codeql/cpp-all - extensible: sinkModel - data: # namespace, type, subtypes, name, signature, ext, input, kind, provenance - - ["", "", False, "OCIStmtPrepare", "", "", "Argument[*2]", "sql-injection", "manual"] - - ["", "", False, "OCIStmtPrepare2", "", "", "Argument[*3]", "sql-injection", "manual"] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index d5a621820818..7dc5feb8d2f9 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 5.2.1-dev +version: 5.2.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index a4d0cff2c379..cb3b00b64ade 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -901,7 +901,7 @@ class BuiltInFunction extends Function { /** Gets a dummy location for the built-in function. */ override Location getLocation() { suppressUnusedThis(this) and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } } diff --git a/cpp/ql/lib/semmle/code/cpp/Location.qll b/cpp/ql/lib/semmle/code/cpp/Location.qll index 8b0a78f91aa8..c7579f5710a7 100644 --- a/cpp/ql/lib/semmle/code/cpp/Location.qll +++ b/cpp/ql/lib/semmle/code/cpp/Location.qll @@ -8,7 +8,7 @@ import semmle.code.cpp.File /** * A location of a C/C++ artifact. */ -class Location extends @location_default { +class Location extends @location { /** Gets the container corresponding to this location. */ pragma[nomagic] Container getContainer() { this.fullLocationInfo(result, _, _, _, _) } @@ -53,7 +53,9 @@ class Location extends @location_default { predicate fullLocationInfo( Container container, int startline, int startcolumn, int endline, int endcolumn ) { - locations_default(this, unresolveElement(container), startline, startcolumn, endline, endcolumn) + locations_default(this, unresolveElement(container), startline, startcolumn, endline, endcolumn) or + locations_expr(this, unresolveElement(container), startline, startcolumn, endline, endcolumn) or + locations_stmt(this, unresolveElement(container), startline, startcolumn, endline, endcolumn) } /** @@ -144,32 +146,30 @@ class Locatable extends Element { } * expressions, one for statements and one for other program elements. */ class UnknownLocation extends Location { - UnknownLocation() { - this.getFile().getAbsolutePath() = "" and locations_default(this, _, 0, 0, 0, 0) - } + UnknownLocation() { this.getFile().getAbsolutePath() = "" } } /** * A dummy location which is used when something doesn't have a location in * the source code but needs to have a `Location` associated with it. - * - * DEPRECATED: use `UnknownLocation` */ -deprecated class UnknownDefaultLocation extends UnknownLocation { } +class UnknownDefaultLocation extends UnknownLocation { + UnknownDefaultLocation() { locations_default(this, _, 0, 0, 0, 0) } +} /** * A dummy location which is used when an expression doesn't have a * location in the source code but needs to have a `Location` associated * with it. - * - * DEPRECATED: use `UnknownLocation` */ -deprecated class UnknownExprLocation extends UnknownLocation { } +class UnknownExprLocation extends UnknownLocation { + UnknownExprLocation() { locations_expr(this, _, 0, 0, 0, 0) } +} /** * A dummy location which is used when a statement doesn't have a location * in the source code but needs to have a `Location` associated with it. - * - * DEPRECATED: use `UnknownLocation` */ -deprecated class UnknownStmtLocation extends UnknownLocation { } +class UnknownStmtLocation extends UnknownLocation { + UnknownStmtLocation() { locations_stmt(this, _, 0, 0, 0, 0) } +} diff --git a/cpp/ql/lib/semmle/code/cpp/Macro.qll b/cpp/ql/lib/semmle/code/cpp/Macro.qll index cbffc90d17c1..bd916d4bc4e8 100644 --- a/cpp/ql/lib/semmle/code/cpp/Macro.qll +++ b/cpp/ql/lib/semmle/code/cpp/Macro.qll @@ -154,9 +154,8 @@ class MacroInvocation extends MacroAccess { * well. */ Locatable getAnAffectedElement() { - inmacroexpansion(unresolveElement(result), underlyingElement(this)) - or - macrolocationbind(underlyingElement(this), result.getLocation()) and this != result + inmacroexpansion(unresolveElement(result), underlyingElement(this)) or + macrolocationbind(underlyingElement(this), result.getLocation()) } /** @@ -260,8 +259,7 @@ predicate inMacroExpansion(Locatable element) { inmacroexpansion(unresolveElement(element), _) or macroLocation(element.getLocation()) and - not topLevelMacroAccess(element) and - not element.getLocation() instanceof UnknownLocation + not topLevelMacroAccess(element) } /** diff --git a/cpp/ql/lib/semmle/code/cpp/Namespace.qll b/cpp/ql/lib/semmle/code/cpp/Namespace.qll index b545f9381974..b63beef3f4a0 100644 --- a/cpp/ql/lib/semmle/code/cpp/Namespace.qll +++ b/cpp/ql/lib/semmle/code/cpp/Namespace.qll @@ -40,7 +40,7 @@ class Namespace extends NameQualifyingElement, @namespace { override Location getLocation() { if strictcount(this.getADeclarationEntry()) = 1 then result = this.getADeclarationEntry().getLocation() - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } /** Gets the simple name of this namespace. */ diff --git a/cpp/ql/lib/semmle/code/cpp/Specifier.qll b/cpp/ql/lib/semmle/code/cpp/Specifier.qll index f7af9501fb26..28ba21956561 100644 --- a/cpp/ql/lib/semmle/code/cpp/Specifier.qll +++ b/cpp/ql/lib/semmle/code/cpp/Specifier.qll @@ -13,7 +13,7 @@ class Specifier extends Element, @specifier { /** Gets a dummy location for the specifier. */ override Location getLocation() { exists(this) and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } override string getAPrimaryQlClass() { result = "Specifier" } diff --git a/cpp/ql/lib/semmle/code/cpp/TemplateParameter.qll b/cpp/ql/lib/semmle/code/cpp/TemplateParameter.qll index 6ece9cb82a46..e4efb4e4636b 100644 --- a/cpp/ql/lib/semmle/code/cpp/TemplateParameter.qll +++ b/cpp/ql/lib/semmle/code/cpp/TemplateParameter.qll @@ -105,7 +105,7 @@ class AutoType extends TypeTemplateParameter { override string getAPrimaryQlClass() { result = "AutoType" } - override Location getLocation() { result instanceof UnknownLocation } + override Location getLocation() { result instanceof UnknownDefaultLocation } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/Type.qll b/cpp/ql/lib/semmle/code/cpp/Type.qll index 35b56882d7be..f866d9f77e22 100644 --- a/cpp/ql/lib/semmle/code/cpp/Type.qll +++ b/cpp/ql/lib/semmle/code/cpp/Type.qll @@ -290,7 +290,7 @@ class Type extends Locatable, @type { */ Type stripType() { result = this } - override Location getLocation() { result instanceof UnknownLocation } + override Location getLocation() { result instanceof UnknownDefaultLocation } } /** @@ -858,15 +858,6 @@ private predicate floatingPointTypeMapping( or // __mfp8 kind = 62 and base = 2 and domain = TRealDomain() and realKind = 62 and extended = false - or - // _Complex __fp16 - kind = 64 and base = 2 and domain = TComplexDomain() and realKind = 54 and extended = false - or - // _Complex __bf16 - kind = 65 and base = 2 and domain = TComplexDomain() and realKind = 55 and extended = false - or - // _Complex std::float16_t - kind = 66 and base = 2 and domain = TComplexDomain() and realKind = 56 and extended = false } /** diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll index b279c4965f33..456768081a11 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/ExternalFlow.qll @@ -229,49 +229,6 @@ private predicate summaryModel0( ) } -/** - * Holds if the given extension tuple `madId` should pretty-print as `model`. - * - * This predicate should only be used in tests. - */ -predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string output, string kind, string provenance - | - Extensions::sourceModel(namespace, type, subtypes, name, signature, ext, output, kind, - provenance, madId) - | - model = - "Source: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " - + ext + "; " + output + "; " + kind + "; " + provenance - ) - or - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string kind, string provenance - | - Extensions::sinkModel(namespace, type, subtypes, name, signature, ext, input, kind, provenance, - madId) - | - model = - "Sink: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + "; " + - ext + "; " + input + "; " + kind + "; " + provenance - ) - or - exists( - string namespace, string type, boolean subtypes, string name, string signature, string ext, - string input, string output, string kind, string provenance - | - Extensions::summaryModel(namespace, type, subtypes, name, signature, ext, input, output, kind, - provenance, madId) - | - model = - "Summary: " + namespace + "; " + type + "; " + subtypes + "; " + name + "; " + signature + - "; " + ext + "; " + input + "; " + output + "; " + kind + "; " + provenance - ) -} - /** * Holds if `input` is `input0`, but with all occurrences of `@` replaced * by `n` repetitions of `*` (and similarly for `output` and `output0`). diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Call.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Call.qll index 24ae703697cf..03c3e8a33714 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Call.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Call.qll @@ -504,8 +504,6 @@ class VacuousDestructorCall extends Expr, @vacuous_destructor_call { */ class ConstructorInit extends Expr, @ctorinit { override string getAPrimaryQlClass() { result = "ConstructorInit" } - - override string toString() { result = "constructor init" } } /** @@ -514,8 +512,6 @@ class ConstructorInit extends Expr, @ctorinit { */ class ConstructorBaseInit extends ConstructorInit, ConstructorCall { override string getAPrimaryQlClass() { result = "ConstructorBaseInit" } - - override string toString() { result = "call to " + this.getTarget().getName() } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll index 60e2635f338a..2b9fb2649d51 100644 --- a/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll +++ b/cpp/ql/lib/semmle/code/cpp/exprs/Expr.qll @@ -91,13 +91,13 @@ class Expr extends StmtParent, @expr { */ private Location getExprLocationOverride() { // Base case: the parent has a better location than `this`. - this.getDbLocation() instanceof UnknownLocation and + this.getDbLocation() instanceof UnknownExprLocation and result = this.getParent().(Expr).getDbLocation() and not result instanceof UnknownLocation or // Recursive case: the parent has a location override that's better than // what `this` has. - this.getDbLocation() instanceof UnknownLocation and + this.getDbLocation() instanceof UnknownExprLocation and result = this.getParent().(Expr).getExprLocationOverride() and not result instanceof UnknownLocation } 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 d776985720af..39cc58d54b0e 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 @@ -182,7 +182,7 @@ abstract class InstructionNode0 extends Node0Impl { override Location getLocationImpl() { if exists(instr.getAst().getLocation()) then result = instr.getAst().getLocation() - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } final override predicate isGLValue() { exists(getInstructionType(instr, true)) } @@ -227,7 +227,7 @@ abstract class OperandNode0 extends Node0Impl { override Location getLocationImpl() { if exists(op.getDef().getAst().getLocation()) then result = op.getDef().getAst().getLocation() - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } final override predicate isGLValue() { exists(getOperandType(op, true)) } 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 c72614ac5c32..ab6a9da6d85d 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 @@ -847,7 +847,7 @@ class BodyLessParameterNodeImpl extends Node, TBodyLessParameterNodeImpl { result = unique( | | p.getLocation()) or count(p.getLocation()) != 1 and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } final override string toStringImpl() { @@ -1115,7 +1115,7 @@ private module RawIndirectNodes { final override Location getLocationImpl() { if exists(this.getOperand().getLocation()) then result = this.getOperand().getLocation() - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } override string toStringImpl() { @@ -1161,7 +1161,7 @@ private module RawIndirectNodes { final override Location getLocationImpl() { if exists(this.getInstruction().getLocation()) then result = this.getInstruction().getLocation() - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } override string toStringImpl() { @@ -1257,7 +1257,7 @@ class FinalParameterNode extends Node, TFinalParameterNode { result = unique( | | p.getLocation()) or not exists(unique( | | p.getLocation())) and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } override string toStringImpl() { result = stars(this) + p.toString() } @@ -1629,7 +1629,7 @@ class VariableNode extends Node, TGlobalLikeVariableNode { result = unique( | | v.getLocation()) or not exists(unique( | | v.getLocation())) and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } override string toStringImpl() { result = stars(this) + v.toString() } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll index e804957190a0..354b453afdb7 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll @@ -16,7 +16,6 @@ import semmle.code.cpp.dataflow.new.DataFlow private import DataFlowPrivate private import DataFlowUtil private import DataFlowImplCommon -private import DataFlowImplSpecific private import codeql.util.Unit /** @@ -96,7 +95,10 @@ module ProductFlow { * This can be overridden to a smaller value to improve performance (a * value of 0 disables field flow), or a larger value to get more results. */ - default int fieldFlowBranchLimit1() { result = CppDataFlow::defaultFieldFlowBranchLimit() } + default int fieldFlowBranchLimit1() { + // NOTE: This should be synchronized with the default value in the shared dataflow library + result = 2 + } /** * Gets the virtual dispatch branching limit when calculating field flow in the second @@ -105,7 +107,10 @@ module ProductFlow { * This can be overridden to a smaller value to improve performance (a * value of 0 disables field flow), or a larger value to get more results. */ - default int fieldFlowBranchLimit2() { result = CppDataFlow::defaultFieldFlowBranchLimit() } + default int fieldFlowBranchLimit2() { + // NOTE: This should be synchronized with the default value in the shared dataflow library + result = 2 + } } /** @@ -299,7 +304,10 @@ module ProductFlow { * This can be overridden to a smaller value to improve performance (a * value of 0 disables field flow), or a larger value to get more results. */ - default int fieldFlowBranchLimit1() { result = CppDataFlow::defaultFieldFlowBranchLimit() } + default int fieldFlowBranchLimit1() { + // NOTE: This should be synchronized with the default value in the shared dataflow library + result = 2 + } /** * Gets the virtual dispatch branching limit when calculating field flow in the second @@ -308,7 +316,10 @@ module ProductFlow { * This can be overridden to a smaller value to improve performance (a * value of 0 disables field flow), or a larger value to get more results. */ - default int fieldFlowBranchLimit2() { result = CppDataFlow::defaultFieldFlowBranchLimit() } + default int fieldFlowBranchLimit2() { + // NOTE: This should be synchronized with the default value in the shared dataflow library + result = 2 + } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 863825b375e3..7799081eae34 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -516,7 +516,7 @@ class FinalParameterUse extends UseImpl, TFinalParameterUse { result = unique( | | p.getLocation()) or not exists(unique( | | p.getLocation())) and - result instanceof UnknownLocation + result instanceof UnknownDefaultLocation } override BaseIRVariable getBaseSourceVariable() { result.getIRVariable().getAst() = p } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll index c29d743dadbf..67a6965ae9bb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/IRConsistency.qll @@ -45,7 +45,7 @@ module InstructionConsistency { private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { override string toString() { result = "" } - override Language::Location getLocation() { result instanceof Language::UnknownLocation } + override Language::Location getLocation() { result instanceof Language::UnknownDefaultLocation } } private OptionalIRFunction getInstructionIRFunction(Instruction instr) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll index b436bc8ccf11..279b43a1ca8b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/gvn/ValueNumbering.qll @@ -26,7 +26,7 @@ class ValueNumber extends TValueNumber { l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), l.getEndColumn() ) - else result instanceof Language::UnknownLocation + else result instanceof Language::UnknownDefaultLocation } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll index c29d743dadbf..67a6965ae9bb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/IRConsistency.qll @@ -45,7 +45,7 @@ module InstructionConsistency { private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { override string toString() { result = "" } - override Language::Location getLocation() { result instanceof Language::UnknownLocation } + override Language::Location getLocation() { result instanceof Language::UnknownDefaultLocation } } private OptionalIRFunction getInstructionIRFunction(Instruction instr) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll index b436bc8ccf11..279b43a1ca8b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/gvn/ValueNumbering.qll @@ -26,7 +26,7 @@ class ValueNumber extends TValueNumber { l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), l.getEndColumn() ) - else result instanceof Language::UnknownLocation + else result instanceof Language::UnknownDefaultLocation } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll index c29d743dadbf..67a6965ae9bb 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/IRConsistency.qll @@ -45,7 +45,7 @@ module InstructionConsistency { private class MissingIRFunction extends OptionalIRFunction, TMissingIRFunction { override string toString() { result = "" } - override Language::Location getLocation() { result instanceof Language::UnknownLocation } + override Language::Location getLocation() { result instanceof Language::UnknownDefaultLocation } } private OptionalIRFunction getInstructionIRFunction(Instruction instr) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll index b436bc8ccf11..279b43a1ca8b 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/unaliased_ssa/gvn/ValueNumbering.qll @@ -26,7 +26,7 @@ class ValueNumber extends TValueNumber { l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), l.getEndColumn() ) - else result instanceof Language::UnknownLocation + else result instanceof Language::UnknownDefaultLocation } /** diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll index 4a40c90a1dd9..2dd51d391512 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/ASTValueNumbering.qll @@ -76,7 +76,7 @@ class GVN extends TValueNumber { l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(), l.getEndColumn() ) - else result instanceof UnknownLocation + else result instanceof UnknownDefaultLocation } final string getKind() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRCppLanguage.qll b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRCppLanguage.qll index a0e74f785e5e..28bbd40f8bf5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/internal/IRCppLanguage.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/internal/IRCppLanguage.qll @@ -22,6 +22,8 @@ class Location = Cpp::Location; class UnknownLocation = Cpp::UnknownLocation; +class UnknownDefaultLocation = Cpp::UnknownDefaultLocation; + class File = Cpp::File; class AST = Cpp::Locatable; diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/RangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/RangeAnalysis.qll index 845a71b2a502..6bd7615d37b7 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/RangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/RangeAnalysis.qll @@ -89,7 +89,7 @@ class ZeroBound extends Bound instanceof IRBound::ZeroBound { result = super.getInstruction(delta).getUnconvertedResultExpression() } - override Location getLocation() { result instanceof UnknownLocation } + override Location getLocation() { result instanceof UnknownDefaultLocation } } /** diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/Bound.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/Bound.qll index 4d873e8e3b3e..27883aedf3e7 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/Bound.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/new/internal/semantic/analysis/Bound.qll @@ -61,7 +61,7 @@ class ZeroBound extends Bound, TBoundZero { result.(ConstantValueInstruction).getValue().toInt() = delta } - override Location getLocation() { result instanceof UnknownLocation } + override Location getLocation() { result instanceof UnknownDefaultLocation } } /** diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme b/cpp/ql/lib/semmlecode.cpp.dbscheme index 5491582ac851..e38346051783 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme @@ -1,4 +1,3 @@ -/*- Compilations -*/ /** * An invocation of the compiler. Note that more than one file may be @@ -139,7 +138,6 @@ compilation_finished( float elapsed_seconds : float ref ); -/*- External data -*/ /** * External data, loaded from CSV files during snapshot creation. See @@ -147,87 +145,167 @@ compilation_finished( * for more information. */ externalData( - int id : @externalDataElement, - string path : string ref, - int column: int ref, - string value : string ref + int id : @externalDataElement, + string path : string ref, + int column: int ref, + string value : string ref ); -/*- Source location prefix -*/ - /** * The source location of the snapshot. */ sourceLocationPrefix(string prefix : string ref); -/*- Files and folders -*/ +/** + * 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 +); /** - * The location of an element. + * 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( - 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 + /** 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 ); -files( - unique int id: @file, - string name: string ref -); - -folders( - unique int id: @folder, - string name: string 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 ); -@container = @file | @folder - -containerparent( - int parent: @container ref, - unique int child: @container 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 ); -/*- Lines of code -*/ +/** 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 + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref ); -/*- Diagnostic messages -*/ - 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 + 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 ); -/*- C++ dbscheme -*/ +files( + unique int id: @file, + string name: string ref +); -/* - * C++ dbscheme - */ +folders( + unique int id: @folder, + string name: string ref +); -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) +@container = @folder | @file -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; +containerparent( + int parent: @container ref, + unique int child: @container ref +); fileannotations( int id: @file ref, @@ -269,7 +347,7 @@ macroparent( // to which a macro invocation is bound macrolocationbind( int id: @macroinvocation ref, - int location: @location_default ref + int location: @location ref ); #keyset[invocation, argument_index] @@ -615,9 +693,6 @@ case @builtintype.kind of | 61 = @complex_std_float128 // _Complex _Float128 | 62 = @mfp8 // __mfp8 | 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t ; builtintypes( @@ -845,7 +920,7 @@ is_proxy_class_for( type_mentions( unique int id: @type_mention, int type_id: @type ref, - int location: @location_default ref, + int location: @location ref, // a_symbol_reference_kind from the frontend. int kind: int ref ); @@ -1594,7 +1669,7 @@ initialisers( unique int init: @initialiser, int var: @accessible ref, unique int expr: @expr ref, - int location: @location_default ref + int location: @location_expr ref ); braced_initialisers( @@ -1613,7 +1688,7 @@ expr_ancestor( exprs( unique int id: @expr, int kind: int ref, - int location: @location_default ref + int location: @location_expr ref ); expr_reuse( @@ -2115,7 +2190,7 @@ fold( stmts( unique int id: @stmt, int kind: int ref, - int location: @location_default ref + int location: @location_stmt ref ); case @stmt.kind of @@ -2356,73 +2431,76 @@ link_parent( int link_target : @link_target ref ); -/*- XML Files -*/ +/* XML Files */ -xmlEncoding( - unique int id: @file ref, - string encoding: string ref -); +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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + int xmlElement: @xmllocatable ref, + int location: @location_default ref ); -@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; +@xmllocatable = @xmlcharacters + | @xmlelement + | @xmlcomment + | @xmlattribute + | @xmldtd + | @file + | @xmlnamespace; diff --git a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats index e563fba8ab34..dc51cf5b2186 100644 --- a/cpp/ql/lib/semmlecode.cpp.dbscheme.stats +++ b/cpp/ql/lib/semmlecode.cpp.dbscheme.stats @@ -2,31 +2,47 @@ @compilation - 12647 + 14471 @externalDataElement 65 - @file - 65232 + @external_package + 4 - @folder - 12393 + @svnentry + 575525 + + + @location_default + 36187310 + + + @location_stmt + 5217100 + + + @location_expr + 18007923 @diagnostic - 1483 + 1484 - @location_default - 46965948 + @file + 74641 + + + @folder + 14181 @macro_expansion - 40257335 + 39310599 @other_macro_reference @@ -34,31 +50,31 @@ @function - 4053072 + 4010790 @fun_decl - 4206779 + 4149709 @var_decl - 9391616 + 9262608 @type_decl - 1634964 + 1687349 @namespace_decl - 407321 + 430963 @using_declaration - 267955 + 306677 @using_directive - 6472 + 6474 @using_enum_declaration @@ -66,27 +82,27 @@ @static_assert - 173266 + 183514 @parameter - 7026200 + 6957575 @membervariable - 1496815 + 1493401 @globalvariable - 488591 + 488090 @localvariable - 726278 + 726100 @enumconstant - 345733 + 344765 @errortype @@ -320,41 +336,29 @@ @scalable_vector_count 124 - - @complex_fp16 - 124 - - - @complex_std_bfloat16 - 124 - - - @complex_std_float16 - 124 - @pointer - 452880 + 455609 @type_with_specifiers - 693867 + 695720 @array - 90401 + 98317 @routineptr - 684076 + 684232 @reference - 968192 + 969435 @gnu_vector - 676 + 773 @routinereference @@ -362,7 +366,7 @@ @rvalue_reference - 291306 + 291455 @block @@ -374,7 +378,7 @@ @type_operator - 7953 + 7960 @decltype @@ -382,31 +386,31 @@ @usertype - 4151861 + 4458594 @mangledname - 6370041 + 6330564 @type_mention - 5902899 + 5828707 @concept_template - 3611 + 3614 @routinetype - 604289 + 604428 @ptrtomember - 9730 + 11025 @specifier - 7741 + 7745 @gnuattribute @@ -414,11 +418,11 @@ @stdattribute - 353114 + 350171 @declspec - 330047 + 329730 @msattribute @@ -430,15 +434,15 @@ @attribute_arg_token - 16693 + 16696 @attribute_arg_constant_expr - 71994 + 82124 @attribute_arg_expr - 1405 + 1607 @attribute_arg_empty @@ -454,19 +458,19 @@ @derivation - 476877 + 476986 @frienddecl - 700420 + 700589 @comment - 11241970 + 11220843 @namespace - 8653 + 9901 @specialnamequalifyingelement @@ -474,15 +478,15 @@ @namequalifier - 3038986 + 3041775 @value - 13474612 + 13474605 @initialiser - 2251036 + 2340631 @address_of @@ -490,15 +494,15 @@ @indirect - 404154 + 404153 @array_to_pointer - 1953752 + 1953751 @parexpr - 4915210 + 4915208 @arithnegexpr @@ -518,7 +522,7 @@ @postincrexpr - 84581 + 84597 @postdecrexpr @@ -550,11 +554,11 @@ @divexpr - 52393 + 54088 @remexpr - 16011 + 16015 @paddexpr @@ -562,11 +566,11 @@ @psubexpr - 68024 + 68037 @pdiffexpr - 43951 + 43849 @lshiftexpr @@ -574,7 +578,7 @@ @rshiftexpr - 200555 + 200554 @andexpr @@ -586,7 +590,7 @@ @xorexpr - 73961 + 73975 @eqexpr @@ -606,7 +610,7 @@ @geexpr - 81368 + 81384 @leexpr @@ -614,7 +618,7 @@ @assignexpr - 1281145 + 1281144 @assignaddexpr @@ -626,11 +630,11 @@ @assignmulexpr - 11189 + 12609 @assigndivexpr - 6807 + 6809 @assignremexpr @@ -638,7 +642,7 @@ @assignlshiftexpr - 3703 + 3704 @assignrshiftexpr @@ -674,19 +678,19 @@ @commaexpr - 168441 + 168901 @subscriptexpr - 435143 + 435142 @callexpr - 239767 + 261438 @vastartexpr - 4979 + 5085 @vaargexpr @@ -702,7 +706,7 @@ @varaccess - 8254635 + 8254631 @runtime_sizeof @@ -710,7 +714,7 @@ @runtime_alignof - 49874 + 49886 @expr_stmt @@ -718,11 +722,11 @@ @routineexpr - 5726803 + 5732059 @type_operand - 1405364 + 1405363 @offsetofexpr @@ -734,7 +738,7 @@ @literal - 7967517 + 7967633 @aggregateliteral @@ -742,43 +746,43 @@ @c_style_cast - 6026988 + 6026987 @temp_init - 992325 + 992341 @errorexpr - 45684 + 45695 @reference_to - 1902638 + 1902670 @ref_indirect - 2107213 + 2107696 @vacuous_destructor_call - 7835 + 7837 @assume - 4151 + 4394 @conjugation - 10 + 12 @realpartexpr - 73 + 84 @imagpartexpr - 73 + 84 @jmulexpr @@ -818,15 +822,15 @@ @thisaccess - 1558310 + 1518626 @new_expr - 46195 + 46206 @delete_expr - 11480 + 11483 @throw_expr @@ -834,15 +838,15 @@ @condition_decl - 408518 + 408893 @braced_init_list - 2151 + 2152 @type_id - 47898 + 47909 @sizeof_pack @@ -894,11 +898,11 @@ @isbaseofexpr - 257 + 259 @isclassexpr - 2388 + 2538 @isconvtoexpr @@ -906,15 +910,15 @@ @isemptyexpr - 8865 + 8869 @isenumexpr - 2996 + 2998 @ispodexpr - 834 + 955 @ispolyexpr @@ -930,83 +934,83 @@ @hastrivialdestructor - 2793 + 2794 @uuidof - 26588 + 28060 @delete_array_expr - 1246 + 1426 @new_array_expr - 6653 + 6933 @foldexpr - 1246 + 1247 @ctordirectinit - 112831 + 112823 @ctorvirtualinit - 4019 + 4020 @ctorfieldinit - 206399 + 206504 @ctordelegatinginit - 3621 + 3622 @dtordirectdestruct - 39450 + 39425 @dtorvirtualdestruct - 3985 + 3986 @dtorfielddestruct - 39824 + 39834 @static_cast - 348369 + 389023 @reinterpret_cast - 40089 + 41840 @const_cast - 24460 + 24466 @dynamic_cast - 792 + 906 @lambdaexpr - 19057 + 16482 @param_ref - 164014 + 164017 @noopexpr - 48 + 51 @istriviallyconstructibleexpr - 3745 + 3747 @isdestructibleexpr @@ -1018,15 +1022,15 @@ @istriviallydestructibleexpr - 998 + 999 @istriviallyassignableexpr - 3745 + 3747 @isnothrowassignableexpr - 5119 + 5122 @istrivialexpr @@ -1038,7 +1042,7 @@ @istriviallycopyableexpr - 1373 + 1226 @isliteraltypeexpr @@ -1058,11 +1062,11 @@ @isconstructibleexpr - 3621 + 3622 @isnothrowconstructibleexpr - 20727 + 20737 @hasfinalizerexpr @@ -1098,7 +1102,7 @@ @isfinalexpr - 9402 + 9404 @noexceptexpr @@ -1114,7 +1118,7 @@ @builtinaddressof - 15483 + 15490 @vec_fill @@ -1130,7 +1134,7 @@ @spaceshipexpr - 1311 + 1312 @co_await @@ -1150,7 +1154,7 @@ @hasuniqueobjectrepresentations - 42 + 43 @builtinbitcast @@ -1158,7 +1162,7 @@ @builtinshuffle - 612 + 701 @blockassignexpr @@ -1166,7 +1170,7 @@ @issame - 4535 + 4539 @isfunction @@ -1274,7 +1278,7 @@ @reuseexpr - 846206 + 846982 @istriviallycopyassignable @@ -1330,7 +1334,7 @@ @referenceconstructsfromtemporary - 42 + 43 @referenceconvertsfromtemporary @@ -1338,7 +1342,7 @@ @isconvertible - 128 + 129 @isvalidwinrttype @@ -1374,51 +1378,51 @@ @requires_expr - 16486 + 16502 @nested_requirement - 687 + 688 @compound_requirement - 10941 + 10951 @concept_id - 90344 + 90427 @lambdacapture - 31966 + 28526 @stmt_expr - 2031615 + 2031614 @stmt_if - 990215 + 990214 @stmt_while - 39648 + 39647 @stmt_goto - 157956 + 151588 @stmt_label - 78048 + 72706 @stmt_return - 1241843 + 1255290 @stmt_block - 1729360 + 1844676 @stmt_end_test_while @@ -1430,11 +1434,11 @@ @stmt_switch_case - 835329 + 836096 @stmt_switch - 411463 + 411840 @stmt_asm @@ -1442,11 +1446,11 @@ @stmt_decl - 772441 + 769069 @stmt_empty - 428982 + 429375 @stmt_continue @@ -1454,7 +1458,7 @@ @stmt_break - 137937 + 140293 @stmt_try_block @@ -1462,7 +1466,7 @@ @stmt_microsoft_try - 211 + 224 @stmt_set_vla_size @@ -1482,11 +1486,11 @@ @stmt_handler - 43746 + 43747 @stmt_constexpr_if - 106134 + 103814 @stmt_co_return @@ -1506,7 +1510,7 @@ @ppd_if - 591478 + 588907 @ppd_ifdef @@ -1514,35 +1518,35 @@ @ppd_ifndef - 158651 + 158246 @ppd_elif - 21923 + 25085 @ppd_else - 235118 + 236237 @ppd_endif - 889778 + 885609 @ppd_plain_include - 318660 + 364623 @ppd_define - 2752618 + 2746401 @ppd_undef - 100515 + 100941 @ppd_pragma - 406555 + 406763 @ppd_include_next @@ -1550,7 +1554,7 @@ @ppd_line - 18828 + 18829 @ppd_error @@ -1578,7 +1582,7 @@ @link_target - 816 + 846 @xmldtd @@ -1608,15 +1612,15 @@ compilations - 12647 + 14471 id - 12647 + 14471 cwd - 10 + 12 @@ -1630,7 +1634,7 @@ 1 2 - 12647 + 14471 @@ -1646,7 +1650,7 @@ 1197 1198 - 10 + 12 @@ -1656,19 +1660,19 @@ compilation_args - 1012517 + 1158561 id - 12647 + 14471 num - 1468 + 1680 arg - 29277 + 33500 @@ -1682,77 +1686,77 @@ 36 42 - 1003 + 1148 42 43 - 1098 + 1257 43 44 - 718 + 822 44 45 - 507 + 580 45 51 - 950 + 1088 51 70 - 486 + 556 71 72 - 707 + 810 72 90 - 898 + 1027 94 96 - 390 + 447 98 99 - 1341 + 1535 100 102 - 95 + 108 103 104 - 1996 + 2284 104 119 - 1067 + 1221 120 138 - 929 + 1063 139 140 - 454 + 519 @@ -1768,72 +1772,72 @@ 34 38 - 591 + 677 38 39 - 1500 + 1716 39 40 - 982 + 1124 40 42 - 1088 + 1245 42 53 - 602 + 689 53 54 - 707 + 810 54 63 - 898 + 1027 64 67 - 401 + 459 67 68 - 1405 + 1607 68 70 - 972 + 1112 70 71 - 1405 + 1607 73 79 - 950 + 1088 79 89 - 1130 + 1293 89 90 - 10 + 12 @@ -1849,57 +1853,57 @@ 43 90 - 63 + 72 90 108 - 116 + 132 108 183 - 105 + 120 198 422 - 116 + 132 422 595 - 126 + 145 595 605 - 126 + 145 605 749 - 116 + 132 750 778 - 116 + 132 781 883 - 116 + 132 930 1190 - 84 + 96 1197 1198 - 380 + 435 @@ -1915,72 +1919,72 @@ 1 5 - 126 + 145 5 7 - 116 + 132 9 12 - 73 + 84 12 15 - 116 + 132 15 18 - 95 + 108 18 22 - 116 + 132 22 27 - 126 + 145 27 29 - 84 + 96 29 34 - 116 + 132 34 44 - 126 + 145 45 63 - 116 + 132 67 94 - 116 + 132 94 164 - 116 + 132 171 199 - 21 + 24 @@ -1996,22 +2000,22 @@ 1 2 - 13407 + 15341 2 3 - 12689 + 14519 3 103 - 2197 + 2514 104 1198 - 982 + 1124 @@ -2027,17 +2031,17 @@ 1 2 - 19387 + 22184 2 3 - 8727 + 9986 3 62 - 1162 + 1329 @@ -2047,15 +2051,15 @@ compilation_build_mode - 12647 + 14471 id - 12647 + 14471 mode - 10 + 12 @@ -2069,7 +2073,7 @@ 1 2 - 12647 + 14471 @@ -2085,7 +2089,7 @@ 1197 1198 - 10 + 12 @@ -2095,7 +2099,7 @@ compilation_compiling_files - 15739 + 15742 id @@ -2103,11 +2107,11 @@ num - 4520 + 4521 file - 13670 + 13672 @@ -2295,7 +2299,7 @@ 1 2 - 12308 + 12311 2 @@ -2321,7 +2325,7 @@ 1 2 - 12526 + 12528 2 @@ -2341,7 +2345,7 @@ compilation_time - 62959 + 62971 id @@ -2349,7 +2353,7 @@ num - 4520 + 4521 kind @@ -2357,7 +2361,7 @@ seconds - 13234 + 13999 @@ -2438,12 +2442,12 @@ 3 4 - 653 + 762 4 5 - 708 + 599 6 @@ -2452,7 +2456,7 @@ 8 - 9 + 10 163 @@ -2477,12 +2481,12 @@ 20 - 43 + 45 217 - 47 - 92 + 54 + 94 108 @@ -2535,7 +2539,7 @@ 4 5 - 4520 + 4521 @@ -2551,17 +2555,17 @@ 3 4 - 1361 + 1307 4 5 - 1034 + 1143 5 6 - 326 + 217 6 @@ -2571,7 +2575,7 @@ 7 8 - 163 + 217 8 @@ -2585,12 +2589,12 @@ 23 - 48 + 51 381 - 91 - 92 + 89 + 90 54 @@ -2647,13 +2651,13 @@ 54 - 136 - 137 + 139 + 140 54 - 150 - 151 + 157 + 158 54 @@ -2670,17 +2674,17 @@ 1 2 - 6862 + 7353 2 3 - 2886 + 3322 3 4 - 1906 + 1852 4 @@ -2689,8 +2693,8 @@ 6 - 47 - 381 + 46 + 272 @@ -2706,32 +2710,32 @@ 1 2 - 6099 + 6700 2 3 - 2723 + 2887 3 4 - 1797 + 1906 4 5 - 925 + 1252 5 - 7 + 11 1089 - 7 + 38 75 - 599 + 163 @@ -2747,12 +2751,12 @@ 1 2 - 10511 + 11493 2 3 - 2723 + 2505 @@ -2762,15 +2766,15 @@ diagnostic_for - 4148 + 4152 diagnostic - 1483 + 1484 compilation - 1354 + 1355 file_number @@ -2792,12 +2796,12 @@ 1 2 - 1440 + 1441 63 64 - 42 + 43 @@ -2813,7 +2817,7 @@ 1 2 - 1483 + 1484 @@ -2829,7 +2833,7 @@ 1 2 - 1483 + 1484 @@ -2845,12 +2849,12 @@ 3 4 - 1311 + 1312 5 6 - 42 + 43 @@ -2866,7 +2870,7 @@ 1 2 - 1354 + 1355 @@ -2882,12 +2886,12 @@ 3 4 - 1311 + 1312 5 6 - 42 + 43 @@ -2951,12 +2955,12 @@ 1 2 - 42 + 43 2 3 - 42 + 43 63 @@ -2977,7 +2981,7 @@ 2 3 - 42 + 43 63 @@ -3008,19 +3012,19 @@ compilation_finished - 12647 + 14471 id - 12647 + 14471 cpu_seconds - 9625 + 10844 elapsed_seconds - 221 + 217 @@ -3034,7 +3038,7 @@ 1 2 - 12647 + 14471 @@ -3050,7 +3054,7 @@ 1 2 - 12647 + 14471 @@ -3066,17 +3070,17 @@ 1 2 - 8262 + 9151 2 3 - 919 + 1172 3 - 34 - 443 + 26 + 519 @@ -3092,12 +3096,12 @@ 1 2 - 9023 + 10227 2 3 - 602 + 616 @@ -3113,67 +3117,72 @@ 1 2 - 63 + 12 2 3 - 21 + 48 - 7 - 8 - 21 + 3 + 4 + 12 - 10 - 11 - 21 + 6 + 7 + 12 + + + 9 + 10 + 12 11 12 - 10 + 24 - 16 - 17 - 10 + 12 + 13 + 12 - 21 - 22 - 10 + 18 + 19 + 12 - 28 - 29 - 10 + 37 + 38 + 12 - 56 - 57 - 10 + 64 + 65 + 12 - 153 - 154 - 10 + 152 + 153 + 12 - 248 - 249 - 10 + 247 + 248 + 12 - 297 - 298 - 10 + 300 + 301 + 12 - 323 - 324 - 10 + 318 + 319 + 12 @@ -3189,67 +3198,77 @@ 1 2 - 63 + 12 2 3 - 21 + 48 - 7 - 8 - 21 + 3 + 4 + 12 + + + 6 + 7 + 12 + + + 9 + 10 + 12 10 11 - 21 + 12 11 12 - 10 + 12 - 16 - 17 - 10 + 12 + 13 + 12 - 21 - 22 - 10 + 18 + 19 + 12 - 27 - 28 - 10 + 37 + 38 + 12 - 54 - 55 - 10 + 60 + 61 + 12 - 152 - 153 - 10 + 139 + 140 + 12 - 163 - 164 - 10 + 162 + 163 + 12 - 229 - 230 - 10 + 228 + 229 + 12 - 251 - 252 - 10 + 244 + 245 + 12 @@ -3485,38 +3504,238 @@ - locations_default - 46965948 + external_packages + 4 id - 46965948 + 4 - file - 40955 + namespace + 1 - beginLine - 7507424 + package_name + 4 - beginColumn - 21975 + version + 4 + + + + id + namespace + + + 12 + + + 1 + 2 + 4 + + + + + + + id + package_name + + + 12 + + + 1 + 2 + 4 + + + + + + + id + version + + + 12 + + + 1 + 2 + 4 + + + + + + + namespace + id + + + 12 + + + 4 + 5 + 1 + + + + + + + namespace + package_name + + + 12 + + + 4 + 5 + 1 + + + + + + + namespace + version + + + 12 + + + 4 + 5 + 1 + + + + + + + package_name + id + + + 12 + + + 1 + 2 + 4 + + + + + + + package_name + namespace + + + 12 + + + 1 + 2 + 4 + + + + + + + package_name + version + + + 12 + + + 1 + 2 + 4 + + + + + + + version + id + + + 12 + + + 1 + 2 + 4 + + + + + + + version + namespace + + + 12 + + + 1 + 2 + 4 + + + + + + + version + package_name + + + 12 + + + 1 + 2 + 4 + + + + + + + + + header_to_external_package + 92 + - endLine - 7508548 + fileid + 92 - endColumn - 53441 + package + 4 - id - file + fileid + package 12 @@ -3524,15 +3743,74 @@ 1 2 - 46965948 + 92 + + + + + + + package + fileid + + + 12 + + + 1 + 2 + 1 + + + 5 + 6 + 1 + + + 6 + 7 + 1 + + + 80 + 81 + 1 + + + + svnentries + 575525 + + + id + 575525 + + + revision + 575525 + + + author + 19539 + + + revisionDate + 547759 + + + changeSize + 1 + + + id - beginLine + revision 12 @@ -3540,7 +3818,7 @@ 1 2 - 46965948 + 575525 @@ -3548,7 +3826,7 @@ id - beginColumn + author 12 @@ -3556,7 +3834,4792 @@ 1 2 - 46965948 + 575525 + + + + + + + id + revisionDate + + + 12 + + + 1 + 2 + 575525 + + + + + + + id + changeSize + + + 12 + + + 1 + 2 + 575525 + + + + + + + revision + id + + + 12 + + + 1 + 2 + 575525 + + + + + + + revision + author + + + 12 + + + 1 + 2 + 575525 + + + + + + + revision + revisionDate + + + 12 + + + 1 + 2 + 575525 + + + + + + + revision + changeSize + + + 12 + + + 1 + 2 + 575525 + + + + + + + author + id + + + 12 + + + 1 + 2 + 7913 + + + 2 + 3 + 2531 + + + 3 + 4 + 1388 + + + 4 + 6 + 1523 + + + 6 + 10 + 1529 + + + 10 + 20 + 1509 + + + 20 + 52 + 1488 + + + 52 + 568 + 1466 + + + 569 + 16582 + 192 + + + + + + + author + revision + + + 12 + + + 1 + 2 + 7913 + + + 2 + 3 + 2531 + + + 3 + 4 + 1388 + + + 4 + 6 + 1523 + + + 6 + 10 + 1529 + + + 10 + 20 + 1509 + + + 20 + 52 + 1488 + + + 52 + 568 + 1466 + + + 569 + 16582 + 192 + + + + + + + author + revisionDate + + + 12 + + + 1 + 2 + 7996 + + + 2 + 3 + 2509 + + + 3 + 4 + 1379 + + + 4 + 6 + 1520 + + + 6 + 10 + 1529 + + + 10 + 20 + 1507 + + + 20 + 52 + 1474 + + + 52 + 662 + 1466 + + + 663 + 16573 + 159 + + + + + + + author + changeSize + + + 12 + + + 1 + 2 + 19539 + + + + + + + revisionDate + id + + + 12 + + + 1 + 2 + 531878 + + + 2 + 100 + 15881 + + + + + + + revisionDate + revision + + + 12 + + + 1 + 2 + 531878 + + + 2 + 100 + 15881 + + + + + + + revisionDate + author + + + 12 + + + 1 + 2 + 542505 + + + 2 + 17 + 5254 + + + + + + + revisionDate + changeSize + + + 12 + + + 1 + 2 + 547759 + + + + + + + changeSize + id + + + 12 + + + 575525 + 575526 + 1 + + + + + + + changeSize + revision + + + 12 + + + 575525 + 575526 + 1 + + + + + + + changeSize + author + + + 12 + + + 19539 + 19540 + 1 + + + + + + + changeSize + revisionDate + + + 12 + + + 547759 + 547760 + 1 + + + + + + + + + svnaffectedfiles + 1314068 + + + id + 531628 + + + file + 90924 + + + action + 1 + + + + + id + file + + + 12 + + + 1 + 2 + 337698 + + + 2 + 3 + 77525 + + + 3 + 4 + 43024 + + + 4 + 7 + 46689 + + + 7 + 16635 + 26692 + + + + + + + id + action + + + 12 + + + 1 + 2 + 531628 + + + + + + + file + id + + + 12 + + + 1 + 2 + 11819 + + + 2 + 3 + 18230 + + + 3 + 4 + 9501 + + + 4 + 5 + 6656 + + + 5 + 6 + 5012 + + + 6 + 8 + 7103 + + + 8 + 11 + 6788 + + + 11 + 16 + 6996 + + + 16 + 26 + 7180 + + + 26 + 54 + 6824 + + + 54 + 3572 + 4815 + + + + + + + file + action + + + 12 + + + 1 + 2 + 90924 + + + + + + + action + id + + + 12 + + + 531628 + 531629 + 1 + + + + + + + action + file + + + 12 + + + 90924 + 90925 + 1 + + + + + + + + + svnentrymsg + 575525 + + + id + 575525 + + + message + 568305 + + + + + id + message + + + 12 + + + 1 + 2 + 575525 + + + + + + + message + id + + + 12 + + + 1 + 2 + 565381 + + + 2 + 142 + 2924 + + + + + + + + + svnchurn + 46790 + + + commit + 22361 + + + file + 16124 + + + addedLines + 910 + + + deletedLines + 787 + + + + + commit + file + + + 12 + + + 1 + 2 + 15208 + + + 2 + 3 + 3101 + + + 3 + 4 + 1746 + + + 4 + 8 + 1774 + + + 8 + 246 + 532 + + + + + + + commit + addedLines + + + 12 + + + 1 + 2 + 16074 + + + 2 + 3 + 3323 + + + 3 + 4 + 1561 + + + 4 + 118 + 1403 + + + + + + + commit + deletedLines + + + 12 + + + 1 + 2 + 16799 + + + 2 + 3 + 3286 + + + 3 + 5 + 1763 + + + 5 + 113 + 513 + + + + + + + file + commit + + + 12 + + + 1 + 2 + 8618 + + + 2 + 3 + 2956 + + + 3 + 4 + 1426 + + + 4 + 6 + 1364 + + + 6 + 12 + 1210 + + + 12 + 448 + 550 + + + + + + + file + addedLines + + + 12 + + + 1 + 2 + 9240 + + + 2 + 3 + 3129 + + + 3 + 4 + 1393 + + + 4 + 6 + 1239 + + + 6 + 59 + 1123 + + + + + + + file + deletedLines + + + 12 + + + 1 + 2 + 9525 + + + 2 + 3 + 3192 + + + 3 + 4 + 1401 + + + 4 + 7 + 1387 + + + 7 + 70 + 619 + + + + + + + addedLines + commit + + + 12 + + + 1 + 2 + 446 + + + 2 + 3 + 133 + + + 3 + 4 + 70 + + + 4 + 6 + 68 + + + 6 + 12 + 70 + + + 12 + 57 + 69 + + + 57 + 6874 + 54 + + + + + + + addedLines + file + + + 12 + + + 1 + 2 + 445 + + + 2 + 3 + 132 + + + 3 + 4 + 69 + + + 4 + 6 + 68 + + + 6 + 12 + 73 + + + 12 + 58 + 69 + + + 58 + 6663 + 54 + + + + + + + addedLines + deletedLines + + + 12 + + + 1 + 2 + 621 + + + 2 + 3 + 96 + + + 3 + 7 + 81 + + + 7 + 34 + 70 + + + 34 + 727 + 42 + + + + + + + deletedLines + commit + + + 12 + + + 1 + 2 + 439 + + + 2 + 3 + 116 + + + 3 + 4 + 48 + + + 4 + 8 + 67 + + + 8 + 28 + 60 + + + 28 + 6794 + 57 + + + + + + + deletedLines + file + + + 12 + + + 1 + 2 + 437 + + + 2 + 3 + 113 + + + 3 + 4 + 49 + + + 4 + 7 + 61 + + + 7 + 19 + 60 + + + 19 + 770 + 60 + + + 985 + 7318 + 7 + + + + + + + deletedLines + addedLines + + + 12 + + + 1 + 2 + 545 + + + 2 + 3 + 72 + + + 3 + 7 + 69 + + + 7 + 30 + 60 + + + 30 + 871 + 41 + + + + + + + + + extractor_version + 124 + + + codeql_version + 124 + + + frontend_version + 124 + + + + + codeql_version + frontend_version + + + 12 + + + 1 + 2 + 124 + + + + + + + frontend_version + codeql_version + + + 12 + + + 1 + 2 + 124 + + + + + + + + + locations_default + 36187310 + + + id + 36187310 + + + container + 40976 + + + startLine + 7487141 + + + startColumn + 21237 + + + endLine + 7489140 + + + endColumn + 53468 + + + + + id + container + + + 12 + + + 1 + 2 + 36187310 + + + + + + + id + startLine + + + 12 + + + 1 + 2 + 36187310 + + + + + + + id + startColumn + + + 12 + + + 1 + 2 + 36187310 + + + + + + + id + endLine + + + 12 + + + 1 + 2 + 36187310 + + + + + + + id + endColumn + + + 12 + + + 1 + 2 + 36187310 + + + + + + + container + id + + + 12 + + + 1 + 15 + 3123 + + + 15 + 41 + 3123 + + + 42 + 66 + 3373 + + + 67 + 95 + 3123 + + + 98 + 124 + 3248 + + + 124 + 174 + 3373 + + + 175 + 228 + 3123 + + + 230 + 303 + 3123 + + + 305 + 406 + 3123 + + + 408 + 596 + 3248 + + + 598 + 943 + 3123 + + + 986 + 2568 + 3123 + + + 2587 + 57658 + 2748 + + + + + + + container + startLine + + + 12 + + + 1 + 13 + 3497 + + + 13 + 29 + 3248 + + + 29 + 42 + 3123 + + + 42 + 58 + 3373 + + + 58 + 76 + 3123 + + + 77 + 102 + 3248 + + + 102 + 134 + 3123 + + + 134 + 173 + 3123 + + + 173 + 242 + 3123 + + + 243 + 348 + 3123 + + + 348 + 489 + 3123 + + + 493 + 1269 + 3123 + + + 1337 + 57597 + 2623 + + + + + + + container + startColumn + + + 12 + + + 1 + 4 + 2248 + + + 4 + 7 + 3123 + + + 7 + 12 + 3497 + + + 12 + 16 + 3123 + + + 16 + 22 + 3373 + + + 22 + 28 + 3123 + + + 28 + 33 + 3248 + + + 33 + 39 + 3373 + + + 39 + 48 + 3373 + + + 48 + 60 + 3373 + + + 60 + 82 + 3373 + + + 83 + 98 + 3248 + + + 98 + 141 + 2498 + + + + + + + container + endLine + + + 12 + + + 1 + 13 + 3497 + + + 13 + 29 + 3248 + + + 29 + 42 + 3123 + + + 42 + 58 + 3373 + + + 58 + 76 + 3123 + + + 77 + 102 + 3248 + + + 102 + 134 + 3123 + + + 134 + 173 + 3248 + + + 174 + 244 + 3123 + + + 246 + 348 + 3123 + + + 348 + 494 + 3123 + + + 513 + 1349 + 3123 + + + 1407 + 57597 + 2498 + + + + + + + container + endColumn + + + 12 + + + 1 + 12 + 3373 + + + 13 + 24 + 3248 + + + 25 + 33 + 3248 + + + 33 + 39 + 3373 + + + 39 + 45 + 3622 + + + 45 + 54 + 3123 + + + 54 + 62 + 3622 + + + 62 + 71 + 3373 + + + 71 + 83 + 3497 + + + 83 + 99 + 3123 + + + 99 + 114 + 3123 + + + 114 + 143 + 3123 + + + 147 + 363 + 1124 + + + + + + + startLine + id + + + 12 + + + 1 + 2 + 4954615 + + + 2 + 3 + 799784 + + + 3 + 4 + 565670 + + + 4 + 12 + 592405 + + + 12 + 210 + 561673 + + + 210 + 534 + 12992 + + + + + + + startLine + container + + + 12 + + + 1 + 2 + 5012832 + + + 2 + 3 + 1233157 + + + 3 + 6 + 663363 + + + 6 + 106 + 561673 + + + 107 + 329 + 16115 + + + + + + + startLine + startColumn + + + 12 + + + 1 + 2 + 5648961 + + + 2 + 3 + 532065 + + + 3 + 7 + 578663 + + + 7 + 24 + 570792 + + + 24 + 72 + 156658 + + + + + + + startLine + endLine + + + 12 + + + 1 + 2 + 7312493 + + + 2 + 81 + 174648 + + + + + + + startLine + endColumn + + + 12 + + + 1 + 2 + 5021452 + + + 2 + 3 + 766678 + + + 3 + 4 + 559174 + + + 4 + 12 + 603648 + + + 12 + 235 + 536187 + + + + + + + startColumn + id + + + 12 + + + 1 + 2 + 1499 + + + 2 + 4 + 1873 + + + 4 + 9 + 1624 + + + 9 + 19 + 1748 + + + 20 + 74 + 1624 + + + 81 + 173 + 1624 + + + 173 + 435 + 1624 + + + 468 + 904 + 1624 + + + 945 + 1309 + 1624 + + + 1328 + 1510 + 1624 + + + 1531 + 1774 + 1624 + + + 1834 + 2887 + 1624 + + + 3491 + 119749 + 1499 + + + + + + + startColumn + container + + + 12 + + + 1 + 2 + 1873 + + + 2 + 4 + 1748 + + + 4 + 6 + 1499 + + + 6 + 11 + 1748 + + + 11 + 33 + 1624 + + + 34 + 45 + 1624 + + + 50 + 75 + 1748 + + + 78 + 98 + 1748 + + + 101 + 131 + 1624 + + + 131 + 147 + 1873 + + + 149 + 161 + 1624 + + + 162 + 198 + 1624 + + + 202 + 329 + 874 + + + + + + + startColumn + startLine + + + 12 + + + 1 + 2 + 1624 + + + 2 + 4 + 1873 + + + 4 + 9 + 1624 + + + 9 + 19 + 1748 + + + 20 + 74 + 1624 + + + 80 + 169 + 1624 + + + 171 + 432 + 1624 + + + 467 + 822 + 1624 + + + 861 + 1001 + 1624 + + + 1002 + 1190 + 1624 + + + 1201 + 1338 + 1624 + + + 1347 + 1920 + 1624 + + + 2210 + 59360 + 1374 + + + + + + + startColumn + endLine + + + 12 + + + 1 + 2 + 1624 + + + 2 + 4 + 1873 + + + 4 + 9 + 1624 + + + 9 + 19 + 1748 + + + 20 + 74 + 1624 + + + 80 + 169 + 1624 + + + 171 + 432 + 1624 + + + 467 + 822 + 1624 + + + 861 + 1003 + 1624 + + + 1003 + 1198 + 1624 + + + 1201 + 1338 + 1624 + + + 1347 + 1920 + 1624 + + + 2220 + 59375 + 1374 + + + + + + + startColumn + endColumn + + + 12 + + + 1 + 2 + 1873 + + + 2 + 4 + 1748 + + + 4 + 7 + 1873 + + + 7 + 13 + 1748 + + + 13 + 21 + 1748 + + + 21 + 29 + 1624 + + + 29 + 37 + 1499 + + + 37 + 50 + 1624 + + + 50 + 58 + 1624 + + + 61 + 67 + 1748 + + + 67 + 76 + 1624 + + + 76 + 137 + 1624 + + + 139 + 299 + 874 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 4954241 + + + 2 + 3 + 807030 + + + 3 + 4 + 560798 + + + 4 + 12 + 592779 + + + 12 + 214 + 561797 + + + 214 + 530 + 12492 + + + + + + + endLine + container + + + 12 + + + 1 + 2 + 5011332 + + + 2 + 3 + 1236280 + + + 3 + 6 + 663738 + + + 6 + 107 + 561797 + + + 107 + 329 + 15990 + + + + + + + endLine + startLine + + + 12 + + + 1 + 2 + 7307996 + + + 2 + 7 + 181144 + + + + + + + endLine + startColumn + + + 12 + + + 1 + 2 + 5651585 + + + 2 + 3 + 530691 + + + 3 + 7 + 579537 + + + 7 + 24 + 570417 + + + 24 + 72 + 156908 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 2 + 5021327 + + + 2 + 3 + 773299 + + + 3 + 4 + 554552 + + + 4 + 12 + 604648 + + + 12 + 235 + 535313 + + + + + + + endColumn + id + + + 12 + + + 1 + 2 + 15740 + + + 2 + 3 + 5621 + + + 3 + 7 + 4497 + + + 7 + 17 + 4122 + + + 17 + 32 + 4247 + + + 35 + 103 + 4122 + + + 147 + 635 + 4122 + + + 651 + 2069 + 4122 + + + 2137 + 3404 + 4122 + + + 3430 + 33692 + 2748 + + + + + + + endColumn + container + + + 12 + + + 1 + 2 + 18614 + + + 2 + 3 + 5621 + + + 3 + 5 + 4247 + + + 5 + 7 + 3373 + + + 7 + 15 + 4622 + + + 15 + 78 + 4122 + + + 78 + 143 + 4247 + + + 150 + 202 + 4122 + + + 203 + 263 + 4122 + + + 266 + 329 + 374 + + + + + + + endColumn + startLine + + + 12 + + + 1 + 2 + 15990 + + + 2 + 3 + 5996 + + + 3 + 7 + 4122 + + + 7 + 17 + 4247 + + + 17 + 35 + 4122 + + + 35 + 140 + 4122 + + + 157 + 601 + 4122 + + + 610 + 1714 + 4122 + + + 1749 + 2382 + 4122 + + + 2421 + 30689 + 2498 + + + + + + + endColumn + startColumn + + + 12 + + + 1 + 2 + 17364 + + + 2 + 3 + 6371 + + + 3 + 4 + 3123 + + + 4 + 6 + 3872 + + + 6 + 11 + 4622 + + + 11 + 22 + 4122 + + + 22 + 40 + 4247 + + + 42 + 60 + 4872 + + + 60 + 68 + 4122 + + + 68 + 73 + 749 + + + + + + + endColumn + endLine + + + 12 + + + 1 + 2 + 15990 + + + 2 + 3 + 5996 + + + 3 + 7 + 4122 + + + 7 + 17 + 4372 + + + 17 + 36 + 4247 + + + 36 + 170 + 4122 + + + 173 + 620 + 4122 + + + 622 + 1824 + 4122 + + + 1843 + 2449 + 4122 + + + 2460 + 30688 + 2248 + + + + + + + + + locations_stmt + 5217100 + + + id + 5217100 + + + container + 4164 + + + startLine + 273596 + + + startColumn + 2560 + + + endLine + 265745 + + + endColumn + 3235 + + + + + id + container + + + 12 + + + 1 + 2 + 5217100 + + + + + + + id + startLine + + + 12 + + + 1 + 2 + 5217100 + + + + + + + id + startColumn + + + 12 + + + 1 + 2 + 5217100 + + + + + + + id + endLine + + + 12 + + + 1 + 2 + 5217100 + + + + + + + id + endColumn + + + 12 + + + 1 + 2 + 5217100 + + + + + + + container + id + + + 12 + + + 1 + 18 + 337 + + + 18 + 60 + 337 + + + 61 + 180 + 337 + + + 190 + 450 + 337 + + + 454 + 628 + 337 + + + 653 + 883 + 337 + + + 906 + 1161 + 337 + + + 1167 + 1466 + 337 + + + 1508 + 1785 + 337 + + + 1858 + 2296 + 337 + + + 2347 + 2833 + 337 + + + 2871 + 4105 + 337 + + + 4275 + 4993 + 112 + + + + + + + container + startLine + + + 12 + + + 1 + 18 + 337 + + + 18 + 49 + 337 + + + 59 + 170 + 337 + + + 170 + 394 + 337 + + + 434 + 603 + 337 + + + 610 + 846 + 337 + + + 880 + 1132 + 337 + + + 1135 + 1395 + 337 + + + 1409 + 1727 + 337 + + + 1761 + 2226 + 337 + + + 2250 + 2778 + 337 + + + 2800 + 3886 + 337 + + + 3965 + 4846 + 112 + + + + + + + container + startColumn + + + 12 + + + 1 + 3 + 281 + + + 3 + 7 + 309 + + + 7 + 9 + 309 + + + 9 + 11 + 337 + + + 11 + 13 + 309 + + + 13 + 14 + 309 + + + 14 + 16 + 337 + + + 16 + 17 + 225 + + + 17 + 19 + 281 + + + 19 + 21 + 253 + + + 21 + 23 + 337 + + + 23 + 29 + 337 + + + 29 + 43 + 337 + + + 48 + 60 + 196 + + + + + + + container + endLine + + + 12 + + + 1 + 15 + 337 + + + 15 + 44 + 337 + + + 47 + 137 + 337 + + + 141 + 314 + 337 + + + 328 + 472 + 337 + + + 488 + 643 + 337 + + + 675 + 858 + 365 + + + 865 + 1107 + 337 + + + 1178 + 1343 + 337 + + + 1401 + 1768 + 337 + + + 1782 + 2165 + 337 + + + 2254 + 3130 + 337 + + + 3343 + 3873 + 84 + + + + + + + container + endColumn + + + 12 + + + 1 + 7 + 337 + + + 8 + 26 + 365 + + + 26 + 47 + 365 + + + 47 + 59 + 337 + + + 59 + 64 + 309 + + + 64 + 67 + 281 + + + 67 + 69 + 337 + + + 69 + 71 + 309 + + + 71 + 72 + 337 + + + 72 + 74 + 337 + + + 74 + 76 + 337 + + + 76 + 80 + 337 + + + 81 + 96 + 168 + + + + + + + startLine + id + + + 12 + + + 1 + 2 + 29489 + + + 2 + 3 + 20935 + + + 3 + 4 + 17080 + + + 4 + 6 + 19781 + + + 6 + 8 + 17136 + + + 8 + 11 + 22877 + + + 11 + 16 + 23636 + + + 16 + 22 + 20991 + + + 22 + 29 + 23299 + + + 29 + 37 + 23749 + + + 37 + 45 + 20682 + + + 45 + 56 + 22201 + + + 56 + 73 + 11734 + + + + + + + startLine + container + + + 12 + + + 1 + 2 + 30530 + + + 2 + 3 + 21526 + + + 3 + 4 + 17361 + + + 4 + 6 + 19697 + + + 6 + 8 + 17418 + + + 8 + 11 + 24058 + + + 11 + 16 + 22398 + + + 16 + 22 + 22201 + + + 22 + 29 + 23214 + + + 29 + 36 + 21920 + + + 36 + 44 + 22370 + + + 44 + 54 + 21723 + + + 54 + 68 + 9173 + + + + + + + startLine + startColumn + + + 12 + + + 1 + 2 + 36721 + + + 2 + 3 + 28533 + + + 3 + 4 + 23017 + + + 4 + 5 + 22032 + + + 5 + 6 + 23861 + + + 6 + 7 + 27182 + + + 7 + 8 + 31149 + + + 8 + 9 + 27970 + + + 9 + 10 + 20485 + + + 10 + 12 + 22764 + + + 12 + 18 + 9876 + + + + + + + startLine + endLine + + + 12 + + + 1 + 2 + 47358 + + + 2 + 3 + 35314 + + + 3 + 4 + 25240 + + + 4 + 5 + 22173 + + + 5 + 6 + 17502 + + + 6 + 7 + 16517 + + + 7 + 8 + 13956 + + + 8 + 9 + 15110 + + + 9 + 10 + 14773 + + + 10 + 11 + 14435 + + + 11 + 12 + 13900 + + + 12 + 14 + 21638 + + + 14 + 24 + 15673 + + + + + + + startLine + endColumn + + + 12 + + + 1 + 2 + 30305 + + + 2 + 3 + 22173 + + + 3 + 4 + 17727 + + + 4 + 6 + 22004 + + + 6 + 8 + 20119 + + + 8 + 10 + 18065 + + + 10 + 14 + 25015 + + + 14 + 18 + 23299 + + + 18 + 22 + 24143 + + + 22 + 26 + 25297 + + + 26 + 30 + 22595 + + + 30 + 36 + 20738 + + + 36 + 42 + 2110 + + + + + + + startColumn + id + + + 12 + + + 1 + 2 + 309 + + + 2 + 3 + 196 + + + 3 + 7 + 225 + + + 7 + 12 + 196 + + + 12 + 20 + 225 + + + 21 + 53 + 196 + + + 54 + 74 + 196 + + + 78 + 92 + 196 + + + 92 + 134 + 196 + + + 134 + 228 + 196 + + + 228 + 2062 + 196 + + + 3248 + 40806 + 196 + + + 53241 + 53242 + 28 + + + + + + + startColumn + container + + + 12 + + + 1 + 2 + 393 + + + 2 + 3 + 140 + + + 3 + 5 + 225 + + + 5 + 8 + 225 + + + 8 + 13 + 196 + + + 13 + 18 + 196 + + + 18 + 22 + 196 + + + 22 + 24 + 196 + + + 24 + 29 + 196 + + + 33 + 42 + 196 + + + 47 + 110 + 196 + + + 116 + 148 + 196 + + + + + + + startColumn + startLine + + + 12 + + + 1 + 2 + 309 + + + 2 + 3 + 196 + + + 3 + 7 + 225 + + + 7 + 12 + 196 + + + 12 + 20 + 225 + + + 21 + 53 + 196 + + + 54 + 74 + 196 + + + 77 + 88 + 196 + + + 90 + 131 + 196 + + + 134 + 224 + 196 + + + 226 + 1699 + 196 + + + 2432 + 7900 + 196 + + + 8302 + 8303 + 28 + + + + + + + startColumn + endLine + + + 12 + + + 1 + 2 + 309 + + + 2 + 3 + 196 + + + 3 + 7 + 225 + + + 7 + 12 + 196 + + + 12 + 20 + 225 + + + 21 + 53 + 196 + + + 54 + 74 + 196 + + + 77 + 88 + 196 + + + 90 + 130 + 196 + + + 134 + 221 + 196 + + + 226 + 1414 + 196 + + + 2291 + 7741 + 196 + + + 8096 + 8097 + 28 + + + + + + + startColumn + endColumn + + + 12 + + + 1 + 2 + 393 + + + 2 + 3 + 196 + + + 3 + 4 + 112 + + + 4 + 5 + 225 + + + 5 + 8 + 225 + + + 8 + 11 + 196 + + + 11 + 15 + 225 + + + 15 + 19 + 196 + + + 19 + 26 + 196 + + + 28 + 35 + 196 + + + 41 + 69 + 196 + + + 70 + 104 + 196 + + + + + + + endLine + id + + + 12 + + + 1 + 2 + 23833 + + + 2 + 3 + 19725 + + + 3 + 4 + 15729 + + + 4 + 6 + 21357 + + + 6 + 8 + 17108 + + + 8 + 11 + 21160 + + + 11 + 15 + 20063 + + + 15 + 21 + 22004 + + + 21 + 27 + 21132 + + + 27 + 34 + 20428 + + + 34 + 42 + 21610 + + + 42 + 51 + 19978 + + + 51 + 68 + 20316 + + + 68 + 130 + 1294 + + + + + + + endLine + container + + + 12 + + + 1 + 2 + 34160 + + + 2 + 3 + 22089 + + + 3 + 4 + 17474 + + + 4 + 6 + 21441 + + + 6 + 8 + 20541 + + + 8 + 11 + 21751 + + + 11 + 16 + 23861 + + + 16 + 20 + 19978 + + + 20 + 26 + 23496 + + + 26 + 32 + 22286 + + + 32 + 39 + 20513 + + + 39 + 58 + 18149 + + + + + + + endLine + startLine + + + 12 + + + 1 + 2 + 44459 + + + 2 + 3 + 32500 + + + 3 + 4 + 25268 + + + 4 + 5 + 20851 + + + 5 + 6 + 18909 + + + 6 + 7 + 15898 + + + 7 + 8 + 16292 + + + 8 + 9 + 14969 + + + 9 + 10 + 13956 + + + 10 + 12 + 24509 + + + 12 + 15 + 24255 + + + 15 + 100 + 13872 + + + + + + + endLine + startColumn + + + 12 + + + 1 + 2 + 34160 + + + 2 + 3 + 27913 + + + 3 + 4 + 23045 + + + 4 + 5 + 24396 + + + 5 + 6 + 25409 + + + 6 + 7 + 28026 + + + 7 + 8 + 30699 + + + 8 + 9 + 25662 + + + 9 + 10 + 17671 + + + 10 + 12 + 20513 + + + 12 + 18 + 8244 + + + + + + + endLine + endColumn + + + 12 + + + 1 + 2 + 33823 + + + 2 + 3 + 22764 + + + 3 + 4 + 17164 + + + 4 + 6 + 24396 + + + 6 + 8 + 20991 + + + 8 + 10 + 17530 + + + 10 + 13 + 19753 + + + 13 + 16 + 20569 + + + 16 + 19 + 20119 + + + 19 + 22 + 19022 + + + 22 + 26 + 23749 + + + 26 + 31 + 21019 + + + 31 + 39 + 4839 + + + + + + + endColumn + id + + + 12 + + + 1 + 2 + 253 + + + 2 + 4 + 253 + + + 4 + 7 + 225 + + + 7 + 16 + 253 + + + 23 + 131 + 253 + + + 149 + 388 + 253 + + + 392 + 675 + 253 + + + 710 + 1137 + 253 + + + 1139 + 1672 + 253 + + + 1883 + 2794 + 253 + + + 2937 + 4095 + 253 + + + 4146 + 4771 + 253 + + + 5032 + 15404 + 225 + + + + + + + endColumn + container + + + 12 + + + 1 + 2 + 281 + + + 2 + 3 + 253 + + + 3 + 6 + 253 + + + 6 + 21 + 253 + + + 31 + 67 + 253 + + + 68 + 93 + 253 + + + 94 + 106 + 253 + + + 107 + 112 + 253 + + + 112 + 118 + 253 + + + 118 + 122 + 196 + + + 122 + 123 + 140 + + + 123 + 124 + 225 + + + 124 + 127 + 253 + + + 127 + 147 + 112 + + + + + + + endColumn + startLine + + + 12 + + + 1 + 2 + 253 + + + 2 + 4 + 253 + + + 4 + 7 + 225 + + + 7 + 15 + 253 + + + 22 + 129 + 253 + + + 143 + 374 + 253 + + + 379 + 646 + 253 + + + 666 + 963 + 253 + + + 1000 + 1430 + 253 + + + 1586 + 2172 + 253 + + + 2265 + 2916 + 253 + + + 2948 + 3215 + 253 + + + 3417 + 5821 + 225 + + + + + + + endColumn + startColumn + + + 12 + + + 1 + 2 + 281 + + + 2 + 3 + 225 + + + 3 + 5 + 281 + + + 5 + 8 + 253 + + + 8 + 12 + 253 + + + 12 + 14 + 168 + + + 14 + 16 + 253 + + + 16 + 19 + 168 + + + 19 + 21 + 225 + + + 21 + 23 + 253 + + + 23 + 25 + 253 + + + 25 + 28 + 253 + + + 28 + 33 + 281 + + + 45 + 57 + 84 + + + + + + + endColumn + endLine + + + 12 + + + 1 + 2 + 281 + + + 2 + 4 + 225 + + + 4 + 7 + 281 + + + 7 + 27 + 253 + + + 42 + 130 + 253 + + + 139 + 325 + 253 + + + 364 + 584 + 253 + + + 610 + 967 + 253 + + + 1056 + 1409 + 253 + + + 1420 + 2038 + 253 + + + 2065 + 2627 + 253 + + + 2651 + 3073 + 253 + + + 3086 + 4516 + 168 + + + + + + + + + locations_expr + 18007923 + + + id + 18007923 + + + container + 6359 + + + startLine + 262734 + + + startColumn + 3376 + + + endLine + 262706 + + + endColumn + 3826 + + + + + id + container + + + 12 + + + 1 + 2 + 18007923 + + + + + + + id + startLine + + + 12 + + + 1 + 2 + 18007923 + + + + + + + id + startColumn + + + 12 + + + 1 + 2 + 18007923 @@ -3572,7 +8635,7 @@ 1 2 - 46965948 + 18007923 @@ -3588,172 +8651,415 @@ 1 2 - 46965948 + 18007923 + + + + + + + container + id + + + 12 + + + 1 + 2 + 562 + + + 2 + 6 + 478 + + + 6 + 11 + 478 + + + 12 + 26 + 506 + + + 27 + 87 + 478 + + + 95 + 514 + 478 + + + 525 + 1401 + 478 + + + 1526 + 2343 + 478 + + + 2404 + 3615 + 478 + + + 3668 + 5162 + 478 + + + 5341 + 7345 + 478 + + + 7399 + 9307 + 478 + + + 9382 + 16759 + 478 + + + 18811 + 18812 + 28 + + + + + + + container + startLine + + + 12 + + + 1 + 2 + 675 + + + 2 + 4 + 478 + + + 4 + 10 + 534 + + + 10 + 20 + 506 + + + 20 + 66 + 478 + + + 67 + 162 + 478 + + + 166 + 362 + 478 + + + 376 + 591 + 478 + + + 593 + 929 + 478 + + + 960 + 1269 + 478 + + + 1291 + 1782 + 478 + + + 1851 + 2492 + 478 + + + 2594 + 4241 + 337 + + + + + + + container + startColumn + + + 12 + + + 1 + 2 + 675 + + + 2 + 4 + 506 + + + 4 + 7 + 534 + + + 7 + 16 + 478 + + + 16 + 34 + 506 + + + 36 + 59 + 478 + + + 59 + 66 + 506 + + + 66 + 68 + 365 + + + 68 + 69 + 281 + + + 69 + 70 + 422 + + + 70 + 71 + 253 + + + 71 + 72 + 422 + + + 72 + 74 + 365 + + + 74 + 92 + 506 + + + 94 + 109 + 56 - file - id + container + endLine 12 1 - 15 - 3121 - - - 15 - 41 - 3121 + 2 + 675 - 42 - 72 - 3121 + 2 + 4 + 478 - 72 - 114 - 3371 + 4 + 10 + 534 - 114 - 142 - 3121 + 10 + 20 + 506 - 143 - 211 - 3121 + 20 + 68 + 478 - 213 - 307 - 3121 + 68 + 163 + 478 - 310 - 430 - 3121 + 166 + 362 + 478 - 437 - 596 - 3121 + 376 + 592 + 478 - 607 - 827 - 3121 + 593 + 931 + 478 - 839 - 1298 - 3121 + 960 + 1273 + 478 - 1300 - 2722 - 3121 + 1292 + 1786 + 478 - 3114 - 30788 - 3121 + 1855 + 2501 + 478 - 57880 - 57881 - 124 + 2593 + 4416 + 337 - file - beginLine + container + endColumn 12 1 - 13 - 3371 + 2 + 619 - 13 - 31 - 3371 + 2 + 4 + 478 - 31 - 47 - 3121 + 4 + 7 + 506 - 47 - 64 - 3121 + 7 + 15 + 478 - 64 - 84 - 3121 + 15 + 36 + 478 - 85 - 115 - 3121 + 36 + 62 + 478 - 116 - 160 - 3246 + 62 + 71 + 534 - 160 - 206 - 3121 + 71 + 73 + 281 - 206 - 291 - 3121 + 73 + 75 + 450 - 298 - 388 - 3121 + 75 + 76 + 168 - 395 - 527 - 3121 + 76 + 77 + 562 + + + 77 + 79 + 478 - 561 - 1339 - 3121 + 79 + 84 + 478 - 1375 - 57764 - 2871 + 84 + 116 + 365 - file - beginColumn + startLine + id 12 @@ -3761,227 +9067,217 @@ 1 5 - 3745 + 22061 5 9 - 3121 + 22567 9 15 - 3246 + 21948 15 - 20 - 3246 + 23 + 20682 - 20 - 28 - 3246 + 23 + 32 + 20738 - 28 - 36 - 3246 + 32 + 44 + 20541 - 36 - 42 - 3121 + 44 + 60 + 20203 - 42 - 53 - 3371 + 60 + 80 + 20344 - 53 - 62 - 3246 + 80 + 103 + 20006 - 62 - 81 - 3121 + 103 + 130 + 20147 - 81 - 95 - 3121 + 130 + 159 + 19950 - 95 - 111 - 3121 + 159 + 194 + 20006 - 112 - 156 - 1997 + 194 + 297 + 13534 - file - endLine + startLine + container 12 1 - 13 - 3371 - - - 13 - 31 - 3371 + 2 + 32191 - 31 - 46 - 3121 + 2 + 3 + 21385 - 46 - 63 - 3121 + 3 + 4 + 15532 - 63 - 84 - 3121 + 4 + 6 + 22398 - 84 - 114 - 3121 + 6 + 8 + 18656 - 118 - 160 - 3246 + 8 + 11 + 22483 - 160 - 206 - 3121 + 11 + 16 + 23749 - 207 - 291 - 3121 + 16 + 21 + 22567 - 300 - 390 - 3121 + 21 + 28 + 22736 - 395 - 562 - 3121 + 28 + 35 + 21695 - 564 - 1350 - 3121 + 35 + 43 + 21835 - 1420 - 57764 - 2871 + 43 + 61 + 17502 - file - endColumn + startLine + startColumn 12 1 - 12 - 3371 - - - 13 - 26 - 3496 + 4 + 21864 - 26 - 34 - 3246 + 4 + 7 + 24002 - 34 - 42 - 3246 + 7 + 11 + 22848 - 42 - 50 - 3246 + 11 + 16 + 23833 - 50 - 61 - 3121 + 16 + 21 + 23974 - 61 - 67 - 3246 + 21 + 26 + 20625 - 67 - 76 - 3496 + 26 + 31 + 22145 - 76 - 88 - 3246 + 31 + 36 + 24171 - 89 - 102 - 3121 + 36 + 40 + 21526 - 102 - 116 - 3496 + 40 + 44 + 22680 - 116 - 133 - 3121 + 44 + 49 + 22820 - 136 - 363 - 1498 + 49 + 63 + 12240 - beginLine - id + startLine + endLine 12 @@ -3989,133 +9285,111 @@ 1 2 - 4961954 + 139344 2 3 - 779773 + 61286 3 4 - 544405 + 37790 4 - 12 - 570876 - - - 12 - 97 - 563134 + 6 + 20035 - 97 - 637 - 87279 + 6 + 23 + 4277 - beginLine - file + startLine + endColumn 12 1 - 2 - 5024012 + 4 + 23214 - 2 - 3 - 1222414 + 4 + 7 + 22792 - 3 - 6 - 640550 + 7 + 11 + 22483 - 6 - 57 - 563509 + 11 + 16 + 22201 - 57 - 329 - 56937 + 16 + 21 + 22511 - - - - - - beginLine - beginColumn - - - 12 - - 1 - 2 - 5646457 + 21 + 27 + 22933 - 2 - 3 - 483596 + 27 + 33 + 22539 - 3 - 7 - 582613 + 33 + 38 + 19809 - 7 - 25 - 566256 + 38 + 43 + 21357 - 25 - 94 - 228500 + 43 + 47 + 20006 - - - - - - beginLine - endLine - - - 12 - - 1 - 2 - 7041183 + 47 + 52 + 23102 - 2 - 85 - 466240 + 52 + 66 + 19725 + + + 68 + 69 + 56 - beginLine - endColumn + startColumn + id 12 @@ -4123,40 +9397,75 @@ 1 2 - 5031004 + 422 2 - 3 - 740066 - - - 3 4 - 540284 + 253 4 - 12 - 587483 + 8 + 281 - 12 - 72 - 565257 + 8 + 26 + 281 - 72 - 250 - 43327 + 43 + 253 + 253 + + + 278 + 844 + 253 + + + 949 + 1891 + 253 + + + 2093 + 4169 + 253 + + + 4251 + 7004 + 253 + + + 7173 + 11370 + 253 + + + 12331 + 15107 + 253 + + + 15374 + 30162 + 253 + + + 30211 + 49563 + 112 - beginColumn - id + startColumn + container 12 @@ -4164,75 +9473,75 @@ 1 2 - 1748 + 450 2 - 6 - 1997 + 3 + 168 - 6 - 12 - 1872 + 3 + 4 + 196 - 12 - 40 - 1748 + 4 + 6 + 253 - 49 - 128 - 1748 + 7 + 32 + 253 - 129 - 253 - 1748 + 43 + 99 + 253 - 316 - 707 - 1748 + 101 + 121 + 253 - 791 - 1267 - 1748 + 121 + 130 + 253 - 1281 - 1943 - 1748 + 130 + 138 + 253 - 2017 - 2398 - 1748 + 138 + 142 + 281 - 2491 - 3203 - 1748 + 142 + 144 + 225 - 3252 - 7915 - 1748 + 144 + 150 + 281 - 10983 - 121029 - 624 + 151 + 158 + 253 - beginColumn - file + startColumn + startLine 12 @@ -4240,75 +9549,75 @@ 1 2 - 1997 + 422 2 4 - 1748 + 253 4 7 - 1748 + 253 7 - 18 - 1872 + 19 + 253 - 19 - 43 - 1748 + 20 + 152 + 253 - 44 - 60 - 1748 + 199 + 588 + 253 - 66 - 93 - 1748 + 633 + 1287 + 253 - 96 - 117 - 1748 + 1365 + 2343 + 253 - 117 - 150 - 1748 + 2576 + 3504 + 253 - 150 - 169 - 1748 + 3522 + 4709 + 253 - 169 - 181 - 1748 + 4736 + 5298 + 253 - 182 - 217 - 1872 + 5332 + 5999 + 253 - 243 - 329 - 499 + 6157 + 6996 + 168 - beginColumn - beginLine + startColumn + endLine 12 @@ -4316,75 +9625,75 @@ 1 2 - 1872 + 422 2 - 5 - 1872 + 4 + 253 - 5 - 11 - 1748 + 4 + 7 + 253 - 11 - 36 - 1748 + 7 + 19 + 253 - 36 - 101 - 1748 + 20 + 152 + 253 - 108 - 217 - 1748 + 199 + 588 + 253 - 226 - 543 - 1748 + 648 + 1289 + 253 - 633 - 1057 - 1748 + 1365 + 2347 + 253 - 1072 - 1409 - 1748 + 2579 + 3510 + 253 - 1416 - 1614 - 1748 + 3529 + 4710 + 253 - 1615 - 1810 - 1748 + 4739 + 5323 + 253 - 1826 - 3777 - 1748 + 5346 + 6023 + 253 - 3834 - 59554 - 749 + 6201 + 7039 + 168 - beginColumn - endLine + startColumn + endColumn 12 @@ -4392,143 +9701,143 @@ 1 2 - 1872 + 450 2 - 5 - 1872 + 3 + 168 - 5 - 11 - 1748 + 3 + 5 + 253 - 11 - 36 - 1748 + 5 + 9 + 253 - 36 - 102 - 1748 + 9 + 13 + 253 - 109 - 218 - 1748 + 13 + 20 + 253 - 225 - 545 - 1748 + 20 + 30 + 253 - - 631 - 1055 - 1748 + + 30 + 42 + 253 - 1074 - 1407 - 1748 + 44 + 60 + 281 - 1425 - 1611 - 1748 + 60 + 69 + 253 - 1614 - 1807 - 1748 + 69 + 74 + 253 - 1827 - 3760 - 1748 + 74 + 84 + 309 - 3827 - 59562 - 749 + 84 + 96 + 140 - beginColumn - endColumn + endLine + id 12 1 - 2 - 2122 - - - 2 5 - 1498 + 22089 5 - 8 - 1623 + 9 + 22567 - 8 - 13 - 1748 + 9 + 15 + 21638 - 13 + 15 23 - 1997 + 20654 23 - 33 - 1872 + 32 + 21413 - 34 + 32 44 - 1748 + 20175 - 45 - 57 - 1748 + 44 + 60 + 19838 - 58 - 74 - 1997 + 60 + 80 + 20935 - 77 - 86 - 1872 + 80 + 103 + 19866 - 86 - 98 - 1748 + 103 + 130 + 20063 - 98 - 160 - 1748 + 130 + 159 + 20006 - 258 - 299 - 249 + 159 + 193 + 19725 + + + 193 + 296 + 13731 @@ -4536,7 +9845,7 @@ endLine - id + container 12 @@ -4544,89 +9853,67 @@ 1 2 - 4959832 + 32191 2 3 - 782270 + 21301 3 4 - 545279 + 15532 4 - 12 - 568379 + 6 + 21976 - 12 - 96 - 564758 + 6 + 8 + 18459 - 96 - 620 - 88028 + 8 + 11 + 22567 - - - - - - endLine - file - - - 12 - - 1 - 2 - 5021140 + 11 + 15 + 19838 - 2 - 3 - 1224912 + 15 + 20 + 22877 - 3 - 6 - 633932 + 20 + 26 + 20513 - 6 - 52 - 564633 + 26 + 33 + 21976 - 52 - 329 - 63930 + 33 + 40 + 19950 - - - - - - endLine - beginLine - - - 12 - - 1 - 2 - 7057915 + 40 + 49 + 20091 - 2 - 18 - 450632 + 49 + 61 + 5430 @@ -4634,7 +9921,7 @@ endLine - beginColumn + startLine 12 @@ -4642,27 +9929,27 @@ 1 2 - 5645583 + 130621 2 3 - 480974 + 68406 3 - 7 - 587608 + 4 + 40267 - 7 - 25 - 569752 + 4 + 6 + 21441 - 25 - 89 - 224629 + 6 + 11 + 1969 @@ -4670,101 +9957,141 @@ endLine - endColumn + startColumn 12 1 - 2 - 5029631 + 4 + 21667 - 2 - 3 - 744436 + 4 + 7 + 23890 - 3 - 4 - 540035 + 7 + 11 + 22567 - 4 - 12 - 588107 + 11 + 16 + 23749 - 12 - 72 - 563509 + 16 + 21 + 23693 - 72 - 250 - 42828 + 21 + 26 + 20738 + + + 26 + 31 + 22342 + + + 31 + 36 + 24143 + + + 36 + 40 + 20935 + + + 40 + 44 + 22651 + + + 44 + 49 + 23214 + + + 49 + 63 + 13112 - endColumn - id + endLine + endColumn 12 1 - 2 - 15732 - - - 2 - 3 - 5618 + 4 + 23524 - 3 + 4 7 - 4245 + 22989 7 - 17 - 4120 + 11 + 22483 - 17 - 33 - 4120 + 11 + 16 + 23102 - 33 - 106 - 4120 + 16 + 21 + 21920 - 114 - 689 - 4120 + 21 + 26 + 19866 - 721 - 2458 - 4120 + 26 + 32 + 22117 - 2593 - 4731 - 4120 + 32 + 38 + 23946 + + + 38 + 43 + 22173 + + + 43 + 47 + 19838 + + + 47 + 52 + 22820 - 4759 - 33780 - 3121 + 52 + 69 + 17924 @@ -4772,7 +10099,7 @@ endColumn - file + id 12 @@ -4780,52 +10107,67 @@ 1 2 - 18604 + 309 2 - 3 - 5618 - - - 3 - 5 - 3621 + 4 + 309 - 5 - 7 - 3745 + 4 + 10 + 281 - 7 + 10 16 - 4370 + 337 16 - 80 - 4120 + 51 + 309 - 81 - 152 - 4245 + 56 + 618 + 309 - 158 - 212 - 4245 + 841 + 2290 + 309 - 212 - 265 - 4120 + 2328 + 4142 + 309 - 265 - 329 - 749 + 4177 + 7140 + 309 + + + 8235 + 11725 + 309 + + + 12344 + 15458 + 309 + + + 15684 + 18219 + 309 + + + 18696 + 19124 + 112 @@ -4833,7 +10175,7 @@ endColumn - beginLine + container 12 @@ -4841,52 +10183,67 @@ 1 2 - 15982 + 450 2 - 3 - 5993 + 4 + 281 - 3 - 8 - 4245 + 4 + 6 + 281 - 8 - 18 - 4370 + 6 + 12 + 309 - 18 - 42 - 4120 + 12 + 41 + 309 - 43 - 218 - 4120 + 50 + 114 + 309 - 235 - 759 - 4120 + 115 + 128 + 309 + + + 128 + 137 + 281 + + + 137 + 142 + 337 + + + 142 + 146 + 281 - 768 - 2177 - 4120 + 146 + 148 + 281 - 2209 - 2884 - 4120 + 148 + 152 + 309 - 2885 - 30763 - 2247 + 152 + 163 + 84 @@ -4894,7 +10251,7 @@ endColumn - beginColumn + startLine 12 @@ -4902,52 +10259,67 @@ 1 2 - 17231 + 422 2 - 3 - 6243 - - - 3 4 - 3246 + 225 4 - 7 - 4245 + 8 + 337 - 7 - 14 - 4245 + 8 + 15 + 309 - 14 - 28 - 4120 + 18 + 54 + 309 - 28 - 45 - 4245 + 74 + 489 + 309 - 45 - 69 - 4120 + 511 + 1338 + 309 - 69 - 81 - 4245 + 1390 + 2420 + 309 - 81 - 117 - 1498 + 2767 + 3740 + 309 + + + 3802 + 4530 + 309 + + + 4643 + 5303 + 309 + + + 5379 + 5736 + 309 + + + 5747 + 5806 + 56 @@ -4955,7 +10327,7 @@ endColumn - endLine + startColumn 12 @@ -4963,124 +10335,70 @@ 1 2 - 15982 + 365 2 - 3 - 5993 + 4 + 281 - 3 - 8 - 4245 + 4 + 9 + 337 - 8 - 18 - 4370 + 9 + 14 + 337 - 18 - 41 - 4120 + 14 + 22 + 337 - 43 - 217 - 4120 + 23 + 28 + 309 - 233 - 756 - 4120 + 28 + 36 + 309 - 768 - 2177 - 4120 + 36 + 41 + 309 - 2208 - 2858 - 4120 + 41 + 47 + 309 - 2868 - 30757 - 2247 + 47 + 56 + 309 - - - - - - - - files - 65232 - - - id - 65232 - - - name - 65232 - - - - - id - name - - - 12 - - 1 - 2 - 65232 + 56 + 64 + 309 - - - - - - name - id - - - 12 - - 1 - 2 - 65232 + 64 + 72 + 309 - - - - folders - 12393 - - - id - 12393 - - - name - 12393 - - - - id - name + endColumn + endLine 12 @@ -5088,106 +10406,67 @@ 1 2 - 12393 + 422 - - - - - - name - id - - - 12 - - 1 - 2 - 12393 + 2 + 4 + 225 - - - - - - - - containerparent - 77604 - - - parent - 12393 - - - child - 77604 - - - - - parent - child - - - 12 - - 1 - 2 - 6032 + 4 + 8 + 337 - 2 - 3 - 1521 + 8 + 15 + 309 - 3 - 4 - 665 + 17 + 54 + 309 - 4 - 6 - 1003 + 74 + 471 + 309 - 6 - 10 - 972 + 500 + 1307 + 309 - 10 - 16 - 1003 + 1356 + 2389 + 309 - 16 - 44 - 929 + 2629 + 3660 + 309 - 44 - 151 - 264 + 3731 + 4490 + 309 - - - - - - child - parent - - - 12 - - 1 - 2 - 77604 + 4640 + 5281 + 309 + + + 5368 + 5729 + 309 + + + 5734 + 5796 + 56 @@ -5197,23 +10476,23 @@ numlines - 808616 + 808529 element_id - 807492 + 807405 num_lines - 39456 + 39477 num_code - 34087 + 33980 num_comment - 18230 + 18364 @@ -5227,12 +10506,12 @@ 1 2 - 806369 + 806280 2 3 - 1123 + 1124 @@ -5248,12 +10527,12 @@ 1 2 - 806369 + 806280 2 3 - 1123 + 1124 @@ -5269,7 +10548,7 @@ 1 2 - 807243 + 807155 2 @@ -5290,27 +10569,27 @@ 1 2 - 26720 + 26734 2 3 - 3745 + 3747 3 5 - 3371 + 3373 5 - 35 - 2996 + 37 + 3123 - 39 - 1983 - 2622 + 41 + 1978 + 2498 @@ -5326,27 +10605,27 @@ 1 2 - 27220 + 27234 2 3 - 4120 + 4122 3 4 - 2497 + 2498 4 7 - 3496 + 3497 7 12 - 2122 + 2123 @@ -5362,27 +10641,27 @@ 1 2 - 26845 + 26859 2 3 - 4120 + 4122 3 4 - 2372 + 2498 4 6 - 3246 + 3123 6 - 10 - 2871 + 11 + 2873 @@ -5398,31 +10677,31 @@ 1 2 - 21851 + 21612 2 3 - 3621 + 3747 3 4 - 2372 + 2373 4 13 - 2871 + 2873 14 - 198 - 2622 + 197 + 2623 - 204 - 2092 + 205 + 2101 749 @@ -5439,32 +10718,32 @@ 1 2 - 22225 + 21987 2 3 - 3621 + 3747 3 4 - 2122 + 2123 4 6 - 1872 + 1873 6 9 - 2746 + 2748 9 13 - 1498 + 1499 @@ -5480,27 +10759,27 @@ 1 2 - 21975 + 21737 2 3 - 4245 + 4372 3 5 - 2871 + 2873 5 8 - 3121 + 3123 8 12 - 1872 + 1873 @@ -5516,32 +10795,32 @@ 1 2 - 11112 + 11368 2 3 - 2122 + 1748 3 4 - 1123 + 1499 4 7 - 1498 + 1374 8 - 21 - 1373 + 22 + 1499 - 21 - 3651 - 998 + 42 + 3650 + 874 @@ -5557,32 +10836,32 @@ 1 2 - 11112 + 11368 2 3 - 2122 + 1748 3 4 - 1123 + 1499 4 7 - 1623 + 1499 8 - 21 - 1373 + 27 + 1499 - 26 + 30 48 - 874 + 749 @@ -5598,32 +10877,32 @@ 1 2 - 11112 + 11368 2 3 - 2122 + 1748 3 4 - 1373 + 1748 4 - 7 - 1373 + 9 + 1499 - 7 - 21 - 1373 + 10 + 36 + 1624 - 23 - 42 - 874 + 36 + 43 + 374 @@ -5633,11 +10912,11 @@ diagnostics - 1483 + 1484 id - 1483 + 1484 severity @@ -5645,7 +10924,7 @@ error_tag - 42 + 43 error_message @@ -5671,7 +10950,7 @@ 1 2 - 1483 + 1484 @@ -5687,7 +10966,7 @@ 1 2 - 1483 + 1484 @@ -5703,7 +10982,7 @@ 1 2 - 1483 + 1484 @@ -5719,7 +10998,7 @@ 1 2 - 1483 + 1484 @@ -5735,7 +11014,7 @@ 1 2 - 1483 + 1484 @@ -5852,7 +11131,7 @@ 1 2 - 42 + 43 @@ -5931,7 +11210,7 @@ 1 2 - 128 + 129 63 @@ -6016,7 +11295,7 @@ 1 2 - 128 + 129 63 @@ -6101,7 +11380,7 @@ 3 4 - 42 + 43 63 @@ -6159,7 +11438,7 @@ 3 4 - 42 + 43 @@ -6180,7 +11459,7 @@ 3 4 - 42 + 43 @@ -6189,22 +11468,22 @@ - extractor_version - 124 + files + 74641 - codeql_version - 124 + id + 74641 - frontend_version - 124 + name + 74641 - codeql_version - frontend_version + id + name 12 @@ -6212,15 +11491,15 @@ 1 2 - 124 + 74641 - frontend_version - codeql_version + name + id 12 @@ -6228,7 +11507,138 @@ 1 2 - 124 + 74641 + + + + + + + + + folders + 14181 + + + id + 14181 + + + name + 14181 + + + + + id + name + + + 12 + + + 1 + 2 + 14181 + + + + + + + name + id + + + 12 + + + 1 + 2 + 14181 + + + + + + + + + containerparent + 88798 + + + parent + 14181 + + + child + 88798 + + + + + parent + child + + + 12 + + + 1 + 2 + 6903 + + + 2 + 3 + 1740 + + + 3 + 4 + 761 + + + 4 + 6 + 1148 + + + 6 + 10 + 1112 + + + 10 + 16 + 1148 + + + 16 + 44 + 1063 + + + 44 + 151 + 302 + + + + + + + child + parent + + + 12 + + + 1 + 2 + 88798 @@ -6238,23 +11648,23 @@ fileannotations - 4201815 + 4807876 id - 5768 + 6600 kind - 21 + 24 name - 58734 + 67206 value - 39526 + 45227 @@ -6268,12 +11678,12 @@ 1 2 - 200 + 229 2 3 - 5568 + 6371 @@ -6289,62 +11699,62 @@ 1 86 - 433 + 495 88 206 - 433 + 495 212 291 - 443 + 507 291 359 - 433 + 495 362 401 - 433 + 495 402 479 - 433 + 495 480 549 - 253 + 290 550 551 - 1331 + 1523 553 628 - 433 + 495 631 753 - 454 + 519 753 1231 - 443 + 507 1234 2155 - 243 + 278 @@ -6360,67 +11770,67 @@ 1 98 - 433 + 495 102 244 - 433 + 495 244 351 - 433 + 495 352 434 - 443 + 507 434 490 - 443 + 507 490 628 - 433 + 495 632 702 - 63 + 72 706 707 - 1331 + 1523 710 939 - 433 + 495 939 1038 - 433 + 495 1066 1853 - 433 + 495 1853 3292 - 433 + 495 3423 3742 - 21 + 24 @@ -6436,12 +11846,12 @@ 527 528 - 10 + 12 546 547 - 10 + 12 @@ -6457,12 +11867,12 @@ 2 3 - 10 + 12 5557 5558 - 10 + 12 @@ -6478,12 +11888,12 @@ 1 2 - 10 + 12 3741 3742 - 10 + 12 @@ -6499,62 +11909,62 @@ 1 2 - 11030 + 12621 2 3 - 4363 + 4993 3 5 - 5060 + 5790 5 7 - 4099 + 4690 7 9 - 4596 + 5258 9 16 - 4331 + 4956 16 19 - 4891 + 5597 19 27 - 4257 + 4872 27 47 - 4839 + 5537 47 128 - 4923 + 5633 128 459 - 4627 + 5295 459 546 - 1711 + 1958 @@ -6570,7 +11980,7 @@ 1 2 - 58734 + 67206 @@ -6586,57 +11996,57 @@ 1 2 - 11590 + 13262 2 3 - 7691 + 8801 3 4 - 4099 + 4690 4 6 - 4067 + 4654 6 8 - 3423 + 3917 8 11 - 4743 + 5428 11 17 - 5399 + 6177 17 23 - 4701 + 5379 23 41 - 4680 + 5355 41 95 - 4469 + 5113 95 1726 - 3867 + 4424 @@ -6652,72 +12062,72 @@ 1 2 - 3359 + 3844 2 4 - 1637 + 1873 4 5 - 3190 + 3651 5 8 - 2461 + 2816 8 14 - 2968 + 3397 14 17 - 1933 + 2212 17 24 - 3042 + 3481 24 51 - 3539 + 4050 51 58 - 3032 + 3469 58 80 - 2979 + 3409 81 151 - 3085 + 3530 151 334 - 2979 + 3409 334 473 - 3000 + 3433 473 547 - 2313 + 2647 @@ -6733,12 +12143,12 @@ 1 2 - 39515 + 45215 2 3 - 10 + 12 @@ -6754,72 +12164,72 @@ 1 2 - 3402 + 3892 2 4 - 1912 + 2188 4 5 - 3053 + 3493 5 8 - 2482 + 2841 8 14 - 3486 + 3989 14 18 - 3454 + 3953 18 28 - 3201 + 3663 28 34 - 3148 + 3602 34 41 - 3201 + 3663 41 66 - 2990 + 3421 66 92 - 3074 + 3518 92 113 - 2990 + 3421 113 145 - 3032 + 3469 145 172 - 95 + 108 @@ -6829,15 +12239,15 @@ inmacroexpansion - 149996022 + 149995966 id - 24670888 + 24670876 inv - 3705273 + 3705264 @@ -6851,7 +12261,7 @@ 1 3 - 2209400 + 2209396 3 @@ -6861,27 +12271,27 @@ 5 6 - 1620370 + 1620369 6 7 - 6582548 + 6582546 7 8 - 8719004 + 8719001 8 9 - 3557050 + 3557049 9 22 - 507535 + 507534 @@ -6897,7 +12307,7 @@ 1 2 - 531662 + 531654 2 @@ -6957,15 +12367,15 @@ affectedbymacroexpansion - 48735860 + 48735844 id - 7044743 + 7044741 inv - 3803123 + 3803122 @@ -6979,7 +12389,7 @@ 1 2 - 3846711 + 3846709 2 @@ -6989,7 +12399,7 @@ 3 4 - 361842 + 361841 4 @@ -7040,7 +12450,7 @@ 9 12 - 342939 + 342938 12 @@ -7065,7 +12475,7 @@ 16 17 - 377678 + 377677 17 @@ -7095,19 +12505,19 @@ macroinvocations - 40338485 + 39390675 id - 40338485 + 39390675 macro_id - 182070 + 181997 location - 5912757 + 5904643 kind @@ -7125,7 +12535,7 @@ 1 2 - 40338485 + 39390675 @@ -7141,7 +12551,7 @@ 1 2 - 40338485 + 39390675 @@ -7157,7 +12567,7 @@ 1 2 - 40338485 + 39390675 @@ -7173,47 +12583,47 @@ 1 2 - 60781 + 60738 2 3 - 27558 + 27781 3 4 - 17972 + 17921 4 5 - 10021 + 9805 5 7 - 13779 + 14272 7 13 - 14705 + 14381 13 33 - 13779 + 13890 33 - 180 - 13670 + 185 + 13672 - 181 - 72144 - 9803 + 190 + 70079 + 9532 @@ -7229,42 +12639,42 @@ 1 2 - 77283 + 77243 2 3 - 30553 + 30559 3 4 - 14323 + 14326 4 5 - 10293 + 10350 5 8 - 14106 + 14054 8 18 - 14160 + 14108 18 88 - 13670 + 13672 - 89 - 12189 - 7679 + 88 + 12162 + 7680 @@ -7280,12 +12690,12 @@ 1 2 - 177496 + 177475 2 3 - 4574 + 4521 @@ -7301,17 +12711,17 @@ 1 2 - 5255929 + 5248396 2 - 4 - 422363 + 3 + 248074 - 4 - 72144 - 234464 + 3 + 70079 + 408172 @@ -7327,12 +12737,12 @@ 1 2 - 5890590 + 5882472 2 37 - 22166 + 22170 @@ -7348,7 +12758,7 @@ 1 2 - 5912757 + 5904643 @@ -7362,13 +12772,13 @@ 12 - 1490 - 1491 + 1470 + 1471 54 - 739164 - 739165 + 721641 + 721642 54 @@ -7383,13 +12793,13 @@ 12 - 282 - 283 + 281 + 282 54 - 3145 - 3146 + 3143 + 3144 54 @@ -7404,13 +12814,13 @@ 12 - 1069 - 1070 + 1060 + 1061 54 - 107495 - 107496 + 107334 + 107335 54 @@ -7421,15 +12831,15 @@ macroparent - 33655998 + 32844710 id - 33655998 + 32844710 parent_id - 15926385 + 15561449 @@ -7443,7 +12853,7 @@ 1 2 - 33655998 + 32844710 @@ -7459,27 +12869,27 @@ 1 2 - 7806501 + 7669107 2 3 - 1595448 + 1551198 3 4 - 4702908 + 4552710 4 5 - 1295464 + 1263086 5 205 - 526061 + 525346 @@ -7489,15 +12899,15 @@ macrolocationbind - 6058841 + 6883157 id - 4241799 + 4222542 location - 2277063 + 2746954 @@ -7511,27 +12921,27 @@ 1 2 - 3316469 + 2460116 2 3 - 490781 + 1326251 3 4 - 7888 + 8261 4 5 - 413483 + 413540 5 17 - 13176 + 14372 @@ -7547,27 +12957,27 @@ 1 2 - 1335697 + 1393959 2 3 - 481667 + 907138 3 4 - 7802 + 8735 4 5 - 427799 + 410829 5 522 - 24096 + 26291 @@ -7577,19 +12987,19 @@ macro_argument_unexpanded - 82524830 + 94276712 invocation - 26294983 + 30002299 argument_index - 697 + 797 text - 343373 + 392900 @@ -7603,22 +13013,22 @@ 1 2 - 9687115 + 11044782 2 3 - 9773574 + 11156139 3 4 - 5003770 + 5707682 4 67 - 1830521 + 2093693 @@ -7634,22 +13044,22 @@ 1 2 - 9869806 + 11253824 2 3 - 9791124 + 11175326 3 4 - 4847060 + 5529264 4 67 - 1786991 + 2043884 @@ -7665,17 +13075,17 @@ 46457 46458 - 612 + 701 46659 - 173253 - 52 + 173182 + 60 - 646840 - 2488722 - 31 + 645295 + 2481657 + 36 @@ -7691,17 +13101,17 @@ 2 3 - 612 + 701 13 1115 - 52 + 60 7702 22873 - 31 + 36 @@ -7717,57 +13127,57 @@ 1 2 - 39716 + 46351 2 3 - 62347 + 71401 3 4 - 21036 + 26476 4 5 - 34591 + 39714 5 6 - 39261 + 44779 6 9 - 30883 + 32714 9 15 - 28992 + 32847 15 - 26 - 25896 + 27 + 29933 - 26 + 27 57 - 27153 + 30441 57 517 - 26002 + 29680 518 - 486610 - 7491 + 485092 + 8559 @@ -7783,17 +13193,17 @@ 1 2 - 243253 + 278339 2 3 - 89903 + 102870 3 9 - 10216 + 11690 @@ -7803,19 +13213,19 @@ macro_argument_expanded - 82524830 + 94276712 invocation - 26294983 + 30002299 argument_index - 697 + 797 text - 207995 + 237996 @@ -7829,22 +13239,22 @@ 1 2 - 9687115 + 11044782 2 3 - 9773574 + 11156139 3 4 - 5003770 + 5707682 4 67 - 1830521 + 2093693 @@ -7860,22 +13270,22 @@ 1 2 - 12646684 + 14421415 2 3 - 8431006 + 9625327 3 4 - 4226602 + 4822818 4 9 - 990689 + 1132737 @@ -7891,17 +13301,17 @@ 46457 46458 - 612 + 701 46659 - 173253 - 52 + 173182 + 60 - 646840 - 2488722 - 31 + 645295 + 2481657 + 36 @@ -7917,17 +13327,17 @@ 1 2 - 602 + 689 2 96 - 52 + 60 950 16176 - 42 + 48 @@ -7943,57 +13353,57 @@ 1 2 - 21839 + 25243 2 3 - 26868 + 31324 3 4 - 43509 + 52203 4 5 - 15911 + 18400 5 6 - 3264 + 3542 6 7 - 18405 + 20842 7 10 - 18975 + 19355 10 19 - 18331 + 20576 19 51 - 15785 + 17856 51 - 252 - 15605 + 253 + 17989 - 252 - 1169625 - 9498 + 254 + 1166783 + 10663 @@ -8009,17 +13419,17 @@ 1 2 - 105117 + 120279 2 3 - 88941 + 101770 3 66 - 13936 + 15946 @@ -8029,19 +13439,19 @@ functions - 4053072 + 4010790 id - 4053072 + 4010790 name - 1694898 + 1648540 kind - 998 + 999 @@ -8055,7 +13465,7 @@ 1 2 - 4053072 + 4010790 @@ -8071,7 +13481,7 @@ 1 2 - 4053072 + 4010790 @@ -8087,17 +13497,17 @@ 1 2 - 1448542 + 1402308 2 4 - 139098 + 139168 4 3162 - 107257 + 107062 @@ -8113,12 +13523,12 @@ 1 2 - 1692026 + 1645667 2 3 - 2871 + 2873 @@ -8152,13 +13562,13 @@ 124 - 691 - 692 + 690 + 691 124 - 4453 - 4454 + 4450 + 4451 124 @@ -8167,8 +13577,8 @@ 124 - 21935 - 21936 + 21584 + 21585 124 @@ -8218,8 +13628,8 @@ 124 - 12674 - 12675 + 12296 + 12297 124 @@ -8230,15 +13640,15 @@ function_entry_point - 1141500 + 1141046 id - 1137753 + 1137298 entry_point - 1141500 + 1141046 @@ -8252,12 +13662,12 @@ 1 2 - 1134551 + 1134095 2 17 - 3202 + 3203 @@ -8273,7 +13683,7 @@ 1 2 - 1141500 + 1141046 @@ -8283,15 +13693,15 @@ function_return_type - 4070553 + 4028280 id - 4053072 + 4010790 return_type - 619822 + 622887 @@ -8305,12 +13715,12 @@ 1 2 - 4035591 + 3993300 2 3 - 17480 + 17489 @@ -8326,27 +13736,27 @@ 1 2 - 310161 + 312942 2 3 - 213891 + 213500 3 5 - 48072 + 48471 5 - 365 - 46574 + 354 + 46722 - 432 - 9944 - 1123 + 358 + 9897 + 1249 @@ -8626,59 +14036,59 @@ purefunctions - 131414 + 138721 id - 131414 + 138721 function_deleted - 88001 + 88082 id - 88001 + 88082 function_defaulted - 51631 + 51679 id - 51631 + 51679 function_prototyped - 4051574 + 4009291 id - 4051574 + 4009291 deduction_guide_for_class - 5868 + 5871 id - 5868 + 5871 class_template - 2247 + 2248 @@ -8692,7 +14102,7 @@ 1 2 - 5868 + 5871 @@ -8708,7 +14118,7 @@ 1 2 - 1123 + 1124 2 @@ -8743,15 +14153,15 @@ member_function_this_type - 674762 + 676231 id - 674762 + 676231 this_type - 176182 + 177646 @@ -8765,7 +14175,7 @@ 1 2 - 674762 + 676231 @@ -8781,37 +14191,37 @@ 1 2 - 47198 + 48721 2 3 - 36959 + 36853 3 4 - 32714 + 32855 4 5 - 20103 + 19988 5 6 - 12860 + 12867 6 10 - 14484 + 14491 10 65 - 11862 + 11868 @@ -8821,27 +14231,27 @@ fun_decls - 4212773 + 4155705 id - 4206779 + 4149709 function - 4028474 + 3986304 type_id - 611831 + 614892 name - 1693400 + 1647041 location - 2815799 + 2769887 @@ -8855,7 +14265,7 @@ 1 2 - 4206779 + 4149709 @@ -8871,12 +14281,12 @@ 1 2 - 4200786 + 4143712 2 3 - 5993 + 5996 @@ -8892,7 +14302,7 @@ 1 2 - 4206779 + 4149709 @@ -8908,7 +14318,7 @@ 1 2 - 4206779 + 4149709 @@ -8924,12 +14334,12 @@ 1 2 - 3864778 + 3836266 2 - 5 - 163696 + 4 + 150037 @@ -8945,12 +14355,12 @@ 1 2 - 4009994 + 3967815 2 3 - 18479 + 18489 @@ -8966,7 +14376,7 @@ 1 2 - 4028474 + 3986304 @@ -8982,12 +14392,12 @@ 1 2 - 3885256 + 3843012 2 4 - 143218 + 143291 @@ -9003,27 +14413,27 @@ 1 2 - 295427 + 298201 2 3 - 220758 + 220371 3 5 - 48447 + 48846 5 - 364 - 45949 + 354 + 46223 - 364 - 10292 - 1248 + 358 + 10246 + 1249 @@ -9039,26 +14449,26 @@ 1 2 - 305541 + 308320 2 3 - 212018 + 211626 3 5 - 48072 + 48471 5 - 1163 - 45949 + 1033 + 46223 1483 - 9893 + 9847 249 @@ -9075,22 +14485,22 @@ 1 2 - 491962 + 494587 2 3 - 52942 + 52719 3 7 - 50195 + 51095 7 - 2238 - 16731 + 2211 + 16490 @@ -9106,22 +14516,22 @@ 1 2 - 455377 + 457983 2 3 - 69549 + 69459 3 6 - 56063 + 55842 6 - 4756 - 30841 + 4728 + 31606 @@ -9137,22 +14547,22 @@ 1 2 - 1332544 + 1297744 2 3 - 194662 + 183892 3 - 11 - 129608 + 10 + 125551 - 11 + 10 3169 - 36585 + 39851 @@ -9168,17 +14578,17 @@ 1 2 - 1448043 + 1401809 2 4 - 139597 + 139543 4 3162 - 105759 + 105688 @@ -9194,12 +14604,12 @@ 1 2 - 1603498 + 1556968 2 1596 - 89901 + 90072 @@ -9215,17 +14625,17 @@ 1 2 - 1368505 + 1322105 2 3 - 208522 + 208503 3 1592 - 116372 + 116432 @@ -9241,17 +14651,17 @@ 1 2 - 2422478 + 2390108 2 3 - 251725 + 237736 3 211 - 141595 + 142042 @@ -9267,17 +14677,17 @@ 1 2 - 2441208 + 2393856 2 3 - 233494 + 234488 3 211 - 141095 + 141542 @@ -9293,12 +14703,12 @@ 1 2 - 2701299 + 2654579 2 211 - 114499 + 115307 @@ -9314,12 +14724,12 @@ 1 2 - 2776592 + 2730660 2 8 - 39207 + 39227 @@ -9329,22 +14739,22 @@ fun_def - 1423570 + 1413177 id - 1423570 + 1413177 fun_specialized - 7936 + 8435 id - 7936 + 8435 @@ -9362,15 +14772,15 @@ fun_decl_specifiers - 4283570 + 4102237 id - 1749838 + 1688267 name - 1373 + 1374 @@ -9384,22 +14794,22 @@ 1 2 - 363228 + 361539 2 3 - 262463 + 262472 3 4 - 1101172 + 1041268 4 5 - 22974 + 22986 @@ -9433,8 +14843,8 @@ 124 - 561 - 562 + 546 + 547 124 @@ -9448,23 +14858,23 @@ 124 - 1093 - 1094 + 1089 + 1090 124 - 8148 - 8149 + 7668 + 7669 124 - 11028 - 11029 + 10543 + 10544 124 - 11099 - 11100 + 10614 + 10615 124 @@ -9596,26 +15006,26 @@ fun_decl_empty_throws - 420457 + 437033 fun_decl - 420457 + 437033 fun_decl_noexcept - 141823 + 141855 fun_decl - 141823 + 141855 constant - 141346 + 141378 @@ -9629,7 +15039,7 @@ 1 2 - 141823 + 141855 @@ -9645,7 +15055,7 @@ 1 2 - 140903 + 140935 2 @@ -9660,11 +15070,11 @@ fun_decl_empty_noexcept - 1164727 + 1163822 fun_decl - 1164727 + 1163822 @@ -9769,19 +15179,19 @@ fun_requires - 29083 + 29109 id - 10102 + 10112 kind - 42 + 43 constraint - 28846 + 28873 @@ -9795,7 +15205,7 @@ 1 2 - 10038 + 10047 2 @@ -9816,7 +15226,7 @@ 1 2 - 7265 + 7272 2 @@ -9826,7 +15236,7 @@ 3 6 - 859 + 860 6 @@ -9836,7 +15246,7 @@ 13 14 - 1139 + 1140 19 @@ -9899,7 +15309,7 @@ 1 2 - 28610 + 28636 2 @@ -9920,7 +15330,7 @@ 1 2 - 28846 + 28873 @@ -9930,19 +15340,19 @@ param_decl_bind - 7317007 + 7189939 id - 7317007 + 7189939 index - 7991 + 7995 fun_decl - 3534888 + 3478100 @@ -9956,7 +15366,7 @@ 1 2 - 7317007 + 7189939 @@ -9972,7 +15382,7 @@ 1 2 - 7317007 + 7189939 @@ -9988,12 +15398,12 @@ 2 3 - 3995 + 3997 6 7 - 1997 + 1998 16 @@ -10002,17 +15412,17 @@ 25 - 147 + 143 624 - 343 - 16215 + 332 + 15841 624 - 28310 - 28311 + 27841 + 27842 124 @@ -10029,12 +15439,12 @@ 2 3 - 3995 + 3997 6 7 - 1997 + 1998 16 @@ -10043,17 +15453,17 @@ 25 - 147 + 143 624 - 343 - 16215 + 332 + 15841 624 - 28310 - 28311 + 27841 + 27842 124 @@ -10070,27 +15480,27 @@ 1 2 - 1510350 + 1499252 2 3 - 977182 + 956818 3 4 - 602591 + 579912 4 5 - 290932 + 283085 5 65 - 153831 + 159032 @@ -10106,27 +15516,27 @@ 1 2 - 1510350 + 1499252 2 3 - 977182 + 956818 3 4 - 602591 + 579912 4 5 - 290932 + 283085 5 65 - 153831 + 159032 @@ -10136,27 +15546,27 @@ var_decls - 9398483 + 9269479 id - 9391616 + 9262608 variable - 9042872 + 8972402 type_id - 1457782 + 1462398 name - 853317 + 852378 location - 6280264 + 6204513 @@ -10170,7 +15580,7 @@ 1 2 - 9391616 + 9262608 @@ -10186,12 +15596,12 @@ 1 2 - 9384748 + 9255737 2 3 - 6867 + 6871 @@ -10207,7 +15617,7 @@ 1 2 - 9391616 + 9262608 @@ -10223,7 +15633,7 @@ 1 2 - 9391616 + 9262608 @@ -10239,12 +15649,12 @@ 1 2 - 8711609 + 8695188 2 - 5 - 331263 + 4 + 277213 @@ -10260,12 +15670,12 @@ 1 2 - 8989305 + 8933674 2 3 - 53566 + 38727 @@ -10281,12 +15691,12 @@ 1 2 - 8937362 + 8866713 2 4 - 105509 + 105688 @@ -10302,12 +15712,12 @@ 1 2 - 8791022 + 8720548 2 4 - 251849 + 251853 @@ -10323,27 +15733,27 @@ 1 2 - 850695 + 854752 2 3 - 284314 + 284959 3 5 - 127485 + 128050 5 11 - 113251 + 112934 11 2944 - 82035 + 81702 @@ -10359,27 +15769,27 @@ 1 2 - 871547 + 875115 2 3 - 269330 + 270467 3 5 - 122865 + 123428 5 11 - 113126 + 112934 11 - 2860 - 80911 + 2859 + 80453 @@ -10395,22 +15805,22 @@ 1 2 - 1120526 + 1124970 2 3 - 192789 + 193137 3 7 - 115373 + 115182 7 1038 - 29093 + 29108 @@ -10426,27 +15836,27 @@ 1 2 - 986297 + 990923 2 3 - 219260 + 219122 3 6 - 133728 + 134046 6 95 - 109380 + 109811 97 - 2622 - 9115 + 2570 + 8495 @@ -10462,32 +15872,32 @@ 1 2 - 466365 + 465853 2 3 - 165943 + 165778 3 4 - 59684 + 60090 4 7 - 65927 + 65961 7 - 25 - 64179 + 26 + 64337 - 25 - 27139 - 31215 + 26 + 26622 + 30357 @@ -10503,32 +15913,32 @@ 1 2 - 479351 + 478721 2 3 - 165194 + 165028 3 4 - 54690 + 54968 4 8 - 71671 + 71833 8 - 45 - 64304 + 46 + 63962 - 45 - 26704 - 18105 + 46 + 26187 + 17864 @@ -10544,22 +15954,22 @@ 1 2 - 655284 + 654868 2 3 - 110878 + 110435 3 11 - 65553 + 65336 11 - 3463 - 21601 + 3460 + 21737 @@ -10575,27 +15985,27 @@ 1 2 - 494210 + 493087 2 3 - 183424 + 183268 3 4 - 51693 + 52344 4 8 - 65053 + 65212 8 - 22619 - 58935 + 22104 + 58465 @@ -10611,17 +16021,12 @@ 1 2 - 5780061 + 5756898 2 - 21 - 472733 - - - 21 2943 - 27469 + 447614 @@ -10637,12 +16042,12 @@ 1 2 - 5860972 + 5780884 2 2935 - 419291 + 423628 @@ -10658,12 +16063,12 @@ 1 2 - 5981466 + 5920553 2 2555 - 298798 + 283959 @@ -10679,12 +16084,12 @@ 1 2 - 6267903 + 6192020 2 5 - 12361 + 12492 @@ -10694,33 +16099,33 @@ var_def - 3770381 + 3731827 id - 3770381 + 3731827 var_specialized - 644 + 645 id - 644 + 645 var_decl_specifiers - 490339 + 488965 id - 490339 + 488965 name @@ -10738,7 +16143,7 @@ 1 2 - 490339 + 488965 @@ -10762,13 +16167,13 @@ 124 - 653 - 654 + 651 + 652 124 - 3181 - 3182 + 3170 + 3171 124 @@ -10779,18 +16184,18 @@ is_structured_binding - 945 + 946 id - 945 + 946 var_requires - 386 + 387 id @@ -10798,7 +16203,7 @@ constraint - 386 + 387 @@ -10838,7 +16243,7 @@ 1 2 - 386 + 387 @@ -10848,19 +16253,19 @@ type_decls - 1634964 + 1687349 id - 1634964 + 1687349 type_id - 1615984 + 1650403 location - 1548808 + 1325700 @@ -10874,7 +16279,7 @@ 1 2 - 1634964 + 1687349 @@ -10890,7 +16295,7 @@ 1 2 - 1634964 + 1687349 @@ -10906,12 +16311,12 @@ 1 2 - 1599627 + 1623818 2 - 10 - 16357 + 24 + 26585 @@ -10927,12 +16332,12 @@ 1 2 - 1599752 + 1625003 2 - 10 - 16232 + 24 + 25400 @@ -10948,12 +16353,12 @@ 1 2 - 1526707 + 1257405 2 - 64 - 22100 + 651 + 68294 @@ -10969,12 +16374,12 @@ 1 2 - 1526832 + 1258602 2 - 64 - 21975 + 651 + 67097 @@ -10984,37 +16389,37 @@ type_def - 1096552 + 1157787 id - 1096552 + 1157787 type_decl_top - 673602 + 672534 type_decl - 673602 + 672534 type_requires - 7673 + 7680 id - 2042 + 2043 constraint - 7652 + 7659 @@ -11028,7 +16433,7 @@ 1 2 - 1010 + 1011 2 @@ -11038,12 +16443,12 @@ 5 6 - 601 + 602 6 13 - 171 + 172 13 @@ -11064,7 +16469,7 @@ 1 2 - 7630 + 7637 2 @@ -11079,23 +16484,23 @@ namespace_decls - 407321 + 430963 id - 407321 + 430963 namespace_id - 1844 + 1959 location - 407321 + 430963 bodylocation - 407321 + 430963 @@ -11109,7 +16514,7 @@ 1 2 - 407321 + 430963 @@ -11125,7 +16530,7 @@ 1 2 - 407321 + 430963 @@ -11141,7 +16546,7 @@ 1 2 - 407321 + 430963 @@ -11157,57 +16562,57 @@ 1 2 - 389 + 414 2 3 - 203 + 215 3 6 - 170 + 181 6 15 - 154 + 164 15 34 - 146 + 155 35 62 - 154 + 164 63 87 - 146 + 155 90 - 144 - 154 + 142 + 155 - 146 - 264 - 146 + 143 + 219 + 155 - 268 - 1868 - 146 + 263 + 1505 + 155 - 2205 - 12449 - 32 + 1854 + 12392 + 43 @@ -11223,57 +16628,57 @@ 1 2 - 389 + 414 2 3 - 203 + 215 3 6 - 170 + 181 6 15 - 154 + 164 15 34 - 146 + 155 35 62 - 154 + 164 63 87 - 146 + 155 90 - 144 - 154 + 142 + 155 - 146 - 264 - 146 + 143 + 219 + 155 - 268 - 1868 - 146 + 263 + 1505 + 155 - 2205 - 12449 - 32 + 1854 + 12392 + 43 @@ -11289,57 +16694,57 @@ 1 2 - 389 + 414 2 3 - 203 + 215 3 6 - 170 + 181 6 15 - 154 + 164 15 34 - 146 + 155 35 62 - 154 + 164 63 87 - 146 + 155 90 - 144 - 154 + 142 + 155 - 146 - 264 - 146 + 143 + 219 + 155 - 268 - 1868 - 146 + 263 + 1505 + 155 - 2205 - 12449 - 32 + 1854 + 12392 + 43 @@ -11355,7 +16760,7 @@ 1 2 - 407321 + 430963 @@ -11371,7 +16776,7 @@ 1 2 - 407321 + 430963 @@ -11387,7 +16792,7 @@ 1 2 - 407321 + 430963 @@ -11403,7 +16808,7 @@ 1 2 - 407321 + 430963 @@ -11419,7 +16824,7 @@ 1 2 - 407321 + 430963 @@ -11435,7 +16840,7 @@ 1 2 - 407321 + 430963 @@ -11445,23 +16850,23 @@ usings - 272108 + 311428 id - 272108 + 311428 element_id - 59009 + 67593 location - 26857 + 30731 kind - 21 + 24 @@ -11475,7 +16880,7 @@ 1 2 - 272108 + 311428 @@ -11491,7 +16896,7 @@ 1 2 - 272108 + 311428 @@ -11507,7 +16912,7 @@ 1 2 - 272108 + 311428 @@ -11523,17 +16928,17 @@ 1 2 - 51275 + 58743 2 5 - 5388 + 6165 5 134 - 2345 + 2683 @@ -11549,17 +16954,17 @@ 1 2 - 51275 + 58743 2 5 - 5388 + 6165 5 134 - 2345 + 2683 @@ -11575,7 +16980,7 @@ 1 2 - 59009 + 67593 @@ -11591,22 +16996,22 @@ 1 2 - 21184 + 24239 2 4 - 2303 + 2635 4 132 - 1944 + 2224 145 - 365 - 1426 + 367 + 1632 @@ -11622,22 +17027,22 @@ 1 2 - 21184 + 24239 2 4 - 2303 + 2635 4 132 - 1944 + 2224 145 - 365 - 1426 + 367 + 1632 @@ -11653,7 +17058,7 @@ 1 2 - 26857 + 30731 @@ -11669,12 +17074,12 @@ 393 394 - 10 + 12 - 25361 - 25362 - 10 + 25367 + 25368 + 12 @@ -11690,12 +17095,12 @@ 214 215 - 10 + 12 - 5371 - 5372 - 10 + 5377 + 5378 + 12 @@ -11711,12 +17116,12 @@ 356 357 - 10 + 12 2186 2187 - 10 + 12 @@ -11726,15 +17131,15 @@ using_container - 580276 + 662620 parent - 21892 + 24275 child - 272108 + 311428 @@ -11748,42 +17153,42 @@ 1 2 - 10375 + 11231 2 3 - 1616 + 1789 3 6 - 1859 + 2055 6 7 - 2282 + 2623 7 - 28 - 1669 + 27 + 1849 - 28 + 27 136 - 781 + 942 145 146 - 2620 + 2998 146 437 - 686 + 785 @@ -11799,27 +17204,27 @@ 1 2 - 96570 + 111176 2 3 - 120321 + 137664 3 4 - 20106 + 22522 4 5 - 26720 + 30550 5 65 - 8389 + 9514 @@ -11829,27 +17234,27 @@ static_asserts - 173266 + 183514 id - 173266 + 183514 condition - 173266 + 183514 message - 38765 + 41097 location - 22648 + 23924 enclosing - 6807 + 6648 @@ -11863,7 +17268,7 @@ 1 2 - 173266 + 183514 @@ -11879,7 +17284,7 @@ 1 2 - 173266 + 183514 @@ -11895,7 +17300,7 @@ 1 2 - 173266 + 183514 @@ -11911,7 +17316,7 @@ 1 2 - 173266 + 183514 @@ -11927,7 +17332,7 @@ 1 2 - 173266 + 183514 @@ -11943,7 +17348,7 @@ 1 2 - 173266 + 183514 @@ -11959,7 +17364,7 @@ 1 2 - 173266 + 183514 @@ -11975,7 +17380,7 @@ 1 2 - 173266 + 183514 @@ -11991,32 +17396,32 @@ 1 2 - 28505 + 30236 2 3 - 641 + 673 3 4 - 3623 + 3876 4 12 - 2087 + 2184 12 17 - 3135 + 3315 17 513 - 771 + 811 @@ -12032,32 +17437,32 @@ 1 2 - 28505 + 30236 2 3 - 641 + 673 3 4 - 3623 + 3876 4 12 - 2087 + 2184 12 17 - 3135 + 3315 17 513 - 771 + 811 @@ -12073,12 +17478,12 @@ 1 2 - 35922 + 38084 2 33 - 2843 + 3013 @@ -12094,27 +17499,27 @@ 1 2 - 30316 + 32170 2 3 - 349 + 353 3 4 - 3387 + 3626 4 12 - 1909 + 1985 12 43 - 2802 + 2961 @@ -12130,52 +17535,52 @@ 1 2 - 4281 + 4489 2 3 - 3728 + 3893 3 4 - 1738 + 1873 4 5 - 121 + 112 5 6 - 4736 + 5024 6 13 - 430 + 457 14 15 - 2648 + 2814 16 17 - 64 + 60 17 18 - 4394 + 4670 19 52 - 503 + 526 @@ -12191,52 +17596,52 @@ 1 2 - 4281 + 4489 2 3 - 3728 + 3893 3 4 - 1738 + 1873 4 5 - 121 + 112 5 6 - 4736 + 5024 6 13 - 430 + 457 14 15 - 2648 + 2814 16 17 - 64 + 60 17 18 - 4394 + 4670 19 52 - 503 + 526 @@ -12252,22 +17657,22 @@ 1 2 - 6953 + 7243 2 3 - 7676 + 8159 3 4 - 7782 + 8271 4 7 - 235 + 250 @@ -12283,37 +17688,37 @@ 1 2 - 5069 + 5327 2 3 - 8099 + 8538 3 4 - 1478 + 1597 4 5 - 4760 + 5042 5 13 - 495 + 518 13 14 - 2648 + 2814 16 43 - 97 + 86 @@ -12329,22 +17734,22 @@ 1 2 - 5702 + 5482 2 3 - 528 + 561 3 - 228 - 528 + 210 + 500 - 229 + 223 11052 - 48 + 103 @@ -12360,22 +17765,22 @@ 1 2 - 5702 + 5482 2 3 - 528 + 561 3 - 228 - 528 + 210 + 500 - 229 + 223 11052 - 48 + 103 @@ -12391,17 +17796,17 @@ 1 2 - 5857 + 5646 2 3 - 519 + 552 3 2936 - 430 + 448 @@ -12417,17 +17822,17 @@ 1 2 - 5840 + 5629 2 3 - 536 + 569 3 1929 - 430 + 448 @@ -12437,23 +17842,23 @@ params - 7067155 + 6984184 id - 7026200 + 6957575 function - 3408027 + 3365915 index - 7991 + 7995 type_id - 1221415 + 1225411 @@ -12467,7 +17872,7 @@ 1 2 - 7026200 + 6957575 @@ -12483,7 +17888,7 @@ 1 2 - 7026200 + 6957575 @@ -12499,12 +17904,12 @@ 1 2 - 6985244 + 6930965 2 3 - 40955 + 26609 @@ -12520,27 +17925,27 @@ 1 2 - 1474514 + 1462898 2 3 - 927112 + 908721 3 4 - 579242 + 561173 4 5 - 281067 + 277338 5 65 - 146090 + 155784 @@ -12556,27 +17961,27 @@ 1 2 - 1474514 + 1462898 2 3 - 927112 + 908721 3 4 - 579242 + 561173 4 5 - 281067 + 277338 5 65 - 146090 + 155784 @@ -12592,22 +17997,22 @@ 1 2 - 1783302 + 1763473 2 3 - 1031623 + 1008413 3 4 - 437896 + 436995 4 11 - 155205 + 157033 @@ -12623,12 +18028,12 @@ 2 3 - 3995 + 3997 6 7 - 1997 + 1998 14 @@ -12641,13 +18046,13 @@ 624 - 320 - 15486 + 323 + 15234 624 - 27294 - 27295 + 26943 + 26944 124 @@ -12664,12 +18069,12 @@ 2 3 - 3995 + 3997 6 7 - 1997 + 1998 14 @@ -12682,13 +18087,13 @@ 624 - 320 - 15486 + 323 + 15234 624 - 27294 - 27295 + 26943 + 26944 124 @@ -12705,12 +18110,12 @@ 1 2 - 3995 + 3997 2 3 - 1997 + 1998 4 @@ -12719,17 +18124,17 @@ 9 - 55 + 54 624 - 116 - 2703 + 115 + 2700 624 - 7497 - 7498 + 7528 + 7529 124 @@ -12746,27 +18151,27 @@ 1 2 - 738193 + 740818 2 3 - 240612 + 241984 3 5 - 93273 + 93820 5 13 - 93897 + 93695 13 - 2574 - 55439 + 2570 + 55092 @@ -12782,27 +18187,27 @@ 1 2 - 820353 + 823145 2 3 - 179803 + 181144 3 6 - 106258 + 106562 6 27 - 92274 + 92446 27 - 2562 - 22725 + 2558 + 22112 @@ -12818,17 +18223,17 @@ 1 2 - 996037 + 1000042 2 3 - 166942 + 167027 3 65 - 58436 + 58341 @@ -12838,15 +18243,15 @@ overrides - 159781 + 169821 new - 151073 + 160565 old - 17993 + 19124 @@ -12860,12 +18265,12 @@ 1 2 - 142372 + 151318 2 4 - 8700 + 9246 @@ -12881,32 +18286,32 @@ 1 2 - 9845 + 10464 2 3 - 2437 + 2590 3 4 - 1632 + 1735 4 6 - 1486 + 1580 6 18 - 1356 + 1441 18 230 - 1234 + 1312 @@ -12916,19 +18321,19 @@ membervariables - 1499266 + 1495853 id - 1496815 + 1493401 type_id - 456075 + 455129 name - 641686 + 640722 @@ -12942,12 +18347,12 @@ 1 2 - 1494473 + 1491059 2 4 - 2341 + 2342 @@ -12963,7 +18368,7 @@ 1 2 - 1496815 + 1493401 @@ -12979,22 +18384,22 @@ 1 2 - 338326 + 337738 2 3 - 72218 + 72123 3 10 - 35401 + 35135 10 - 4444 - 10130 + 4422 + 10132 @@ -13010,22 +18415,22 @@ 1 2 - 355917 + 355278 2 3 - 64321 + 64115 3 49 - 34311 + 34209 56 - 2185 - 1524 + 2175 + 1525 @@ -13041,22 +18446,22 @@ 1 2 - 421164 + 420974 2 3 - 122542 + 122130 3 5 - 57785 + 57469 5 - 656 - 40193 + 654 + 40147 @@ -13072,17 +18477,17 @@ 1 2 - 524318 + 523712 2 3 - 72817 + 72504 3 - 660 - 44551 + 658 + 44505 @@ -13092,19 +18497,19 @@ globalvariables - 488591 + 488090 id - 488591 + 488090 type_id - 10363 + 10368 name - 112626 + 112434 @@ -13118,7 +18523,7 @@ 1 2 - 488591 + 488090 @@ -13134,7 +18539,7 @@ 1 2 - 488591 + 488090 @@ -13150,7 +18555,7 @@ 1 2 - 6992 + 6995 2 @@ -13174,7 +18579,7 @@ 152 - 2216 + 2214 499 @@ -13191,7 +18596,7 @@ 1 2 - 7117 + 7120 2 @@ -13214,8 +18619,8 @@ 874 - 125 - 228 + 124 + 226 499 @@ -13232,17 +18637,17 @@ 1 2 - 95395 + 95319 2 7 - 8865 + 8744 7 604 - 8365 + 8370 @@ -13258,12 +18663,12 @@ 1 2 - 97019 + 96943 2 3 - 15358 + 15241 3 @@ -13278,19 +18683,19 @@ localvariables - 726278 + 726100 id - 726278 + 726100 type_id - 53441 + 53424 name - 101531 + 101537 @@ -13304,7 +18709,7 @@ 1 2 - 726278 + 726100 @@ -13320,7 +18725,7 @@ 1 2 - 726278 + 726100 @@ -13336,37 +18741,37 @@ 1 2 - 28885 + 28887 2 3 - 7838 + 7826 3 4 - 4029 + 4025 4 6 - 4053 + 4049 6 12 - 4145 + 4149 12 - 165 + 166 4009 - 165 - 19323 - 480 + 168 + 19320 + 476 @@ -13382,17 +18787,17 @@ 1 2 - 38385 + 38367 2 3 - 6700 + 6701 3 5 - 4465 + 4466 5 @@ -13413,32 +18818,32 @@ 1 2 - 62453 + 62468 2 3 - 16032 + 16045 3 4 - 6524 + 6532 4 8 - 8146 + 8130 8 - 132 - 7617 + 135 + 7618 - 132 - 7547 - 756 + 135 + 7544 + 741 @@ -13454,17 +18859,17 @@ 1 2 - 84485 + 84490 2 3 - 8414 + 8419 3 15 - 7677 + 7674 15 @@ -13479,11 +18884,11 @@ autoderivation - 229374 + 229241 var - 229374 + 229241 derivation_type @@ -13501,7 +18906,7 @@ 1 2 - 229374 + 229241 @@ -13535,8 +18940,8 @@ 124 - 736 - 737 + 734 + 735 124 @@ -13547,15 +18952,15 @@ orphaned_variables - 44321 + 44332 var - 44321 + 44332 function - 41051 + 41060 @@ -13569,7 +18974,7 @@ 1 2 - 44321 + 44332 @@ -13585,7 +18990,7 @@ 1 2 - 40199 + 40208 2 @@ -13600,19 +19005,19 @@ enumconstants - 345733 + 344765 id - 345733 + 344765 parent - 41337 + 41291 index - 13942 + 13945 type_id @@ -13620,11 +19025,11 @@ name - 345351 + 344383 location - 318338 + 317364 @@ -13638,7 +19043,7 @@ 1 2 - 345733 + 344765 @@ -13654,7 +19059,7 @@ 1 2 - 345733 + 344765 @@ -13670,7 +19075,7 @@ 1 2 - 345733 + 344765 @@ -13686,7 +19091,7 @@ 1 2 - 345733 + 344765 @@ -13702,7 +19107,7 @@ 1 2 - 345733 + 344765 @@ -13718,57 +19123,57 @@ 1 2 - 1524 + 1525 2 3 - 5773 + 5719 3 4 - 8714 + 8715 4 5 - 5500 + 5501 5 6 - 4574 + 4630 6 7 - 2559 + 2669 7 8 - 1960 + 1961 8 - 10 - 2941 + 11 + 3813 - 10 - 15 - 3322 + 11 + 17 + 3159 - 15 - 32 - 3104 + 17 + 64 + 3105 - 32 + 79 257 - 1361 + 490 @@ -13784,57 +19189,57 @@ 1 2 - 1524 + 1525 2 3 - 5773 + 5719 3 4 - 8714 + 8715 4 5 - 5500 + 5501 5 6 - 4574 + 4630 6 7 - 2559 + 2669 7 8 - 1960 + 1961 8 - 10 - 2941 + 11 + 3813 - 10 - 15 - 3322 + 11 + 17 + 3159 - 15 - 32 - 3104 + 17 + 64 + 3105 - 32 + 79 257 - 1361 + 490 @@ -13850,7 +19255,7 @@ 1 2 - 41337 + 41291 @@ -13866,57 +19271,57 @@ 1 2 - 1524 + 1525 2 3 - 5773 + 5719 3 4 - 8714 + 8715 4 5 - 5500 + 5501 5 6 - 4574 + 4630 6 7 - 2559 + 2669 7 8 - 1960 + 1961 8 - 10 - 2941 + 11 + 3813 - 10 - 15 - 3322 + 11 + 17 + 3159 - 15 - 32 - 3104 + 17 + 64 + 3105 - 32 + 79 257 - 1361 + 490 @@ -13937,52 +19342,47 @@ 2 3 - 5990 + 5937 3 4 - 8768 + 8770 4 5 - 5446 + 5447 5 6 - 4574 + 4630 6 7 - 2505 + 2614 7 8 - 1851 + 1852 8 11 - 3757 + 3704 11 - 17 - 3104 - - - 17 - 123 - 3104 + 18 + 3105 - 164 + 18 257 - 108 + 3105 @@ -13998,12 +19398,12 @@ 1 2 - 2777 + 2778 2 3 - 2232 + 2233 3 @@ -14013,12 +19413,12 @@ 4 5 - 1198 + 1252 5 9 - 1143 + 1089 9 @@ -14027,18 +19427,18 @@ 12 - 20 - 1143 + 19 + 1089 - 20 - 59 + 19 + 55 1089 - 64 - 760 - 980 + 58 + 759 + 1035 @@ -14054,12 +19454,12 @@ 1 2 - 2777 + 2778 2 3 - 2232 + 2233 3 @@ -14069,12 +19469,12 @@ 4 5 - 1198 + 1252 5 9 - 1143 + 1089 9 @@ -14083,18 +19483,18 @@ 12 - 20 - 1143 + 19 + 1089 - 20 - 59 + 19 + 55 1089 - 64 - 760 - 980 + 58 + 759 + 1035 @@ -14110,7 +19510,7 @@ 1 2 - 13942 + 13945 @@ -14126,12 +19526,12 @@ 1 2 - 2777 + 2778 2 3 - 2232 + 2233 3 @@ -14141,12 +19541,12 @@ 4 5 - 1198 + 1252 5 9 - 1143 + 1089 9 @@ -14155,18 +19555,18 @@ 12 - 20 - 1143 + 19 + 1089 - 20 - 59 + 19 + 55 1089 - 64 - 757 - 980 + 58 + 756 + 1035 @@ -14182,12 +19582,12 @@ 1 2 - 2777 + 2778 2 3 - 2232 + 2233 3 @@ -14197,12 +19597,12 @@ 4 5 - 1198 + 1252 5 9 - 1143 + 1089 9 @@ -14211,18 +19611,18 @@ 12 - 20 - 1143 + 19 + 1089 - 20 - 59 + 19 + 55 1089 - 64 - 760 - 980 + 58 + 759 + 1035 @@ -14236,8 +19636,8 @@ 12 - 6348 - 6349 + 6329 + 6330 54 @@ -14252,8 +19652,8 @@ 12 - 759 - 760 + 758 + 759 54 @@ -14284,8 +19684,8 @@ 12 - 6341 - 6342 + 6322 + 6323 54 @@ -14300,8 +19700,8 @@ 12 - 5845 - 5846 + 5826 + 5827 54 @@ -14318,7 +19718,7 @@ 1 2 - 344970 + 344002 2 @@ -14339,7 +19739,7 @@ 1 2 - 344970 + 344002 2 @@ -14360,7 +19760,7 @@ 1 2 - 345351 + 344383 @@ -14376,7 +19776,7 @@ 1 2 - 345351 + 344383 @@ -14392,7 +19792,7 @@ 1 2 - 344970 + 344002 2 @@ -14413,12 +19813,12 @@ 1 2 - 317303 + 316329 2 205 - 1034 + 1035 @@ -14434,7 +19834,7 @@ 1 2 - 318338 + 317364 @@ -14450,12 +19850,12 @@ 1 2 - 317303 + 316329 2 205 - 1034 + 1035 @@ -14471,7 +19871,7 @@ 1 2 - 318338 + 317364 @@ -14487,12 +19887,12 @@ 1 2 - 317303 + 316329 2 205 - 1034 + 1035 @@ -14502,19 +19902,19 @@ builtintypes - 7616 + 7245 id - 7616 + 7245 name - 7616 + 7245 kind - 7616 + 7245 size @@ -14540,7 +19940,7 @@ 1 2 - 7616 + 7245 @@ -14556,7 +19956,7 @@ 1 2 - 7616 + 7245 @@ -14572,7 +19972,7 @@ 1 2 - 7616 + 7245 @@ -14588,7 +19988,7 @@ 1 2 - 7616 + 7245 @@ -14604,7 +20004,7 @@ 1 2 - 7616 + 7245 @@ -14620,7 +20020,7 @@ 1 2 - 7616 + 7245 @@ -14636,7 +20036,7 @@ 1 2 - 7616 + 7245 @@ -14652,7 +20052,7 @@ 1 2 - 7616 + 7245 @@ -14668,7 +20068,7 @@ 1 2 - 7616 + 7245 @@ -14684,7 +20084,7 @@ 1 2 - 7616 + 7245 @@ -14700,7 +20100,7 @@ 1 2 - 7616 + 7245 @@ -14716,7 +20116,7 @@ 1 2 - 7616 + 7245 @@ -14732,7 +20132,7 @@ 1 2 - 7616 + 7245 @@ -14748,7 +20148,7 @@ 1 2 - 7616 + 7245 @@ -14764,7 +20164,7 @@ 1 2 - 7616 + 7245 @@ -14798,44 +20198,8 @@ 124 - 14 - 15 - 124 - - - 15 - 16 - 124 - - - - - - - size - name - - - 12 - - - 2 - 3 - 249 - - - 8 - 9 - 124 - - - 9 - 10 - 124 - - - 11 - 12 + 12 + 13 124 @@ -14843,18 +20207,13 @@ 15 124 - - 15 - 16 - 124 - size - kind + name 12 @@ -14879,14 +20238,55 @@ 12 124 + + 12 + 13 + 124 + 14 15 124 + + + + + + size + kind + + + 12 + - 15 - 16 + 2 + 3 + 249 + + + 8 + 9 + 124 + + + 9 + 10 + 124 + + + 11 + 12 + 124 + + + 12 + 13 + 124 + + + 14 + 15 124 @@ -14953,8 +20353,8 @@ 124 - 43 - 44 + 40 + 41 124 @@ -14979,8 +20379,8 @@ 124 - 43 - 44 + 40 + 41 124 @@ -15005,8 +20405,8 @@ 124 - 43 - 44 + 40 + 41 124 @@ -15065,12 +20465,12 @@ 10 11 - 124 + 249 13 14 - 249 + 124 17 @@ -15096,12 +20496,12 @@ 10 11 - 124 + 249 13 14 - 249 + 124 17 @@ -15127,12 +20527,12 @@ 10 11 - 124 + 249 13 14 - 249 + 124 17 @@ -15179,15 +20579,15 @@ derivedtypes - 3033686 + 3044352 id - 3033686 + 3044352 name - 1461903 + 1474266 kind @@ -15195,7 +20595,7 @@ type_id - 1948496 + 1947741 @@ -15209,7 +20609,7 @@ 1 2 - 3033686 + 3044352 @@ -15225,7 +20625,7 @@ 1 2 - 3033686 + 3044352 @@ -15241,7 +20641,7 @@ 1 2 - 3033686 + 3044352 @@ -15257,17 +20657,17 @@ 1 2 - 1345280 + 1357334 2 - 28 - 110004 + 30 + 110810 - 29 - 4302 - 6617 + 30 + 4274 + 6121 @@ -15283,7 +20683,7 @@ 1 2 - 1461903 + 1474266 @@ -15299,17 +20699,17 @@ 1 2 - 1345405 + 1357459 2 - 28 - 109879 + 30 + 110685 - 29 - 4302 - 6617 + 30 + 4274 + 6121 @@ -15323,8 +20723,8 @@ 12 - 724 - 725 + 787 + 788 124 @@ -15333,23 +20733,23 @@ 124 - 3627 - 3628 + 3647 + 3648 124 - 4301 - 4302 + 4273 + 4274 124 - 5557 - 5558 + 5569 + 5570 124 - 7754 - 7755 + 7760 + 7761 124 @@ -15369,8 +20769,8 @@ 124 - 671 - 672 + 733 + 734 124 @@ -15379,18 +20779,18 @@ 124 - 2429 - 2430 + 2433 + 2434 124 - 2654 - 2655 + 2678 + 2679 124 - 4340 - 4341 + 4343 + 4344 124 @@ -15405,8 +20805,8 @@ 12 - 207 - 208 + 208 + 209 124 @@ -15415,23 +20815,23 @@ 124 - 3623 - 3624 + 3643 + 3644 124 - 4301 - 4302 + 4273 + 4274 124 - 5492 - 5493 + 5502 + 5503 124 - 7754 - 7755 + 7760 + 7761 124 @@ -15448,22 +20848,22 @@ 1 2 - 1318684 + 1315609 2 3 - 376214 + 378154 3 4 - 123365 + 122803 4 - 137 - 130232 + 135 + 131173 @@ -15479,22 +20879,22 @@ 1 2 - 1320182 + 1317108 2 3 - 376214 + 378154 3 4 - 121866 + 121304 4 - 137 - 130232 + 135 + 131173 @@ -15510,22 +20910,22 @@ 1 2 - 1320557 + 1317483 2 3 - 376838 + 379029 3 4 - 123614 + 122803 4 6 - 127485 + 128425 @@ -15535,11 +20935,11 @@ pointerishsize - 2249417 + 2250315 id - 2249417 + 2250315 size @@ -15561,7 +20961,7 @@ 1 2 - 2249417 + 2250315 @@ -15577,7 +20977,7 @@ 1 2 - 2249417 + 2250315 @@ -15596,8 +20996,8 @@ 124 - 18012 - 18013 + 18010 + 18011 124 @@ -15633,8 +21033,8 @@ 124 - 18012 - 18013 + 18010 + 18011 124 @@ -15661,19 +21061,19 @@ arraysizes - 80661 + 88573 id - 80661 + 88573 num_elements - 17855 + 18489 bytesize - 20227 + 22861 alignment @@ -15691,7 +21091,7 @@ 1 2 - 80661 + 88573 @@ -15707,7 +21107,7 @@ 1 2 - 80661 + 88573 @@ -15723,7 +21123,7 @@ 1 2 - 80661 + 88573 @@ -15744,7 +21144,7 @@ 2 3 - 10863 + 8869 3 @@ -15754,22 +21154,22 @@ 4 5 - 3496 + 5621 - 5 - 9 - 1498 + 6 + 7 + 1624 - 9 - 42 - 1373 + 8 + 27 + 1499 - 56 + 34 57 - 124 + 374 @@ -15785,22 +21185,22 @@ 1 2 - 11737 + 9494 2 3 - 3995 + 6621 3 5 - 998 + 1249 5 11 - 1123 + 1124 @@ -15816,22 +21216,22 @@ 1 2 - 11737 + 9494 2 3 - 3995 + 6621 3 4 - 749 + 999 4 6 - 1373 + 1374 @@ -15852,32 +21252,32 @@ 2 3 - 12736 + 14741 3 4 - 499 + 374 4 5 - 2746 + 3248 5 7 - 1498 + 1499 7 17 - 1623 + 1748 - 24 + 17 45 - 499 + 624 @@ -15893,22 +21293,22 @@ 1 2 - 14609 + 16490 2 3 - 3621 + 3997 3 - 6 - 1872 + 5 + 1748 - 6 + 5 7 - 124 + 624 @@ -15924,17 +21324,17 @@ 1 2 - 14858 + 16615 2 3 - 3371 + 3997 3 5 - 1623 + 1873 5 @@ -15968,13 +21368,13 @@ 124 - 121 - 122 + 187 + 188 124 - 338 - 339 + 335 + 336 124 @@ -15999,13 +21399,13 @@ 249 - 48 - 49 + 80 + 81 124 - 139 - 140 + 137 + 138 124 @@ -16035,13 +21435,13 @@ 124 - 48 - 49 + 80 + 81 124 - 140 - 141 + 138 + 139 124 @@ -16100,15 +21500,15 @@ typedefbase - 1762320 + 1828181 id - 1762320 + 1828181 type_id - 838043 + 885722 @@ -16122,7 +21522,7 @@ 1 2 - 1762320 + 1828181 @@ -16138,22 +21538,22 @@ 1 2 - 662586 + 706481 2 3 - 80931 + 83914 3 - 6 - 64157 + 7 + 74580 - 6 - 4526 - 30367 + 7 + 4525 + 20745 @@ -16163,7 +21563,7 @@ decltypes - 814476 + 814475 id @@ -16171,7 +21571,7 @@ expr - 814476 + 814475 kind @@ -16301,7 +21701,7 @@ 1 2 - 814476 + 814475 @@ -16317,7 +21717,7 @@ 1 2 - 814476 + 814475 @@ -16333,7 +21733,7 @@ 1 2 - 814476 + 814475 @@ -16349,7 +21749,7 @@ 1 2 - 814476 + 814475 @@ -16611,23 +22011,23 @@ type_operators - 7953 + 7960 id - 7953 + 7960 arg_type - 7179 + 7186 kind - 85 + 86 base_type - 5244 + 5249 @@ -16641,7 +22041,7 @@ 1 2 - 7953 + 7960 @@ -16657,7 +22057,7 @@ 1 2 - 7953 + 7960 @@ -16673,7 +22073,7 @@ 1 2 - 7953 + 7960 @@ -16689,12 +22089,12 @@ 1 2 - 6405 + 6411 2 3 - 773 + 774 @@ -16710,12 +22110,12 @@ 1 2 - 6405 + 6411 2 3 - 773 + 774 @@ -16731,7 +22131,7 @@ 1 2 - 7157 + 7164 2 @@ -16845,17 +22245,17 @@ 1 2 - 3632 + 3636 2 3 - 902 + 903 3 4 - 343 + 344 4 @@ -16876,12 +22276,12 @@ 1 2 - 3783 + 3786 2 3 - 988 + 989 3 @@ -16907,12 +22307,12 @@ 1 2 - 4084 + 4087 2 3 - 1139 + 1140 3 @@ -16927,19 +22327,19 @@ usertypes - 4151861 + 4458594 id - 4151861 + 4458594 name - 918789 + 963652 kind - 126 + 145 @@ -16953,7 +22353,7 @@ 1 2 - 4151861 + 4458594 @@ -16969,7 +22369,7 @@ 1 2 - 4151861 + 4458594 @@ -16985,22 +22385,22 @@ 1 2 - 654542 + 667093 2 3 - 158590 + 176423 3 - 8 - 70610 + 7 + 76769 - 8 - 32669 - 35046 + 7 + 30282 + 43365 @@ -17016,12 +22416,12 @@ 1 2 - 867028 + 904425 2 10 - 51761 + 59227 @@ -17037,62 +22437,62 @@ 28 29 - 10 + 12 64 65 - 10 + 12 579 580 - 10 + 12 - 1052 - 1053 - 10 + 1042 + 1043 + 12 - 1594 - 1595 - 10 + 1563 + 1564 + 12 1874 1875 - 10 + 12 4586 4587 - 10 + 12 - 20078 - 20079 - 10 + 19666 + 19667 + 12 - 21485 - 21486 - 10 + 20075 + 20076 + 12 82092 82093 - 10 + 12 - 92762 - 92763 - 10 + 86007 + 86008 + 12 - 166764 - 166765 - 10 + 151219 + 151220 + 12 @@ -17108,62 +22508,62 @@ 19 20 - 10 + 12 47 48 - 10 + 12 50 51 - 10 + 12 153 154 - 10 + 12 417 418 - 10 + 12 771 772 - 10 + 12 1565 1566 - 10 + 12 3066 3067 - 10 + 12 - 5589 - 5590 - 10 + 5585 + 5586 + 12 - 10903 - 10904 - 10 + 10838 + 10839 + 12 - 12187 - 12188 - 10 + 10903 + 10904 + 12 - 57608 - 57609 - 10 + 51707 + 51708 + 12 @@ -17173,19 +22573,19 @@ usertypesize - 1364111 + 1462784 id - 1364111 + 1462784 size - 1479 + 1692 alignment - 84 + 96 @@ -17199,7 +22599,7 @@ 1 2 - 1364111 + 1462784 @@ -17215,7 +22615,7 @@ 1 2 - 1364111 + 1462784 @@ -17231,52 +22631,52 @@ 1 2 - 464 + 531 2 3 - 190 + 229 3 4 - 95 + 96 4 6 - 95 + 108 6 - 9 - 116 + 8 + 132 - 9 - 19 - 116 + 8 + 14 + 132 - 19 - 30 - 116 + 14 + 26 + 132 - 30 - 115 - 116 + 26 + 86 + 132 - 118 - 1731 - 116 + 96 + 1592 + 132 - 1839 - 99773 - 52 + 1733 + 93158 + 60 @@ -17292,17 +22692,17 @@ 1 2 - 1204 + 1390 2 3 - 179 + 193 3 6 - 95 + 108 @@ -17318,42 +22718,42 @@ 1 2 - 10 + 12 3 4 - 10 + 12 7 8 - 10 + 12 54 55 - 10 + 12 56 57 - 10 + 12 - 2079 - 2080 - 10 + 2046 + 2047 + 12 - 11940 - 11941 - 10 + 10484 + 10485 + 12 - 114968 - 114969 - 10 + 108344 + 108345 + 12 @@ -17369,37 +22769,37 @@ 1 2 - 21 + 24 3 4 - 10 + 12 11 12 - 10 + 12 12 13 - 10 + 12 17 18 - 10 + 12 27 28 - 10 + 12 - 111 - 112 - 10 + 110 + 111 + 12 @@ -17409,26 +22809,26 @@ usertype_final - 11487 + 11493 id - 11487 + 11493 usertype_uuid - 47628 + 50413 id - 47628 + 50413 uuid - 47148 + 49904 @@ -17442,7 +22842,7 @@ 1 2 - 47628 + 50413 @@ -17458,12 +22858,12 @@ 1 2 - 46669 + 49394 2 3 - 479 + 509 @@ -17473,15 +22873,15 @@ usertype_alias_kind - 1762320 + 1828181 id - 1762320 + 1828181 alias_kind - 21 + 24 @@ -17495,7 +22895,7 @@ 1 2 - 1762320 + 1828181 @@ -17509,14 +22909,14 @@ 12 - 36900 - 36901 - 10 + 36597 + 36598 + 12 - 129944 - 129945 - 10 + 114622 + 114623 + 12 @@ -17526,26 +22926,26 @@ nontype_template_parameters - 766246 + 766422 id - 766246 + 766422 type_template_type_constraint - 27127 + 27151 id - 13370 + 13382 constraint - 25987 + 26011 @@ -17559,22 +22959,22 @@ 1 2 - 10210 + 10219 2 3 - 902 + 903 3 5 - 1031 + 1032 5 14 - 1117 + 1118 14 @@ -17595,12 +22995,12 @@ 1 2 - 24848 + 24871 2 3 - 1139 + 1140 @@ -17610,15 +23010,15 @@ mangled_name - 7859539 + 7826069 id - 7859539 + 7826069 mangled_name - 6370041 + 6330564 is_complete @@ -17636,7 +23036,7 @@ 1 2 - 7859539 + 7826069 @@ -17652,7 +23052,7 @@ 1 2 - 7859539 + 7826069 @@ -17668,12 +23068,12 @@ 1 2 - 6041650 + 6001006 2 - 1120 - 328391 + 1127 + 329558 @@ -17689,7 +23089,7 @@ 1 2 - 6370041 + 6330564 @@ -17708,8 +23108,8 @@ 124 - 62939 - 62940 + 62639 + 62640 124 @@ -17729,8 +23129,8 @@ 124 - 51010 - 51011 + 50668 + 50669 124 @@ -17741,59 +23141,59 @@ is_pod_class - 593728 + 593865 id - 593728 + 593865 is_standard_layout_class - 1124682 + 1205360 id - 1124682 + 1205360 is_complete - 1346593 + 1443114 id - 1346593 + 1443114 is_class_template - 232233 + 260749 id - 232233 + 260749 class_instantiation - 1126267 + 1189945 to - 1123214 + 1186464 from - 71825 + 81870 @@ -17807,12 +23207,12 @@ 1 2 - 1121069 + 1184021 2 8 - 2144 + 2442 @@ -17828,47 +23228,47 @@ 1 2 - 20497 + 23792 2 3 - 12890 + 14809 3 4 - 7110 + 8100 4 5 - 4659 + 5355 5 7 - 6064 + 6903 7 10 - 5737 + 6262 10 17 - 5916 + 6625 17 - 51 - 5388 + 53 + 6201 - 51 - 4223 - 3560 + 53 + 4219 + 3820 @@ -17878,19 +23278,19 @@ class_template_argument - 2899301 + 3135288 type_id - 1367407 + 1461382 index - 1183 + 1354 arg_type - 822314 + 925001 @@ -17904,27 +23304,27 @@ 1 2 - 579515 + 608192 2 3 - 410328 + 439349 3 4 - 251124 + 276876 4 7 - 103120 + 110765 7 113 - 23318 + 26198 @@ -17940,22 +23340,22 @@ 1 2 - 608064 + 639589 2 3 - 424338 + 452563 3 4 - 251959 + 275075 4 113 - 83046 + 94154 @@ -17971,37 +23371,37 @@ 2 3 - 10 + 12 4 5 - 750 + 858 5 30 - 95 + 108 33 90 - 95 + 108 95 453 - 95 + 108 643 - 7127 - 95 + 6819 + 108 - 11967 - 129418 - 42 + 11329 + 120877 + 48 @@ -18017,37 +23417,37 @@ 2 3 - 10 + 12 4 5 - 750 + 858 5 16 - 105 + 120 16 35 - 95 + 108 37 155 - 95 + 108 196 - 3263 - 95 + 3251 + 108 - 10413 - 44531 - 31 + 10075 + 43772 + 36 @@ -18063,27 +23463,27 @@ 1 2 - 513871 + 580362 2 3 - 167677 + 189734 3 - 5 - 75111 + 4 + 55563 - 5 - 47 - 61745 + 4 + 11 + 70373 - 47 - 12616 - 3909 + 11 + 11634 + 28966 @@ -18099,17 +23499,17 @@ 1 2 - 724001 + 815421 2 3 - 79939 + 88822 3 22 - 18373 + 20757 @@ -18119,11 +23519,11 @@ class_template_argument_value - 510059 + 510176 type_id - 205801 + 205849 index @@ -18131,7 +23531,7 @@ arg_value - 509922 + 510039 @@ -18145,17 +23545,17 @@ 1 2 - 155790 + 155826 2 3 - 43367 + 43377 3 8 - 6643 + 6644 @@ -18171,22 +23571,22 @@ 1 2 - 147921 + 147955 2 3 - 40472 + 40481 3 45 - 15534 + 15538 45 154 - 1873 + 1874 @@ -18314,7 +23714,7 @@ 1 2 - 509786 + 509903 2 @@ -18335,7 +23735,7 @@ 1 2 - 509922 + 510039 @@ -18345,15 +23745,15 @@ is_proxy_class_for - 48454 + 55443 id - 48454 + 55443 templ_param_id - 45781 + 52384 @@ -18367,7 +23767,7 @@ 1 2 - 48454 + 55443 @@ -18383,12 +23783,12 @@ 1 2 - 45062 + 51562 2 79 - 718 + 822 @@ -18398,19 +23798,19 @@ type_mentions - 5902899 + 5828707 id - 5902899 + 5828707 type_id - 276673 + 276019 location - 5846584 + 5783003 kind @@ -18428,7 +23828,7 @@ 1 2 - 5902899 + 5828707 @@ -18444,7 +23844,7 @@ 1 2 - 5902899 + 5828707 @@ -18460,7 +23860,7 @@ 1 2 - 5902899 + 5828707 @@ -18476,42 +23876,42 @@ 1 2 - 136594 + 136511 2 3 - 31153 + 30995 3 4 - 11273 + 11167 4 5 - 14922 + 14707 5 7 - 19988 + 19991 7 12 - 21785 + 21844 12 28 - 21077 + 21081 28 - 8940 - 19879 + 8907 + 19719 @@ -18527,42 +23927,42 @@ 1 2 - 136594 + 136511 2 3 - 31153 + 30995 3 4 - 11273 + 11167 4 5 - 14922 + 14707 5 7 - 19988 + 19991 7 12 - 21785 + 21844 12 28 - 21077 + 21081 28 - 8940 - 19879 + 8907 + 19719 @@ -18578,7 +23978,7 @@ 1 2 - 276673 + 276019 @@ -18594,12 +23994,12 @@ 1 2 - 5800889 + 5737300 2 - 4 - 45694 + 3 + 45703 @@ -18615,12 +24015,12 @@ 1 2 - 5800889 + 5737300 2 - 4 - 45694 + 3 + 45703 @@ -18636,7 +24036,7 @@ 1 2 - 5846584 + 5783003 @@ -18650,8 +24050,8 @@ 12 - 108383 - 108384 + 107000 + 107001 54 @@ -18666,8 +24066,8 @@ 12 - 5080 - 5081 + 5067 + 5068 54 @@ -18682,8 +24082,8 @@ 12 - 107349 - 107350 + 106161 + 106162 54 @@ -18694,26 +24094,26 @@ is_function_template - 1332544 + 1335972 id - 1332544 + 1335972 function_instantiation - 973581 + 973157 to - 973581 + 973157 from - 182636 + 182575 @@ -18727,7 +24127,7 @@ 1 2 - 973581 + 973157 @@ -18743,27 +24143,27 @@ 1 2 - 110583 + 111051 2 3 - 42788 + 42253 3 9 - 14376 + 14379 9 - 104 - 13729 + 103 + 13698 - 119 + 103 1532 - 1158 + 1192 @@ -18773,19 +24173,19 @@ function_template_argument - 2484681 + 2485251 function_id - 1453218 + 1453551 index - 476 + 477 arg_type - 297988 + 298057 @@ -18799,22 +24199,22 @@ 1 2 - 782974 + 783153 2 3 - 413136 + 413231 3 4 - 171802 + 171841 4 15 - 85305 + 85324 @@ -18830,22 +24230,22 @@ 1 2 - 802120 + 802303 2 3 - 411229 + 411323 3 4 - 169622 + 169661 4 9 - 70247 + 70263 @@ -18983,37 +24383,37 @@ 1 2 - 174766 + 174806 2 3 - 26334 + 26340 3 4 - 19997 + 20002 4 6 - 22654 + 22660 6 11 - 23234 + 23239 11 76 - 23370 + 23375 79 2452 - 7631 + 7632 @@ -19029,17 +24429,17 @@ 1 2 - 256801 + 256859 2 3 - 32125 + 32133 3 15 - 9061 + 9064 @@ -19049,19 +24449,19 @@ function_template_argument_value - 452757 + 452861 function_id - 196774 + 196819 index - 476 + 477 arg_value - 450066 + 450169 @@ -19075,17 +24475,17 @@ 1 2 - 151396 + 151430 2 3 - 42891 + 42900 3 8 - 2486 + 2487 @@ -19101,17 +24501,17 @@ 1 2 - 144480 + 144513 2 3 - 36690 + 36699 3 54 - 14853 + 14856 54 @@ -19254,7 +24654,7 @@ 1 2 - 447374 + 447477 2 @@ -19275,7 +24675,7 @@ 1 2 - 450066 + 450169 @@ -19285,26 +24685,26 @@ is_variable_template - 58685 + 58715 id - 58685 + 58715 variable_instantiation - 423162 + 421504 to - 423162 + 421504 from - 35336 + 35104 @@ -19318,7 +24718,7 @@ 1 2 - 423162 + 421504 @@ -19334,42 +24734,47 @@ 1 2 - 15233 + 15116 2 3 - 3870 + 3997 3 4 - 2372 + 2248 4 6 - 2996 + 2873 6 8 - 2247 + 2248 8 - 12 - 3121 + 11 + 2748 - 12 - 31 - 2746 + 11 + 30 + 2748 - 32 + 30 + 105 + 2748 + + + 180 546 - 2746 + 374 @@ -19379,19 +24784,19 @@ variable_template_argument - 769159 + 768927 variable_id - 401311 + 400766 index - 1997 + 1998 arg_type - 256344 + 256850 @@ -19405,22 +24810,22 @@ 1 2 - 156703 + 155909 2 3 - 189917 + 190139 3 4 - 36460 + 36478 4 17 - 18230 + 18239 @@ -19436,22 +24841,22 @@ 1 2 - 171562 + 170900 2 3 - 180178 + 180270 3 4 - 33713 + 33730 4 17 - 15857 + 15865 @@ -19495,13 +24900,13 @@ 124 - 1959 - 1960 + 1960 + 1961 124 - 3214 - 3215 + 3208 + 3209 124 @@ -19546,13 +24951,13 @@ 124 - 745 - 746 + 748 + 749 124 - 1325 - 1326 + 1326 + 1327 124 @@ -19569,22 +24974,22 @@ 1 2 - 175558 + 176022 2 3 - 44701 + 44723 3 6 - 21601 + 21737 6 206 - 14484 + 14366 @@ -19600,17 +25005,17 @@ 1 2 - 228000 + 228367 2 3 - 24722 + 24860 3 7 - 3621 + 3622 @@ -19620,11 +25025,11 @@ variable_template_argument_value - 19978 + 19988 variable_id - 14858 + 14866 index @@ -19632,7 +25037,7 @@ arg_value - 19978 + 19988 @@ -19646,12 +25051,12 @@ 1 2 - 13360 + 13367 2 3 - 1498 + 1499 @@ -19667,12 +25072,12 @@ 1 2 - 10488 + 10493 2 3 - 3995 + 3997 4 @@ -19755,7 +25160,7 @@ 1 2 - 19978 + 19988 @@ -19771,7 +25176,7 @@ 1 2 - 19978 + 19988 @@ -19781,15 +25186,15 @@ template_template_instantiation - 6368 + 6637 to - 4994 + 6226 from - 1123 + 4400 @@ -19803,12 +25208,12 @@ 1 2 - 3621 + 6093 2 - 3 - 1373 + 15 + 132 @@ -19824,22 +25229,17 @@ 1 2 - 749 + 2877 2 3 - 124 + 1366 - 16 - 17 - 124 - - - 27 - 28 - 124 + 3 + 20 + 157 @@ -19849,19 +25249,19 @@ template_template_argument - 9678 + 11074 type_id - 6117 + 6999 index - 105 + 120 arg_type - 9086 + 10397 @@ -19875,22 +25275,22 @@ 1 2 - 5018 + 5742 2 3 - 422 + 483 3 8 - 507 + 580 8 11 - 169 + 193 @@ -19906,22 +25306,22 @@ 1 2 - 5039 + 5766 2 4 - 559 + 640 4 10 - 464 + 531 10 11 - 52 + 60 @@ -19937,52 +25337,52 @@ 6 7 - 10 + 12 11 12 - 10 + 12 16 17 - 10 + 12 21 22 - 10 + 12 27 28 - 10 + 12 38 39 - 10 + 12 50 51 - 10 + 12 64 65 - 10 + 12 104 105 - 10 + 12 579 580 - 10 + 12 @@ -19998,52 +25398,52 @@ 6 7 - 10 + 12 11 12 - 10 + 12 16 17 - 10 + 12 21 22 - 10 + 12 27 28 - 10 + 12 38 39 - 10 + 12 50 51 - 10 + 12 64 65 - 10 + 12 99 100 - 10 + 12 538 539 - 10 + 12 @@ -20059,12 +25459,12 @@ 1 2 - 9054 + 10360 3 43 - 31 + 36 @@ -20080,12 +25480,12 @@ 1 2 - 9065 + 10372 2 11 - 21 + 24 @@ -20095,19 +25495,19 @@ template_template_argument_value - 623 + 713 type_id - 528 + 604 index - 21 + 24 arg_value - 623 + 713 @@ -20121,7 +25521,7 @@ 1 2 - 528 + 604 @@ -20137,17 +25537,17 @@ 1 2 - 454 + 519 2 3 - 52 + 60 3 4 - 21 + 24 @@ -20163,12 +25563,12 @@ 8 9 - 10 + 12 42 43 - 10 + 12 @@ -20184,12 +25584,12 @@ 17 18 - 10 + 12 42 43 - 10 + 12 @@ -20205,7 +25605,7 @@ 1 2 - 623 + 713 @@ -20221,7 +25621,7 @@ 1 2 - 623 + 713 @@ -20231,19 +25631,19 @@ concept_templates - 3611 + 3614 concept_id - 3611 + 3614 name - 3611 + 3614 location - 3611 + 3614 @@ -20257,7 +25657,7 @@ 1 2 - 3611 + 3614 @@ -20273,7 +25673,7 @@ 1 2 - 3611 + 3614 @@ -20289,7 +25689,7 @@ 1 2 - 3611 + 3614 @@ -20305,7 +25705,7 @@ 1 2 - 3611 + 3614 @@ -20321,7 +25721,7 @@ 1 2 - 3611 + 3614 @@ -20337,7 +25737,7 @@ 1 2 - 3611 + 3614 @@ -20347,15 +25747,15 @@ concept_instantiation - 90344 + 90427 to - 90344 + 90427 from - 3439 + 3442 @@ -20369,7 +25769,7 @@ 1 2 - 90344 + 90427 @@ -20400,12 +25800,12 @@ 4 5 - 128 + 129 5 6 - 300 + 301 6 @@ -20425,37 +25825,37 @@ 12 15 - 214 + 215 15 19 - 214 + 215 19 25 - 257 + 258 25 37 - 257 + 258 38 49 - 257 + 258 50 72 - 257 + 258 78 387 - 214 + 215 @@ -20465,30 +25865,30 @@ is_type_constraint - 36864 + 36898 concept_id - 36864 + 36898 concept_template_argument - 112936 + 113040 concept_id - 76308 + 76378 index - 128 + 129 arg_type - 21409 + 21428 @@ -20502,17 +25902,17 @@ 1 2 - 46429 + 46472 2 3 - 24655 + 24677 3 7 - 5223 + 5228 @@ -20528,17 +25928,17 @@ 1 2 - 50041 + 50087 2 3 - 22355 + 22375 3 7 - 3912 + 3915 @@ -20636,42 +26036,42 @@ 1 2 - 10382 + 10391 2 3 - 2966 + 2969 3 4 - 1053 + 1054 4 5 - 1354 + 1355 5 6 - 1160 + 1161 6 9 - 1612 + 1613 9 14 - 1977 + 1979 14 259 - 902 + 903 @@ -20687,17 +26087,17 @@ 1 2 - 18013 + 18029 2 3 - 3267 + 3270 3 4 - 128 + 129 @@ -20838,15 +26238,15 @@ routinetypes - 604289 + 604428 id - 604289 + 604428 return_type - 283850 + 283915 @@ -20860,7 +26260,7 @@ 1 2 - 604289 + 604428 @@ -20876,17 +26276,17 @@ 1 2 - 234214 + 234267 2 3 - 35089 + 35097 3 4676 - 14546 + 14550 @@ -20896,11 +26296,11 @@ routinetypeargs - 1176789 + 1169173 routine - 415119 + 413238 index @@ -20908,7 +26308,7 @@ type_id - 111595 + 111399 @@ -20922,32 +26322,32 @@ 1 2 - 82511 + 82364 2 3 - 126028 + 125834 3 4 - 107456 + 107150 4 5 - 49289 + 48754 5 7 - 33168 + 32575 7 19 - 16665 + 16560 @@ -20963,27 +26363,27 @@ 1 2 - 88502 + 88356 2 3 - 138663 + 138418 3 4 - 114209 + 113850 4 5 - 40738 + 40256 5 10 - 32895 + 32248 10 @@ -21047,38 +26447,38 @@ 54 - 306 - 307 + 304 + 305 54 - 584 - 585 + 576 + 577 54 - 915 - 916 + 902 + 903 54 - 1820 - 1821 + 1797 + 1798 54 - 3793 - 3794 + 3764 + 3765 54 - 6107 - 6108 + 6074 + 6075 54 - 7622 - 7623 + 7586 + 7587 54 @@ -21133,38 +26533,38 @@ 54 - 97 - 98 + 96 + 97 54 - 127 - 128 + 126 + 127 54 - 192 - 193 + 191 + 192 54 - 314 - 315 + 313 + 314 54 - 510 - 511 + 509 + 510 54 - 787 - 788 + 786 + 787 54 - 1174 - 1175 + 1172 + 1173 54 @@ -21181,47 +26581,47 @@ 1 2 - 33222 + 33283 2 3 - 15195 + 15034 3 4 - 13234 + 13237 4 5 - 9803 + 9859 5 6 - 6372 + 6373 6 8 - 9476 + 9532 8 13 - 9531 + 9478 13 26 - 8659 + 8770 26 - 918 - 6099 + 916 + 5828 @@ -21237,22 +26637,22 @@ 1 2 - 78917 + 78714 2 3 - 17537 + 17595 3 5 - 9476 + 9478 5 17 - 5664 + 5610 @@ -21262,19 +26662,19 @@ ptrtomembers - 9730 + 11025 id - 9730 + 11025 type_id - 7977 + 9067 class_id - 4870 + 5464 @@ -21288,7 +26688,7 @@ 1 2 - 9730 + 11025 @@ -21304,7 +26704,7 @@ 1 2 - 9730 + 11025 @@ -21320,12 +26720,12 @@ 1 2 - 7755 + 8813 2 84 - 221 + 253 @@ -21341,12 +26741,12 @@ 1 2 - 7755 + 8813 2 84 - 221 + 253 @@ -21362,22 +26762,22 @@ 1 2 - 3898 + 4352 2 3 - 528 + 604 8 9 - 401 + 459 10 65 - 42 + 48 @@ -21393,22 +26793,22 @@ 1 2 - 3898 + 4352 2 3 - 528 + 604 8 9 - 401 + 459 10 65 - 42 + 48 @@ -21418,15 +26818,15 @@ specifiers - 7741 + 7745 id - 7741 + 7745 str - 7741 + 7745 @@ -21440,7 +26840,7 @@ 1 2 - 7741 + 7745 @@ -21456,7 +26856,7 @@ 1 2 - 7741 + 7745 @@ -21466,15 +26866,15 @@ typespecifiers - 854941 + 888515 type_id - 847449 + 882627 spec_id - 1623 + 108 @@ -21488,12 +26888,12 @@ 1 2 - 839957 + 876739 2 3 - 7491 + 5887 @@ -21507,69 +26907,49 @@ 12 - 1 - 2 - 124 - - - 2 - 3 - 124 - - - 16 - 17 - 124 - - - 17 - 18 - 124 - - - 24 - 25 - 124 + 164 + 165 + 12 - 44 - 45 - 124 + 215 + 216 + 12 - 49 - 50 - 124 + 224 + 225 + 12 - 51 - 52 - 124 + 532 + 533 + 12 - 112 - 113 - 124 + 821 + 822 + 12 - 199 - 200 - 124 + 1568 + 1569 + 12 - 325 - 326 - 124 + 4150 + 4151 + 12 - 545 - 546 - 124 + 17496 + 17497 + 12 - 5462 - 5463 - 124 + 48324 + 48325 + 12 @@ -21579,15 +26959,15 @@ funspecifiers - 9723254 + 9688610 func_id - 4012492 + 3970813 spec_id - 2372 + 2373 @@ -21601,27 +26981,27 @@ 1 2 - 1528455 + 1484261 2 3 - 506696 + 506954 3 4 - 1037866 + 1037645 4 5 - 693492 + 696219 5 8 - 245981 + 245731 @@ -21655,8 +27035,8 @@ 124 - 216 - 217 + 206 + 207 124 @@ -21665,8 +27045,8 @@ 124 - 355 - 356 + 354 + 355 124 @@ -21675,8 +27055,8 @@ 124 - 767 - 768 + 766 + 767 124 @@ -21685,48 +27065,48 @@ 124 - 1095 - 1096 + 1075 + 1076 124 - 1261 - 1262 + 1258 + 1259 124 - 1663 - 1664 + 1662 + 1663 124 - 3301 - 3302 + 3340 + 3341 124 - 3355 - 3356 + 3351 + 3352 124 - 6170 - 6171 + 6166 + 6167 124 - 15121 - 15122 + 15136 + 15137 124 - 19840 - 19841 + 19863 + 19864 124 - 22777 - 22778 + 22427 + 22428 124 @@ -21737,15 +27117,15 @@ varspecifiers - 3078137 + 3073086 var_id - 2316969 + 2315027 spec_id - 1123 + 1124 @@ -21759,17 +27139,17 @@ 1 2 - 1659562 + 1659658 2 3 - 554144 + 553177 3 5 - 103262 + 102190 @@ -21798,33 +27178,33 @@ 124 - 1332 - 1333 + 1325 + 1326 124 - 2238 - 2239 + 2236 + 2237 124 - 2773 - 2774 + 2761 + 2762 124 - 3449 - 3450 + 3436 + 3437 124 - 4939 - 4940 + 4931 + 4932 124 - 8493 - 8494 + 8482 + 8483 124 @@ -21835,15 +27215,15 @@ explicit_specifier_exprs - 41329 + 41350 func_id - 41329 + 41350 constant - 41329 + 41350 @@ -21857,7 +27237,7 @@ 1 2 - 41329 + 41350 @@ -21873,7 +27253,7 @@ 1 2 - 41329 + 41350 @@ -21883,11 +27263,11 @@ attributes - 654410 + 651120 id - 654410 + 651120 kind @@ -21895,7 +27275,7 @@ name - 2122 + 2123 name_space @@ -21903,7 +27283,7 @@ location - 648291 + 644999 @@ -21917,7 +27297,7 @@ 1 2 - 654410 + 651120 @@ -21933,7 +27313,7 @@ 1 2 - 654410 + 651120 @@ -21949,7 +27329,7 @@ 1 2 - 654410 + 651120 @@ -21965,7 +27345,7 @@ 1 2 - 654410 + 651120 @@ -21984,13 +27364,13 @@ 124 - 2406 - 2407 + 2402 + 2403 124 - 2828 - 2829 + 2803 + 2804 124 @@ -22057,13 +27437,13 @@ 124 - 2360 - 2361 + 2356 + 2357 124 - 2828 - 2829 + 2803 + 2804 124 @@ -22095,7 +27475,12 @@ 7 8 - 249 + 124 + + + 8 + 9 + 124 10 @@ -22118,8 +27503,8 @@ 124 - 59 - 60 + 55 + 56 124 @@ -22133,8 +27518,8 @@ 124 - 341 - 342 + 340 + 341 124 @@ -22143,8 +27528,8 @@ 124 - 2629 - 2630 + 2604 + 2605 124 @@ -22161,7 +27546,7 @@ 1 2 - 1872 + 1873 2 @@ -22182,7 +27567,7 @@ 1 2 - 2122 + 2123 @@ -22216,8 +27601,8 @@ 124 - 7 - 8 + 8 + 9 124 @@ -22241,8 +27626,8 @@ 124 - 59 - 60 + 55 + 56 124 @@ -22256,8 +27641,8 @@ 124 - 336 - 337 + 335 + 336 124 @@ -22266,8 +27651,8 @@ 124 - 2629 - 2630 + 2604 + 2605 124 @@ -22287,8 +27672,8 @@ 124 - 5230 - 5231 + 5201 + 5202 124 @@ -22350,8 +27735,8 @@ 124 - 5181 - 5182 + 5152 + 5153 124 @@ -22368,12 +27753,12 @@ 1 2 - 642423 + 639127 2 5 - 5868 + 5871 @@ -22389,7 +27774,7 @@ 1 2 - 648291 + 644999 @@ -22405,12 +27790,12 @@ 1 2 - 643172 + 639877 2 3 - 5119 + 5122 @@ -22426,7 +27811,7 @@ 1 2 - 648291 + 644999 @@ -22436,27 +27821,27 @@ attribute_args - 82562 + 90623 id - 82562 + 90623 kind - 17 + 48 attribute - 71259 + 78510 index - 40 + 60 location - 57184 + 84409 @@ -22470,7 +27855,7 @@ 1 2 - 82562 + 90623 @@ -22486,7 +27871,7 @@ 1 2 - 82562 + 90623 @@ -22502,7 +27887,7 @@ 1 2 - 82562 + 90623 @@ -22518,7 +27903,7 @@ 1 2 - 82562 + 90623 @@ -22532,19 +27917,24 @@ 12 - 100 - 101 - 5 + 10 + 11 + 12 - 2252 - 2253 - 5 + 133 + 134 + 12 - 11914 - 11915 - 5 + 560 + 561 + 12 + + + 6793 + 6794 + 12 @@ -22558,19 +27948,24 @@ 12 - 100 - 101 - 5 + 10 + 11 + 12 - 1892 - 1893 - 5 + 133 + 134 + 12 - 10583 - 10584 - 5 + 156 + 157 + 12 + + + 6365 + 6366 + 12 @@ -22586,17 +27981,17 @@ 1 2 - 5 + 24 4 5 - 5 + 12 - 7 - 8 - 5 + 5 + 6 + 12 @@ -22610,19 +28005,24 @@ 12 - 15 - 16 - 5 + 8 + 9 + 12 - 2183 - 2184 - 5 + 18 + 19 + 12 - 9330 - 9331 - 5 + 535 + 536 + 12 + + + 6437 + 6438 + 12 @@ -22638,17 +28038,17 @@ 1 2 - 65790 + 71425 2 - 7 - 5347 + 5 + 5899 - 7 - 25 - 121 + 5 + 18 + 1184 @@ -22664,12 +28064,12 @@ 1 2 - 69743 + 76454 2 3 - 1516 + 2055 @@ -22685,12 +28085,12 @@ 1 2 - 68215 + 72900 2 - 8 - 3044 + 6 + 5609 @@ -22706,12 +28106,12 @@ 1 2 - 68747 + 74339 2 6 - 2511 + 4170 @@ -22725,39 +28125,29 @@ 12 - 2 - 3 - 5 - - - 9 - 10 - 5 - - - 82 - 83 - 5 + 94 + 95 + 12 - 83 - 84 - 5 + 96 + 97 + 12 - 271 - 272 - 5 + 166 + 167 + 12 - 526 - 527 - 5 + 464 + 465 + 12 - 13293 - 13294 - 5 + 6676 + 6677 + 12 @@ -22773,17 +28163,17 @@ 1 2 - 17 + 12 2 3 - 17 + 36 - 3 - 4 - 5 + 4 + 5 + 12 @@ -22797,39 +28187,29 @@ 12 - 2 - 3 - 5 - - - 9 - 10 - 5 - - - 82 - 83 - 5 + 94 + 95 + 12 - 83 - 84 - 5 + 96 + 97 + 12 - 271 - 272 - 5 + 166 + 167 + 12 - 526 - 527 - 5 + 464 + 465 + 12 - 12313 - 12314 - 5 + 6494 + 6495 + 12 @@ -22843,39 +28223,29 @@ 12 - 2 - 3 - 5 - - - 9 - 10 - 5 - - - 82 - 83 - 5 + 94 + 95 + 12 - 83 - 84 - 5 + 96 + 97 + 12 - 271 - 272 - 5 + 166 + 167 + 12 - 441 - 442 - 5 + 349 + 350 + 12 - 9074 - 9075 - 5 + 6318 + 6319 + 12 @@ -22891,17 +28261,12 @@ 1 2 - 41506 + 82269 2 - 3 - 11858 - - - 3 - 25 - 3819 + 23 + 2139 @@ -22917,12 +28282,12 @@ 1 2 - 47653 + 84216 2 3 - 9531 + 193 @@ -22938,17 +28303,12 @@ 1 2 - 42861 + 84047 2 - 3 - 12298 - - - 3 - 11 - 2025 + 18 + 362 @@ -22964,12 +28324,12 @@ 1 2 - 56935 + 83914 2 - 8 - 248 + 3 + 495 @@ -22979,11 +28339,11 @@ attribute_arg_value - 16693 + 16696 arg - 16693 + 16696 value @@ -23001,7 +28361,7 @@ 1 2 - 16693 + 16696 @@ -23135,15 +28495,15 @@ attribute_arg_constant - 71994 + 82124 arg - 71994 + 82124 constant - 71994 + 82124 @@ -23157,7 +28517,7 @@ 1 2 - 71994 + 82124 @@ -23173,7 +28533,7 @@ 1 2 - 71994 + 82124 @@ -23183,15 +28543,15 @@ attribute_arg_expr - 1405 + 1607 arg - 1405 + 1607 expr - 1405 + 1607 @@ -23205,7 +28565,7 @@ 1 2 - 1405 + 1607 @@ -23221,7 +28581,7 @@ 1 2 - 1405 + 1607 @@ -23284,15 +28644,15 @@ typeattributes - 96394 + 92196 type_id - 94646 + 90572 spec_id - 32464 + 29232 @@ -23306,12 +28666,12 @@ 1 2 - 92898 + 88948 2 3 - 1748 + 1624 @@ -23327,17 +28687,17 @@ 1 2 - 27969 + 24735 2 - 9 - 2497 + 7 + 2248 - 11 + 7 58 - 1997 + 2248 @@ -23347,15 +28707,15 @@ funcattributes - 844327 + 844883 func_id - 799751 + 800034 spec_id - 617325 + 617140 @@ -23369,12 +28729,12 @@ 1 2 - 759670 + 759682 2 7 - 40081 + 40351 @@ -23390,12 +28750,12 @@ 1 2 - 572249 + 571417 2 213 - 45075 + 45723 @@ -23468,7 +28828,7 @@ namespaceattributes - 5995 + 5997 namespace_id @@ -23476,7 +28836,7 @@ spec_id - 5995 + 5997 @@ -23516,7 +28876,7 @@ 1 2 - 5995 + 5997 @@ -23526,15 +28886,15 @@ stmtattributes - 2214 + 2216 stmt_id - 2214 + 2216 spec_id - 558 + 559 @@ -23548,7 +28908,7 @@ 1 2 - 2214 + 2216 @@ -23564,7 +28924,7 @@ 1 2 - 214 + 215 2 @@ -23574,7 +28934,7 @@ 3 4 - 42 + 43 9 @@ -23584,7 +28944,7 @@ 13 16 - 42 + 43 @@ -23594,15 +28954,15 @@ unspecifiedtype - 7179407 + 7467739 type_id - 7179407 + 7467739 unspecified_type_id - 3965917 + 4300051 @@ -23616,7 +28976,7 @@ 1 2 - 7179407 + 7467739 @@ -23632,22 +28992,17 @@ 1 2 - 2482788 + 2870392 2 3 - 1117779 + 1169405 3 - 7 - 302919 - - - 7 - 537 - 62431 + 6277 + 260253 @@ -23657,19 +29012,19 @@ member - 4193419 + 4200804 parent - 543781 + 544558 index - 29717 + 29732 child - 4188799 + 4195557 @@ -23683,57 +29038,57 @@ 1 2 - 129108 + 129174 2 3 - 83408 + 83451 3 4 - 32464 + 32606 4 5 - 44950 + 44848 5 6 - 42453 + 42475 6 7 - 33962 + 34979 7 9 - 42328 + 41725 9 13 - 41204 + 41600 13 18 - 41329 + 41101 18 42 - 40830 + 40851 42 239 - 11737 + 11743 @@ -23749,57 +29104,57 @@ 1 2 - 128859 + 128924 2 3 - 83533 + 83576 3 4 - 32214 + 32356 4 5 - 45075 + 44973 5 6 - 42578 + 42600 6 7 - 32839 + 33980 7 9 - 42703 + 42225 9 13 - 41579 + 41725 13 18 - 41454 + 41226 18 42 - 40955 + 40976 42 265 - 11986 + 11993 @@ -23815,57 +29170,57 @@ 1 2 - 6492 + 6496 2 3 - 2622 + 2623 3 8 - 1872 + 1873 9 10 - 2871 + 2873 10 - 19 - 2247 + 20 + 2373 - 19 - 26 - 2247 + 20 + 27 + 2248 - 26 + 27 36 - 2497 + 2373 36 50 - 2247 + 2248 54 141 - 2247 + 2248 150 - 468 - 2247 + 467 + 2248 480 - 4310 - 2122 + 4314 + 2123 @@ -23881,57 +29236,57 @@ 1 2 - 5493 + 5496 2 3 - 3621 + 3622 3 9 - 1872 + 1873 9 10 - 2871 + 2873 10 20 - 2372 + 2248 20 28 - 2372 + 2373 28 37 - 2372 + 2498 37 56 - 2372 + 2373 58 156 - 2247 + 2248 163 - 527 - 2247 + 528 + 2248 547 - 4330 - 1872 + 4334 + 1873 @@ -23947,7 +29302,7 @@ 1 2 - 4188799 + 4195557 @@ -23963,12 +29318,12 @@ 1 2 - 4184179 + 4190310 2 3 - 4619 + 5246 @@ -23978,15 +29333,15 @@ enclosingfunction - 114807 + 114833 child - 114807 + 114833 parent - 71337 + 71353 @@ -24000,7 +29355,7 @@ 1 2 - 114807 + 114833 @@ -24016,22 +29371,22 @@ 1 2 - 49329 + 49341 2 3 - 4633 + 4634 3 4 - 15364 + 15367 4 37 - 2009 + 2010 @@ -24041,15 +29396,15 @@ derivations - 476877 + 476986 derivation - 476877 + 476986 sub - 455142 + 455246 index @@ -24057,11 +29412,11 @@ super - 235542 + 235596 location - 35396 + 35404 @@ -24075,7 +29430,7 @@ 1 2 - 476877 + 476986 @@ -24091,7 +29446,7 @@ 1 2 - 476877 + 476986 @@ -24107,7 +29462,7 @@ 1 2 - 476877 + 476986 @@ -24123,7 +29478,7 @@ 1 2 - 476877 + 476986 @@ -24139,12 +29494,12 @@ 1 2 - 438619 + 438720 2 9 - 16522 + 16526 @@ -24160,12 +29515,12 @@ 1 2 - 438619 + 438720 2 8 - 16522 + 16526 @@ -24181,12 +29536,12 @@ 1 2 - 438619 + 438720 2 9 - 16522 + 16526 @@ -24202,12 +29557,12 @@ 1 2 - 438619 + 438720 2 8 - 16522 + 16526 @@ -24362,12 +29717,12 @@ 1 2 - 225731 + 225783 2 1655 - 9811 + 9813 @@ -24383,12 +29738,12 @@ 1 2 - 225731 + 225783 2 1655 - 9811 + 9813 @@ -24404,7 +29759,7 @@ 1 2 - 235100 + 235153 2 @@ -24425,12 +29780,12 @@ 1 2 - 230194 + 230247 2 81 - 5348 + 5349 @@ -24446,7 +29801,7 @@ 1 2 - 26504 + 26510 2 @@ -24456,7 +29811,7 @@ 5 22 - 2759 + 2760 22 @@ -24482,7 +29837,7 @@ 1 2 - 26504 + 26510 2 @@ -24492,7 +29847,7 @@ 5 22 - 2759 + 2760 22 @@ -24518,7 +29873,7 @@ 1 2 - 35396 + 35404 @@ -24534,7 +29889,7 @@ 1 2 - 28718 + 28725 2 @@ -24544,7 +29899,7 @@ 4 26 - 2827 + 2828 26 @@ -24559,11 +29914,11 @@ derspecifiers - 478648 + 478758 der_id - 476434 + 476543 spec_id @@ -24581,7 +29936,7 @@ 1 2 - 474220 + 474328 2 @@ -24627,11 +29982,11 @@ direct_base_offsets - 449963 + 450067 der_id - 449963 + 450067 offset @@ -24649,7 +30004,7 @@ 1 2 - 449963 + 450067 @@ -24710,11 +30065,11 @@ virtual_base_offsets - 5825 + 5826 sub - 5825 + 5826 super @@ -24736,7 +30091,7 @@ 1 2 - 5825 + 5826 @@ -24752,7 +30107,7 @@ 1 2 - 5825 + 5826 @@ -24846,23 +30201,23 @@ frienddecls - 700420 + 700589 id - 700420 + 700589 type_id - 42413 + 42423 decl_id - 77741 + 77759 location - 6098 + 6099 @@ -24876,7 +30231,7 @@ 1 2 - 700420 + 700589 @@ -24892,7 +30247,7 @@ 1 2 - 700420 + 700589 @@ -24908,7 +30263,7 @@ 1 2 - 700420 + 700589 @@ -24924,12 +30279,12 @@ 1 2 - 6166 + 6167 2 3 - 13967 + 13970 3 @@ -24939,27 +30294,27 @@ 7 12 - 3440 + 3441 12 20 - 3645 + 3646 20 32 - 3304 + 3305 33 50 - 3781 + 3782 50 80 - 3781 + 3782 101 @@ -24980,12 +30335,12 @@ 1 2 - 6166 + 6167 2 3 - 13967 + 13970 3 @@ -24995,27 +30350,27 @@ 7 12 - 3440 + 3441 12 20 - 3645 + 3646 20 32 - 3304 + 3305 33 50 - 3781 + 3782 50 80 - 3781 + 3782 101 @@ -25036,12 +30391,12 @@ 1 2 - 41050 + 41060 2 13 - 1362 + 1363 @@ -25057,32 +30412,32 @@ 1 2 - 47864 + 47875 2 3 - 6063 + 6065 3 8 - 5995 + 5997 8 15 - 6063 + 6065 15 40 - 6063 + 6065 40 164 - 5689 + 5690 @@ -25098,32 +30453,32 @@ 1 2 - 47864 + 47875 2 3 - 6063 + 6065 3 8 - 5995 + 5997 8 15 - 6063 + 6065 15 40 - 6063 + 6065 40 164 - 5689 + 5690 @@ -25139,7 +30494,7 @@ 1 2 - 77059 + 77078 2 @@ -25160,7 +30515,7 @@ 1 2 - 5723 + 5724 2 @@ -25181,7 +30536,7 @@ 1 2 - 5961 + 5963 2 @@ -25202,7 +30557,7 @@ 1 2 - 5757 + 5758 2 @@ -25217,19 +30572,19 @@ comments - 11241970 + 11220843 id - 11241970 + 11220843 contents - 4306670 + 4291377 location - 11241970 + 11220843 @@ -25243,7 +30598,7 @@ 1 2 - 11241970 + 11220843 @@ -25259,7 +30614,7 @@ 1 2 - 11241970 + 11220843 @@ -25275,17 +30630,17 @@ 1 2 - 3932329 + 3917344 2 - 7 - 330014 + 6 + 321937 - 7 - 34447 - 44326 + 6 + 34359 + 52094 @@ -25301,17 +30656,17 @@ 1 2 - 3932329 + 3917344 2 - 7 - 330014 + 6 + 321937 - 7 - 34447 - 44326 + 6 + 34359 + 52094 @@ -25327,7 +30682,7 @@ 1 2 - 11241970 + 11220843 @@ -25343,7 +30698,7 @@ 1 2 - 11241970 + 11220843 @@ -25353,15 +30708,15 @@ commentbinding - 3916721 + 3838390 id - 3352213 + 3351549 element - 3751027 + 3672362 @@ -25375,12 +30730,12 @@ 1 2 - 3290530 + 3295331 2 1706 - 61682 + 56217 @@ -25396,12 +30751,12 @@ 1 2 - 3585333 + 3506333 2 3 - 165694 + 166028 @@ -25411,15 +30766,15 @@ exprconv - 9633092 + 9633089 converted - 9632986 + 9632983 conversion - 9633092 + 9633089 @@ -25433,7 +30788,7 @@ 1 2 - 9632881 + 9632878 2 @@ -25454,7 +30809,7 @@ 1 2 - 9633092 + 9633089 @@ -25464,30 +30819,30 @@ compgenerated - 9891533 + 9891516 id - 9891533 + 9891516 synthetic_destructor_call - 1670057 + 1671589 element - 1243740 + 1244881 i - 386 + 387 destructor_call - 1670057 + 1671589 @@ -25501,17 +30856,17 @@ 1 2 - 827870 + 828630 2 3 - 409077 + 409452 3 19 - 6792 + 6798 @@ -25527,17 +30882,17 @@ 1 2 - 827870 + 828630 2 3 - 409077 + 409452 3 19 - 6792 + 6798 @@ -25553,17 +30908,17 @@ 1 2 - 42 + 43 2 3 - 85 + 86 3 4 - 85 + 86 13 @@ -25619,17 +30974,17 @@ 1 2 - 42 + 43 2 3 - 85 + 86 3 4 - 85 + 86 13 @@ -25685,7 +31040,7 @@ 1 2 - 1670057 + 1671589 @@ -25701,7 +31056,7 @@ 1 2 - 1670057 + 1671589 @@ -25711,15 +31066,15 @@ namespaces - 8653 + 9901 id - 8653 + 9901 name - 4574 + 5234 @@ -25733,7 +31088,7 @@ 1 2 - 8653 + 9901 @@ -25749,17 +31104,17 @@ 1 2 - 3740 + 4279 2 3 - 528 + 604 3 149 - 306 + 350 @@ -25780,15 +31135,15 @@ namespacembrs - 2039522 + 2042061 parentid - 3995 + 3997 memberid - 2039522 + 2042061 @@ -25860,8 +31215,8 @@ 249 - 15606 - 15607 + 15618 + 15619 124 @@ -25878,7 +31233,7 @@ 1 2 - 2039522 + 2042061 @@ -25888,11 +31243,11 @@ exprparents - 19454225 + 19454216 expr_id - 19454225 + 19454216 child_index @@ -25900,7 +31255,7 @@ parent_id - 12939994 + 12939987 @@ -25914,7 +31269,7 @@ 1 2 - 19454225 + 19454216 @@ -25930,7 +31285,7 @@ 1 2 - 19454225 + 19454216 @@ -26048,12 +31403,12 @@ 1 2 - 7394760 + 7394757 2 3 - 5082682 + 5082680 3 @@ -26074,12 +31429,12 @@ 1 2 - 7394760 + 7394757 2 3 - 5082682 + 5082680 3 @@ -26094,22 +31449,22 @@ expr_isload - 6909477 + 6853135 expr_id - 6909477 + 6853135 conversionkinds - 6050435 + 6050434 expr_id - 6050435 + 6050434 kind @@ -26127,7 +31482,7 @@ 1 2 - 6050435 + 6050434 @@ -26171,8 +31526,8 @@ 1 - 5831536 - 5831537 + 5831535 + 5831536 1 @@ -26183,11 +31538,11 @@ iscall - 5797114 + 5802435 caller - 5797114 + 5802435 kind @@ -26205,7 +31560,7 @@ 1 2 - 5797114 + 5802435 @@ -26241,11 +31596,11 @@ numtemplatearguments - 627939 + 625760 expr_id - 627939 + 625760 num @@ -26263,7 +31618,7 @@ 1 2 - 627939 + 625760 @@ -26282,13 +31637,13 @@ 124 - 1263 - 1264 + 1264 + 1265 124 - 3759 - 3760 + 3738 + 3739 124 @@ -26347,23 +31702,23 @@ namequalifiers - 3038986 + 3041775 id - 3038986 + 3041775 qualifiableelement - 3038986 + 3041775 qualifyingelement - 47440 + 47483 location - 551913 + 552420 @@ -26377,7 +31732,7 @@ 1 2 - 3038986 + 3041775 @@ -26393,7 +31748,7 @@ 1 2 - 3038986 + 3041775 @@ -26409,7 +31764,7 @@ 1 2 - 3038986 + 3041775 @@ -26425,7 +31780,7 @@ 1 2 - 3038986 + 3041775 @@ -26441,7 +31796,7 @@ 1 2 - 3038986 + 3041775 @@ -26457,7 +31812,7 @@ 1 2 - 3038986 + 3041775 @@ -26473,27 +31828,27 @@ 1 2 - 31512 + 31541 2 3 - 8168 + 8175 3 5 - 4105 + 4109 5 6811 - 3568 + 3571 19018 41956 - 85 + 86 @@ -26509,27 +31864,27 @@ 1 2 - 31512 + 31541 2 3 - 8168 + 8175 3 5 - 4105 + 4109 5 6811 - 3568 + 3571 19018 41956 - 85 + 86 @@ -26545,22 +31900,22 @@ 1 2 - 34371 + 34402 2 3 - 7351 + 7358 3 6 - 3568 + 3571 6 20057 - 2149 + 2151 @@ -26576,22 +31931,22 @@ 1 2 - 79059 + 79132 2 6 - 38068 + 38103 6 7 - 398609 + 398974 7 192 - 36176 + 36209 @@ -26607,22 +31962,22 @@ 1 2 - 79059 + 79132 2 6 - 38068 + 38103 6 7 - 398609 + 398974 7 192 - 36176 + 36209 @@ -26638,22 +31993,22 @@ 1 2 - 111431 + 111533 2 4 - 13284 + 13296 4 5 - 414902 + 415283 5 33 - 12295 + 12306 @@ -26663,11 +32018,11 @@ varbind - 8254635 + 8254631 expr - 8254635 + 8254631 var @@ -26685,7 +32040,7 @@ 1 2 - 8254635 + 8254631 @@ -26701,7 +32056,7 @@ 1 2 - 171536 + 171535 2 @@ -26711,7 +32066,7 @@ 3 4 - 145648 + 145647 4 @@ -26756,15 +32111,15 @@ funbind - 5806808 + 5812138 expr - 5804336 + 5809664 fun - 275677 + 275930 @@ -26778,12 +32133,12 @@ 1 2 - 5801865 + 5807189 2 3 - 2471 + 2474 @@ -26799,27 +32154,27 @@ 1 2 - 181269 + 181436 2 3 - 38799 + 38834 3 4 - 17174 + 17190 4 8 - 22720 + 22741 8 37798 - 15713 + 15727 @@ -26829,11 +32184,11 @@ expr_allocator - 45241 + 45252 expr - 45241 + 45252 func @@ -26855,7 +32210,7 @@ 1 2 - 45241 + 45252 @@ -26871,7 +32226,7 @@ 1 2 - 45241 + 45252 @@ -26955,11 +32310,11 @@ expr_deallocator - 53826 + 53839 expr - 53826 + 53839 func @@ -26981,7 +32336,7 @@ 1 2 - 53826 + 53839 @@ -26997,7 +32352,7 @@ 1 2 - 53826 + 53839 @@ -27246,11 +32601,11 @@ values - 13474612 + 13474605 id - 13474612 + 13474605 str @@ -27268,7 +32623,7 @@ 1 2 - 13474612 + 13474605 @@ -27314,11 +32669,11 @@ valuetext - 6647584 + 6647456 id - 6647584 + 6647456 text @@ -27336,7 +32691,7 @@ 1 2 - 6647584 + 6647456 @@ -27366,7 +32721,7 @@ 7 - 593553 + 593555 27950 @@ -27377,15 +32732,15 @@ valuebind - 13583194 + 13583188 val - 13474612 + 13474605 expr - 13583194 + 13583188 @@ -27399,7 +32754,7 @@ 1 2 - 13384057 + 13384050 2 @@ -27420,7 +32775,7 @@ 1 2 - 13583194 + 13583188 @@ -27430,15 +32785,15 @@ fieldoffsets - 1496815 + 1493401 id - 1496815 + 1493401 byteoffset - 31370 + 31376 bitoffset @@ -27456,7 +32811,7 @@ 1 2 - 1496815 + 1493401 @@ -27472,7 +32827,7 @@ 1 2 - 1496815 + 1493401 @@ -27488,17 +32843,17 @@ 1 2 - 17700 + 17704 2 3 - 2450 + 2451 3 5 - 2668 + 2669 5 @@ -27507,18 +32862,18 @@ 12 - 35 - 2450 + 34 + 2396 - 35 - 211 + 34 + 198 2396 - 250 - 5947 - 1089 + 209 + 5931 + 1143 @@ -27534,7 +32889,7 @@ 1 2 - 30390 + 30396 2 @@ -27563,8 +32918,8 @@ 54 - 44 - 45 + 43 + 44 54 @@ -27578,18 +32933,18 @@ 54 - 64 - 65 + 63 + 64 54 - 81 - 82 + 79 + 80 54 - 27127 - 27128 + 27063 + 27064 54 @@ -27631,19 +32986,19 @@ bitfield - 30341 + 30357 id - 30341 + 30357 bits - 3496 + 3497 declared_bits - 3496 + 3497 @@ -27657,7 +33012,7 @@ 1 2 - 30341 + 30357 @@ -27673,7 +33028,7 @@ 1 2 - 30341 + 30357 @@ -27689,7 +33044,7 @@ 1 2 - 998 + 999 2 @@ -27740,7 +33095,7 @@ 1 2 - 3496 + 3497 @@ -27756,7 +33111,7 @@ 1 2 - 998 + 999 2 @@ -27807,7 +33162,7 @@ 1 2 - 3496 + 3497 @@ -27817,23 +33172,23 @@ initialisers - 2251036 + 2340631 init - 2251036 + 2340631 var - 980972 + 991152 expr - 2251036 + 2340631 location - 516371 + 539242 @@ -27847,7 +33202,7 @@ 1 2 - 2251036 + 2340631 @@ -27863,7 +33218,7 @@ 1 2 - 2251036 + 2340631 @@ -27879,7 +33234,7 @@ 1 2 - 2251036 + 2340631 @@ -27895,17 +33250,17 @@ 1 2 - 870557 + 874093 2 15 - 37441 + 39500 16 25 - 72973 + 77558 @@ -27921,17 +33276,17 @@ 1 2 - 870557 + 874093 2 15 - 37441 + 39500 16 25 - 72973 + 77558 @@ -27947,7 +33302,7 @@ 1 2 - 980964 + 991143 2 @@ -27968,7 +33323,7 @@ 1 2 - 2251036 + 2340631 @@ -27984,7 +33339,7 @@ 1 2 - 2251036 + 2340631 @@ -28000,7 +33355,7 @@ 1 2 - 2251036 + 2340631 @@ -28016,22 +33371,22 @@ 1 2 - 414356 + 439287 2 3 - 33607 + 33068 3 - 13 - 42250 + 15 + 42211 - 13 - 111911 - 26157 + 15 + 111796 + 24675 @@ -28047,17 +33402,17 @@ 1 2 - 443658 + 470421 2 - 3 - 34516 + 4 + 49610 - 3 - 12237 - 38196 + 4 + 12163 + 19210 @@ -28073,22 +33428,22 @@ 1 2 - 414356 + 439287 2 3 - 33607 + 33068 3 - 13 - 42250 + 15 + 42211 - 13 - 111911 - 26157 + 15 + 111796 + 24675 @@ -28098,26 +33453,26 @@ braced_initialisers - 68468 + 68469 init - 68468 + 68469 expr_ancestor - 1676032 + 1677570 exp - 1676032 + 1677570 ancestor - 838833 + 839603 @@ -28131,7 +33486,7 @@ 1 2 - 1676032 + 1677570 @@ -28147,17 +33502,17 @@ 1 2 - 17067 + 17082 2 3 - 811706 + 812451 3 19 - 10059 + 10069 @@ -28167,11 +33522,11 @@ exprs - 25210587 + 25210575 id - 25210587 + 25210575 kind @@ -28179,7 +33534,7 @@ location - 10582675 + 10582670 @@ -28193,7 +33548,7 @@ 1 2 - 25210587 + 25210575 @@ -28209,7 +33564,7 @@ 1 2 - 25210587 + 25210575 @@ -28387,12 +33742,12 @@ 1 2 - 8900705 + 8900701 2 3 - 820609 + 820608 3 @@ -28418,7 +33773,7 @@ 1 2 - 9040107 + 9040103 2 @@ -28438,19 +33793,19 @@ expr_reuse - 846206 + 846982 reuse - 846206 + 846982 original - 846206 + 846982 value_category - 42 + 43 @@ -28464,7 +33819,7 @@ 1 2 - 846206 + 846982 @@ -28480,7 +33835,7 @@ 1 2 - 846206 + 846982 @@ -28496,7 +33851,7 @@ 1 2 - 846206 + 846982 @@ -28512,7 +33867,7 @@ 1 2 - 846206 + 846982 @@ -28564,11 +33919,11 @@ expr_types - 25210587 + 25210575 id - 25210587 + 25210575 typeid @@ -28590,7 +33945,7 @@ 1 2 - 25210587 + 25210575 @@ -28606,7 +33961,7 @@ 1 2 - 25210587 + 25210575 @@ -28751,15 +34106,15 @@ new_allocated_type - 46195 + 46206 expr - 46195 + 46206 type_id - 27390 + 27396 @@ -28773,7 +34128,7 @@ 1 2 - 46195 + 46206 @@ -28789,17 +34144,17 @@ 1 2 - 11514 + 11517 2 3 - 14478 + 14482 3 19 - 1396 + 1397 @@ -28809,15 +34164,15 @@ new_array_allocated_type - 6653 + 6933 expr - 6653 + 6933 type_id - 2843 + 2978 @@ -28831,7 +34186,7 @@ 1 2 - 6653 + 6933 @@ -28847,22 +34202,22 @@ 1 2 - 40 + 43 2 3 - 2510 + 2633 3 5 - 219 + 224 6 15 - 73 + 77 @@ -28872,7 +34227,7 @@ aggregate_field_init - 5717382 + 5717380 aggregate @@ -28880,7 +34235,7 @@ initializer - 5717204 + 5717202 field @@ -29080,7 +34435,7 @@ 1 2 - 5717204 + 5717202 @@ -29096,7 +34451,7 @@ 1 2 - 5717026 + 5717024 2 @@ -29117,7 +34472,7 @@ 1 2 - 5717204 + 5717202 @@ -29133,7 +34488,7 @@ 1 2 - 5717204 + 5717202 @@ -30208,15 +35563,15 @@ condition_decl_bind - 408518 + 408893 expr - 408518 + 408893 decl - 408518 + 408893 @@ -30230,7 +35585,7 @@ 1 2 - 408518 + 408893 @@ -30246,7 +35601,7 @@ 1 2 - 408518 + 408893 @@ -30256,15 +35611,15 @@ typeid_bind - 47898 + 47909 expr - 47898 + 47909 type_id - 15943 + 15947 @@ -30278,7 +35633,7 @@ 1 2 - 47898 + 47909 @@ -30294,12 +35649,12 @@ 1 2 - 2963 + 2964 2 3 - 12570 + 12573 3 @@ -30314,15 +35669,15 @@ uuidof_bind - 26588 + 28060 expr - 26588 + 28060 type_id - 26336 + 27792 @@ -30336,7 +35691,7 @@ 1 2 - 26588 + 28060 @@ -30352,12 +35707,12 @@ 1 2 - 26125 + 27568 2 4 - 211 + 224 @@ -30498,23 +35853,23 @@ lambdas - 19057 + 16482 expr - 19057 + 16482 default_capture - 24 + 25 has_explicit_return_type - 16 + 17 has_explicit_parameter_list - 16 + 17 @@ -30528,7 +35883,7 @@ 1 2 - 19057 + 16482 @@ -30544,7 +35899,7 @@ 1 2 - 19057 + 16482 @@ -30560,7 +35915,7 @@ 1 2 - 19057 + 16482 @@ -30574,18 +35929,18 @@ 12 - 306 - 307 + 276 + 277 8 - 719 - 720 + 697 + 698 8 - 1321 - 1322 + 936 + 937 8 @@ -30602,7 +35957,7 @@ 2 3 - 24 + 25 @@ -30618,7 +35973,7 @@ 2 3 - 24 + 25 @@ -30637,8 +35992,8 @@ 8 - 1533 - 1534 + 1096 + 1097 8 @@ -30655,7 +36010,7 @@ 3 4 - 16 + 17 @@ -30695,8 +36050,8 @@ 8 - 2312 - 2313 + 1875 + 1876 8 @@ -30713,7 +36068,7 @@ 3 4 - 16 + 17 @@ -30744,35 +36099,35 @@ lambda_capture - 31966 + 28526 id - 31966 + 28526 lambda - 15491 + 13296 index - 138 + 146 field - 31966 + 28526 captured_by_reference - 16 + 17 is_implicit - 16 + 17 location - 17944 + 18398 @@ -30786,7 +36141,7 @@ 1 2 - 31966 + 28526 @@ -30802,7 +36157,7 @@ 1 2 - 31966 + 28526 @@ -30818,7 +36173,7 @@ 1 2 - 31966 + 28526 @@ -30834,7 +36189,7 @@ 1 2 - 31966 + 28526 @@ -30850,7 +36205,7 @@ 1 2 - 31966 + 28526 @@ -30866,7 +36221,7 @@ 1 2 - 31966 + 28526 @@ -30882,27 +36237,27 @@ 1 2 - 8212 + 6674 2 3 - 3541 + 3082 3 4 - 1657 + 1614 4 6 - 1259 + 1226 6 18 - 820 + 699 @@ -30918,27 +36273,27 @@ 1 2 - 8212 + 6674 2 3 - 3541 + 3082 3 4 - 1657 + 1614 4 6 - 1259 + 1226 6 18 - 820 + 699 @@ -30954,27 +36309,27 @@ 1 2 - 8212 + 6674 2 3 - 3541 + 3082 3 4 - 1657 + 1614 4 6 - 1259 + 1226 6 18 - 820 + 699 @@ -30990,12 +36345,12 @@ 1 2 - 14248 + 12726 2 3 - 1242 + 569 @@ -31011,12 +36366,12 @@ 1 2 - 15369 + 13270 2 3 - 121 + 25 @@ -31032,27 +36387,27 @@ 1 2 - 8805 + 7304 2 3 - 3696 + 3246 3 4 - 1389 + 1329 4 7 - 1291 + 1087 7 18 - 308 + 328 @@ -31121,33 +36476,33 @@ 8 - 101 - 102 + 81 + 82 8 - 171 - 172 + 139 + 140 8 - 256 - 257 + 223 + 224 8 - 460 - 461 + 410 + 411 8 - 896 - 897 + 767 + 768 8 - 1907 - 1908 + 1540 + 1541 8 @@ -31217,33 +36572,33 @@ 8 - 101 - 102 + 81 + 82 8 - 171 - 172 + 139 + 140 8 - 256 - 257 + 223 + 224 8 - 460 - 461 + 410 + 411 8 - 896 - 897 + 767 + 768 8 - 1907 - 1908 + 1540 + 1541 8 @@ -31313,33 +36668,33 @@ 8 - 101 - 102 + 81 + 82 8 - 171 - 172 + 139 + 140 8 - 256 - 257 + 223 + 224 8 - 460 - 461 + 410 + 411 8 - 896 - 897 + 767 + 768 8 - 1907 - 1908 + 1540 + 1541 8 @@ -31356,12 +36711,12 @@ 1 2 - 32 + 34 2 3 - 105 + 112 @@ -31377,12 +36732,12 @@ 1 2 - 81 + 86 2 3 - 56 + 60 @@ -31451,33 +36806,33 @@ 8 - 66 - 67 + 65 + 66 8 - 100 - 101 + 98 + 99 8 - 182 - 183 + 179 + 180 8 - 354 - 355 + 347 + 348 8 - 604 - 605 + 585 + 586 8 - 979 - 980 + 933 + 934 8 @@ -31494,7 +36849,7 @@ 1 2 - 31966 + 28526 @@ -31510,7 +36865,7 @@ 1 2 - 31966 + 28526 @@ -31526,7 +36881,7 @@ 1 2 - 31966 + 28526 @@ -31542,7 +36897,7 @@ 1 2 - 31966 + 28526 @@ -31558,7 +36913,7 @@ 1 2 - 31966 + 28526 @@ -31574,7 +36929,7 @@ 1 2 - 31966 + 28526 @@ -31588,13 +36943,13 @@ 12 - 1457 - 1458 + 1180 + 1181 8 - 2478 - 2479 + 2124 + 2125 8 @@ -31609,13 +36964,13 @@ 12 - 819 - 820 + 590 + 591 8 - 1241 - 1242 + 1016 + 1017 8 @@ -31651,13 +37006,13 @@ 12 - 1457 - 1458 + 1180 + 1181 8 - 2478 - 2479 + 2124 + 2125 8 @@ -31674,7 +37029,7 @@ 2 3 - 16 + 17 @@ -31688,13 +37043,13 @@ 12 - 573 - 574 + 545 + 546 8 - 1639 - 1640 + 1589 + 1590 8 @@ -31709,13 +37064,13 @@ 12 - 1351 - 1352 + 827 + 828 8 - 2584 - 2585 + 2477 + 2478 8 @@ -31730,13 +37085,13 @@ 12 - 955 - 956 + 620 + 621 8 - 967 - 968 + 923 + 924 8 @@ -31772,13 +37127,13 @@ 12 - 1351 - 1352 + 827 + 828 8 - 2584 - 2585 + 2477 + 2478 8 @@ -31795,7 +37150,7 @@ 2 3 - 16 + 17 @@ -31809,13 +37164,13 @@ 12 - 377 - 378 + 328 + 329 8 - 1832 - 1833 + 1803 + 1804 8 @@ -31832,17 +37187,17 @@ 1 2 - 15694 + 16568 2 6 - 1437 + 1398 6 68 - 812 + 431 @@ -31858,17 +37213,12 @@ 1 2 - 16271 + 17181 2 - 13 - 1470 - - - 13 68 - 203 + 1217 @@ -31884,12 +37234,12 @@ 1 2 - 17254 + 17665 2 8 - 690 + 733 @@ -31905,17 +37255,17 @@ 1 2 - 15694 + 16568 2 6 - 1437 + 1398 6 68 - 812 + 431 @@ -31931,12 +37281,12 @@ 1 2 - 17920 + 18373 2 3 - 24 + 25 @@ -31952,7 +37302,7 @@ 1 2 - 17944 + 18398 @@ -31962,15 +37312,15 @@ fold - 1246 + 1247 expr - 1246 + 1247 operator - 85 + 86 is_left_fold @@ -31988,7 +37338,7 @@ 1 2 - 1246 + 1247 @@ -32004,7 +37354,7 @@ 1 2 - 1246 + 1247 @@ -32020,7 +37370,7 @@ 1 2 - 42 + 43 2 @@ -32046,7 +37396,7 @@ 1 2 - 85 + 86 @@ -32088,19 +37438,19 @@ stmts - 6368971 + 6259661 id - 6368971 + 6259661 kind - 162 + 172 location - 2684539 + 2755017 @@ -32114,7 +37464,7 @@ 1 2 - 6368971 + 6259661 @@ -32130,7 +37480,7 @@ 1 2 - 6368971 + 6259661 @@ -32154,93 +37504,93 @@ 8 - 430 - 431 + 418 + 419 8 - 595 - 596 + 546 + 547 8 - 1066 - 1067 + 827 + 828 8 - 1635 - 1636 + 1470 + 1471 8 - 1818 - 1819 + 1577 + 1578 8 - 2311 - 2312 + 1802 + 1803 8 - 2807 - 2808 + 2462 + 2463 8 - 3233 - 3234 + 3217 + 3218 8 - 3809 - 3810 + 3610 + 3611 8 - 5052 - 5053 + 4863 + 4864 8 - 16980 - 16981 + 16249 + 16250 8 - 18543 - 18544 + 16732 + 16733 8 - 22520 - 22521 + 21439 + 21440 8 - 74878 - 74879 + 68795 + 68796 8 - 95087 - 95088 + 89075 + 89076 8 - 119871 - 119872 + 112007 + 112008 8 - 200105 - 200106 + 185649 + 185650 8 - 213249 - 213250 + 194240 + 194241 8 @@ -32265,93 +37615,93 @@ 8 - 111 - 112 + 109 + 110 8 - 436 - 437 + 419 + 420 8 - 945 - 946 + 778 + 779 8 - 1155 - 1156 + 1079 + 1080 8 - 1353 - 1354 + 1311 + 1312 8 - 1388 - 1389 + 1347 + 1348 8 - 1394 - 1395 + 1388 + 1389 8 - 2197 - 2198 + 2061 + 2062 8 - 2362 - 2363 + 2309 + 2310 8 - 2509 - 2510 + 2476 + 2477 8 - 7327 - 7328 + 7043 + 7044 8 - 8943 - 8944 + 8622 + 8623 8 - 11676 - 11677 + 11206 + 11207 8 - 37583 - 37584 + 36340 + 36341 8 - 44536 - 44537 + 43405 + 43406 8 - 49039 - 49040 + 47752 + 47753 8 - 86405 - 86406 + 83834 + 83835 8 - 101101 - 101102 + 97372 + 97373 8 @@ -32368,22 +37718,17 @@ 1 2 - 2225040 + 2353184 2 - 3 - 182234 - - - 3 - 10 - 202178 + 4 + 239108 - 10 - 1789 - 75085 + 4 + 1581 + 162724 @@ -32399,12 +37744,12 @@ 1 2 - 2601582 + 2668298 2 10 - 82957 + 86719 @@ -32569,15 +37914,15 @@ if_then - 990215 + 990214 if_stmt - 990215 + 990214 then_id - 990215 + 990214 @@ -32591,7 +37936,7 @@ 1 2 - 990215 + 990214 @@ -32607,7 +37952,7 @@ 1 2 - 990215 + 990214 @@ -32617,15 +37962,15 @@ if_else - 436677 + 437078 if_stmt - 436677 + 437078 else_id - 436677 + 437078 @@ -32639,7 +37984,7 @@ 1 2 - 436677 + 437078 @@ -32655,7 +38000,7 @@ 1 2 - 436677 + 437078 @@ -32713,15 +38058,15 @@ constexpr_if_then - 106134 + 103814 constexpr_if_stmt - 106134 + 103814 then_id - 106134 + 103814 @@ -32735,7 +38080,7 @@ 1 2 - 106134 + 103814 @@ -32751,7 +38096,7 @@ 1 2 - 106134 + 103814 @@ -32761,15 +38106,15 @@ constexpr_if_else - 76166 + 73956 constexpr_if_stmt - 76166 + 73956 else_id - 76166 + 73956 @@ -32783,7 +38128,7 @@ 1 2 - 76166 + 73956 @@ -32799,7 +38144,7 @@ 1 2 - 76166 + 73956 @@ -32905,15 +38250,15 @@ while_body - 39648 + 39647 while_stmt - 39648 + 39647 body_id - 39648 + 39647 @@ -32927,7 +38272,7 @@ 1 2 - 39648 + 39647 @@ -32943,7 +38288,7 @@ 1 2 - 39648 + 39647 @@ -33049,19 +38394,19 @@ switch_case - 835329 + 836096 switch_stmt - 411463 + 411840 index - 386 + 387 case_id - 835329 + 836096 @@ -33080,12 +38425,12 @@ 2 3 - 408582 + 408957 3 19 - 2858 + 2861 @@ -33106,12 +38451,12 @@ 2 3 - 408582 + 408957 3 19 - 2858 + 2861 @@ -33269,7 +38614,7 @@ 1 2 - 835329 + 836096 @@ -33285,7 +38630,7 @@ 1 2 - 835329 + 836096 @@ -33295,15 +38640,15 @@ switch_body - 411463 + 411840 switch_stmt - 411463 + 411840 body_id - 411463 + 411840 @@ -33317,7 +38662,7 @@ 1 2 - 411463 + 411840 @@ -33333,7 +38678,7 @@ 1 2 - 411463 + 411840 @@ -33535,19 +38880,19 @@ stmtparents - 5628382 + 5524463 id - 5628382 + 5524463 index - 15775 + 16767 parent - 2381491 + 2342634 @@ -33561,7 +38906,7 @@ 1 2 - 5628382 + 5524463 @@ -33577,7 +38922,7 @@ 1 2 - 5628382 + 5524463 @@ -33593,52 +38938,52 @@ 1 2 - 5182 + 5508 2 3 - 1291 + 1372 3 4 - 284 + 302 4 5 - 2006 + 2132 7 8 - 1316 + 1398 8 12 - 1023 + 1087 12 29 - 1389 + 1476 29 - 39 - 1186 + 38 + 1260 - 42 - 78 - 1194 + 41 + 77 + 1269 - 78 - 209668 - 901 + 77 + 195079 + 958 @@ -33654,52 +38999,52 @@ 1 2 - 5182 + 5508 2 3 - 1291 + 1372 3 4 - 284 + 302 4 5 - 2006 + 2132 7 8 - 1316 + 1398 8 12 - 1023 + 1087 12 29 - 1389 + 1476 29 - 39 - 1186 + 38 + 1260 - 42 - 78 - 1194 + 41 + 77 + 1269 - 78 - 209668 - 901 + 77 + 195079 + 958 @@ -33715,32 +39060,32 @@ 1 2 - 1359016 + 1344600 2 3 - 517378 + 507832 3 4 - 151519 + 144135 4 6 - 155727 + 151439 6 16 - 178871 + 175795 16 1943 - 18976 + 18830 @@ -33756,32 +39101,32 @@ 1 2 - 1359016 + 1344600 2 3 - 517378 + 507832 3 4 - 151519 + 144135 4 6 - 155727 + 151439 6 16 - 178871 + 175795 16 1943 - 18976 + 18830 @@ -33791,30 +39136,30 @@ ishandler - 43746 + 43747 block - 43746 + 43747 stmt_decl_bind - 725885 + 721594 stmt - 715316 + 681632 num - 73 + 124 decl - 725885 + 721526 @@ -33828,12 +39173,12 @@ 1 2 - 707851 + 659683 2 - 10 - 7465 + 32 + 21949 @@ -33849,12 +39194,12 @@ 1 2 - 707851 + 659683 2 - 10 - 7465 + 32 + 21949 @@ -33868,48 +39213,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 204 + 356 8 - 919 - 920 + 1063 + 2539 8 - 88055 - 88056 + 5480 + 170179 8 @@ -33924,48 +39274,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 204 + 356 8 - 919 - 920 + 1063 + 2539 8 - 88055 - 88056 + 5480 + 170162 8 @@ -33982,7 +39337,12 @@ 1 2 - 725885 + 721502 + + + 2 + 8 + 24 @@ -33998,7 +39358,7 @@ 1 2 - 725885 + 721526 @@ -34008,19 +39368,19 @@ stmt_decl_entry_bind - 725885 + 721594 stmt - 715316 + 681632 num - 73 + 124 decl_entry - 725885 + 721594 @@ -34034,12 +39394,12 @@ 1 2 - 707851 + 659683 2 - 10 - 7465 + 32 + 21949 @@ -34055,12 +39415,12 @@ 1 2 - 707851 + 659683 2 - 10 - 7465 + 32 + 21949 @@ -34074,48 +39434,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 204 + 356 8 - 919 - 920 + 1063 + 2539 8 - 88055 - 88056 + 5480 + 170179 8 @@ -34130,48 +39495,53 @@ 12 - 14 - 15 + 1 + 2 + 52 + + + 2 + 3 8 - 15 - 16 + 3 + 5 8 - 18 - 19 + 7 + 11 8 - 21 - 22 + 11 + 15 8 - 25 - 26 + 21 + 45 8 - 60 - 61 + 86 + 121 8 - 229 - 230 + 204 + 356 8 - 919 - 920 + 1063 + 2539 8 - 88055 - 88056 + 5480 + 170179 8 @@ -34188,7 +39558,7 @@ 1 2 - 725885 + 721594 @@ -34204,7 +39574,7 @@ 1 2 - 725885 + 721594 @@ -34214,15 +39584,15 @@ blockscope - 1644953 + 1762474 block - 1644953 + 1762474 enclosing - 1428065 + 1507372 @@ -34236,7 +39606,7 @@ 1 2 - 1644953 + 1762474 @@ -34252,17 +39622,17 @@ 1 2 - 1295584 + 1336222 2 - 4 - 117122 + 3 + 128550 - 4 + 3 28 - 15358 + 42600 @@ -34272,11 +39642,11 @@ jumpinfo - 348321 + 348320 id - 348321 + 348320 str @@ -34298,7 +39668,7 @@ 1 2 - 348321 + 348320 @@ -34314,7 +39684,7 @@ 1 2 - 348321 + 348320 @@ -34407,7 +39777,7 @@ 2 3 - 36211 + 36210 3 @@ -34453,19 +39823,19 @@ preprocdirects - 5413336 + 5401355 id - 5413336 + 5401355 kind - 1373 + 1374 location - 5410090 + 5398107 @@ -34479,7 +39849,7 @@ 1 2 - 5413336 + 5401355 @@ -34495,7 +39865,7 @@ 1 2 - 5413336 + 5401355 @@ -34514,18 +39884,18 @@ 124 - 139 - 140 + 145 + 146 124 - 805 - 806 + 808 + 809 124 - 880 - 881 + 866 + 867 124 @@ -34539,8 +39909,8 @@ 124 - 1883 - 1884 + 1891 + 1892 124 @@ -34549,18 +39919,18 @@ 124 - 4737 - 4738 + 4714 + 4715 124 - 7126 - 7127 + 7089 + 7090 124 - 22045 - 22046 + 21984 + 21985 124 @@ -34580,18 +39950,18 @@ 124 - 139 - 140 + 145 + 146 124 - 805 - 806 + 808 + 809 124 - 880 - 881 + 866 + 867 124 @@ -34605,8 +39975,8 @@ 124 - 1883 - 1884 + 1891 + 1892 124 @@ -34615,18 +39985,18 @@ 124 - 4737 - 4738 + 4714 + 4715 124 - 7126 - 7127 + 7089 + 7090 124 - 22019 - 22020 + 21958 + 21959 124 @@ -34643,7 +40013,7 @@ 1 2 - 5409965 + 5397982 27 @@ -34664,7 +40034,7 @@ 1 2 - 5410090 + 5398107 @@ -34674,15 +40044,15 @@ preprocpair - 1142252 + 1139961 begin - 889778 + 885609 elseelifend - 1142252 + 1139961 @@ -34696,17 +40066,17 @@ 1 2 - 650164 + 644874 2 3 - 230623 + 231115 3 9 - 8990 + 9619 @@ -34722,7 +40092,7 @@ 1 2 - 1142252 + 1139961 @@ -34732,41 +40102,41 @@ preproctrue - 439769 + 437245 branch - 439769 + 437245 preprocfalse - 285563 + 284334 branch - 285563 + 284334 preproctext - 4356366 + 4347469 id - 4356366 + 4347469 head - 2957769 + 2951406 body - 1684909 + 1679397 @@ -34780,7 +40150,7 @@ 1 2 - 4356366 + 4347469 @@ -34796,7 +40166,7 @@ 1 2 - 4356366 + 4347469 @@ -34812,12 +40182,12 @@ 1 2 - 2758986 + 2754896 2 798 - 198782 + 196510 @@ -34833,12 +40203,12 @@ 1 2 - 2876482 + 2871828 2 5 - 81286 + 79578 @@ -34854,17 +40224,17 @@ 1 2 - 1536571 + 1530983 2 10 - 127360 + 127550 10 - 13606 - 20977 + 13579 + 20862 @@ -34880,17 +40250,17 @@ 1 2 - 1540816 + 1535231 2 12 - 126986 + 127175 12 - 3246 - 17106 + 3231 + 16990 @@ -34900,15 +40270,15 @@ includes - 318734 + 364707 id - 318734 + 364707 included - 58713 + 67182 @@ -34922,7 +40292,7 @@ 1 2 - 318734 + 364707 @@ -34938,37 +40308,37 @@ 1 2 - 29055 + 33246 2 3 - 9445 + 10808 3 4 - 4955 + 5670 4 6 - 5356 + 6129 6 11 - 4522 + 5174 11 47 - 4405 + 5041 47 793 - 972 + 1112 @@ -34978,15 +40348,15 @@ link_targets - 816 + 846 id - 816 + 846 binary - 816 + 846 @@ -35000,7 +40370,7 @@ 1 2 - 816 + 846 @@ -35016,7 +40386,7 @@ 1 2 - 816 + 846 @@ -35026,11 +40396,11 @@ link_parent - 30396619 + 30397762 element - 3865915 + 3866154 link_target @@ -35048,17 +40418,17 @@ 1 2 - 530431 + 530553 2 9 - 26947 + 26953 9 10 - 3308536 + 3308647 @@ -35077,48 +40447,48 @@ 34 - 97375 - 97376 + 97356 + 97357 34 - 97494 - 97495 + 97475 + 97476 34 - 97547 - 97548 + 97528 + 97529 34 - 97574 - 97575 + 97555 + 97556 34 - 97596 - 97597 + 97577 + 97578 34 - 97628 - 97629 + 97609 + 97610 34 - 99635 - 99636 + 99616 + 99617 34 - 103015 - 103016 + 102996 + 102997 34 - 104379 - 104380 + 104360 + 104361 34 diff --git a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/locations_default.ql b/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/locations_default.ql deleted file mode 100644 index 7e17030fb6f3..000000000000 --- a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/locations_default.ql +++ /dev/null @@ -1,18 +0,0 @@ -class LocationBase = @location_default or @location_stmt or @location_expr; - -class Location extends LocationBase { - string toString() { none() } -} - -class Container extends @container { - string toString() { none() } -} - -from Location l, Container c, int startLine, int startColumn, int endLine, int endColumn -where - locations_default(l, c, startLine, startColumn, endLine, endColumn) - or - locations_stmt(l, c, startLine, startColumn, endLine, endColumn) - or - locations_expr(l, c, startLine, startColumn, endLine, endColumn) -select l, c, startLine, startColumn, endLine, endColumn diff --git a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme b/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme deleted file mode 100644 index 7bc12b02a436..000000000000 --- a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme +++ /dev/null @@ -1,2509 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme deleted file mode 100644 index e70d0b653187..000000000000 --- a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2475 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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_default ; - -/** - * 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( - /** 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 -); - -/** 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 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 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 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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 ref -); -var_def(unique int id: @var_decl ref); -var_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr ref -); - -type_decls( - unique int id: @type_decl, - int type_id: @type ref, - int location: @location ref -); -type_def(unique int id: @type_decl ref); -type_decl_top( - unique int type_decl: @type_decl ref -); -type_requires( - int id: @type_decl ref, - int constraint: @expr ref -); - -namespace_decls( - unique int id: @namespace_decl, - int namespace_id: @namespace ref, - int location: @location ref, - int bodylocation: @location 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 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 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 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 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 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 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 ref -); - -@declaredtype = @usertype ; - -@declaration = @function - | @declaredtype - | @variable - | @enumconstant - | @frienddecl - | @concept_template; - -@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 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 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 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 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 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 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties b/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties deleted file mode 100644 index 347caa4decdf..000000000000 --- a/cpp/ql/lib/upgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/upgrade.properties +++ /dev/null @@ -1,5 +0,0 @@ -description: Merge location tables -compatibility: full -locations_default.rel: run locations_default.qlo -locations_expr.rel: delete -locations_stmt.rel: delete diff --git a/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme b/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme deleted file mode 100644 index 827dbc206ea5..000000000000 --- a/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/old.dbscheme +++ /dev/null @@ -1,2451 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/** - * 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 -); - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme deleted file mode 100644 index 5491582ac851..000000000000 --- a/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2428 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties b/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties deleted file mode 100644 index 495e77045ea0..000000000000 --- a/cpp/ql/lib/upgrades/827dbc206ea55377e032a8a934c8903fedc50fa0/upgrade.properties +++ /dev/null @@ -1,4 +0,0 @@ -description: Remove unused external_package tables from the dbscheme -compatibility: full -external_packages.rel: delete -header_to_external_package.rel: delete diff --git a/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/old.dbscheme b/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/old.dbscheme deleted file mode 100644 index e38346051783..000000000000 --- a/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/old.dbscheme +++ /dev/null @@ -1,2506 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e38346051783182ea75822e4adf8d4c6a949bc37/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/semmlecode.cpp.dbscheme deleted file mode 100644 index 7bc12b02a436..000000000000 --- a/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2509 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e38346051783182ea75822e4adf8d4c6a949bc37/upgrade.properties b/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/upgrade.properties deleted file mode 100644 index 03985f017e32..000000000000 --- a/cpp/ql/lib/upgrades/e38346051783182ea75822e4adf8d4c6a949bc37/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Support more complex 16-bit floating-point types -compatibility: full diff --git a/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme b/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme deleted file mode 100644 index e70d0b653187..000000000000 --- a/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/old.dbscheme +++ /dev/null @@ -1,2475 +0,0 @@ - -/** - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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_default ; - -/** - * 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( - /** 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 -); - -/** 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 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 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 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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 ref -); -var_def(unique int id: @var_decl ref); -var_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr ref -); - -type_decls( - unique int id: @type_decl, - int type_id: @type ref, - int location: @location ref -); -type_def(unique int id: @type_decl ref); -type_decl_top( - unique int type_decl: @type_decl ref -); -type_requires( - int id: @type_decl ref, - int constraint: @expr ref -); - -namespace_decls( - unique int id: @namespace_decl, - int namespace_id: @namespace ref, - int location: @location ref, - int bodylocation: @location 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 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 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 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 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 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 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 ref -); - -@declaredtype = @usertype ; - -@declaration = @function - | @declaredtype - | @variable - | @enumconstant - | @frienddecl - | @concept_template; - -@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 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 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 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 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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 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 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme b/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme deleted file mode 100644 index 827dbc206ea5..000000000000 --- a/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/semmlecode.cpp.dbscheme +++ /dev/null @@ -1,2451 +0,0 @@ -/*- 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 - * - * 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 -); - -/** - * Optionally, record the build mode for each compilation. - */ -compilation_build_mode( - unique int id : @compilation ref, - int mode : int ref -); - -/* -case @compilation_build_mode.mode of - 0 = @build_mode_none -| 1 = @build_mode_manual -| 2 = @build_mode_auto -; -*/ - -/** - * 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 -*/ - -/** - * 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 -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string 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 -); - -/*- Lines of code -*/ - -numlines( - int element_id: @sourceline ref, - int num_lines: int ref, - int num_code: int ref, - int num_comment: int ref -); - -/*- Diagnostic messages -*/ - -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 -); - -/*- C++ dbscheme -*/ - -/** - * 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 -); - -/* - * C++ dbscheme - */ - -extractor_version( - string codeql_version: string ref, - string frontend_version: string ref -) - -/** An element for which line-count information is available. */ -@sourceline = @file | @function | @variable | @enumconstant | @xmllocatable; - -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_default 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 -); - -/* -case @fun_requires.kind of - 1 = @template_attached -| 2 = @function_attached -; -*/ - -fun_requires( - int id: @fun_decl ref, - int kind: int ref, - int constraint: @expr 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_specialized(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); -var_requires( - int id: @var_decl ref, - int constraint: @expr 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 -); -type_requires( - int id: @type_decl ref, - int constraint: @expr 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 -| 62 = @mfp8 // __mfp8 -| 63 = @scalable_vector_count // __SVCount_t -| 64 = @complex_fp16 // _Complex __fp16 -| 65 = @complex_std_bfloat16 // _Complex __bf16 -| 66 = @complex_std_float16 // _Complex std::float16_t -; - -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 -| 11 = @scalable_vector // Arm SVE -; - -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 -); - -tupleelements( - unique int id: @derivedtype ref, - int num_elements: int ref -); - -typedefbase( - unique int id: @usertype ref, - int type_id: @type ref -); - -/** - * An instance of the C++11 `decltype` operator or C23 `typeof`/`typeof_unqual` - * operator taking an expression as its argument. For example: - * ``` - * int a; - * decltype(1+a) b; - * typeof(1+a) c; - * ``` - * Here `expr` is `1+a`. - * - * Sometimes an additional pair of parentheses around the expression - * changes the semantics of the 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. - */ - -/* -case @decltype.kind of -| 0 = @decltype -| 1 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -; -*/ - -#keyset[id, expr] -decltypes( - int id: @decltype, - int expr: @expr ref, - int kind: int ref, - int base_type: @type ref, - boolean parentheses_would_change_meaning: boolean ref -); - -/* -case @type_operator.kind of -| 0 = @typeof // The frontend does not differentiate between typeof and typeof_unqual -| 1 = @underlying_type -| 2 = @bases -| 3 = @direct_bases -| 4 = @add_lvalue_reference -| 5 = @add_pointer -| 6 = @add_rvalue_reference -| 7 = @decay -| 8 = @make_signed -| 9 = @make_unsigned -| 10 = @remove_all_extents -| 11 = @remove_const -| 12 = @remove_cv -| 13 = @remove_cvref -| 14 = @remove_extent -| 15 = @remove_pointer -| 16 = @remove_reference_t -| 17 = @remove_restrict -| 18 = @remove_volatile -| 19 = @remove_reference -; -*/ - -type_operators( - unique int id: @type_operator, - int arg_type: @type ref, - int kind: int ref, - int base_type: @type ref -) - -/* -case @usertype.kind of -| 0 = @unknown_usertype -| 1 = @struct -| 2 = @class -| 3 = @union -| 4 = @enum -// ... 5 = @typedef deprecated // classic C: typedef typedef type name -// ... 6 = @template deprecated -| 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 deprecated // a using name = type style typedef -| 15 = @template_struct -| 16 = @template_class -| 17 = @template_union -| 18 = @alias -; -*/ - -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 -); - -/* -case @usertype.alias_kind of -| 0 = @typedef -| 1 = @alias -*/ - -usertype_alias_kind( - int id: @usertype ref, - int alias_kind: int ref -) - -nontype_template_parameters( - int id: @expr ref -); - -type_template_type_constraint( - int id: @usertype ref, - int constraint: @expr 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 -); - -@user_or_decltype = @usertype | @decltype; - -is_proxy_class_for( - unique int id: @usertype ref, - int templ_param_id: @user_or_decltype ref -); - -type_mentions( - unique int id: @type_mention, - int type_id: @type ref, - int location: @location_default 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 -); - -template_template_instantiation( - int to: @usertype ref, - int from: @usertype ref -); -template_template_argument( - int type_id: @usertype ref, - int index: int ref, - int arg_type: @type ref -); -template_template_argument_value( - int type_id: @usertype ref, - int index: int ref, - int arg_value: @expr ref -); - -@concept = @concept_template | @concept_id; - -concept_templates( - unique int concept_id: @concept_template, - string name: string ref, - int location: @location_default ref -); -concept_instantiation( - unique int to: @concept_id ref, - int from: @concept_template ref -); -is_type_constraint(int concept_id: @concept_id ref); -concept_template_argument( - int concept_id: @concept ref, - int index: int ref, - int arg_type: @type ref -); -concept_template_argument_value( - int concept_id: @concept 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 -); - -namespaceattributes( - int namespace_id: @namespace ref, - int spec_id: @attribute ref -); - -stmtattributes( - int stmt_id: @stmt ref, - int spec_id: @attribute ref -); - -@type = @builtintype - | @derivedtype - | @usertype - | @routinetype - | @ptrtomember - | @decltype - | @type_operator; - -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 - | @concept_template; - -@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_default 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_default 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, - boolean is_designated: boolean 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, - boolean is_designated: boolean 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 -); - -@sizeof_or_alignof = @runtime_sizeof | @runtime_alignof | @datasizeof | @sizeof_pack; - -sizeof_bind( - unique int expr: @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, - boolean has_explicit_parameter_list: 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_default 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 -| 38 = @stmt_consteval_if -| 39 = @stmt_not_consteval_if -| 40 = @stmt_leave -; - -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 -); - -type_is_vla(unique int type_id: @derivedtype 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 -); - -@stmt_consteval_or_not_consteval_if = @stmt_consteval_if | @stmt_not_consteval_if; - -consteval_if_then( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_if ref, - int then_id: @stmt ref -); - -consteval_if_else( - unique int constexpr_if_stmt: @stmt_consteval_or_not_consteval_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 | @stmt_leave; - -@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 -| 14 = @ppd_ms_import -| 15 = @ppd_elifdef -| 16 = @ppd_elifndef -| 18 = @ppd_warning -; - -@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next | @ppd_ms_import; - -@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif | @ppd_elifdef | @ppd_elifndef; - -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/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties b/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties deleted file mode 100644 index 6d50eaf29c76..000000000000 --- a/cpp/ql/lib/upgrades/e70d0b653187b93d9688f21c9db46bb1cd46ab78/upgrade.properties +++ /dev/null @@ -1,6 +0,0 @@ -description: sync dbscheme and delete svn tables -compatibility: full -svnentries.rel: delete -svnaffectedfiles.rel: delete -svnentrymsg.rel: delete -svnchurn.rel: delete diff --git a/cpp/ql/lib/utils/test/PrettyPrintModels.ql b/cpp/ql/lib/utils/test/PrettyPrintModels.ql deleted file mode 100644 index 8cc172cfbf12..000000000000 --- a/cpp/ql/lib/utils/test/PrettyPrintModels.ql +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @kind test-postprocess - */ - -import semmle.code.cpp.dataflow.ExternalFlow -import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults diff --git a/cpp/ql/src/Critical/GlobalUseBeforeInit.ql b/cpp/ql/src/Critical/GlobalUseBeforeInit.ql index 946fc755a9fe..e9a637bd7d73 100644 --- a/cpp/ql/src/Critical/GlobalUseBeforeInit.ql +++ b/cpp/ql/src/Critical/GlobalUseBeforeInit.ql @@ -21,29 +21,13 @@ predicate initFunc(GlobalVariable v, Function f) { ) } -/** Holds if `v` has an initializer in function `f` that dominates `node`. */ -predicate dominatingInitInFunc(GlobalVariable v, Function f, ControlFlowNode node) { - exists(VariableAccess initAccess | - v.getAnAccess() = initAccess and - initAccess.isUsedAsLValue() and - initAccess.getEnclosingFunction() = f and - dominates(initAccess, node) - ) -} - -predicate safeAccess(VariableAccess access) { - // it is safe if the variable access is part of a `sizeof` expression - exists(SizeofExprOperator e | e.getAChild*() = access) -} - predicate useFunc(GlobalVariable v, Function f) { exists(VariableAccess access | v.getAnAccess() = access and access.isRValue() and - access.getEnclosingFunction() = f and - not safeAccess(access) and - not dominatingInitInFunc(v, f, access) - ) + access.getEnclosingFunction() = f + ) and + not initFunc(v, f) } predicate uninitialisedBefore(GlobalVariable v, Function f) { @@ -54,14 +38,12 @@ predicate uninitialisedBefore(GlobalVariable v, Function f) { exists(Call call, Function g | uninitialisedBefore(v, g) and call.getEnclosingFunction() = g and - (not functionInitialises(g, v) or locallyUninitialisedAt(v, call)) and + (not functionInitialises(f, v) or locallyUninitialisedAt(v, call)) and resolvedCall(call, f) ) } predicate functionInitialises(Function f, GlobalVariable v) { - initFunc(v, f) - or exists(Call call | call.getEnclosingFunction() = f and initialisedBy(v, call) @@ -78,8 +60,7 @@ predicate locallyUninitialisedAt(GlobalVariable v, Call call) { exists(Call mid | locallyUninitialisedAt(v, mid) and not initialisedBy(v, mid) and callPair(mid, call) ) - ) and - not dominatingInitInFunc(v, call.getEnclosingFunction(), call) + ) } predicate initialisedBy(GlobalVariable v, Call call) { diff --git a/cpp/ql/src/Metrics/Dependencies/ExternalDependencies.qll b/cpp/ql/src/Metrics/Dependencies/ExternalDependencies.qll index 16a8b22d168a..fed054262e69 100644 --- a/cpp/ql/src/Metrics/Dependencies/ExternalDependencies.qll +++ b/cpp/ql/src/Metrics/Dependencies/ExternalDependencies.qll @@ -26,6 +26,12 @@ private newtype LibraryT = LibraryTElement(LibraryElement lib, string name, string version) { lib.getName() = name and lib.getVersion() = version + } or + LibraryTExternalPackage(@external_package ep, string name, string version) { + exists(string package_name | + external_packages(ep, _, package_name, version) and + name = package_name + ) } /** @@ -35,7 +41,10 @@ class Library extends LibraryT { string name; string version; - Library() { this = LibraryTElement(_, name, version) } + Library() { + this = LibraryTElement(_, name, version) or + this = LibraryTExternalPackage(_, name, version) + } string getName() { result = name } @@ -54,6 +63,11 @@ class Library extends LibraryT { this = LibraryTElement(lib, _, _) and result = lib.getAFile() ) + or + exists(@external_package ep | + this = LibraryTExternalPackage(ep, _, _) and + header_to_external_package(unresolveElement(result), ep) + ) } } diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql index 0ea4ce2e95f4..2ea1cb024658 100644 --- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql +++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql @@ -38,9 +38,6 @@ module SqlTaintedConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node node) { exists(SqlLikeFunction runSql | runSql.outermostWrapperFunctionCall(asSinkExpr(node), _)) - or - // sink defined using models-as-data - sinkNode(node, "sql-injection") } predicate isBarrier(DataFlow::Node node) { @@ -59,21 +56,13 @@ module SqlTaintedConfig implements DataFlow::ConfigSig { module SqlTainted = TaintTracking::Global; from - Expr taintedArg, FlowSource taintSource, SqlTainted::PathNode sourceNode, - SqlTainted::PathNode sinkNode, string extraText + SqlLikeFunction runSql, Expr taintedArg, FlowSource taintSource, SqlTainted::PathNode sourceNode, + SqlTainted::PathNode sinkNode, string callChain where - ( - exists(SqlLikeFunction runSql, string callChain | - runSql.outermostWrapperFunctionCall(taintedArg, callChain) and - extraText = " and then passed to " + callChain - ) - or - sinkNode(sinkNode.getNode(), "sql-injection") and - extraText = "" - ) and + runSql.outermostWrapperFunctionCall(taintedArg, callChain) and SqlTainted::flowPath(sourceNode, sinkNode) and taintedArg = asSinkExpr(sinkNode.getNode()) and taintSource = sourceNode.getNode() select taintedArg, sourceNode, sinkNode, - "This argument to a SQL query function is derived from $@" + extraText + ".", taintSource, - "user input (" + taintSource.getSourceType() + ")" + "This argument to a SQL query function is derived from $@ and then passed to " + callChain + ".", + taintSource, "user input (" + taintSource.getSourceType() + ")" diff --git a/cpp/ql/src/change-notes/2025-06-20-sql-injection-models.md b/cpp/ql/src/change-notes/2025-06-20-sql-injection-models.md deleted file mode 100644 index ebb517d0a395..000000000000 --- a/cpp/ql/src/change-notes/2025-06-20-sql-injection-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The query `cpp/sql-injection` now can be extended using the `sql-injection` Models as Data (MaD) sink kind. \ No newline at end of file diff --git a/cpp/ql/src/change-notes/2025-07-01-global-vars-ubi-query-fixes.md.md b/cpp/ql/src/change-notes/2025-07-01-global-vars-ubi-query-fixes.md.md deleted file mode 100644 index b5ab2362bf43..000000000000 --- a/cpp/ql/src/change-notes/2025-07-01-global-vars-ubi-query-fixes.md.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a number of false positives and false negatives in `cpp/global-use-before-init`. Note that this query is not part of any of the default query suites. diff --git a/cpp/ql/src/jsf/4.07 Header Files/AV Rule 35.ql b/cpp/ql/src/jsf/4.07 Header Files/AV Rule 35.ql index 59a6838c23e3..704c5baa0672 100644 --- a/cpp/ql/src/jsf/4.07 Header Files/AV Rule 35.ql +++ b/cpp/ql/src/jsf/4.07 Header Files/AV Rule 35.ql @@ -37,7 +37,7 @@ abstract class MaybePreprocessorDirective extends TMaybePreprocessorDirective { class NoPreprocessorDirective extends TNoPreprocessorDirective, MaybePreprocessorDirective { override string toString() { result = "" } - override Location getLocation() { result instanceof UnknownLocation } + override Location getLocation() { result instanceof UnknownDefaultLocation } } class SomePreprocessorDirective extends TSomePreprocessorDirective, MaybePreprocessorDirective { diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index ade2daeb369a..1ea432be220c 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.4.4-dev +version: 1.4.3 groups: - cpp - queries diff --git a/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected b/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected index 27be8e5cfba5..e9e3bf868ae0 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/node_edges.expected @@ -30,12 +30,9 @@ | openssl_basic.c:144:13:144:22 | HashOperation | Message | openssl_basic.c:144:24:144:30 | Message | | openssl_basic.c:144:24:144:30 | Message | Source | openssl_basic.c:181:49:181:87 | Constant | | openssl_basic.c:144:46:144:51 | Digest | Source | openssl_basic.c:144:46:144:51 | Digest | -| openssl_basic.c:155:22:155:41 | Key | Algorithm | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:155:22:155:41 | KeyGeneration | Algorithm | openssl_basic.c:155:22:155:41 | KeyGeneration | -| openssl_basic.c:155:22:155:41 | KeyGeneration | KeyInput | openssl_basic.c:155:64:155:66 | Key | | openssl_basic.c:155:22:155:41 | KeyGeneration | Output | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:155:43:155:55 | MACAlgorithm | H | openssl_basic.c:160:39:160:48 | HashAlgorithm | -| openssl_basic.c:155:64:155:66 | Key | Source | openssl_basic.c:179:43:179:76 | Constant | | openssl_basic.c:160:59:160:62 | Key | Source | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:163:35:163:41 | Message | Source | openssl_basic.c:181:49:181:87 | Constant | | openssl_basic.c:167:9:167:27 | SignOperation | Algorithm | openssl_basic.c:167:9:167:27 | SignOperation | @@ -43,11 +40,8 @@ | openssl_basic.c:167:9:167:27 | SignOperation | Input | openssl_basic.c:163:35:163:41 | Message | | openssl_basic.c:167:9:167:27 | SignOperation | Key | openssl_basic.c:160:59:160:62 | Key | | openssl_basic.c:167:9:167:27 | SignOperation | Output | openssl_basic.c:167:34:167:36 | SignatureOutput | -| openssl_pkey.c:21:10:21:28 | KeyGeneration | Algorithm | openssl_pkey.c:21:10:21:28 | KeyGeneration | -| openssl_pkey.c:21:10:21:28 | KeyGeneration | Output | openssl_pkey.c:21:30:21:32 | Key | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Mode | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Padding | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | -| openssl_pkey.c:21:30:21:32 | Key | Algorithm | openssl_pkey.c:21:30:21:32 | Key | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | Mode | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | Padding | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | | openssl_pkey.c:55:9:55:23 | KeyGeneration | Algorithm | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | @@ -83,13 +77,6 @@ | openssl_signature.c:133:52:133:55 | Key | Source | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:133:52:133:55 | Key | Source | openssl_signature.c:578:34:578:37 | Key | | openssl_signature.c:134:38:134:44 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:135:9:135:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:135:9:135:27 | SignOperation | Input | openssl_signature.c:134:38:134:44 | Message | -| openssl_signature.c:135:9:135:27 | SignOperation | Key | openssl_signature.c:133:52:133:55 | Key | -| openssl_signature.c:135:9:135:27 | SignOperation | Output | openssl_signature.c:135:37:135:40 | SignatureOutput | | openssl_signature.c:142:9:142:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | | openssl_signature.c:142:9:142:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:142:9:142:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | @@ -100,13 +87,6 @@ | openssl_signature.c:190:57:190:60 | Key | Source | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:190:57:190:60 | Key | Source | openssl_signature.c:578:34:578:37 | Key | | openssl_signature.c:196:38:196:44 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:197:9:197:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:197:9:197:27 | SignOperation | Input | openssl_signature.c:196:38:196:44 | Message | -| openssl_signature.c:197:9:197:27 | SignOperation | Key | openssl_signature.c:190:57:190:60 | Key | -| openssl_signature.c:197:9:197:27 | SignOperation | Output | openssl_signature.c:197:37:197:40 | SignatureOutput | | openssl_signature.c:204:9:204:27 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | | openssl_signature.c:204:9:204:27 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:204:9:204:27 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | @@ -116,14 +96,6 @@ | openssl_signature.c:204:9:204:27 | SignOperation | Output | openssl_signature.c:204:37:204:46 | SignatureOutput | | openssl_signature.c:260:39:260:42 | Key | Source | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:260:39:260:42 | Key | Source | openssl_signature.c:578:34:578:37 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | HashAlgorithm | openssl_signature.c:740:24:740:33 | HashAlgorithm | -| openssl_signature.c:263:9:263:21 | SignOperation | Input | openssl_signature.c:263:54:263:59 | Message | -| openssl_signature.c:263:9:263:21 | SignOperation | Key | openssl_signature.c:260:39:260:42 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | Output | openssl_signature.c:263:33:263:36 | SignatureOutput | -| openssl_signature.c:263:54:263:59 | Message | Source | openssl_signature.c:263:54:263:59 | Message | | openssl_signature.c:270:9:270:21 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | | openssl_signature.c:270:9:270:21 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:270:9:270:21 | SignOperation | HashAlgorithm | openssl_signature.c:684:24:684:33 | HashAlgorithm | @@ -135,14 +107,6 @@ | openssl_signature.c:321:39:321:42 | Key | Source | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:321:39:321:42 | Key | Source | openssl_signature.c:578:34:578:37 | Key | | openssl_signature.c:326:48:326:54 | Message | Source | openssl_signature.c:602:37:602:77 | Constant | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | Algorithm | openssl_signature.c:758:60:758:64 | KeyOperationAlgorithm | -| openssl_signature.c:327:9:327:35 | SignOperation | HashAlgorithm | openssl_signature.c:327:9:327:35 | SignOperation | -| openssl_signature.c:327:9:327:35 | SignOperation | Input | openssl_signature.c:326:48:326:54 | Message | -| openssl_signature.c:327:9:327:35 | SignOperation | Key | openssl_signature.c:321:39:321:42 | Key | -| openssl_signature.c:327:9:327:35 | SignOperation | Output | openssl_signature.c:327:47:327:50 | SignatureOutput | | openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | | openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:334:9:334:35 | SignOperation | Algorithm | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | @@ -156,9 +120,7 @@ | openssl_signature.c:548:9:548:23 | KeyGeneration | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | | openssl_signature.c:548:9:548:23 | KeyGeneration | Output | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:548:34:548:37 | Key | Algorithm | openssl_signature.c:543:35:543:46 | KeyOperationAlgorithm | -| openssl_signature.c:575:32:575:37 | Key | Source | openssl_signature.c:575:32:575:37 | Key | | openssl_signature.c:578:9:578:23 | KeyGeneration | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | -| openssl_signature.c:578:9:578:23 | KeyGeneration | KeyInput | openssl_signature.c:575:32:575:37 | Key | | openssl_signature.c:578:9:578:23 | KeyGeneration | Output | openssl_signature.c:578:34:578:37 | Key | | openssl_signature.c:578:34:578:37 | Key | Algorithm | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | Padding | openssl_signature.c:702:60:702:71 | KeyOperationAlgorithm | diff --git a/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected b/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected index 52a7c61502bd..1ac047ad334e 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/node_properties.expected @@ -20,10 +20,9 @@ | openssl_basic.c:144:67:144:73 | HashAlgorithm | DigestSize | 128 | openssl_basic.c:144:67:144:73 | openssl_basic.c:144:67:144:73 | | openssl_basic.c:144:67:144:73 | HashAlgorithm | Name | MD5 | openssl_basic.c:144:67:144:73 | openssl_basic.c:144:67:144:73 | | openssl_basic.c:144:67:144:73 | HashAlgorithm | RawName | EVP_md5 | openssl_basic.c:144:67:144:73 | openssl_basic.c:144:67:144:73 | -| openssl_basic.c:155:22:155:41 | Key | KeyType | Asymmetric | openssl_basic.c:155:22:155:41 | openssl_basic.c:155:22:155:41 | +| openssl_basic.c:155:22:155:41 | Key | KeyType | Symmetric | openssl_basic.c:155:22:155:41 | openssl_basic.c:155:22:155:41 | | openssl_basic.c:155:43:155:55 | MACAlgorithm | Name | HMAC | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | | openssl_basic.c:155:43:155:55 | MACAlgorithm | RawName | 855 | openssl_basic.c:155:43:155:55 | openssl_basic.c:155:43:155:55 | -| openssl_basic.c:155:64:155:66 | Key | KeyType | Unknown | openssl_basic.c:155:64:155:66 | openssl_basic.c:155:64:155:66 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | DigestSize | 256 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | Name | SHA2 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | | openssl_basic.c:160:39:160:48 | HashAlgorithm | RawName | EVP_sha256 | openssl_basic.c:160:39:160:48 | openssl_basic.c:160:39:160:48 | @@ -35,7 +34,6 @@ | openssl_basic.c:218:32:218:33 | Constant | Description | 32 | openssl_basic.c:218:32:218:33 | openssl_basic.c:218:32:218:33 | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | Name | RSA | openssl_pkey.c:21:10:21:28 | openssl_pkey.c:21:10:21:28 | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | RawName | RSA_generate_key_ex | openssl_pkey.c:21:10:21:28 | openssl_pkey.c:21:10:21:28 | -| openssl_pkey.c:21:30:21:32 | Key | KeyType | Asymmetric | openssl_pkey.c:21:30:21:32 | openssl_pkey.c:21:30:21:32 | | openssl_pkey.c:45:49:45:65 | Constant | Description | Hello, OpenSSL! | openssl_pkey.c:45:49:45:65 | openssl_pkey.c:45:49:45:65 | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | Name | RSA | openssl_pkey.c:50:31:50:42 | openssl_pkey.c:50:31:50:42 | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | RawName | 6 | openssl_pkey.c:50:31:50:42 | openssl_pkey.c:50:31:50:42 | @@ -46,16 +44,12 @@ | openssl_signature.c:80:9:80:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:80:9:80:21 | openssl_signature.c:80:9:80:21 | | openssl_signature.c:80:53:80:56 | Key | KeyType | Unknown | openssl_signature.c:80:53:80:56 | openssl_signature.c:80:53:80:56 | | openssl_signature.c:133:52:133:55 | Key | KeyType | Unknown | openssl_signature.c:133:52:133:55 | openssl_signature.c:133:52:133:55 | -| openssl_signature.c:135:9:135:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:135:9:135:27 | openssl_signature.c:135:9:135:27 | | openssl_signature.c:142:9:142:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:142:9:142:27 | openssl_signature.c:142:9:142:27 | | openssl_signature.c:190:57:190:60 | Key | KeyType | Unknown | openssl_signature.c:190:57:190:60 | openssl_signature.c:190:57:190:60 | -| openssl_signature.c:197:9:197:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:197:9:197:27 | openssl_signature.c:197:9:197:27 | | openssl_signature.c:204:9:204:27 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:204:9:204:27 | openssl_signature.c:204:9:204:27 | | openssl_signature.c:260:39:260:42 | Key | KeyType | Unknown | openssl_signature.c:260:39:260:42 | openssl_signature.c:260:39:260:42 | -| openssl_signature.c:263:9:263:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:263:9:263:21 | openssl_signature.c:263:9:263:21 | | openssl_signature.c:270:9:270:21 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:270:9:270:21 | openssl_signature.c:270:9:270:21 | | openssl_signature.c:321:39:321:42 | Key | KeyType | Unknown | openssl_signature.c:321:39:321:42 | openssl_signature.c:321:39:321:42 | -| openssl_signature.c:327:9:327:35 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:327:9:327:35 | openssl_signature.c:327:9:327:35 | | openssl_signature.c:334:9:334:35 | SignOperation | KeyOperationSubtype | Sign | openssl_signature.c:334:9:334:35 | openssl_signature.c:334:9:334:35 | | openssl_signature.c:521:46:521:66 | PaddingAlgorithm | Name | PSS | openssl_signature.c:521:46:521:66 | openssl_signature.c:521:46:521:66 | | openssl_signature.c:521:46:521:66 | PaddingAlgorithm | RawName | 6 | openssl_signature.c:521:46:521:66 | openssl_signature.c:521:46:521:66 | @@ -66,7 +60,6 @@ | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | Name | DSA | openssl_signature.c:565:50:565:54 | openssl_signature.c:565:50:565:54 | | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | RawName | dsa | openssl_signature.c:565:50:565:54 | openssl_signature.c:565:50:565:54 | | openssl_signature.c:569:55:569:58 | Constant | Description | 2048 | openssl_signature.c:569:55:569:58 | openssl_signature.c:569:55:569:58 | -| openssl_signature.c:575:32:575:37 | Key | KeyType | Unknown | openssl_signature.c:575:32:575:37 | openssl_signature.c:575:32:575:37 | | openssl_signature.c:578:34:578:37 | Key | KeyType | Asymmetric | openssl_signature.c:578:34:578:37 | openssl_signature.c:578:34:578:37 | | openssl_signature.c:602:37:602:77 | Constant | Description | Test message for OpenSSL signature APIs | openssl_signature.c:602:37:602:77 | openssl_signature.c:602:37:602:77 | | openssl_signature.c:684:24:684:33 | HashAlgorithm | DigestSize | 256 | openssl_signature.c:684:24:684:33 | openssl_signature.c:684:24:684:33 | diff --git a/cpp/ql/test/experimental/library-tests/quantum/nodes.expected b/cpp/ql/test/experimental/library-tests/quantum/nodes.expected index 223f7bfca6c5..5c3b212b0804 100644 --- a/cpp/ql/test/experimental/library-tests/quantum/nodes.expected +++ b/cpp/ql/test/experimental/library-tests/quantum/nodes.expected @@ -25,7 +25,6 @@ | openssl_basic.c:155:22:155:41 | Key | | openssl_basic.c:155:22:155:41 | KeyGeneration | | openssl_basic.c:155:43:155:55 | MACAlgorithm | -| openssl_basic.c:155:64:155:66 | Key | | openssl_basic.c:160:39:160:48 | HashAlgorithm | | openssl_basic.c:160:59:160:62 | Key | | openssl_basic.c:163:35:163:41 | Message | @@ -35,9 +34,7 @@ | openssl_basic.c:180:42:180:59 | Constant | | openssl_basic.c:181:49:181:87 | Constant | | openssl_basic.c:218:32:218:33 | Constant | -| openssl_pkey.c:21:10:21:28 | KeyGeneration | | openssl_pkey.c:21:10:21:28 | KeyOperationAlgorithm | -| openssl_pkey.c:21:30:21:32 | Key | | openssl_pkey.c:45:49:45:65 | Constant | | openssl_pkey.c:50:31:50:42 | KeyOperationAlgorithm | | openssl_pkey.c:54:47:54:50 | Constant | @@ -57,27 +54,18 @@ | openssl_signature.c:80:53:80:56 | Key | | openssl_signature.c:133:52:133:55 | Key | | openssl_signature.c:134:38:134:44 | Message | -| openssl_signature.c:135:9:135:27 | SignOperation | -| openssl_signature.c:135:37:135:40 | SignatureOutput | | openssl_signature.c:142:9:142:27 | SignOperation | | openssl_signature.c:142:37:142:46 | SignatureOutput | | openssl_signature.c:190:57:190:60 | Key | | openssl_signature.c:196:38:196:44 | Message | -| openssl_signature.c:197:9:197:27 | SignOperation | -| openssl_signature.c:197:37:197:40 | SignatureOutput | | openssl_signature.c:204:9:204:27 | SignOperation | | openssl_signature.c:204:37:204:46 | SignatureOutput | | openssl_signature.c:260:39:260:42 | Key | -| openssl_signature.c:263:9:263:21 | SignOperation | -| openssl_signature.c:263:33:263:36 | SignatureOutput | -| openssl_signature.c:263:54:263:59 | Message | | openssl_signature.c:270:9:270:21 | SignOperation | | openssl_signature.c:270:33:270:42 | SignatureOutput | | openssl_signature.c:270:60:270:65 | Message | | openssl_signature.c:321:39:321:42 | Key | | openssl_signature.c:326:48:326:54 | Message | -| openssl_signature.c:327:9:327:35 | SignOperation | -| openssl_signature.c:327:47:327:50 | SignatureOutput | | openssl_signature.c:334:9:334:35 | SignOperation | | openssl_signature.c:334:47:334:56 | SignatureOutput | | openssl_signature.c:521:46:521:66 | PaddingAlgorithm | @@ -87,7 +75,6 @@ | openssl_signature.c:548:34:548:37 | Key | | openssl_signature.c:565:50:565:54 | KeyOperationAlgorithm | | openssl_signature.c:569:55:569:58 | Constant | -| openssl_signature.c:575:32:575:37 | Key | | openssl_signature.c:578:9:578:23 | KeyGeneration | | openssl_signature.c:578:34:578:37 | Key | | openssl_signature.c:602:37:602:77 | Constant | diff --git a/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql b/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql index 240567b536c2..1b77763682ad 100644 --- a/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql +++ b/cpp/ql/test/experimental/library-tests/rangeanalysis/rangeanalysis/RangeAnalysis.ql @@ -15,5 +15,5 @@ query predicate instructionBounds( not valueNumber(b.getInstruction()) = valueNumber(i) and if reason instanceof CondReason then reasonLoc = reason.(CondReason).getCond().getLocation() - else reasonLoc instanceof UnknownLocation + else reasonLoc instanceof UnknownDefaultLocation } diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected index 40b9275766c7..385af7a4e2c3 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected @@ -1,80 +1,57 @@ -models -| 1 | Sink: ; ; false; ymlSink; ; ; Argument[0]; test-sink; manual | -| 2 | Sink: boost::asio; ; false; write; ; ; Argument[*1]; remote-sink; manual | -| 3 | Source: ; ; false; GetCommandLineA; ; ; ReturnValue[*]; local; manual | -| 4 | Source: ; ; false; GetEnvironmentStringsA; ; ; ReturnValue[*]; local; manual | -| 5 | Source: ; ; false; GetEnvironmentVariableA; ; ; Argument[*1]; local; manual | -| 6 | Source: ; ; false; MapViewOfFile2; ; ; ReturnValue[*]; local; manual | -| 7 | Source: ; ; false; MapViewOfFile3; ; ; ReturnValue[*]; local; manual | -| 8 | Source: ; ; false; MapViewOfFile3FromApp; ; ; ReturnValue[*]; local; manual | -| 9 | Source: ; ; false; MapViewOfFile; ; ; ReturnValue[*]; local; manual | -| 10 | Source: ; ; false; MapViewOfFileEx; ; ; ReturnValue[*]; local; manual | -| 11 | Source: ; ; false; MapViewOfFileFromApp; ; ; ReturnValue[*]; local; manual | -| 12 | Source: ; ; false; MapViewOfFileNuma2; ; ; ReturnValue[*]; local; manual | -| 13 | Source: ; ; false; NtReadFile; ; ; Argument[*5]; local; manual | -| 14 | Source: ; ; false; ReadFile; ; ; Argument[*1]; local; manual | -| 15 | Source: ; ; false; ReadFileEx; ; ; Argument[*1]; local; manual | -| 16 | Source: ; ; false; ymlSource; ; ; ReturnValue; local; manual | -| 17 | Source: boost::asio; ; false; read_until; ; ; Argument[*1]; remote; manual | -| 18 | Summary: ; ; false; CommandLineToArgvA; ; ; Argument[*0]; ReturnValue[**]; taint; manual | -| 19 | Summary: ; ; false; ReadFileEx; ; ; Argument[*3].Field[@hEvent]; Argument[4].Parameter[*2].Field[@hEvent]; value; manual | -| 20 | Summary: ; ; false; ymlStepGenerated; ; ; Argument[0]; ReturnValue; taint; df-generated | -| 21 | Summary: ; ; false; ymlStepManual; ; ; Argument[0]; ReturnValue; taint; manual | -| 22 | Summary: ; ; false; ymlStepManual_with_body; ; ; Argument[0]; ReturnValue; taint; manual | -| 23 | Summary: boost::asio; ; false; buffer; ; ; Argument[*0]; ReturnValue; taint; manual | +testFailures edges -| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | provenance | MaD:23 | -| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:17 | -| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:17 Sink:MaD:2 | +| asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | asio_streams.cpp:56:18:56:23 | [summary] to write: ReturnValue in buffer | provenance | MaD:10 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:91:7:91:17 | recv_buffer | provenance | Src:MaD:2 | +| asio_streams.cpp:87:34:87:44 | read_until output argument | asio_streams.cpp:93:29:93:39 | *recv_buffer | provenance | Src:MaD:2 Sink:MaD:6 | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:98:7:98:14 | send_str | provenance | TaintFunction | | asio_streams.cpp:97:37:97:44 | call to source | asio_streams.cpp:100:64:100:71 | *send_str | provenance | TaintFunction | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | | | asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:101:7:101:17 | send_buffer | provenance | | -| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:2 | +| asio_streams.cpp:100:44:100:62 | call to buffer | asio_streams.cpp:103:29:103:39 | *send_buffer | provenance | Sink:MaD:6 | | asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:56:18:56:23 | [summary param] *0 in buffer | provenance | | -| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:23 | -| test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | test.cpp:4:5:4:17 | [summary] to write: ReturnValue in ymlStepManual | provenance | MaD:21 | -| test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | test.cpp:5:5:5:20 | [summary] to write: ReturnValue in ymlStepGenerated | provenance | MaD:20 | -| test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | provenance | MaD:22 | +| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer | provenance | MaD:10 | +| test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | test.cpp:4:5:4:17 | [summary] to write: ReturnValue in ymlStepManual | provenance | MaD:26955 | +| test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | test.cpp:5:5:5:20 | [summary] to write: ReturnValue in ymlStepGenerated | provenance | MaD:26956 | +| test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | provenance | MaD:26957 | | test.cpp:7:47:7:52 | value2 | test.cpp:7:64:7:69 | value2 | provenance | | | test.cpp:7:64:7:69 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | provenance | | -| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:16 | -| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:14:10:14:10 | x | provenance | Sink:MaD:1 | +| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:10:10:10:18 | call to ymlSource | provenance | Src:MaD:26953 | +| test.cpp:10:10:10:18 | call to ymlSource | test.cpp:14:10:14:10 | x | provenance | Sink:MaD:26954 | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:17:24:17:24 | x | provenance | | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:21:27:21:27 | x | provenance | | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:25:35:25:35 | x | provenance | | | test.cpp:10:10:10:18 | call to ymlSource | test.cpp:32:41:32:41 | x | provenance | | | test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | | -| test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:18:10:18:10 | y | provenance | Sink:MaD:1 | +| test.cpp:17:10:17:22 | call to ymlStepManual | test.cpp:18:10:18:10 | y | provenance | Sink:MaD:26954 | | test.cpp:17:24:17:24 | x | test.cpp:4:5:4:17 | [summary param] 0 in ymlStepManual | provenance | | -| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:21 | +| test.cpp:17:24:17:24 | x | test.cpp:17:10:17:22 | call to ymlStepManual | provenance | MaD:26955 | | test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | | -| test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:22:10:22:10 | z | provenance | Sink:MaD:1 | +| test.cpp:21:10:21:25 | call to ymlStepGenerated | test.cpp:22:10:22:10 | z | provenance | Sink:MaD:26954 | | test.cpp:21:27:21:27 | x | test.cpp:5:5:5:20 | [summary param] 0 in ymlStepGenerated | provenance | | -| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:20 | +| test.cpp:21:27:21:27 | x | test.cpp:21:10:21:25 | call to ymlStepGenerated | provenance | MaD:26956 | | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | | -| test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:26:10:26:11 | y2 | provenance | Sink:MaD:1 | +| test.cpp:25:11:25:33 | call to ymlStepManual_with_body | test.cpp:26:10:26:11 | y2 | provenance | Sink:MaD:26954 | | test.cpp:25:35:25:35 | x | test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | provenance | | -| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:22 | +| test.cpp:25:35:25:35 | x | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | provenance | MaD:26957 | | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | provenance | | -| test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:33:10:33:11 | z2 | provenance | Sink:MaD:1 | +| test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | test.cpp:33:10:33:11 | z2 | provenance | Sink:MaD:26954 | | test.cpp:32:41:32:41 | x | test.cpp:7:47:7:52 | value2 | provenance | | | test.cpp:32:41:32:41 | x | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | provenance | | -| windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | provenance | MaD:18 | -| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:3 | +| windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | provenance | MaD:341 | +| windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:22:15:22:29 | *call to GetCommandLineA | provenance | Src:MaD:325 | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:24:8:24:11 | * ... | provenance | | | windows.cpp:22:15:22:29 | *call to GetCommandLineA | windows.cpp:27:36:27:38 | *cmd | provenance | | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | | | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | windows.cpp:30:8:30:15 | * ... | provenance | | | windows.cpp:27:36:27:38 | *cmd | windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | provenance | | -| windows.cpp:27:36:27:38 | *cmd | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | MaD:18 | -| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:4 | +| windows.cpp:27:36:27:38 | *cmd | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | provenance | MaD:341 | +| windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | provenance | Src:MaD:327 | | windows.cpp:34:17:34:38 | *call to GetEnvironmentStringsA | windows.cpp:36:10:36:13 | * ... | provenance | | -| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:5 | +| windows.cpp:39:36:39:38 | GetEnvironmentVariableA output argument | windows.cpp:41:10:41:13 | * ... | provenance | Src:MaD:329 | | windows.cpp:90:6:90:15 | [summary param] *3 in ReadFileEx [*hEvent] | windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[*hEvent] in ReadFileEx | provenance | | | windows.cpp:90:6:90:15 | [summary param] *3 in ReadFileEx [hEvent] | windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[hEvent] in ReadFileEx | provenance | | -| windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[*hEvent] in ReadFileEx | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2].Field[*hEvent] in ReadFileEx | provenance | MaD:19 | -| windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[hEvent] in ReadFileEx | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2].Field[hEvent] in ReadFileEx | provenance | MaD:19 | +| windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[*hEvent] in ReadFileEx | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2].Field[*hEvent] in ReadFileEx | provenance | MaD:343 | +| windows.cpp:90:6:90:15 | [summary] read: Argument[*3].Field[hEvent] in ReadFileEx | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2].Field[hEvent] in ReadFileEx | provenance | MaD:343 | | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2] in ReadFileEx [*hEvent] | windows.cpp:147:16:147:27 | *lpOverlapped [*hEvent] | provenance | | | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2] in ReadFileEx [hEvent] | windows.cpp:157:16:157:27 | *lpOverlapped [hEvent] | provenance | | | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2].Field[*hEvent] in ReadFileEx | windows.cpp:90:6:90:15 | [summary] to write: Argument[4].Parameter[*2] in ReadFileEx [*hEvent] | provenance | | @@ -90,36 +67,36 @@ edges | windows.cpp:159:12:159:55 | hEvent | windows.cpp:160:8:160:8 | c | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | | windows.cpp:159:35:159:46 | *lpOverlapped [hEvent] | windows.cpp:159:12:159:55 | hEvent | provenance | | -| windows.cpp:168:35:168:40 | ReadFile output argument | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:14 | -| windows.cpp:177:23:177:28 | ReadFileEx output argument | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:15 | -| windows.cpp:189:21:189:26 | ReadFile output argument | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:14 | +| windows.cpp:168:35:168:40 | ReadFile output argument | windows.cpp:170:10:170:16 | * ... | provenance | Src:MaD:331 | +| windows.cpp:177:23:177:28 | ReadFileEx output argument | windows.cpp:179:10:179:16 | * ... | provenance | Src:MaD:332 | +| windows.cpp:189:21:189:26 | ReadFile output argument | windows.cpp:190:5:190:56 | *... = ... | provenance | Src:MaD:331 | | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | windows.cpp:192:53:192:63 | *& ... [*hEvent] | provenance | | | windows.cpp:190:5:190:56 | *... = ... | windows.cpp:190:5:190:14 | *overlapped [post update] [*hEvent] | provenance | | | windows.cpp:192:53:192:63 | *& ... [*hEvent] | windows.cpp:90:6:90:15 | [summary param] *3 in ReadFileEx [*hEvent] | provenance | | -| windows.cpp:198:21:198:26 | ReadFile output argument | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:14 | +| windows.cpp:198:21:198:26 | ReadFile output argument | windows.cpp:199:5:199:57 | ... = ... | provenance | Src:MaD:331 | | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | windows.cpp:201:53:201:63 | *& ... [hEvent] | provenance | | | windows.cpp:199:5:199:57 | ... = ... | windows.cpp:199:5:199:14 | *overlapped [post update] [hEvent] | provenance | | | windows.cpp:201:53:201:63 | *& ... [hEvent] | windows.cpp:90:6:90:15 | [summary param] *3 in ReadFileEx [hEvent] | provenance | | -| windows.cpp:209:84:209:89 | NtReadFile output argument | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:13 | -| windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:9 | +| windows.cpp:209:84:209:89 | NtReadFile output argument | windows.cpp:211:10:211:16 | * ... | provenance | Src:MaD:340 | +| windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:286:23:286:35 | *call to MapViewOfFile | provenance | Src:MaD:333 | | windows.cpp:286:23:286:35 | *call to MapViewOfFile | windows.cpp:287:20:287:52 | *pMapView | provenance | | | windows.cpp:287:20:287:52 | *pMapView | windows.cpp:289:10:289:16 | * ... | provenance | | -| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:6 | +| windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | provenance | Src:MaD:334 | | windows.cpp:293:23:293:36 | *call to MapViewOfFile2 | windows.cpp:294:20:294:52 | *pMapView | provenance | | | windows.cpp:294:20:294:52 | *pMapView | windows.cpp:296:10:296:16 | * ... | provenance | | -| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:7 | +| windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | provenance | Src:MaD:335 | | windows.cpp:302:23:302:36 | *call to MapViewOfFile3 | windows.cpp:303:20:303:52 | *pMapView | provenance | | | windows.cpp:303:20:303:52 | *pMapView | windows.cpp:305:10:305:16 | * ... | provenance | | -| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:8 | +| windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | provenance | Src:MaD:336 | | windows.cpp:311:23:311:43 | *call to MapViewOfFile3FromApp | windows.cpp:312:20:312:52 | *pMapView | provenance | | | windows.cpp:312:20:312:52 | *pMapView | windows.cpp:314:10:314:16 | * ... | provenance | | -| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:10 | +| windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | provenance | Src:MaD:337 | | windows.cpp:318:23:318:37 | *call to MapViewOfFileEx | windows.cpp:319:20:319:52 | *pMapView | provenance | | | windows.cpp:319:20:319:52 | *pMapView | windows.cpp:321:10:321:16 | * ... | provenance | | -| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:11 | +| windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | provenance | Src:MaD:338 | | windows.cpp:325:23:325:42 | *call to MapViewOfFileFromApp | windows.cpp:326:20:326:52 | *pMapView | provenance | | | windows.cpp:326:20:326:52 | *pMapView | windows.cpp:328:10:328:16 | * ... | provenance | | -| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:12 | +| windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | provenance | Src:MaD:339 | | windows.cpp:332:23:332:40 | *call to MapViewOfFileNuma2 | windows.cpp:333:20:333:52 | *pMapView | provenance | | | windows.cpp:333:20:333:52 | *pMapView | windows.cpp:335:10:335:16 | * ... | provenance | | nodes @@ -245,4 +222,3 @@ subpaths | test.cpp:25:35:25:35 | x | test.cpp:6:5:6:27 | [summary param] 0 in ymlStepManual_with_body | test.cpp:6:5:6:27 | [summary] to write: ReturnValue in ymlStepManual_with_body | test.cpp:25:11:25:33 | call to ymlStepManual_with_body | | test.cpp:32:41:32:41 | x | test.cpp:7:47:7:52 | value2 | test.cpp:7:5:7:30 | *ymlStepGenerated_with_body | test.cpp:32:11:32:36 | call to ymlStepGenerated_with_body | | windows.cpp:27:36:27:38 | *cmd | windows.cpp:17:8:17:25 | [summary param] *0 in CommandLineToArgvA | windows.cpp:17:8:17:25 | [summary] to write: ReturnValue[**] in CommandLineToArgvA | windows.cpp:27:17:27:34 | **call to CommandLineToArgvA | -testFailures diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.ql b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql index 8419248c70dc..7d41597c3b8e 100644 --- a/cpp/ql/test/library-tests/dataflow/external-models/flow.ql +++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql @@ -1,7 +1,7 @@ import utils.test.dataflow.FlowTestCommon import cpp import semmle.code.cpp.security.FlowSources -import codeql.dataflow.test.ProvenancePathGraph +import IRTest::IRFlow::PathGraph module IRTest { private import semmle.code.cpp.ir.IR @@ -33,4 +33,3 @@ module IRTest { } import MakeTest> -import ShowProvenance 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 1eab706df430..24f651ca3892 100644 --- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected +++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected @@ -4717,7 +4717,7 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future | stl.h:292:30:292:40 | call to allocator | stl.h:292:21:292:41 | noexcept(...) | TAINT | | stl.h:292:30:292:40 | call to allocator | stl.h:292:21:292:41 | noexcept(...) | TAINT | | stl.h:292:30:292:40 | call to allocator | stl.h:292:21:292:41 | noexcept(...) | TAINT | -| stl.h:292:53:292:63 | 0 | stl.h:292:46:292:64 | constructor init | TAINT | +| stl.h:292:53:292:63 | 0 | stl.h:292:46:292:64 | (no string representation) | TAINT | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | | stl.h:396:3:396:3 | this | stl.h:396:36:396:43 | constructor init of field first [pre-this] | | diff --git a/cpp/ql/test/library-tests/includes/includes/locations.expected b/cpp/ql/test/library-tests/includes/includes/locations.expected index c61055c84413..1b6b3b068923 100644 --- a/cpp/ql/test/library-tests/includes/includes/locations.expected +++ b/cpp/ql/test/library-tests/includes/includes/locations.expected @@ -1,5 +1,7 @@ | bar.h:0:0:0:0 | bar.h:0:0:0:0 | | file://:0:0:0:0 | file://:0:0:0:0 | +| file://:0:0:0:0 | file://:0:0:0:0 | +| file://:0:0:0:0 | file://:0:0:0:0 | | includes.c:0:0:0:0 | includes.c:0:0:0:0 | | includes.c:2:1:2:15 | includes.c:2:1:2:15 | | includes.c:4:1:4:16 | includes.c:4:1:4:16 | diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected index 8f280c89764c..53ebaf2114ff 100644 --- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected +++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected @@ -15134,7 +15134,7 @@ ir.cpp: # 1506| [Constructor] void Inheritance_Test_A::Inheritance_Test_A() # 1506| : # 1506| : -# 1506| getInitializer(0): [ConstructorInit] constructor init +# 1506| getInitializer(0): (no string representation) # 1506| Type = [Struct] Inheritance_Test_B # 1506| ValueCategory = prvalue # 1506| getInitializer(1): [ConstructorFieldInit] constructor init of field x @@ -17205,7 +17205,7 @@ ir.cpp: # 1785| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 1785| Type = [SpecifiedType] const CopyConstructorTestNonVirtualClass # 1785| ValueCategory = lvalue -# 1785| getInitializer(1): [ConstructorInit] constructor init +# 1785| getInitializer(1): (no string representation) # 1785| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass # 1785| ValueCategory = prvalue # 1785| getEntryPoint(): [BlockStmt] { ... } @@ -17254,7 +17254,7 @@ ir.cpp: # 1792| getExpr(): [ReferenceDereferenceExpr] (reference dereference) # 1792| Type = [SpecifiedType] const CopyConstructorTestVirtualClass # 1792| ValueCategory = lvalue -# 1792| getInitializer(1): [ConstructorInit] constructor init +# 1792| getInitializer(1): (no string representation) # 1792| Type = [VirtualBaseClass] CopyConstructorWithBitwiseCopyClass # 1792| ValueCategory = prvalue # 1792| getEntryPoint(): [BlockStmt] { ... } diff --git a/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected b/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected index 4e477a101a90..f8eff955d47c 100644 --- a/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected +++ b/cpp/ql/test/library-tests/macros/inmacroexpansion/inmacroexpansion.expected @@ -14,14 +14,14 @@ | test.cpp:4:1:4:1 | operator= | false | | test.cpp:4:1:4:1 | operator= | false | | test.cpp:4:1:4:10 | CLASS_DECL | false | -| test.cpp:4:1:4:10 | S | true | +| test.cpp:4:1:4:10 | S | false | | test.cpp:4:1:4:10 | declaration | true | | test.cpp:4:1:4:10 | definition of S | true | | test.cpp:4:1:4:10 | definition of f | true | | test.cpp:4:1:4:10 | definition of i | true | | test.cpp:4:1:4:10 | definition of j | true | -| test.cpp:4:1:4:10 | f | true | -| test.cpp:4:1:4:10 | i | true | +| test.cpp:4:1:4:10 | f | false | +| test.cpp:4:1:4:10 | i | false | | test.cpp:4:1:4:10 | j | true | | test.cpp:4:1:4:10 | return ... | true | | test.cpp:4:1:4:10 | { ... } | true | @@ -30,7 +30,7 @@ | test.cpp:8:1:8:13 | declaration | true | | test.cpp:8:1:8:13 | definition of f1 | true | | test.cpp:8:1:8:13 | definition of k | true | -| test.cpp:8:1:8:13 | f1 | true | +| test.cpp:8:1:8:13 | f1 | false | | test.cpp:8:1:8:13 | k | true | | test.cpp:8:1:8:13 | return ... | true | | test.cpp:8:1:8:13 | { ... } | true | @@ -68,18 +68,18 @@ | test.cpp:38:1:38:13 | 1 | true | | test.cpp:38:1:38:13 | ... == ... | true | | test.cpp:38:1:38:13 | STATIC_ASSERT | false | -| test.cpp:38:1:38:13 | static_assert(..., "") | true | +| test.cpp:38:1:38:13 | static_assert(..., "") | false | | test.cpp:40:1:40:42 | #define ATTRIBUTE [[nodiscard("reason1")]] | false | | test.cpp:42:1:42:9 | ATTRIBUTE | false | -| test.cpp:42:1:42:9 | nodiscard | true | -| test.cpp:42:1:42:9 | reason1 | true | +| test.cpp:42:1:42:9 | nodiscard | false | +| test.cpp:42:1:42:9 | reason1 | false | | test.cpp:42:1:42:9 | reason1 | true | | test.cpp:43:5:43:6 | declaration of f2 | false | | test.cpp:43:5:43:6 | f2 | false | | test.cpp:45:1:45:31 | #define ATTRIBUTE_ARG "reason2" | false | | test.cpp:47:3:47:11 | nodiscard | false | | test.cpp:47:13:47:25 | ATTRIBUTE_ARG | false | -| test.cpp:47:13:47:25 | reason2 | true | +| test.cpp:47:13:47:25 | reason2 | false | | test.cpp:47:13:47:25 | reason2 | true | | test.cpp:48:5:48:6 | declaration of f3 | false | | test.cpp:48:5:48:6 | f3 | false | diff --git a/cpp/ql/test/library-tests/ptr_to_member/segfault/exprs.expected b/cpp/ql/test/library-tests/ptr_to_member/segfault/exprs.expected index 46cdbc64c6ef..d808cf89139c 100644 --- a/cpp/ql/test/library-tests/ptr_to_member/segfault/exprs.expected +++ b/cpp/ql/test/library-tests/ptr_to_member/segfault/exprs.expected @@ -4,7 +4,6 @@ | file://:0:0:0:0 | uls | file://:0:0:0:0 | unsigned long | | segfault.cpp:25:46:25:65 | call to S | file://:0:0:0:0 | void | | segfault.cpp:25:46:25:65 | call to S | file://:0:0:0:0 | void | -| segfault.cpp:25:46:25:65 | constructor init | segfault.cpp:22:8:22:8 | S | | segfault.cpp:25:48:25:55 | __second | segfault.cpp:15:7:15:11 | tuple | | segfault.cpp:25:48:25:55 | __second | segfault.cpp:15:7:15:11 | tuple | | segfault.cpp:25:48:25:55 | __second | segfault.cpp:15:7:15:11 | tuple | diff --git a/cpp/ql/test/library-tests/templates/instantiation_directive/functions.expected b/cpp/ql/test/library-tests/templates/instantiation_directive/functions.expected index eba49fd1c6d6..672fae72e062 100644 --- a/cpp/ql/test/library-tests/templates/instantiation_directive/functions.expected +++ b/cpp/ql/test/library-tests/templates/instantiation_directive/functions.expected @@ -1,5 +1,3 @@ | file://:0:0:0:0 | operator= | file://:0:0:0:0 | __va_list_tag && | | file://:0:0:0:0 | operator= | file://:0:0:0:0 | const __va_list_tag & | -| test.cpp:2:6:2:6 | foo | file://:0:0:0:0 | float | -| test.cpp:2:6:2:6 | foo | file://:0:0:0:0 | int | | test.cpp:2:6:2:8 | foo | test.cpp:1:19:1:19 | T | diff --git a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/instantiations.expected b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/instantiations.expected index 7a7b1761e987..e1c7f956c7b6 100644 --- a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/instantiations.expected +++ b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/instantiations.expected @@ -10,4 +10,3 @@ | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | ClassTemplateInstantiation | file://:0:0:0:0 | int | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | ClassTemplateInstantiation | file://:0:0:0:0 | long | | load.cpp:13:7:13:27 | basic_text_iprimitive | ClassTemplateInstantiation | load.cpp:3:7:3:24 | std_istream_mockup | -| load.cpp:22:10:22:10 | load | FunctionTemplateInstantiation | file://:0:0:0:0 | short | diff --git a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected index 316b5273cdce..cb35f7a6dd09 100644 --- a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected +++ b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromtemplateinstantiation.expected @@ -104,15 +104,6 @@ | isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass | | isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:97:52:97:52 | AnotherTemplateClass::myMethod2(MyClassEnum) | | isfromtemplateinstantiation.cpp:110:3:110:3 | definition of var_template | isfromtemplateinstantiation.cpp:110:3:110:3 | var_template | -| isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass::f() | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass::f() | -| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass::f() | -| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass::f() | -| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | -| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass::f() | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:135:31:135:35 | declaration of Inner | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | isfromtemplateinstantiation.cpp:136:7:136:7 | definition of x | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | @@ -121,94 +112,7 @@ | isfromtemplateinstantiation.cpp:137:7:137:7 | y | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | load.cpp:15:14:15:15 | definition of is | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:15:14:15:15 | is | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:18:5:18:5 | definition of basic_text_iprimitive | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:18:5:18:5 | definition of basic_text_iprimitive | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:18:36:18:42 | definition of isParam | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:18:36:18:42 | definition of isParam | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:18:36:18:42 | std_istream_mockup & isParam | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:18:36:18:42 | std_istream_mockup & isParam | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:11:19:21 | constructor init of field is | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:11:19:21 | constructor init of field is | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:14:19:20 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:14:19:20 | (reference dereference) | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:14:19:20 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:14:19:20 | (reference to) | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:14:19:20 | isParam | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:14:19:20 | isParam | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:23:19:24 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:23:19:24 | { ... } | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:19:24:19:24 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:19:24:19:24 | return ... | load.cpp:18:5:18:5 | basic_text_iprimitive::basic_text_iprimitive(std_istream_mockup &) | -| load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:22:10:22:10 | definition of load | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:22:10:22:10 | definition of load | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | | load.cpp:22:10:22:13 | basic_text_iprimitive::load(T &) | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:22:10:22:13 | declaration of load | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:22:19:22:19 | T & t | load.cpp:13:7:13:27 | basic_text_iprimitive | | load.cpp:22:19:22:19 | declaration of t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:22:19:22:19 | definition of t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:22:19:22:19 | definition of t | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:22:19:22:19 | short & t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:22:19:22:19 | short & t | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:23:5:25:5 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:23:5:25:5 | { ... } | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:9:24:10 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:9:24:10 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:9:24:10 | is | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:9:24:10 | is | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:9:24:10 | this | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:9:24:10 | this | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:9:24:16 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:9:24:16 | ExprStmt | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:12:24:12 | call to operator>> | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:12:24:12 | call to operator>> | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:12:24:16 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:12:24:16 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:15:24:15 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:15:24:15 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:15:24:15 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:15:24:15 | (reference to) | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:24:15:24:15 | t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:24:15:24:15 | t | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:25:5:25:5 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:25:5:25:5 | return ... | load.cpp:22:10:22:10 | basic_text_iprimitive::load(short &) | -| load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:27:10:27:10 | definition of load | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:27:10:27:10 | definition of load | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:27:22:27:22 | char & t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:27:22:27:22 | char & t | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:27:22:27:22 | definition of t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:27:22:27:22 | definition of t | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:28:5:32:5 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:28:5:32:5 | { ... } | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:29:9:29:20 | declaration | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:29:9:29:20 | declaration | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:29:19:29:19 | definition of i | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:29:19:29:19 | definition of i | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:29:19:29:19 | i | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:29:19:29:19 | i | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:30:9:30:12 | call to load | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:30:9:30:12 | call to load | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:30:9:30:12 | this | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:30:9:30:12 | this | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:30:9:30:16 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:30:9:30:16 | ExprStmt | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:30:14:30:14 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:30:14:30:14 | (reference to) | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:30:14:30:14 | i | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:30:14:30:14 | i | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:9:31:9 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:9:31:9 | (reference dereference) | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:9:31:9 | t | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:9:31:9 | t | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:9:31:13 | ... = ... | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:9:31:13 | ... = ... | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:9:31:14 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:9:31:14 | ExprStmt | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:13:31:13 | (char)... | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:13:31:13 | (char)... | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:31:13:31:13 | i | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:31:13:31:13 | i | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | -| load.cpp:32:5:32:5 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive | -| load.cpp:32:5:32:5 | return ... | load.cpp:27:10:27:10 | basic_text_iprimitive::load(char &) | diff --git a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected index ce20dedcfca2..8a78058a7230 100644 --- a/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected +++ b/cpp/ql/test/library-tests/templates/isfromtemplateinstantiation/isfromuninstantiatedtemplate.expected @@ -425,16 +425,7 @@ isFromUninstantiatedTemplate | isfromtemplateinstantiation.cpp:123:6:123:6 | f | | | Declaration | | | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | | T | Declaration | | | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass | I | | Declaration | | -| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | | T | Definition | | -| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | I | | Definition | | | isfromtemplateinstantiation.cpp:129:6:129:6 | f | | T | Declaration | | -| isfromtemplateinstantiation.cpp:129:6:129:6 | f | I | | Declaration | | -| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | | T | Stmt | | -| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | I | | Stmt | | -| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | | T | Stmt | | -| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | I | | Stmt | | -| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | | T | Expr | | -| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | I | | Expr | | | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | | T | Declaration | | | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer | I | | Declaration | | | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner | | T | Declaration | | @@ -470,82 +461,21 @@ isFromUninstantiatedTemplate | load.cpp:15:14:15:15 | definition of is | I | | Definition | | | load.cpp:15:14:15:15 | is | | T | Declaration | | | load.cpp:15:14:15:15 | is | I | | Declaration | | -| load.cpp:18:5:18:5 | basic_text_iprimitive | I | | Declaration | | | load.cpp:18:5:18:25 | basic_text_iprimitive | | T | Declaration | | -| load.cpp:18:36:18:42 | definition of isParam | | T | Definition | | -| load.cpp:18:36:18:42 | definition of isParam | I | | Definition | | -| load.cpp:18:36:18:42 | isParam | | T | Declaration | | -| load.cpp:18:36:18:42 | isParam | I | | Declaration | | -| load.cpp:19:11:19:21 | constructor init of field is | | T | Expr | | -| load.cpp:19:11:19:21 | constructor init of field is | I | | Expr | | | load.cpp:19:14:19:20 | (reference dereference) | | T | Expr | | -| load.cpp:19:14:19:20 | (reference dereference) | I | | Expr | | | load.cpp:19:14:19:20 | (reference to) | | T | Expr | | -| load.cpp:19:14:19:20 | (reference to) | I | | Expr | | | load.cpp:19:14:19:20 | isParam | | T | Expr | Ref | -| load.cpp:19:14:19:20 | isParam | I | | Expr | Ref | -| load.cpp:19:23:19:24 | { ... } | | T | Stmt | | -| load.cpp:19:23:19:24 | { ... } | I | | Stmt | | -| load.cpp:19:24:19:24 | return ... | | T | Stmt | | -| load.cpp:19:24:19:24 | return ... | I | | Stmt | | -| load.cpp:22:10:22:10 | load | I | | Declaration | | | load.cpp:22:10:22:13 | load | | T | Declaration | | | load.cpp:22:10:22:13 | load | I | T | Declaration | | -| load.cpp:22:19:22:19 | definition of t | | T | Definition | | -| load.cpp:22:19:22:19 | definition of t | I | | Definition | | | load.cpp:22:19:22:19 | t | | T | Declaration | | -| load.cpp:22:19:22:19 | t | I | | Declaration | | | load.cpp:22:19:22:19 | t | I | T | Declaration | | -| load.cpp:23:5:25:5 | { ... } | | T | Stmt | | -| load.cpp:23:5:25:5 | { ... } | I | | Stmt | | | load.cpp:24:9:24:10 | (reference dereference) | | T | Expr | | -| load.cpp:24:9:24:10 | (reference dereference) | I | | Expr | | | load.cpp:24:9:24:10 | is | | T | Expr | Not ref | -| load.cpp:24:9:24:10 | is | I | | Expr | Not ref | | load.cpp:24:9:24:10 | this | | T | Expr | | -| load.cpp:24:9:24:10 | this | I | | Expr | | -| load.cpp:24:9:24:16 | ExprStmt | | T | Stmt | | -| load.cpp:24:9:24:16 | ExprStmt | I | | Stmt | | | load.cpp:24:15:24:15 | (reference dereference) | | T | Expr | | -| load.cpp:24:15:24:15 | (reference dereference) | I | | Expr | | -| load.cpp:24:15:24:15 | (reference to) | I | | Expr | | | load.cpp:24:15:24:15 | t | | T | Expr | Not ref | -| load.cpp:24:15:24:15 | t | I | | Expr | Ref | -| load.cpp:25:5:25:5 | return ... | | T | Stmt | | -| load.cpp:25:5:25:5 | return ... | I | | Stmt | | -| load.cpp:27:10:27:10 | load | I | | Declaration | | | load.cpp:27:10:27:13 | load | | T | Declaration | | -| load.cpp:27:22:27:22 | definition of t | | T | Definition | | -| load.cpp:27:22:27:22 | definition of t | I | | Definition | | -| load.cpp:27:22:27:22 | t | | T | Declaration | | -| load.cpp:27:22:27:22 | t | I | | Declaration | | -| load.cpp:28:5:32:5 | { ... } | | T | Stmt | | -| load.cpp:28:5:32:5 | { ... } | I | | Stmt | | -| load.cpp:29:9:29:20 | declaration | | T | Stmt | | -| load.cpp:29:9:29:20 | declaration | I | | Stmt | | -| load.cpp:29:19:29:19 | definition of i | | T | Definition | | -| load.cpp:29:19:29:19 | definition of i | I | | Definition | | -| load.cpp:29:19:29:19 | i | | T | Declaration | | -| load.cpp:29:19:29:19 | i | I | | Declaration | | -| load.cpp:30:9:30:12 | Unknown literal | | T | Expr | | -| load.cpp:30:9:30:12 | call to load | I | | Expr | | -| load.cpp:30:9:30:12 | this | I | | Expr | | -| load.cpp:30:9:30:16 | ExprStmt | | T | Stmt | | -| load.cpp:30:9:30:16 | ExprStmt | I | | Stmt | | -| load.cpp:30:14:30:14 | (reference to) | I | | Expr | | -| load.cpp:30:14:30:14 | i | | T | Expr | Not ref | -| load.cpp:30:14:30:14 | i | I | | Expr | Ref | | load.cpp:31:9:31:9 | (reference dereference) | | T | Expr | | -| load.cpp:31:9:31:9 | (reference dereference) | I | | Expr | | | load.cpp:31:9:31:9 | t | | T | Expr | Not ref | -| load.cpp:31:9:31:9 | t | I | | Expr | Not ref | -| load.cpp:31:9:31:13 | ... = ... | | T | Expr | | -| load.cpp:31:9:31:13 | ... = ... | I | | Expr | | -| load.cpp:31:9:31:14 | ExprStmt | | T | Stmt | | -| load.cpp:31:9:31:14 | ExprStmt | I | | Stmt | | | load.cpp:31:13:31:13 | (char)... | | T | Expr | | -| load.cpp:31:13:31:13 | (char)... | I | | Expr | | | load.cpp:31:13:31:13 | i | | T | Expr | Not ref | -| load.cpp:31:13:31:13 | i | I | | Expr | Not ref | -| load.cpp:32:5:32:5 | return ... | | T | Stmt | | -| load.cpp:32:5:32:5 | return ... | I | | Stmt | | diff --git a/cpp/ql/test/library-tests/templates/switch/test.expected b/cpp/ql/test/library-tests/templates/switch/test.expected index b4124494ffeb..1ba49e1caf9d 100644 --- a/cpp/ql/test/library-tests/templates/switch/test.expected +++ b/cpp/ql/test/library-tests/templates/switch/test.expected @@ -1,2 +1 @@ | test.cpp:13:3:20:3 | switch (...) ... | 3 | -| test.cpp:13:3:20:3 | switch (...) ... | 3 | diff --git a/cpp/ql/test/library-tests/templates/type_instantiations/types.expected b/cpp/ql/test/library-tests/templates/type_instantiations/types.expected index e6c8b1d9406b..548f5f101892 100644 --- a/cpp/ql/test/library-tests/templates/type_instantiations/types.expected +++ b/cpp/ql/test/library-tests/templates/type_instantiations/types.expected @@ -5,13 +5,10 @@ | file://:0:0:0:0 | _Complex _Float64 | | file://:0:0:0:0 | _Complex _Float64x | | file://:0:0:0:0 | _Complex _Float128 | -| file://:0:0:0:0 | _Complex __bf16 | | file://:0:0:0:0 | _Complex __float128 | -| file://:0:0:0:0 | _Complex __fp16 | | file://:0:0:0:0 | _Complex double | | file://:0:0:0:0 | _Complex float | | file://:0:0:0:0 | _Complex long double | -| file://:0:0:0:0 | _Complex std::float16_t | | file://:0:0:0:0 | _Decimal32 | | file://:0:0:0:0 | _Decimal64 | | file://:0:0:0:0 | _Decimal128 | diff --git a/cpp/ql/test/library-tests/type_sizes/type_sizes.expected b/cpp/ql/test/library-tests/type_sizes/type_sizes.expected index ac1344753e9c..c77aadc8f4f6 100644 --- a/cpp/ql/test/library-tests/type_sizes/type_sizes.expected +++ b/cpp/ql/test/library-tests/type_sizes/type_sizes.expected @@ -25,13 +25,10 @@ | file://:0:0:0:0 | _Complex _Float64 | 16 | | file://:0:0:0:0 | _Complex _Float64x | 32 | | file://:0:0:0:0 | _Complex _Float128 | 32 | -| file://:0:0:0:0 | _Complex __bf16 | 4 | | file://:0:0:0:0 | _Complex __float128 | 32 | -| file://:0:0:0:0 | _Complex __fp16 | 4 | | file://:0:0:0:0 | _Complex double | 16 | | file://:0:0:0:0 | _Complex float | 8 | | file://:0:0:0:0 | _Complex long double | 32 | -| file://:0:0:0:0 | _Complex std::float16_t | 4 | | file://:0:0:0:0 | _Decimal32 | 4 | | file://:0:0:0:0 | _Decimal64 | 8 | | file://:0:0:0:0 | _Decimal128 | 16 | diff --git a/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected b/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected index 3f22b9f98f52..94185a66899d 100644 --- a/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected +++ b/cpp/ql/test/library-tests/unspecified_type/types/unspecified_type.expected @@ -7,13 +7,10 @@ | file://:0:0:0:0 | _Complex _Float64 | _Complex _Float64 | | file://:0:0:0:0 | _Complex _Float64x | _Complex _Float64x | | file://:0:0:0:0 | _Complex _Float128 | _Complex _Float128 | -| file://:0:0:0:0 | _Complex __bf16 | _Complex __bf16 | | file://:0:0:0:0 | _Complex __float128 | _Complex __float128 | -| file://:0:0:0:0 | _Complex __fp16 | _Complex __fp16 | | file://:0:0:0:0 | _Complex double | _Complex double | | file://:0:0:0:0 | _Complex float | _Complex float | | file://:0:0:0:0 | _Complex long double | _Complex long double | -| file://:0:0:0:0 | _Complex std::float16_t | _Complex std::float16_t | | file://:0:0:0:0 | _Decimal32 | _Decimal32 | | file://:0:0:0:0 | _Decimal64 | _Decimal64 | | file://:0:0:0:0 | _Decimal128 | _Decimal128 | diff --git a/cpp/ql/test/library-tests/variables/variables/types.expected b/cpp/ql/test/library-tests/variables/variables/types.expected index c2ea5f7cfe3c..362ab5c64334 100644 --- a/cpp/ql/test/library-tests/variables/variables/types.expected +++ b/cpp/ql/test/library-tests/variables/variables/types.expected @@ -6,13 +6,10 @@ | _Complex _Float64 | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex _Float64x | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex _Float128 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex __bf16 | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex __float128 | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex __fp16 | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex double | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex float | BinaryFloatingPointType, ComplexNumberType | | | | | | _Complex long double | BinaryFloatingPointType, ComplexNumberType | | | | | -| _Complex std::float16_t | BinaryFloatingPointType, ComplexNumberType | | | | | | _Decimal32 | Decimal32Type | | | | | | _Decimal64 | Decimal64Type | | | | | | _Decimal128 | Decimal128Type | | | | | diff --git a/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/GlobalUseBeforeInit.expected b/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/GlobalUseBeforeInit.expected index 8298707a6b0a..c7c2d1ffad49 100644 --- a/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/GlobalUseBeforeInit.expected +++ b/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/GlobalUseBeforeInit.expected @@ -1,2 +1 @@ -| test.cpp:28:5:28:6 | f1 | The variable $@ is used in this function but may not be initialized when it is called. | test.cpp:14:5:14:5 | b | b | -| test.cpp:39:5:39:8 | main | The variable $@ is used in this function but may not be initialized when it is called. | test.cpp:14:5:14:5 | b | b | +| test.cpp:27:5:27:6 | f1 | The variable $@ is used in this function but may not be initialized when it is called. | test.cpp:14:5:14:5 | b | b | diff --git a/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/test.cpp b/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/test.cpp index 81883a1a8a16..fcecf6c5c44a 100644 --- a/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/test.cpp +++ b/cpp/ql/test/query-tests/Critical/GlobalUseBeforeInit/test.cpp @@ -12,7 +12,6 @@ int vfprintf (FILE *, const char *, va_list); int a = 1; int b; -int *c; int my_printf(const char * fmt, ...) { @@ -32,15 +31,8 @@ int f1() return 0; } -void f2() { - my_printf("%d\n", b); // GOOD -} - int main() { - unsigned size = sizeof(*c); // GOOD - my_printf("%d\n", b); // BAD - b = f1(); - f2(); + int b = f1(); return 0; -} +} \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected index df780acdd8d0..0a554d96f6d3 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.expected @@ -1,11 +1,3 @@ -#select -| test.c:21:18:21:23 | query1 | test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg). | test.c:14:27:14:30 | **argv | user input (a command-line argument) | -| test.c:51:18:51:23 | query1 | test.c:14:27:14:30 | **argv | test.c:51:18:51:23 | *query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg). | test.c:14:27:14:30 | **argv | user input (a command-line argument) | -| test.c:76:17:76:25 | userInput | test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | This argument to a SQL query function is derived from $@ and then passed to SQLPrepare(StatementText). | test.c:75:8:75:16 | gets output argument | user input (string read by gets) | -| test.c:77:20:77:28 | userInput | test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | This argument to a SQL query function is derived from $@ and then passed to SQLExecDirect(StatementText). | test.c:75:8:75:16 | gets output argument | user input (string read by gets) | -| test.c:106:24:106:29 | query1 | test.c:101:8:101:16 | gets output argument | test.c:106:24:106:29 | *query1 | This argument to a SQL query function is derived from $@. | test.c:101:8:101:16 | gets output argument | user input (string read by gets) | -| test.c:107:28:107:33 | query1 | test.c:101:8:101:16 | gets output argument | test.c:107:28:107:33 | *query1 | This argument to a SQL query function is derived from $@. | test.c:101:8:101:16 | gets output argument | user input (string read by gets) | -| test.cpp:43:27:43:33 | access to array | test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | This argument to a SQL query function is derived from $@ and then passed to pqxx::work::exec1((unnamed parameter 0)). | test.cpp:39:27:39:30 | **argv | user input (a command-line argument) | edges | test.c:14:27:14:30 | **argv | test.c:15:20:15:26 | *access to array | provenance | | | test.c:15:20:15:26 | *access to array | test.c:21:18:21:23 | *query1 | provenance | TaintFunction | @@ -17,12 +9,7 @@ edges | test.c:48:20:48:33 | *globalUsername | test.c:51:18:51:23 | *query1 | provenance | TaintFunction | | test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | provenance | | | test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | provenance | | -| test.c:101:8:101:16 | gets output argument | test.c:106:24:106:29 | *query1 | provenance | TaintFunction Sink:MaD:2 | -| test.c:101:8:101:16 | gets output argument | test.c:107:28:107:33 | *query1 | provenance | TaintFunction Sink:MaD:1 | | test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | provenance | | -models -| 1 | Sink: ; ; false; OCIStmtPrepare2; ; ; Argument[*3]; sql-injection; manual | -| 2 | Sink: ; ; false; OCIStmtPrepare; ; ; Argument[*2]; sql-injection; manual | nodes | test.c:14:27:14:30 | **argv | semmle.label | **argv | | test.c:15:20:15:26 | *access to array | semmle.label | *access to array | @@ -36,9 +23,12 @@ nodes | test.c:75:8:75:16 | gets output argument | semmle.label | gets output argument | | test.c:76:17:76:25 | *userInput | semmle.label | *userInput | | test.c:77:20:77:28 | *userInput | semmle.label | *userInput | -| test.c:101:8:101:16 | gets output argument | semmle.label | gets output argument | -| test.c:106:24:106:29 | *query1 | semmle.label | *query1 | -| test.c:107:28:107:33 | *query1 | semmle.label | *query1 | | test.cpp:39:27:39:30 | **argv | semmle.label | **argv | | test.cpp:43:27:43:33 | *access to array | semmle.label | *access to array | subpaths +#select +| test.c:21:18:21:23 | query1 | test.c:14:27:14:30 | **argv | test.c:21:18:21:23 | *query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg). | test.c:14:27:14:30 | **argv | user input (a command-line argument) | +| test.c:51:18:51:23 | query1 | test.c:14:27:14:30 | **argv | test.c:51:18:51:23 | *query1 | This argument to a SQL query function is derived from $@ and then passed to mysql_query(sqlArg). | test.c:14:27:14:30 | **argv | user input (a command-line argument) | +| test.c:76:17:76:25 | userInput | test.c:75:8:75:16 | gets output argument | test.c:76:17:76:25 | *userInput | This argument to a SQL query function is derived from $@ and then passed to SQLPrepare(StatementText). | test.c:75:8:75:16 | gets output argument | user input (string read by gets) | +| test.c:77:20:77:28 | userInput | test.c:75:8:75:16 | gets output argument | test.c:77:20:77:28 | *userInput | This argument to a SQL query function is derived from $@ and then passed to SQLExecDirect(StatementText). | test.c:75:8:75:16 | gets output argument | user input (string read by gets) | +| test.cpp:43:27:43:33 | access to array | test.cpp:39:27:39:30 | **argv | test.cpp:43:27:43:33 | *access to array | This argument to a SQL query function is derived from $@ and then passed to pqxx::work::exec1((unnamed parameter 0)). | test.cpp:39:27:39:30 | **argv | user input (a command-line argument) | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.qlref index 0519b7976c37..21a12e5eadd7 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.qlref +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/SqlTainted.qlref @@ -1,5 +1 @@ -query: Security/CWE/CWE-089/SqlTainted.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql - \ No newline at end of file +Security/CWE/CWE-089/SqlTainted.ql diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.c index 11766347306b..9e9a4dcc8365 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.c +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.c @@ -11,14 +11,14 @@ int atoi(const char *nptr); void exit(int i); ///// Test code ///// -int main(int argc, char** argv) { // $ Source +int main(int argc, char** argv) { char *userName = argv[2]; int userNumber = atoi(argv[3]); // a string from the user is injected directly into an SQL query. char query1[1000] = {0}; snprintf(query1, 1000, "SELECT UID FROM USERS where name = \"%s\"", userName); - mysql_query(0, query1); // $ Alert + mysql_query(0, query1); // BAD // the user string is encoded by a library routine. char userNameSanitized[1000] = {0}; @@ -48,7 +48,7 @@ void badFunc() { char *userName = globalUsername; char query1[1000] = {0}; snprintf(query1, 1000, "SELECT UID FROM USERS where name = \"%s\"", userName); - mysql_query(0, query1); // $ Alert + mysql_query(0, query1); // BAD } //ODBC Library Rountines @@ -72,44 +72,7 @@ SQLRETURN SQLPrepare( void ODBCTests(){ char userInput[100]; - gets(userInput); // $ Source - SQLPrepare(0, userInput, 100); // $ Alert - SQLExecDirect(0, userInput, 100); // $ Alert -} - -// Oracle Call Interface (OCI) Routines -int OCIStmtPrepare( - void *arg0, - void *arg1, - const unsigned char *sql, - unsigned int arg3, - unsigned int arg4, - unsigned int arg5); -int OCIStmtPrepare2( - void *arg0, - void **arg1, - void *arg2, - const unsigned char *sql, - unsigned int arg4, - const unsigned char *arg5, - unsigned int arg6, - unsigned int arg7, - unsigned int arg8); - -void OCITests(){ - char userInput[100]; - gets(userInput); // $ Source - - // a string from the user is injected directly into an SQL query. - char query1[1000] = {0}; - snprintf(query1, 1000, "SELECT UID FROM USERS where name = \"%s\"", userInput); - OCIStmtPrepare(0, 0, query1, 0, 0, 0); // $ Alert - OCIStmtPrepare2(0, 0, 0, query1, 0, 0, 0, 0, 0); // $ Alert - - // an integer from the user is injected into an SQL query. - int userNumber = atoi(userInput); - char query2[1000] = {0}; - snprintf(query2, 1000, "SELECT UID FROM USERS where number = \"%i\"", userNumber); - OCIStmtPrepare(0, 0, query2, 0, 0, 0); // GOOD - OCIStmtPrepare2(0, 0, 0, query2, 0, 0, 0, 0, 0); // GOOD + gets(userInput); + SQLPrepare(0, userInput, 100); // BAD + SQLExecDirect(0, userInput, 100); // BAD } \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp index 9dc7aed970ea..8bdf7dded232 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-089/SqlTainted/test.cpp @@ -36,11 +36,11 @@ namespace pqxx { }; } -int main(int argc, char** argv) { // $ Source +int main(int argc, char** argv) { pqxx::connection c; pqxx::work w(c); - pqxx::row r = w.exec1(argv[1]); // $ Alert + pqxx::row r = w.exec1(argv[1]); // BAD pqxx::result r2 = w.exec(w.quote(argv[1])); // GOOD diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index ea5961f0c4ee..70a2dfec6cc0 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -15,7 +15,6 @@ Microsoft.AspNetCore.Http,,,1,,,,,,,,,,,,,,,,,,,1, Microsoft.AspNetCore.Mvc,,,2,,,,,,,,,,,,,,,,,,,,2 Microsoft.AspNetCore.WebUtilities,,,2,,,,,,,,,,,,,,,,,,,2, Microsoft.CSharp,,,2,,,,,,,,,,,,,,,,,,,2, -Microsoft.Data.SqlClient,7,,4,,,,,,,,,,7,,,,,,,,,4, Microsoft.Diagnostics.Tools.Pgo,,,21,,,,,,,,,,,,,,,,,,,,21 Microsoft.DotNet.Build.Tasks,,,11,,,,,,,,,,,,,,,,,,,9,2 Microsoft.DotNet.PlatformAbstractions,,,1,,,,,,,,,,,,,,,,,,,1, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 6ab5a55b3e68..6762de6ed129 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -9,6 +9,6 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, System,"``System.*``, ``System``",47,12139,54,5 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Data.SqlClient``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2257,159,4 - Totals,,107,14403,407,9 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2253,152,4 + Totals,,107,14399,400,9 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index b9e0c245b855..4eb119b21c11 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.44-dev +version: 1.7.43 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 7cf7f04a63ad..7b0b33c02d94 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.44-dev +version: 1.7.43 groups: - csharp - solorigate diff --git a/csharp/ql/lib/ext/Microsoft.Data.SqlClient.model.yml b/csharp/ql/lib/ext/Microsoft.Data.SqlClient.model.yml deleted file mode 100644 index ca888c801b08..000000000000 --- a/csharp/ql/lib/ext/Microsoft.Data.SqlClient.model.yml +++ /dev/null @@ -1,20 +0,0 @@ -extensions: - - addsTo: - pack: codeql/csharp-all - extensible: sinkModel - data: - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient.SqlTransaction)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient.SqlTransaction,Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlDataAdapter", False, "SqlDataAdapter", "(Microsoft.Data.SqlClient.SqlCommand)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlDataAdapter", False, "SqlDataAdapter", "(System.String,Microsoft.Data.SqlClient.SqlConnection)", "", "Argument[0]", "sql-injection", "manual"] - - ["Microsoft.Data.SqlClient", "SqlDataAdapter", False, "SqlDataAdapter", "(System.String,System.String)", "", "Argument[0]", "sql-injection", "manual"] - - addsTo: - pack: codeql/csharp-all - extensible: summaryModel - data: - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient.SqlTransaction)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - - ["Microsoft.Data.SqlClient", "SqlCommand", False, "SqlCommand", "(System.String,Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient.SqlTransaction,Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting)", "", "Argument[0]", "Argument[this]", "taint", "manual"] diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index fc88c5575bc7..14b0970fc052 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.10-dev +version: 5.1.9 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll index 65af6fb13a81..08826b7ae8f1 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Bound.qll @@ -1,8 +1,6 @@ /** * Provides classes for representing abstract bounds for use in, for example, range analysis. */ -overlay[local?] -module; private import internal.rangeanalysis.BoundSpecific diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll index 1451a605cdb0..3e5a45da247d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/ModulusAnalysis.qll @@ -3,8 +3,6 @@ * an expression, `b` is a `Bound` (typically zero or the value of an SSA * variable), and `v` is an integer in the range `[0 .. m-1]`. */ -overlay[local?] -module; private import internal.rangeanalysis.ModulusAnalysisSpecific::Private private import Bound diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll index a8b715648321..30cc089f30bb 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/Sign.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - newtype TSign = TNeg() or TZero() or diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll index 8f8d884c9566..6f0067517f90 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll @@ -5,8 +5,6 @@ * The analysis is implemented as an abstract interpretation over the * three-valued domain `{negative, zero, positive}`. */ -overlay[local?] -module; private import SignAnalysisSpecific::Private private import SsaReadPositionCommon diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll index 1e3c4db95bed..08335f6680dd 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll @@ -1,8 +1,6 @@ /** * Provides classes for representing a position at which an SSA variable is read. */ -overlay[local?] -module; private import SsaReadPositionSpecific import SsaReadPositionSpecific::Public diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll index 77d749a03333..75f72352deb6 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/Sql.qll @@ -35,7 +35,6 @@ class IDbCommandConstructionSqlExpr extends SqlExpr, ObjectCreation { ic.getParameter(0).getType() instanceof StringType and not exists(Type t | t = ic.getDeclaringType() | // Known sealed classes: - t.hasFullyQualifiedName("Microsoft.Data.SqlClient", "SqlCommand") or t.hasFullyQualifiedName("System.Data.SqlClient", "SqlCommand") or t.hasFullyQualifiedName("System.Data.Odbc", "OdbcCommand") or t.hasFullyQualifiedName("System.Data.OleDb", "OleDbCommand") or diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll index 44b6b8a08bf9..2d3d79b29270 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/TaintedPathQuery.qll @@ -111,7 +111,6 @@ private module TaintedPathConfig implements DataFlow::StateConfigSig { predicate isBarrierOut(DataFlow::Node node, FlowState state) { isAdditionalFlowStep(_, state, node, _) } - predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer } predicate observeDiffInformedIncrementalMode() { any() } diff --git a/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql b/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql index 710228ffc0ef..b07ee483c0ff 100644 --- a/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql +++ b/csharp/ql/src/Security Features/CWE-327/InsecureSQLConnection.ql @@ -63,6 +63,7 @@ module InsecureSqlConnectionConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + predicate observeDiffInformedIncrementalMode() { any() } } diff --git a/csharp/ql/src/change-notes/2025-06-25-sqlcommand-models.md b/csharp/ql/src/change-notes/2025-06-25-sqlcommand-models.md deleted file mode 100644 index 8d800aa75801..000000000000 --- a/csharp/ql/src/change-notes/2025-06-25-sqlcommand-models.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added explicit SQL injection Models as Data models for `Microsoft.Data.SqlClient.SqlCommand` and `Microsoft.Data.SqlClient.SqlDataAdapter`. This reduces false negatives for the query `cs/sql-injection`. diff --git a/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls b/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls index 21d39db383d3..b224499edce2 100644 --- a/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls +++ b/csharp/ql/src/codeql-suites/csharp-security-and-quality.qls @@ -1,7 +1,24 @@ - description: Security-and-quality queries for C# - queries: . -- apply: security-and-frozen-quality-selectors.yml - from: codeql/suite-helpers +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high + tags contain: + - security +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning + tags contain: + - security - include: id: - cs/asp/response-write @@ -106,3 +123,21 @@ - cs/wrong-compareto-signature - cs/wrong-equals-signature - cs/xmldoc/missing-summary +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: + - /^experimental\/.*/ + - Metrics/Summaries/FrameworkCoverage.ql +- exclude: + tags contain: + - modeleditor + - modelgenerator diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index b6307e4210a8..ceb761092b75 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.3.1-dev +version: 1.3.0 groups: - csharp - queries diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.cs deleted file mode 100644 index 739f0ea30ee0..000000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; -using Microsoft.Data; -using Microsoft.Data.SqlClient; - -namespace Test -{ - class SqlInjection - { - string connectionString; - System.Windows.Forms.TextBox box1; - - public void MakeSqlCommand() - { - // BAD: Text from a local textbox - using (var connection = new SqlConnection(connectionString)) - { - var queryString = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var cmd = new SqlCommand(queryString); // $ Alert[cs/sql-injection] - var adapter = new SqlDataAdapter(cmd); // $ Alert[cs/sql-injection] - } - - // BAD: Input from the command line. - using (var connection = new SqlConnection(connectionString)) - { - var queryString = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + Console.ReadLine() + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var cmd = new SqlCommand(queryString); // $ Alert[cs/sql-injection] - var adapter = new SqlDataAdapter(cmd); // $ Alert[cs/sql-injection] - } - } - } -} diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.expected deleted file mode 100644 index d6582d877edd..000000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.expected +++ /dev/null @@ -1,39 +0,0 @@ -#select -| SqlInjection.cs:19:42:19:52 | access to local variable queryString | SqlInjection.cs:18:21:18:29 | access to property Text : String | SqlInjection.cs:19:42:19:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:18:21:18:29 | access to property Text : String | this TextBox text | -| SqlInjection.cs:20:50:20:52 | access to local variable cmd | SqlInjection.cs:18:21:18:29 | access to property Text : String | SqlInjection.cs:20:50:20:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:18:21:18:29 | access to property Text : String | this TextBox text | -| SqlInjection.cs:28:42:28:52 | access to local variable queryString | SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | SqlInjection.cs:28:42:28:52 | access to local variable queryString | This query depends on $@. | SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | this read from stdin | -| SqlInjection.cs:29:50:29:52 | access to local variable cmd | SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | SqlInjection.cs:29:50:29:52 | access to local variable cmd | This query depends on $@. | SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | this read from stdin | -edges -| SqlInjection.cs:17:21:17:31 | access to local variable queryString : String | SqlInjection.cs:19:42:19:52 | access to local variable queryString | provenance | Sink:MaD:1 | -| SqlInjection.cs:17:21:17:31 | access to local variable queryString : String | SqlInjection.cs:19:42:19:52 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:18:21:18:29 | access to property Text : String | SqlInjection.cs:17:21:17:31 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:19:21:19:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:20:50:20:52 | access to local variable cmd | provenance | Sink:MaD:2 | -| SqlInjection.cs:19:27:19:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:19:21:19:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:19:42:19:52 | access to local variable queryString : String | SqlInjection.cs:19:27:19:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:4 | -| SqlInjection.cs:26:21:26:31 | access to local variable queryString : String | SqlInjection.cs:28:42:28:52 | access to local variable queryString | provenance | Sink:MaD:1 | -| SqlInjection.cs:26:21:26:31 | access to local variable queryString : String | SqlInjection.cs:28:42:28:52 | access to local variable queryString : String | provenance | | -| SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | SqlInjection.cs:26:21:26:31 | access to local variable queryString : String | provenance | Src:MaD:3 | -| SqlInjection.cs:28:21:28:23 | access to local variable cmd : SqlCommand | SqlInjection.cs:29:50:29:52 | access to local variable cmd | provenance | Sink:MaD:2 | -| SqlInjection.cs:28:27:28:53 | object creation of type SqlCommand : SqlCommand | SqlInjection.cs:28:21:28:23 | access to local variable cmd : SqlCommand | provenance | | -| SqlInjection.cs:28:42:28:52 | access to local variable queryString : String | SqlInjection.cs:28:27:28:53 | object creation of type SqlCommand : SqlCommand | provenance | MaD:4 | -models -| 1 | Sink: Microsoft.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; sql-injection; manual | -| 2 | Sink: Microsoft.Data.SqlClient; SqlDataAdapter; false; SqlDataAdapter; (Microsoft.Data.SqlClient.SqlCommand); ; Argument[0]; sql-injection; manual | -| 3 | Source: System; Console; false; ReadLine; ; ; ReturnValue; stdin; manual | -| 4 | Summary: Microsoft.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String); ; Argument[0]; Argument[this]; taint; manual | -nodes -| SqlInjection.cs:17:21:17:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:18:21:18:29 | access to property Text : String | semmle.label | access to property Text : String | -| SqlInjection.cs:19:21:19:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | -| SqlInjection.cs:19:27:19:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | -| SqlInjection.cs:19:42:19:52 | access to local variable queryString | semmle.label | access to local variable queryString | -| SqlInjection.cs:19:42:19:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:20:50:20:52 | access to local variable cmd | semmle.label | access to local variable cmd | -| SqlInjection.cs:26:21:26:31 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:27:21:27:38 | call to method ReadLine : String | semmle.label | call to method ReadLine : String | -| SqlInjection.cs:28:21:28:23 | access to local variable cmd : SqlCommand | semmle.label | access to local variable cmd : SqlCommand | -| SqlInjection.cs:28:27:28:53 | object creation of type SqlCommand : SqlCommand | semmle.label | object creation of type SqlCommand : SqlCommand | -| SqlInjection.cs:28:42:28:52 | access to local variable queryString | semmle.label | access to local variable queryString | -| SqlInjection.cs:28:42:28:52 | access to local variable queryString : String | semmle.label | access to local variable queryString : String | -| SqlInjection.cs:29:50:29:52 | access to local variable cmd | semmle.label | access to local variable cmd | -subpaths diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.ext.yml b/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.ext.yml deleted file mode 100644 index 82f107ae1d71..000000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.ext.yml +++ /dev/null @@ -1,7 +0,0 @@ -extensions: - - - addsTo: - pack: codeql/threat-models - extensible: threatModelConfiguration - data: - - ["local", true, 0] \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.qlref deleted file mode 100644 index 1421faac8072..000000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089-2/SqlInjection.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security Features/CWE-089/SqlInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089-2/options b/csharp/ql/test/query-tests/Security Features/CWE-089-2/options deleted file mode 100644 index 5601356ee484..000000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-089-2/options +++ /dev/null @@ -1,4 +0,0 @@ -semmle-extractor-options: /nostdlib /noconfig -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj -semmle-extractor-options: ${testdir}/../../../resources/stubs/System.Windows.cs -semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.AspNetCore.App/Microsoft.AspNetCore.App.csproj diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.cs index b2240908686e..b8ecf0b8e0a6 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SecondOrderSqlInjection.cs @@ -17,12 +17,12 @@ public void ProcessRequest() { connection.Open(); SqlCommand customerCommand = new SqlCommand("SELECT * FROM customers", connection); - SqlDataReader customerReader = customerCommand.ExecuteReader(); // $ Source[cs/sql-injection] + SqlDataReader customerReader = customerCommand.ExecuteReader(); while (customerReader.Read()) { // BAD: Read from database, write it straight to another query - SqlCommand secondCustomerCommand = new SqlCommand("SELECT * FROM customers WHERE customerName=" + customerReader.GetString(1), connection); // $ Alert[cs/sql-injection] + SqlCommand secondCustomerCommand = new SqlCommand("SELECT * FROM customers WHERE customerName=" + customerReader.GetString(1), connection); } customerReader.Close(); } @@ -30,7 +30,7 @@ public void ProcessRequest() public void RunSQLFromFile() { - using (FileStream fs = new FileStream("myfile.txt", FileMode.Open)) // $ Source[cs/sql-injection] + using (FileStream fs = new FileStream("myfile.txt", FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { @@ -42,7 +42,7 @@ public void RunSQLFromFile() continue; using (var connection = new SQLiteConnection("")) { - var cmd = new SQLiteCommand(sql, connection); // $ Alert[cs/sql-injection] + var cmd = new SQLiteCommand(sql, connection); cmd.ExecuteScalar(); } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs index e7dd2f732603..38dcf94ef8d0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.cs @@ -35,8 +35,8 @@ public void GetDataSetByCategory() using (var connection = new SqlConnection(connectionString)) { var query1 = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + categoryTextBox.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var adapter = new SqlDataAdapter(query1, connection); // $ Alert[cs/sql-injection] + + categoryTextBox.Text + "' ORDER BY PRICE"; + var adapter = new SqlDataAdapter(query1, connection); var result = new DataSet(); adapter.Fill(result); } @@ -70,9 +70,9 @@ public void GetDataSetByCategory() { // BAD: Use EntityFramework direct Sql execution methods var query1 = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + categoryTextBox.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - context.Database.ExecuteSqlCommand(query1); // $ Alert[cs/sql-injection] - context.Database.SqlQuery(query1); // $ Alert[cs/sql-injection] + + categoryTextBox.Text + "' ORDER BY PRICE"; + context.Database.ExecuteSqlCommand(query1); + context.Database.SqlQuery(query1); // GOOD: Use EntityFramework direct Sql execution methods with parameter var query2 = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY=" + "@p0 ORDER BY PRICE"; @@ -84,8 +84,8 @@ public void GetDataSetByCategory() using (var connection = new SqlConnection(connectionString)) { var query1 = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var adapter = new SqlDataAdapter(query1, connection); // $ Alert[cs/sql-injection] + + box1.Text + "' ORDER BY PRICE"; + var adapter = new SqlDataAdapter(query1, connection); var result = new DataSet(); adapter.Fill(result); } @@ -94,9 +94,9 @@ public void GetDataSetByCategory() using (var connection = new SqlConnection(connectionString)) { var queryString = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var cmd = new SqlCommand(queryString); // $ Alert[cs/sql-injection] - var adapter = new SqlDataAdapter(cmd); // $ Alert[cs/sql-injection] + + box1.Text + "' ORDER BY PRICE"; + var cmd = new SqlCommand(queryString); + var adapter = new SqlDataAdapter(cmd); var result = new DataSet(); adapter.Fill(result); } @@ -105,9 +105,9 @@ public void GetDataSetByCategory() using (var connection = new SqlConnection(connectionString)) { var queryString = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" - + Console.ReadLine()! + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var cmd = new SqlCommand(queryString); // $ Alert[cs/sql-injection] - var adapter = new SqlDataAdapter(cmd); // $ Alert[cs/sql-injection] + + Console.ReadLine()! + "' ORDER BY PRICE"; + var cmd = new SqlCommand(queryString); + var adapter = new SqlDataAdapter(cmd); var result = new DataSet(); adapter.Fill(result); } @@ -119,14 +119,14 @@ public void GetDataSetByCategory() public abstract class MyController : Controller { [HttpPost("{userId:string}")] - public async Task GetUserById([FromRoute] string userId, CancellationToken cancellationToken) // $ Source[cs/sql-injection] + public async Task GetUserById([FromRoute] string userId, CancellationToken cancellationToken) { // This is a vulnerable method due to SQL injection string query = "SELECT * FROM Users WHERE UserId = '" + userId + "'"; using (SqlConnection connection = new SqlConnection("YourConnectionString")) { - SqlCommand command = new SqlCommand(query, connection); // $ Alert[cs/sql-injection] + SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.qlref b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.qlref index 1421faac8072..56829ee8e8fc 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.qlref +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjection.qlref @@ -1,4 +1,2 @@ query: Security Features/CWE-089/SqlInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionDapper.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionDapper.cs index 360264c5776f..ec54c70ddeb2 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionDapper.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionDapper.cs @@ -17,8 +17,8 @@ public void Bad01() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var result = connection.Query(query); // $ Alert[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; + var result = connection.Query(query); } } @@ -26,8 +26,8 @@ public async Task Bad02() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var result = await connection.QueryAsync(query); // $ Alert[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; + var result = await connection.QueryAsync(query); } } @@ -35,8 +35,8 @@ public async Task Bad03() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - var result = await connection.QueryFirstAsync(query); // $ Alert[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; + var result = await connection.QueryFirstAsync(query); } } @@ -44,9 +44,9 @@ public async Task Bad04() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; - await connection.ExecuteAsync(query); // $ Alert[cs/sql-injection] + await connection.ExecuteAsync(query); } } @@ -54,8 +54,8 @@ public void Bad05() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - connection.ExecuteScalar(query); // $ Alert[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; + connection.ExecuteScalar(query); } } @@ -63,8 +63,8 @@ public void Bad06() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] - connection.ExecuteReader(query); // $ Alert[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; + connection.ExecuteReader(query); } } @@ -72,9 +72,9 @@ public async Task Bad07() { using (var connection = new SqlConnection(connectionString)) { - var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; // $ Source[cs/sql-injection] + var query = "SELECT ITEM,PRICE FROM PRODUCT WHERE ITEM_CATEGORY='" + box1.Text + "' ORDER BY PRICE"; - var comDef = new CommandDefinition(query); // $ Alert[cs/sql-injection] + var comDef = new CommandDefinition(query); var result = await connection.QueryFirstAsync(comDef); } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionSqlite.cs b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionSqlite.cs index c7b6f1db072f..6654a8fdec10 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionSqlite.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-089/SqlInjectionSqlite.cs @@ -16,12 +16,12 @@ class SqlInjection public void InjectUntrustedData() { // BAD: untrusted data is not sanitized. - SQLiteCommand cmd = new SQLiteCommand(untrustedData.Text); // $ Alert[cs/sql-injection] + SQLiteCommand cmd = new SQLiteCommand(untrustedData.Text); // BAD: untrusted data is not sanitized. using (var connection = new SQLiteConnection(connectionString)) { - cmd = new SQLiteCommand(untrustedData.Text, connection); // $ Source[cs/sql-injection] Alert[cs/sql-injection] + cmd = new SQLiteCommand(untrustedData.Text, connection); } SQLiteDataAdapter adapter; @@ -30,23 +30,23 @@ public void InjectUntrustedData() // BAD: untrusted data is not sanitized. using (var connection = new SQLiteConnection(connectionString)) { - adapter = new SQLiteDataAdapter(untrustedData.Text, connection); // $ Alert[cs/sql-injection] + adapter = new SQLiteDataAdapter(untrustedData.Text, connection); result = new DataSet(); adapter.Fill(result); } // BAD: untrusted data is not sanitized. - adapter = new SQLiteDataAdapter(untrustedData.Text, connectionString); // $ Alert[cs/sql-injection] + adapter = new SQLiteDataAdapter(untrustedData.Text, connectionString); result = new DataSet(); adapter.Fill(result); // BAD: untrusted data is not sanitized. - adapter = new SQLiteDataAdapter(cmd); // $ Alert[cs/sql-injection] + adapter = new SQLiteDataAdapter(cmd); result = new DataSet(); adapter.Fill(result); // BAD: untrusted data as filename is not sanitized. - using (FileStream fs = new FileStream(untrustedData.Text, FileMode.Open)) // $ Source[cs/sql-injection] + using (FileStream fs = new FileStream(untrustedData.Text, FileMode.Open)) { using (StreamReader sr = new StreamReader(fs, Encoding.UTF8)) { @@ -58,7 +58,7 @@ public void InjectUntrustedData() continue; using (var connection = new SQLiteConnection("")) { - cmd = new SQLiteCommand(sql, connection); // $ Alert[cs/sql-injection] + cmd = new SQLiteCommand(sql, connection); cmd.ExecuteScalar(); } } @@ -66,4 +66,4 @@ public void InjectUntrustedData() } } } -} +} \ No newline at end of file diff --git a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.cs b/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.cs deleted file mode 100644 index c56fc0888b00..000000000000 --- a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.cs +++ /dev/null @@ -1,1104 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Azure.Core, Version=1.38.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8`. -namespace Azure -{ - public abstract class AsyncPageable : System.Collections.Generic.IAsyncEnumerable - { - public abstract System.Collections.Generic.IAsyncEnumerable> AsPages(string continuationToken = default(string), int? pageSizeHint = default(int?)); - protected virtual System.Threading.CancellationToken CancellationToken { get => throw null; } - protected AsyncPageable() => throw null; - protected AsyncPageable(System.Threading.CancellationToken cancellationToken) => throw null; - public override bool Equals(object obj) => throw null; - public static Azure.AsyncPageable FromPages(System.Collections.Generic.IEnumerable> pages) => throw null; - public virtual System.Collections.Generic.IAsyncEnumerator GetAsyncEnumerator(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override int GetHashCode() => throw null; - public override string ToString() => throw null; - } - public static partial class AzureCoreExtensions - { - public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json) => throw null; - public static dynamic ToDynamicFromJson(this System.BinaryData utf8Json, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = default(string)) => throw null; - public static T ToObject(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.ValueTask ToObjectAsync(this System.BinaryData data, Azure.Core.Serialization.ObjectSerializer serializer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static object ToObjectFromJson(this System.BinaryData data) => throw null; - } - public class AzureKeyCredential - { - public AzureKeyCredential(string key) => throw null; - public string Key { get => throw null; } - public void Update(string key) => throw null; - } - public class AzureNamedKeyCredential - { - public AzureNamedKeyCredential(string name, string key) => throw null; - public void Deconstruct(out string name, out string key) => throw null; - public string Name { get => throw null; } - public void Update(string name, string key) => throw null; - } - public class AzureSasCredential - { - public AzureSasCredential(string signature) => throw null; - public string Signature { get => throw null; } - public void Update(string signature) => throw null; - } - namespace Core - { - public struct AccessToken - { - public AccessToken(string accessToken, System.DateTimeOffset expiresOn) => throw null; - public override bool Equals(object obj) => throw null; - public System.DateTimeOffset ExpiresOn { get => throw null; } - public override int GetHashCode() => throw null; - public string Token { get => throw null; } - } - public struct AzureLocation : System.IEquatable - { - public static Azure.Core.AzureLocation AustraliaCentral { get => throw null; } - public static Azure.Core.AzureLocation AustraliaCentral2 { get => throw null; } - public static Azure.Core.AzureLocation AustraliaEast { get => throw null; } - public static Azure.Core.AzureLocation AustraliaSoutheast { get => throw null; } - public static Azure.Core.AzureLocation BrazilSouth { get => throw null; } - public static Azure.Core.AzureLocation BrazilSoutheast { get => throw null; } - public static Azure.Core.AzureLocation CanadaCentral { get => throw null; } - public static Azure.Core.AzureLocation CanadaEast { get => throw null; } - public static Azure.Core.AzureLocation CentralIndia { get => throw null; } - public static Azure.Core.AzureLocation CentralUS { get => throw null; } - public static Azure.Core.AzureLocation ChinaEast { get => throw null; } - public static Azure.Core.AzureLocation ChinaEast2 { get => throw null; } - public static Azure.Core.AzureLocation ChinaEast3 { get => throw null; } - public static Azure.Core.AzureLocation ChinaNorth { get => throw null; } - public static Azure.Core.AzureLocation ChinaNorth2 { get => throw null; } - public static Azure.Core.AzureLocation ChinaNorth3 { get => throw null; } - public AzureLocation(string location) => throw null; - public AzureLocation(string name, string displayName) => throw null; - public string DisplayName { get => throw null; } - public static Azure.Core.AzureLocation EastAsia { get => throw null; } - public static Azure.Core.AzureLocation EastUS { get => throw null; } - public static Azure.Core.AzureLocation EastUS2 { get => throw null; } - public bool Equals(Azure.Core.AzureLocation other) => throw null; - public override bool Equals(object obj) => throw null; - public static Azure.Core.AzureLocation FranceCentral { get => throw null; } - public static Azure.Core.AzureLocation FranceSouth { get => throw null; } - public static Azure.Core.AzureLocation GermanyCentral { get => throw null; } - public static Azure.Core.AzureLocation GermanyNorth { get => throw null; } - public static Azure.Core.AzureLocation GermanyNorthEast { get => throw null; } - public static Azure.Core.AzureLocation GermanyWestCentral { get => throw null; } - public override int GetHashCode() => throw null; - public static Azure.Core.AzureLocation IsraelCentral { get => throw null; } - public static Azure.Core.AzureLocation ItalyNorth { get => throw null; } - public static Azure.Core.AzureLocation JapanEast { get => throw null; } - public static Azure.Core.AzureLocation JapanWest { get => throw null; } - public static Azure.Core.AzureLocation KoreaCentral { get => throw null; } - public static Azure.Core.AzureLocation KoreaSouth { get => throw null; } - public string Name { get => throw null; } - public static Azure.Core.AzureLocation NorthCentralUS { get => throw null; } - public static Azure.Core.AzureLocation NorthEurope { get => throw null; } - public static Azure.Core.AzureLocation NorwayEast { get => throw null; } - public static Azure.Core.AzureLocation NorwayWest { get => throw null; } - public static bool operator ==(Azure.Core.AzureLocation left, Azure.Core.AzureLocation right) => throw null; - public static implicit operator Azure.Core.AzureLocation(string location) => throw null; - public static implicit operator string(Azure.Core.AzureLocation location) => throw null; - public static bool operator !=(Azure.Core.AzureLocation left, Azure.Core.AzureLocation right) => throw null; - public static Azure.Core.AzureLocation PolandCentral { get => throw null; } - public static Azure.Core.AzureLocation QatarCentral { get => throw null; } - public static Azure.Core.AzureLocation SouthAfricaNorth { get => throw null; } - public static Azure.Core.AzureLocation SouthAfricaWest { get => throw null; } - public static Azure.Core.AzureLocation SouthCentralUS { get => throw null; } - public static Azure.Core.AzureLocation SoutheastAsia { get => throw null; } - public static Azure.Core.AzureLocation SouthIndia { get => throw null; } - public static Azure.Core.AzureLocation SwedenCentral { get => throw null; } - public static Azure.Core.AzureLocation SwedenSouth { get => throw null; } - public static Azure.Core.AzureLocation SwitzerlandNorth { get => throw null; } - public static Azure.Core.AzureLocation SwitzerlandWest { get => throw null; } - public override string ToString() => throw null; - public static Azure.Core.AzureLocation UAECentral { get => throw null; } - public static Azure.Core.AzureLocation UAENorth { get => throw null; } - public static Azure.Core.AzureLocation UKSouth { get => throw null; } - public static Azure.Core.AzureLocation UKWest { get => throw null; } - public static Azure.Core.AzureLocation USDoDCentral { get => throw null; } - public static Azure.Core.AzureLocation USDoDEast { get => throw null; } - public static Azure.Core.AzureLocation USGovArizona { get => throw null; } - public static Azure.Core.AzureLocation USGovIowa { get => throw null; } - public static Azure.Core.AzureLocation USGovTexas { get => throw null; } - public static Azure.Core.AzureLocation USGovVirginia { get => throw null; } - public static Azure.Core.AzureLocation WestCentralUS { get => throw null; } - public static Azure.Core.AzureLocation WestEurope { get => throw null; } - public static Azure.Core.AzureLocation WestIndia { get => throw null; } - public static Azure.Core.AzureLocation WestUS { get => throw null; } - public static Azure.Core.AzureLocation WestUS2 { get => throw null; } - public static Azure.Core.AzureLocation WestUS3 { get => throw null; } - } - public abstract class ClientOptions - { - public void AddPolicy(Azure.Core.Pipeline.HttpPipelinePolicy policy, Azure.Core.HttpPipelinePosition position) => throw null; - protected ClientOptions() => throw null; - protected ClientOptions(Azure.Core.DiagnosticsOptions diagnostics) => throw null; - public static Azure.Core.ClientOptions Default { get => throw null; } - public Azure.Core.DiagnosticsOptions Diagnostics { get => throw null; } - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public Azure.Core.RetryOptions Retry { get => throw null; } - public Azure.Core.Pipeline.HttpPipelinePolicy RetryPolicy { get => throw null; set { } } - public override string ToString() => throw null; - public Azure.Core.Pipeline.HttpPipelineTransport Transport { get => throw null; set { } } - } - public struct ContentType : System.IEquatable, System.IEquatable - { - public static Azure.Core.ContentType ApplicationJson { get => throw null; } - public static Azure.Core.ContentType ApplicationOctetStream { get => throw null; } - public ContentType(string contentType) => throw null; - public bool Equals(Azure.Core.ContentType other) => throw null; - public bool Equals(string other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public static bool operator ==(Azure.Core.ContentType left, Azure.Core.ContentType right) => throw null; - public static implicit operator Azure.Core.ContentType(string contentType) => throw null; - public static bool operator !=(Azure.Core.ContentType left, Azure.Core.ContentType right) => throw null; - public static Azure.Core.ContentType TextPlain { get => throw null; } - public override string ToString() => throw null; - } - namespace Cryptography - { - public interface IKeyEncryptionKey - { - string KeyId { get; } - byte[] UnwrapKey(string algorithm, System.ReadOnlyMemory encryptedKey, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - System.Threading.Tasks.Task UnwrapKeyAsync(string algorithm, System.ReadOnlyMemory encryptedKey, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - byte[] WrapKey(string algorithm, System.ReadOnlyMemory key, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - System.Threading.Tasks.Task WrapKeyAsync(string algorithm, System.ReadOnlyMemory key, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - } - public interface IKeyEncryptionKeyResolver - { - Azure.Core.Cryptography.IKeyEncryptionKey Resolve(string keyId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - System.Threading.Tasks.Task ResolveAsync(string keyId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - } - } - public abstract class DelayStrategy - { - public static Azure.Core.DelayStrategy CreateExponentialDelayStrategy(System.TimeSpan? initialDelay = default(System.TimeSpan?), System.TimeSpan? maxDelay = default(System.TimeSpan?)) => throw null; - public static Azure.Core.DelayStrategy CreateFixedDelayStrategy(System.TimeSpan? delay = default(System.TimeSpan?)) => throw null; - protected DelayStrategy(System.TimeSpan? maxDelay = default(System.TimeSpan?), double jitterFactor = default(double)) => throw null; - public System.TimeSpan GetNextDelay(Azure.Response response, int retryNumber) => throw null; - protected abstract System.TimeSpan GetNextDelayCore(Azure.Response response, int retryNumber); - protected static System.TimeSpan Max(System.TimeSpan val1, System.TimeSpan val2) => throw null; - protected static System.TimeSpan Min(System.TimeSpan val1, System.TimeSpan val2) => throw null; - } - public static class DelegatedTokenCredential - { - public static Azure.Core.TokenCredential Create(System.Func getToken, System.Func> getTokenAsync) => throw null; - public static Azure.Core.TokenCredential Create(System.Func getToken) => throw null; - } - namespace Diagnostics - { - public class AzureEventSourceListener : System.Diagnostics.Tracing.EventListener - { - public static Azure.Core.Diagnostics.AzureEventSourceListener CreateConsoleLogger(System.Diagnostics.Tracing.EventLevel level = default(System.Diagnostics.Tracing.EventLevel)) => throw null; - public static Azure.Core.Diagnostics.AzureEventSourceListener CreateTraceLogger(System.Diagnostics.Tracing.EventLevel level = default(System.Diagnostics.Tracing.EventLevel)) => throw null; - public AzureEventSourceListener(System.Action log, System.Diagnostics.Tracing.EventLevel level) => throw null; - protected override sealed void OnEventSourceCreated(System.Diagnostics.Tracing.EventSource eventSource) => throw null; - protected override sealed void OnEventWritten(System.Diagnostics.Tracing.EventWrittenEventArgs eventData) => throw null; - public const string TraitName = default; - public const string TraitValue = default; - } - } - public class DiagnosticsOptions - { - public string ApplicationId { get => throw null; set { } } - protected DiagnosticsOptions() => throw null; - public static string DefaultApplicationId { get => throw null; set { } } - public bool IsDistributedTracingEnabled { get => throw null; set { } } - public bool IsLoggingContentEnabled { get => throw null; set { } } - public bool IsLoggingEnabled { get => throw null; set { } } - public bool IsTelemetryEnabled { get => throw null; set { } } - public int LoggedContentSizeLimit { get => throw null; set { } } - public System.Collections.Generic.IList LoggedHeaderNames { get => throw null; } - public System.Collections.Generic.IList LoggedQueryParameters { get => throw null; } - } - namespace Extensions - { - public interface IAzureClientBuilder where TOptions : class - { - } - public interface IAzureClientFactoryBuilder - { - Azure.Core.Extensions.IAzureClientBuilder RegisterClientFactory(System.Func clientFactory) where TOptions : class; - } - public interface IAzureClientFactoryBuilderWithConfiguration : Azure.Core.Extensions.IAzureClientFactoryBuilder - { - Azure.Core.Extensions.IAzureClientBuilder RegisterClientFactory(TConfiguration configuration) where TOptions : class; - } - public interface IAzureClientFactoryBuilderWithCredential - { - Azure.Core.Extensions.IAzureClientBuilder RegisterClientFactory(System.Func clientFactory, bool requiresCredential = default(bool)) where TOptions : class; - } - } - namespace GeoJson - { - public struct GeoArray : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList - { - public int Count { get => throw null; } - public struct Enumerator : System.IDisposable, System.Collections.Generic.IEnumerator, System.Collections.IEnumerator - { - object System.Collections.IEnumerator.Current { get => throw null; } - public T Current { get => throw null; } - public void Dispose() => throw null; - public bool MoveNext() => throw null; - public void Reset() => throw null; - } - public Azure.Core.GeoJson.GeoArray.Enumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null; - public T this[int index] { get => throw null; } - } - public sealed class GeoBoundingBox : System.IEquatable - { - public GeoBoundingBox(double west, double south, double east, double north) => throw null; - public GeoBoundingBox(double west, double south, double east, double north, double? minAltitude, double? maxAltitude) => throw null; - public double East { get => throw null; } - public bool Equals(Azure.Core.GeoJson.GeoBoundingBox other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public double? MaxAltitude { get => throw null; } - public double? MinAltitude { get => throw null; } - public double North { get => throw null; } - public double South { get => throw null; } - public double this[int index] { get => throw null; } - public override string ToString() => throw null; - public double West { get => throw null; } - } - public sealed class GeoCollection : Azure.Core.GeoJson.GeoObject, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList - { - public int Count { get => throw null; } - public GeoCollection(System.Collections.Generic.IEnumerable geometries) => throw null; - public GeoCollection(System.Collections.Generic.IEnumerable geometries, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public Azure.Core.GeoJson.GeoObject this[int index] { get => throw null; } - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public sealed class GeoLinearRing - { - public Azure.Core.GeoJson.GeoArray Coordinates { get => throw null; } - public GeoLinearRing(System.Collections.Generic.IEnumerable coordinates) => throw null; - } - public sealed class GeoLineString : Azure.Core.GeoJson.GeoObject - { - public Azure.Core.GeoJson.GeoArray Coordinates { get => throw null; } - public GeoLineString(System.Collections.Generic.IEnumerable coordinates) => throw null; - public GeoLineString(System.Collections.Generic.IEnumerable coordinates, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public sealed class GeoLineStringCollection : Azure.Core.GeoJson.GeoObject, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList - { - public Azure.Core.GeoJson.GeoArray> Coordinates { get => throw null; } - public int Count { get => throw null; } - public GeoLineStringCollection(System.Collections.Generic.IEnumerable lines) => throw null; - public GeoLineStringCollection(System.Collections.Generic.IEnumerable lines, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public Azure.Core.GeoJson.GeoLineString this[int index] { get => throw null; } - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public abstract class GeoObject - { - public Azure.Core.GeoJson.GeoBoundingBox BoundingBox { get => throw null; } - public static Azure.Core.GeoJson.GeoObject Parse(string json) => throw null; - public override string ToString() => throw null; - public bool TryGetCustomProperty(string name, out object value) => throw null; - public abstract Azure.Core.GeoJson.GeoObjectType Type { get; } - } - public enum GeoObjectType - { - Point = 0, - MultiPoint = 1, - Polygon = 2, - MultiPolygon = 3, - LineString = 4, - MultiLineString = 5, - GeometryCollection = 6, - } - public sealed class GeoPoint : Azure.Core.GeoJson.GeoObject - { - public Azure.Core.GeoJson.GeoPosition Coordinates { get => throw null; } - public GeoPoint(double longitude, double latitude) => throw null; - public GeoPoint(double longitude, double latitude, double? altitude) => throw null; - public GeoPoint(Azure.Core.GeoJson.GeoPosition position) => throw null; - public GeoPoint(Azure.Core.GeoJson.GeoPosition position, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public sealed class GeoPointCollection : Azure.Core.GeoJson.GeoObject, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList - { - public Azure.Core.GeoJson.GeoArray Coordinates { get => throw null; } - public int Count { get => throw null; } - public GeoPointCollection(System.Collections.Generic.IEnumerable points) => throw null; - public GeoPointCollection(System.Collections.Generic.IEnumerable points, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public Azure.Core.GeoJson.GeoPoint this[int index] { get => throw null; } - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public sealed class GeoPolygon : Azure.Core.GeoJson.GeoObject - { - public Azure.Core.GeoJson.GeoArray> Coordinates { get => throw null; } - public GeoPolygon(System.Collections.Generic.IEnumerable positions) => throw null; - public GeoPolygon(System.Collections.Generic.IEnumerable rings) => throw null; - public GeoPolygon(System.Collections.Generic.IEnumerable rings, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public Azure.Core.GeoJson.GeoLinearRing OuterRing { get => throw null; } - public System.Collections.Generic.IReadOnlyList Rings { get => throw null; } - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public sealed class GeoPolygonCollection : Azure.Core.GeoJson.GeoObject, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList - { - public Azure.Core.GeoJson.GeoArray>> Coordinates { get => throw null; } - public int Count { get => throw null; } - public GeoPolygonCollection(System.Collections.Generic.IEnumerable polygons) => throw null; - public GeoPolygonCollection(System.Collections.Generic.IEnumerable polygons, Azure.Core.GeoJson.GeoBoundingBox boundingBox, System.Collections.Generic.IReadOnlyDictionary customProperties) => throw null; - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public Azure.Core.GeoJson.GeoPolygon this[int index] { get => throw null; } - public override Azure.Core.GeoJson.GeoObjectType Type { get => throw null; } - } - public struct GeoPosition : System.IEquatable - { - public double? Altitude { get => throw null; } - public int Count { get => throw null; } - public GeoPosition(double longitude, double latitude) => throw null; - public GeoPosition(double longitude, double latitude, double? altitude) => throw null; - public bool Equals(Azure.Core.GeoJson.GeoPosition other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public double Latitude { get => throw null; } - public double Longitude { get => throw null; } - public static bool operator ==(Azure.Core.GeoJson.GeoPosition left, Azure.Core.GeoJson.GeoPosition right) => throw null; - public static bool operator !=(Azure.Core.GeoJson.GeoPosition left, Azure.Core.GeoJson.GeoPosition right) => throw null; - public double this[int index] { get => throw null; } - public override string ToString() => throw null; - } - } - public struct HttpHeader : System.IEquatable - { - public static class Common - { - public static readonly Azure.Core.HttpHeader FormUrlEncodedContentType; - public static readonly Azure.Core.HttpHeader JsonAccept; - public static readonly Azure.Core.HttpHeader JsonContentType; - public static readonly Azure.Core.HttpHeader OctetStreamContentType; - } - public HttpHeader(string name, string value) => throw null; - public override bool Equals(object obj) => throw null; - public bool Equals(Azure.Core.HttpHeader other) => throw null; - public override int GetHashCode() => throw null; - public string Name { get => throw null; } - public static class Names - { - public static string Accept { get => throw null; } - public static string Authorization { get => throw null; } - public static string ContentDisposition { get => throw null; } - public static string ContentLength { get => throw null; } - public static string ContentType { get => throw null; } - public static string Date { get => throw null; } - public static string ETag { get => throw null; } - public static string Host { get => throw null; } - public static string IfMatch { get => throw null; } - public static string IfModifiedSince { get => throw null; } - public static string IfNoneMatch { get => throw null; } - public static string IfUnmodifiedSince { get => throw null; } - public static string Prefer { get => throw null; } - public static string Range { get => throw null; } - public static string Referer { get => throw null; } - public static string UserAgent { get => throw null; } - public static string WwwAuthenticate { get => throw null; } - public static string XMsDate { get => throw null; } - public static string XMsRange { get => throw null; } - public static string XMsRequestId { get => throw null; } - } - public override string ToString() => throw null; - public string Value { get => throw null; } - } - public sealed class HttpMessage : System.IDisposable - { - public bool BufferResponse { get => throw null; set { } } - public System.Threading.CancellationToken CancellationToken { get => throw null; } - public HttpMessage(Azure.Core.Request request, Azure.Core.ResponseClassifier responseClassifier) => throw null; - public void Dispose() => throw null; - public System.IO.Stream ExtractResponseContent() => throw null; - public bool HasResponse { get => throw null; } - public System.TimeSpan? NetworkTimeout { get => throw null; set { } } - public Azure.Core.MessageProcessingContext ProcessingContext { get => throw null; } - public Azure.Core.Request Request { get => throw null; } - public Azure.Response Response { get => throw null; set { } } - public Azure.Core.ResponseClassifier ResponseClassifier { get => throw null; set { } } - public void SetProperty(string name, object value) => throw null; - public void SetProperty(System.Type type, object value) => throw null; - public bool TryGetProperty(string name, out object value) => throw null; - public bool TryGetProperty(System.Type type, out object value) => throw null; - } - public enum HttpPipelinePosition - { - PerCall = 0, - PerRetry = 1, - BeforeTransport = 2, - } - public struct MessageProcessingContext - { - public int RetryNumber { get => throw null; set { } } - public System.DateTimeOffset StartTime { get => throw null; } - } - public static class MultipartResponse - { - public static Azure.Response[] Parse(Azure.Response response, bool expectCrLf, System.Threading.CancellationToken cancellationToken) => throw null; - public static System.Threading.Tasks.Task ParseAsync(Azure.Response response, bool expectCrLf, System.Threading.CancellationToken cancellationToken) => throw null; - } - namespace Pipeline - { - public class BearerTokenAuthenticationPolicy : Azure.Core.Pipeline.HttpPipelinePolicy - { - protected void AuthenticateAndAuthorizeRequest(Azure.Core.HttpMessage message, Azure.Core.TokenRequestContext context) => throw null; - protected System.Threading.Tasks.ValueTask AuthenticateAndAuthorizeRequestAsync(Azure.Core.HttpMessage message, Azure.Core.TokenRequestContext context) => throw null; - protected virtual void AuthorizeRequest(Azure.Core.HttpMessage message) => throw null; - protected virtual System.Threading.Tasks.ValueTask AuthorizeRequestAsync(Azure.Core.HttpMessage message) => throw null; - protected virtual bool AuthorizeRequestOnChallenge(Azure.Core.HttpMessage message) => throw null; - protected virtual System.Threading.Tasks.ValueTask AuthorizeRequestOnChallengeAsync(Azure.Core.HttpMessage message) => throw null; - public BearerTokenAuthenticationPolicy(Azure.Core.TokenCredential credential, string scope) => throw null; - public BearerTokenAuthenticationPolicy(Azure.Core.TokenCredential credential, System.Collections.Generic.IEnumerable scopes) => throw null; - public override void Process(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - public override System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - } - public sealed class DisposableHttpPipeline : Azure.Core.Pipeline.HttpPipeline, System.IDisposable - { - public void Dispose() => throw null; - internal DisposableHttpPipeline() : base(default(Azure.Core.Pipeline.HttpPipelineTransport), default(Azure.Core.Pipeline.HttpPipelinePolicy[]), default(Azure.Core.ResponseClassifier)) { } - } - public class HttpClientTransport : Azure.Core.Pipeline.HttpPipelineTransport, System.IDisposable - { - public override sealed Azure.Core.Request CreateRequest() => throw null; - public HttpClientTransport() => throw null; - public HttpClientTransport(System.Net.Http.HttpMessageHandler messageHandler) => throw null; - public HttpClientTransport(System.Net.Http.HttpClient client) => throw null; - public void Dispose() => throw null; - public override void Process(Azure.Core.HttpMessage message) => throw null; - public override System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message) => throw null; - public static readonly Azure.Core.Pipeline.HttpClientTransport Shared; - } - public class HttpPipeline - { - public static System.IDisposable CreateClientRequestIdScope(string clientRequestId) => throw null; - public static System.IDisposable CreateHttpMessagePropertiesScope(System.Collections.Generic.IDictionary messageProperties) => throw null; - public Azure.Core.HttpMessage CreateMessage() => throw null; - public Azure.Core.HttpMessage CreateMessage(Azure.RequestContext context) => throw null; - public Azure.Core.HttpMessage CreateMessage(Azure.RequestContext context, Azure.Core.ResponseClassifier classifier = default(Azure.Core.ResponseClassifier)) => throw null; - public Azure.Core.Request CreateRequest() => throw null; - public HttpPipeline(Azure.Core.Pipeline.HttpPipelineTransport transport, Azure.Core.Pipeline.HttpPipelinePolicy[] policies = default(Azure.Core.Pipeline.HttpPipelinePolicy[]), Azure.Core.ResponseClassifier responseClassifier = default(Azure.Core.ResponseClassifier)) => throw null; - public Azure.Core.ResponseClassifier ResponseClassifier { get => throw null; } - public void Send(Azure.Core.HttpMessage message, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.ValueTask SendAsync(Azure.Core.HttpMessage message, System.Threading.CancellationToken cancellationToken) => throw null; - public Azure.Response SendRequest(Azure.Core.Request request, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.ValueTask SendRequestAsync(Azure.Core.Request request, System.Threading.CancellationToken cancellationToken) => throw null; - } - public static class HttpPipelineBuilder - { - public static Azure.Core.Pipeline.HttpPipeline Build(Azure.Core.ClientOptions options, params Azure.Core.Pipeline.HttpPipelinePolicy[] perRetryPolicies) => throw null; - public static Azure.Core.Pipeline.HttpPipeline Build(Azure.Core.ClientOptions options, Azure.Core.Pipeline.HttpPipelinePolicy[] perCallPolicies, Azure.Core.Pipeline.HttpPipelinePolicy[] perRetryPolicies, Azure.Core.ResponseClassifier responseClassifier) => throw null; - public static Azure.Core.Pipeline.DisposableHttpPipeline Build(Azure.Core.ClientOptions options, Azure.Core.Pipeline.HttpPipelinePolicy[] perCallPolicies, Azure.Core.Pipeline.HttpPipelinePolicy[] perRetryPolicies, Azure.Core.Pipeline.HttpPipelineTransportOptions transportOptions, Azure.Core.ResponseClassifier responseClassifier) => throw null; - public static Azure.Core.Pipeline.HttpPipeline Build(Azure.Core.Pipeline.HttpPipelineOptions options) => throw null; - public static Azure.Core.Pipeline.DisposableHttpPipeline Build(Azure.Core.Pipeline.HttpPipelineOptions options, Azure.Core.Pipeline.HttpPipelineTransportOptions transportOptions) => throw null; - } - public class HttpPipelineOptions - { - public Azure.Core.ClientOptions ClientOptions { get => throw null; } - public HttpPipelineOptions(Azure.Core.ClientOptions options) => throw null; - public System.Collections.Generic.IList PerCallPolicies { get => throw null; } - public System.Collections.Generic.IList PerRetryPolicies { get => throw null; } - public Azure.Core.RequestFailedDetailsParser RequestFailedDetailsParser { get => throw null; set { } } - public Azure.Core.ResponseClassifier ResponseClassifier { get => throw null; set { } } - } - public abstract class HttpPipelinePolicy - { - protected HttpPipelinePolicy() => throw null; - public abstract void Process(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline); - public abstract System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline); - protected static void ProcessNext(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - protected static System.Threading.Tasks.ValueTask ProcessNextAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - } - public abstract class HttpPipelineSynchronousPolicy : Azure.Core.Pipeline.HttpPipelinePolicy - { - protected HttpPipelineSynchronousPolicy() => throw null; - public virtual void OnReceivedResponse(Azure.Core.HttpMessage message) => throw null; - public virtual void OnSendingRequest(Azure.Core.HttpMessage message) => throw null; - public override void Process(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - public override System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - } - public abstract class HttpPipelineTransport - { - public abstract Azure.Core.Request CreateRequest(); - protected HttpPipelineTransport() => throw null; - public abstract void Process(Azure.Core.HttpMessage message); - public abstract System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message); - } - public class HttpPipelineTransportOptions - { - public System.Collections.Generic.IList ClientCertificates { get => throw null; } - public HttpPipelineTransportOptions() => throw null; - public bool IsClientRedirectEnabled { get => throw null; set { } } - public System.Func ServerCertificateCustomValidationCallback { get => throw null; set { } } - } - public sealed class RedirectPolicy : Azure.Core.Pipeline.HttpPipelinePolicy - { - public override void Process(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - public override System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - public static void SetAllowAutoRedirect(Azure.Core.HttpMessage message, bool allowAutoRedirect) => throw null; - } - public class RetryPolicy : Azure.Core.Pipeline.HttpPipelinePolicy - { - public RetryPolicy(int maxRetries = default(int), Azure.Core.DelayStrategy delayStrategy = default(Azure.Core.DelayStrategy)) => throw null; - protected virtual void OnRequestSent(Azure.Core.HttpMessage message) => throw null; - protected virtual System.Threading.Tasks.ValueTask OnRequestSentAsync(Azure.Core.HttpMessage message) => throw null; - protected virtual void OnSendingRequest(Azure.Core.HttpMessage message) => throw null; - protected virtual System.Threading.Tasks.ValueTask OnSendingRequestAsync(Azure.Core.HttpMessage message) => throw null; - public override void Process(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - public override System.Threading.Tasks.ValueTask ProcessAsync(Azure.Core.HttpMessage message, System.ReadOnlyMemory pipeline) => throw null; - protected virtual bool ShouldRetry(Azure.Core.HttpMessage message, System.Exception exception) => throw null; - protected virtual System.Threading.Tasks.ValueTask ShouldRetryAsync(Azure.Core.HttpMessage message, System.Exception exception) => throw null; - } - public class ServerCertificateCustomValidationArgs - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public System.Security.Cryptography.X509Certificates.X509Chain CertificateAuthorityChain { get => throw null; } - public ServerCertificateCustomValidationArgs(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Security.Cryptography.X509Certificates.X509Chain certificateAuthorityChain, System.Net.Security.SslPolicyErrors sslPolicyErrors) => throw null; - public System.Net.Security.SslPolicyErrors SslPolicyErrors { get => throw null; } - } - } - public struct RehydrationToken : System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IJsonModel, System.ClientModel.Primitives.IPersistableModel, System.ClientModel.Primitives.IPersistableModel - { - Azure.Core.RehydrationToken System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - Azure.Core.RehydrationToken System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - object System.ClientModel.Primitives.IPersistableModel.Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - object System.ClientModel.Primitives.IJsonModel.Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - string System.ClientModel.Primitives.IPersistableModel.GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - public string Id { get => throw null; } - void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - System.BinaryData System.ClientModel.Primitives.IPersistableModel.Write(System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - void System.ClientModel.Primitives.IJsonModel.Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options) => throw null; - } - public abstract class Request : System.IDisposable - { - protected abstract void AddHeader(string name, string value); - public abstract string ClientRequestId { get; set; } - protected abstract bool ContainsHeader(string name); - public virtual Azure.Core.RequestContent Content { get => throw null; set { } } - protected Request() => throw null; - public abstract void Dispose(); - protected abstract System.Collections.Generic.IEnumerable EnumerateHeaders(); - public Azure.Core.RequestHeaders Headers { get => throw null; } - public virtual Azure.Core.RequestMethod Method { get => throw null; set { } } - protected abstract bool RemoveHeader(string name); - protected virtual void SetHeader(string name, string value) => throw null; - protected abstract bool TryGetHeader(string name, out string value); - protected abstract bool TryGetHeaderValues(string name, out System.Collections.Generic.IEnumerable values); - public virtual Azure.Core.RequestUriBuilder Uri { get => throw null; set { } } - } - public abstract class RequestContent : System.IDisposable - { - public static Azure.Core.RequestContent Create(System.IO.Stream stream) => throw null; - public static Azure.Core.RequestContent Create(byte[] bytes) => throw null; - public static Azure.Core.RequestContent Create(byte[] bytes, int index, int length) => throw null; - public static Azure.Core.RequestContent Create(System.ReadOnlyMemory bytes) => throw null; - public static Azure.Core.RequestContent Create(System.Buffers.ReadOnlySequence bytes) => throw null; - public static Azure.Core.RequestContent Create(string content) => throw null; - public static Azure.Core.RequestContent Create(System.BinaryData content) => throw null; - public static Azure.Core.RequestContent Create(Azure.Core.Serialization.DynamicData content) => throw null; - public static Azure.Core.RequestContent Create(object serializable) => throw null; - public static Azure.Core.RequestContent Create(object serializable, Azure.Core.Serialization.ObjectSerializer serializer) => throw null; - public static Azure.Core.RequestContent Create(object serializable, Azure.Core.Serialization.JsonPropertyNames propertyNameFormat, string dateTimeFormat = default(string)) => throw null; - protected RequestContent() => throw null; - public abstract void Dispose(); - public static implicit operator Azure.Core.RequestContent(string content) => throw null; - public static implicit operator Azure.Core.RequestContent(System.BinaryData content) => throw null; - public static implicit operator Azure.Core.RequestContent(Azure.Core.Serialization.DynamicData content) => throw null; - public abstract bool TryComputeLength(out long length); - public abstract void WriteTo(System.IO.Stream stream, System.Threading.CancellationToken cancellation); - public abstract System.Threading.Tasks.Task WriteToAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellation); - } - public abstract class RequestFailedDetailsParser - { - protected RequestFailedDetailsParser() => throw null; - public abstract bool TryParse(Azure.Response response, out Azure.ResponseError error, out System.Collections.Generic.IDictionary data); - } - public struct RequestHeaders : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable - { - public void Add(Azure.Core.HttpHeader header) => throw null; - public void Add(string name, string value) => throw null; - public bool Contains(string name) => throw null; - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public bool Remove(string name) => throw null; - public void SetValue(string name, string value) => throw null; - public bool TryGetValue(string name, out string value) => throw null; - public bool TryGetValues(string name, out System.Collections.Generic.IEnumerable values) => throw null; - } - public struct RequestMethod : System.IEquatable - { - public RequestMethod(string method) => throw null; - public static Azure.Core.RequestMethod Delete { get => throw null; } - public bool Equals(Azure.Core.RequestMethod other) => throw null; - public override bool Equals(object obj) => throw null; - public static Azure.Core.RequestMethod Get { get => throw null; } - public override int GetHashCode() => throw null; - public static Azure.Core.RequestMethod Head { get => throw null; } - public string Method { get => throw null; } - public static bool operator ==(Azure.Core.RequestMethod left, Azure.Core.RequestMethod right) => throw null; - public static bool operator !=(Azure.Core.RequestMethod left, Azure.Core.RequestMethod right) => throw null; - public static Azure.Core.RequestMethod Options { get => throw null; } - public static Azure.Core.RequestMethod Parse(string method) => throw null; - public static Azure.Core.RequestMethod Patch { get => throw null; } - public static Azure.Core.RequestMethod Post { get => throw null; } - public static Azure.Core.RequestMethod Put { get => throw null; } - public override string ToString() => throw null; - public static Azure.Core.RequestMethod Trace { get => throw null; } - } - public class RequestUriBuilder - { - public void AppendPath(string value) => throw null; - public void AppendPath(string value, bool escape) => throw null; - public void AppendPath(System.ReadOnlySpan value, bool escape) => throw null; - public void AppendQuery(string name, string value) => throw null; - public void AppendQuery(string name, string value, bool escapeValue) => throw null; - public void AppendQuery(System.ReadOnlySpan name, System.ReadOnlySpan value, bool escapeValue) => throw null; - public RequestUriBuilder() => throw null; - protected bool HasPath { get => throw null; } - protected bool HasQuery { get => throw null; } - public string Host { get => throw null; set { } } - public string Path { get => throw null; set { } } - public string PathAndQuery { get => throw null; } - public int Port { get => throw null; set { } } - public string Query { get => throw null; set { } } - public void Reset(System.Uri value) => throw null; - public string Scheme { get => throw null; set { } } - public override string ToString() => throw null; - public System.Uri ToUri() => throw null; - } - public sealed class ResourceIdentifier : System.IComparable, System.IEquatable - { - public Azure.Core.ResourceIdentifier AppendChildResource(string childResourceType, string childResourceName) => throw null; - public Azure.Core.ResourceIdentifier AppendProviderResource(string providerNamespace, string resourceType, string resourceName) => throw null; - public int CompareTo(Azure.Core.ResourceIdentifier other) => throw null; - public ResourceIdentifier(string resourceId) => throw null; - public bool Equals(Azure.Core.ResourceIdentifier other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public Azure.Core.AzureLocation? Location { get => throw null; } - public string Name { get => throw null; } - public static bool operator ==(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public static bool operator >(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public static bool operator >=(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public static implicit operator string(Azure.Core.ResourceIdentifier id) => throw null; - public static bool operator !=(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public static bool operator <(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public static bool operator <=(Azure.Core.ResourceIdentifier left, Azure.Core.ResourceIdentifier right) => throw null; - public Azure.Core.ResourceIdentifier Parent { get => throw null; } - public static Azure.Core.ResourceIdentifier Parse(string input) => throw null; - public string Provider { get => throw null; } - public string ResourceGroupName { get => throw null; } - public Azure.Core.ResourceType ResourceType { get => throw null; } - public static readonly Azure.Core.ResourceIdentifier Root; - public string SubscriptionId { get => throw null; } - public override string ToString() => throw null; - public static bool TryParse(string input, out Azure.Core.ResourceIdentifier result) => throw null; - } - public struct ResourceType : System.IEquatable - { - public ResourceType(string resourceType) => throw null; - public bool Equals(Azure.Core.ResourceType other) => throw null; - public override bool Equals(object other) => throw null; - public override int GetHashCode() => throw null; - public string GetLastType() => throw null; - public string Namespace { get => throw null; } - public static bool operator ==(Azure.Core.ResourceType left, Azure.Core.ResourceType right) => throw null; - public static implicit operator Azure.Core.ResourceType(string resourceType) => throw null; - public static implicit operator string(Azure.Core.ResourceType resourceType) => throw null; - public static bool operator !=(Azure.Core.ResourceType left, Azure.Core.ResourceType right) => throw null; - public override string ToString() => throw null; - public string Type { get => throw null; } - } - public abstract class ResponseClassificationHandler - { - protected ResponseClassificationHandler() => throw null; - public abstract bool TryClassify(Azure.Core.HttpMessage message, out bool isError); - } - public class ResponseClassifier - { - public ResponseClassifier() => throw null; - public virtual bool IsErrorResponse(Azure.Core.HttpMessage message) => throw null; - public virtual bool IsRetriable(Azure.Core.HttpMessage message, System.Exception exception) => throw null; - public virtual bool IsRetriableException(System.Exception exception) => throw null; - public virtual bool IsRetriableResponse(Azure.Core.HttpMessage message) => throw null; - } - public struct ResponseHeaders : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable - { - public bool Contains(string name) => throw null; - public int? ContentLength { get => throw null; } - public long? ContentLengthLong { get => throw null; } - public string ContentType { get => throw null; } - public System.DateTimeOffset? Date { get => throw null; } - public Azure.ETag? ETag { get => throw null; } - public System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public string RequestId { get => throw null; } - public bool TryGetValue(string name, out string value) => throw null; - public bool TryGetValues(string name, out System.Collections.Generic.IEnumerable values) => throw null; - } - public enum RetryMode - { - Fixed = 0, - Exponential = 1, - } - public class RetryOptions - { - public System.TimeSpan Delay { get => throw null; set { } } - public System.TimeSpan MaxDelay { get => throw null; set { } } - public int MaxRetries { get => throw null; set { } } - public Azure.Core.RetryMode Mode { get => throw null; set { } } - public System.TimeSpan NetworkTimeout { get => throw null; set { } } - } - namespace Serialization - { - public sealed class DynamicData : System.IDisposable, System.Dynamic.IDynamicMetaObjectProvider - { - public void Dispose() => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - System.Dynamic.DynamicMetaObject System.Dynamic.IDynamicMetaObjectProvider.GetMetaObject(System.Linq.Expressions.Expression parameter) => throw null; - public static bool operator ==(Azure.Core.Serialization.DynamicData left, object right) => throw null; - public static explicit operator System.DateTime(Azure.Core.Serialization.DynamicData value) => throw null; - public static explicit operator System.DateTimeOffset(Azure.Core.Serialization.DynamicData value) => throw null; - public static explicit operator System.Guid(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator bool(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator string(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator byte(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator sbyte(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator short(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator ushort(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator int(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator uint(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator long(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator ulong(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator float(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator double(Azure.Core.Serialization.DynamicData value) => throw null; - public static implicit operator decimal(Azure.Core.Serialization.DynamicData value) => throw null; - public static bool operator !=(Azure.Core.Serialization.DynamicData left, object right) => throw null; - public override string ToString() => throw null; - } - public interface IMemberNameConverter - { - string ConvertMemberName(System.Reflection.MemberInfo member); - } - public class JsonObjectSerializer : Azure.Core.Serialization.ObjectSerializer, Azure.Core.Serialization.IMemberNameConverter - { - string Azure.Core.Serialization.IMemberNameConverter.ConvertMemberName(System.Reflection.MemberInfo member) => throw null; - public JsonObjectSerializer() => throw null; - public JsonObjectSerializer(System.Text.Json.JsonSerializerOptions options) => throw null; - public static Azure.Core.Serialization.JsonObjectSerializer Default { get => throw null; } - public override object Deserialize(System.IO.Stream stream, System.Type returnType, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask DeserializeAsync(System.IO.Stream stream, System.Type returnType, System.Threading.CancellationToken cancellationToken) => throw null; - public override void Serialize(System.IO.Stream stream, object value, System.Type inputType, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.BinaryData Serialize(object value, System.Type inputType = default(System.Type), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask SerializeAsync(System.IO.Stream stream, object value, System.Type inputType, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask SerializeAsync(object value, System.Type inputType = default(System.Type), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public enum JsonPropertyNames - { - UseExact = 0, - CamelCase = 1, - } - public abstract class ObjectSerializer - { - protected ObjectSerializer() => throw null; - public abstract object Deserialize(System.IO.Stream stream, System.Type returnType, System.Threading.CancellationToken cancellationToken); - public abstract System.Threading.Tasks.ValueTask DeserializeAsync(System.IO.Stream stream, System.Type returnType, System.Threading.CancellationToken cancellationToken); - public abstract void Serialize(System.IO.Stream stream, object value, System.Type inputType, System.Threading.CancellationToken cancellationToken); - public virtual System.BinaryData Serialize(object value, System.Type inputType = default(System.Type), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public abstract System.Threading.Tasks.ValueTask SerializeAsync(System.IO.Stream stream, object value, System.Type inputType, System.Threading.CancellationToken cancellationToken); - public virtual System.Threading.Tasks.ValueTask SerializeAsync(object value, System.Type inputType = default(System.Type), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - } - public class StatusCodeClassifier : Azure.Core.ResponseClassifier - { - public StatusCodeClassifier(System.ReadOnlySpan successStatusCodes) => throw null; - public override bool IsErrorResponse(Azure.Core.HttpMessage message) => throw null; - } - public delegate System.Threading.Tasks.Task SyncAsyncEventHandler(T e) where T : Azure.SyncAsyncEventArgs; - public class TelemetryDetails - { - public string ApplicationId { get => throw null; } - public void Apply(Azure.Core.HttpMessage message) => throw null; - public System.Reflection.Assembly Assembly { get => throw null; } - public TelemetryDetails(System.Reflection.Assembly assembly, string applicationId = default(string)) => throw null; - public override string ToString() => throw null; - } - public abstract class TokenCredential - { - protected TokenCredential() => throw null; - public abstract Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken); - public abstract System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken); - } - public struct TokenRequestContext - { - public string Claims { get => throw null; } - public TokenRequestContext(string[] scopes, string parentRequestId) => throw null; - public TokenRequestContext(string[] scopes, string parentRequestId, string claims) => throw null; - public TokenRequestContext(string[] scopes, string parentRequestId, string claims, string tenantId) => throw null; - public TokenRequestContext(string[] scopes, string parentRequestId = default(string), string claims = default(string), string tenantId = default(string), bool isCaeEnabled = default(bool)) => throw null; - public bool IsCaeEnabled { get => throw null; } - public string ParentRequestId { get => throw null; } - public string[] Scopes { get => throw null; } - public string TenantId { get => throw null; } - } - } - [System.Flags] - public enum ErrorOptions - { - Default = 0, - NoThrow = 1, - } - public struct ETag : System.IEquatable - { - public static readonly Azure.ETag All; - public ETag(string etag) => throw null; - public bool Equals(Azure.ETag other) => throw null; - public bool Equals(string other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public static bool operator ==(Azure.ETag left, Azure.ETag right) => throw null; - public static bool operator !=(Azure.ETag left, Azure.ETag right) => throw null; - public override string ToString() => throw null; - public string ToString(string format) => throw null; - } - public class HttpAuthorization - { - public HttpAuthorization(string scheme, string parameter) => throw null; - public string Parameter { get => throw null; } - public string Scheme { get => throw null; } - public override string ToString() => throw null; - } - public struct HttpRange : System.IEquatable - { - public HttpRange(long offset = default(long), long? length = default(long?)) => throw null; - public bool Equals(Azure.HttpRange other) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public long? Length { get => throw null; } - public long Offset { get => throw null; } - public static bool operator ==(Azure.HttpRange left, Azure.HttpRange right) => throw null; - public static bool operator !=(Azure.HttpRange left, Azure.HttpRange right) => throw null; - public override string ToString() => throw null; - } - public class JsonPatchDocument - { - public void AppendAdd(string path, T value) => throw null; - public void AppendAddRaw(string path, string rawJsonValue) => throw null; - public void AppendCopy(string from, string path) => throw null; - public void AppendMove(string from, string path) => throw null; - public void AppendRemove(string path) => throw null; - public void AppendReplace(string path, T value) => throw null; - public void AppendReplaceRaw(string path, string rawJsonValue) => throw null; - public void AppendTest(string path, T value) => throw null; - public void AppendTestRaw(string path, string rawJsonValue) => throw null; - public JsonPatchDocument() => throw null; - public JsonPatchDocument(Azure.Core.Serialization.ObjectSerializer serializer) => throw null; - public JsonPatchDocument(System.ReadOnlyMemory rawDocument) => throw null; - public JsonPatchDocument(System.ReadOnlyMemory rawDocument, Azure.Core.Serialization.ObjectSerializer serializer) => throw null; - public System.ReadOnlyMemory ToBytes() => throw null; - public override string ToString() => throw null; - } - public class MatchConditions - { - public MatchConditions() => throw null; - public Azure.ETag? IfMatch { get => throw null; set { } } - public Azure.ETag? IfNoneMatch { get => throw null; set { } } - } - namespace Messaging - { - public class CloudEvent - { - public CloudEvent(string source, string type, object jsonSerializableData, System.Type dataSerializationType = default(System.Type)) => throw null; - public CloudEvent(string source, string type, System.BinaryData data, string dataContentType, Azure.Messaging.CloudEventDataFormat dataFormat = default(Azure.Messaging.CloudEventDataFormat)) => throw null; - public System.BinaryData Data { get => throw null; set { } } - public string DataContentType { get => throw null; set { } } - public string DataSchema { get => throw null; set { } } - public System.Collections.Generic.IDictionary ExtensionAttributes { get => throw null; } - public string Id { get => throw null; set { } } - public static Azure.Messaging.CloudEvent Parse(System.BinaryData json, bool skipValidation = default(bool)) => throw null; - public static Azure.Messaging.CloudEvent[] ParseMany(System.BinaryData json, bool skipValidation = default(bool)) => throw null; - public string Source { get => throw null; set { } } - public string Subject { get => throw null; set { } } - public System.DateTimeOffset? Time { get => throw null; set { } } - public string Type { get => throw null; set { } } - } - public enum CloudEventDataFormat - { - Binary = 0, - Json = 1, - } - public class MessageContent - { - public virtual Azure.Core.ContentType? ContentType { get => throw null; set { } } - protected virtual Azure.Core.ContentType? ContentTypeCore { get => throw null; set { } } - public MessageContent() => throw null; - public virtual System.BinaryData Data { get => throw null; set { } } - public virtual bool IsReadOnly { get => throw null; } - } - } - public abstract class NullableResponse - { - protected NullableResponse() => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public abstract Azure.Response GetRawResponse(); - public abstract bool HasValue { get; } - public override string ToString() => throw null; - public abstract T Value { get; } - } - public abstract class Operation - { - protected Operation() => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public abstract Azure.Response GetRawResponse(); - public virtual Azure.Core.RehydrationToken? GetRehydrationToken() => throw null; - public abstract bool HasCompleted { get; } - public abstract string Id { get; } - public override string ToString() => throw null; - public abstract Azure.Response UpdateStatus(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public abstract System.Threading.Tasks.ValueTask UpdateStatusAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public virtual Azure.Response WaitForCompletionResponse(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Response WaitForCompletionResponse(System.TimeSpan pollingInterval, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Response WaitForCompletionResponse(Azure.Core.DelayStrategy delayStrategy, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.ValueTask WaitForCompletionResponseAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.ValueTask WaitForCompletionResponseAsync(System.TimeSpan pollingInterval, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.ValueTask WaitForCompletionResponseAsync(Azure.Core.DelayStrategy delayStrategy, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public abstract class Operation : Azure.Operation - { - protected Operation() => throw null; - public abstract bool HasValue { get; } - public abstract T Value { get; } - public virtual Azure.Response WaitForCompletion(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Response WaitForCompletion(System.TimeSpan pollingInterval, System.Threading.CancellationToken cancellationToken) => throw null; - public virtual Azure.Response WaitForCompletion(Azure.Core.DelayStrategy delayStrategy, System.Threading.CancellationToken cancellationToken) => throw null; - public virtual System.Threading.Tasks.ValueTask> WaitForCompletionAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.ValueTask> WaitForCompletionAsync(System.TimeSpan pollingInterval, System.Threading.CancellationToken cancellationToken) => throw null; - public virtual System.Threading.Tasks.ValueTask> WaitForCompletionAsync(Azure.Core.DelayStrategy delayStrategy, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask WaitForCompletionResponseAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask WaitForCompletionResponseAsync(System.TimeSpan pollingInterval, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public abstract class Page - { - public abstract string ContinuationToken { get; } - protected Page() => throw null; - public override bool Equals(object obj) => throw null; - public static Azure.Page FromValues(System.Collections.Generic.IReadOnlyList values, string continuationToken, Azure.Response response) => throw null; - public override int GetHashCode() => throw null; - public abstract Azure.Response GetRawResponse(); - public override string ToString() => throw null; - public abstract System.Collections.Generic.IReadOnlyList Values { get; } - } - public abstract class Pageable : System.Collections.Generic.IEnumerable, System.Collections.IEnumerable - { - public abstract System.Collections.Generic.IEnumerable> AsPages(string continuationToken = default(string), int? pageSizeHint = default(int?)); - protected virtual System.Threading.CancellationToken CancellationToken { get => throw null; } - protected Pageable() => throw null; - protected Pageable(System.Threading.CancellationToken cancellationToken) => throw null; - public override bool Equals(object obj) => throw null; - public static Azure.Pageable FromPages(System.Collections.Generic.IEnumerable> pages) => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public virtual System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - public override int GetHashCode() => throw null; - public override string ToString() => throw null; - } - public abstract class PageableOperation : Azure.Operation> - { - protected PageableOperation() => throw null; - public abstract Azure.Pageable GetValues(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public abstract Azure.AsyncPageable GetValuesAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public override Azure.AsyncPageable Value { get => throw null; } - } - public class RequestConditions : Azure.MatchConditions - { - public RequestConditions() => throw null; - public System.DateTimeOffset? IfModifiedSince { get => throw null; set { } } - public System.DateTimeOffset? IfUnmodifiedSince { get => throw null; set { } } - } - public class RequestContext - { - public void AddClassifier(int statusCode, bool isError) => throw null; - public void AddClassifier(Azure.Core.ResponseClassificationHandler classifier) => throw null; - public void AddPolicy(Azure.Core.Pipeline.HttpPipelinePolicy policy, Azure.Core.HttpPipelinePosition position) => throw null; - public System.Threading.CancellationToken CancellationToken { get => throw null; set { } } - public RequestContext() => throw null; - public Azure.ErrorOptions ErrorOptions { get => throw null; set { } } - public static implicit operator Azure.RequestContext(Azure.ErrorOptions options) => throw null; - } - public class RequestFailedException : System.Exception, System.Runtime.Serialization.ISerializable - { - public RequestFailedException(string message) => throw null; - public RequestFailedException(string message, System.Exception innerException) => throw null; - public RequestFailedException(int status, string message) => throw null; - public RequestFailedException(int status, string message, System.Exception innerException) => throw null; - public RequestFailedException(int status, string message, string errorCode, System.Exception innerException) => throw null; - public RequestFailedException(Azure.Response response) => throw null; - public RequestFailedException(Azure.Response response, System.Exception innerException) => throw null; - public RequestFailedException(Azure.Response response, System.Exception innerException, Azure.Core.RequestFailedDetailsParser detailsParser) => throw null; - protected RequestFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public string ErrorCode { get => throw null; } - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public Azure.Response GetRawResponse() => throw null; - public int Status { get => throw null; } - } - public abstract class Response : System.IDisposable - { - public abstract string ClientRequestId { get; set; } - protected abstract bool ContainsHeader(string name); - public virtual System.BinaryData Content { get => throw null; } - public abstract System.IO.Stream ContentStream { get; set; } - protected Response() => throw null; - public abstract void Dispose(); - protected abstract System.Collections.Generic.IEnumerable EnumerateHeaders(); - public static Azure.Response FromValue(T value, Azure.Response response) => throw null; - public virtual Azure.Core.ResponseHeaders Headers { get => throw null; } - public virtual bool IsError { get => throw null; set { } } - public abstract string ReasonPhrase { get; } - public abstract int Status { get; } - public override string ToString() => throw null; - protected abstract bool TryGetHeader(string name, out string value); - protected abstract bool TryGetHeaderValues(string name, out System.Collections.Generic.IEnumerable values); - } - public abstract class Response : Azure.NullableResponse - { - protected Response() => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public override bool HasValue { get => throw null; } - public static implicit operator T(Azure.Response response) => throw null; - public override T Value { get => throw null; } - } - public sealed class ResponseError - { - public string Code { get => throw null; } - public ResponseError(string code, string message) => throw null; - public string Message { get => throw null; } - public override string ToString() => throw null; - } - public class SyncAsyncEventArgs : System.EventArgs - { - public System.Threading.CancellationToken CancellationToken { get => throw null; } - public SyncAsyncEventArgs(bool isRunningSynchronously, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public bool IsRunningSynchronously { get => throw null; } - } - public enum WaitUntil - { - Completed = 0, - Started = 1, - } -} diff --git a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj b/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj deleted file mode 100644 index a440919775d7..000000000000 --- a/csharp/ql/test/resources/stubs/Azure.Core/1.38.0/Azure.Core.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.cs b/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.cs deleted file mode 100644 index 253b97a6585a..000000000000 --- a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.cs +++ /dev/null @@ -1,431 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Azure.Identity, Version=1.11.4.0, Culture=neutral, PublicKeyToken=92742159e12e44c8`. -namespace Azure -{ - namespace Identity - { - public class AuthenticationFailedException : System.Exception - { - public AuthenticationFailedException(string message) => throw null; - public AuthenticationFailedException(string message, System.Exception innerException) => throw null; - protected AuthenticationFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class AuthenticationRecord - { - public string Authority { get => throw null; } - public string ClientId { get => throw null; } - public static Azure.Identity.AuthenticationRecord Deserialize(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task DeserializeAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public string HomeAccountId { get => throw null; } - public void Serialize(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public System.Threading.Tasks.Task SerializeAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public string TenantId { get => throw null; } - public string Username { get => throw null; } - } - public class AuthenticationRequiredException : Azure.Identity.CredentialUnavailableException - { - public AuthenticationRequiredException(string message, Azure.Core.TokenRequestContext context) : base(default(string)) => throw null; - public AuthenticationRequiredException(string message, Azure.Core.TokenRequestContext context, System.Exception innerException) : base(default(string)) => throw null; - protected AuthenticationRequiredException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(default(string)) => throw null; - public Azure.Core.TokenRequestContext TokenRequestContext { get => throw null; } - } - public class AuthorizationCodeCredential : Azure.Core.TokenCredential - { - protected AuthorizationCodeCredential() => throw null; - public AuthorizationCodeCredential(string tenantId, string clientId, string clientSecret, string authorizationCode) => throw null; - public AuthorizationCodeCredential(string tenantId, string clientId, string clientSecret, string authorizationCode, Azure.Identity.AuthorizationCodeCredentialOptions options) => throw null; - public AuthorizationCodeCredential(string tenantId, string clientId, string clientSecret, string authorizationCode, Azure.Identity.TokenCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class AuthorizationCodeCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public AuthorizationCodeCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public System.Uri RedirectUri { get => throw null; set { } } - } - public static class AzureAuthorityHosts - { - public static System.Uri AzureChina { get => throw null; } - public static System.Uri AzureGermany { get => throw null; } - public static System.Uri AzureGovernment { get => throw null; } - public static System.Uri AzurePublicCloud { get => throw null; } - } - public class AzureCliCredential : Azure.Core.TokenCredential - { - public AzureCliCredential() => throw null; - public AzureCliCredential(Azure.Identity.AzureCliCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class AzureCliCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public AzureCliCredentialOptions() => throw null; - public System.TimeSpan? ProcessTimeout { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - } - public class AzureDeveloperCliCredential : Azure.Core.TokenCredential - { - public AzureDeveloperCliCredential() => throw null; - public AzureDeveloperCliCredential(Azure.Identity.AzureDeveloperCliCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class AzureDeveloperCliCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public AzureDeveloperCliCredentialOptions() => throw null; - public System.TimeSpan? ProcessTimeout { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - } - public class AzurePowerShellCredential : Azure.Core.TokenCredential - { - public AzurePowerShellCredential() => throw null; - public AzurePowerShellCredential(Azure.Identity.AzurePowerShellCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class AzurePowerShellCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public AzurePowerShellCredentialOptions() => throw null; - public System.TimeSpan? ProcessTimeout { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - } - public class BrowserCustomizationOptions - { - public BrowserCustomizationOptions() => throw null; - public string ErrorMessage { get => throw null; set { } } - public string SuccessMessage { get => throw null; set { } } - public bool? UseEmbeddedWebView { get => throw null; set { } } - } - public class ChainedTokenCredential : Azure.Core.TokenCredential - { - public ChainedTokenCredential(params Azure.Core.TokenCredential[] sources) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class ClientAssertionCredential : Azure.Core.TokenCredential - { - protected ClientAssertionCredential() => throw null; - public ClientAssertionCredential(string tenantId, string clientId, System.Func> assertionCallback, Azure.Identity.ClientAssertionCredentialOptions options = default(Azure.Identity.ClientAssertionCredentialOptions)) => throw null; - public ClientAssertionCredential(string tenantId, string clientId, System.Func assertionCallback, Azure.Identity.ClientAssertionCredentialOptions options = default(Azure.Identity.ClientAssertionCredentialOptions)) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class ClientAssertionCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public ClientAssertionCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - } - public class ClientCertificateCredential : Azure.Core.TokenCredential - { - protected ClientCertificateCredential() => throw null; - public ClientCertificateCredential(string tenantId, string clientId, string clientCertificatePath) => throw null; - public ClientCertificateCredential(string tenantId, string clientId, string clientCertificatePath, Azure.Identity.TokenCredentialOptions options) => throw null; - public ClientCertificateCredential(string tenantId, string clientId, string clientCertificatePath, Azure.Identity.ClientCertificateCredentialOptions options) => throw null; - public ClientCertificateCredential(string tenantId, string clientId, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate) => throw null; - public ClientCertificateCredential(string tenantId, string clientId, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate, Azure.Identity.TokenCredentialOptions options) => throw null; - public ClientCertificateCredential(string tenantId, string clientId, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate, Azure.Identity.ClientCertificateCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class ClientCertificateCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public ClientCertificateCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public bool SendCertificateChain { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public class ClientSecretCredential : Azure.Core.TokenCredential - { - protected ClientSecretCredential() => throw null; - public ClientSecretCredential(string tenantId, string clientId, string clientSecret) => throw null; - public ClientSecretCredential(string tenantId, string clientId, string clientSecret, Azure.Identity.ClientSecretCredentialOptions options) => throw null; - public ClientSecretCredential(string tenantId, string clientId, string clientSecret, Azure.Identity.TokenCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class ClientSecretCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public ClientSecretCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public class CredentialUnavailableException : Azure.Identity.AuthenticationFailedException - { - public CredentialUnavailableException(string message) : base(default(string)) => throw null; - public CredentialUnavailableException(string message, System.Exception innerException) : base(default(string)) => throw null; - protected CredentialUnavailableException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(default(string)) => throw null; - } - public class DefaultAzureCredential : Azure.Core.TokenCredential - { - public DefaultAzureCredential(bool includeInteractiveCredentials = default(bool)) => throw null; - public DefaultAzureCredential(Azure.Identity.DefaultAzureCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class DefaultAzureCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public System.TimeSpan? CredentialProcessTimeout { get => throw null; set { } } - public DefaultAzureCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public bool ExcludeAzureCliCredential { get => throw null; set { } } - public bool ExcludeAzureDeveloperCliCredential { get => throw null; set { } } - public bool ExcludeAzurePowerShellCredential { get => throw null; set { } } - public bool ExcludeEnvironmentCredential { get => throw null; set { } } - public bool ExcludeInteractiveBrowserCredential { get => throw null; set { } } - public bool ExcludeManagedIdentityCredential { get => throw null; set { } } - public bool ExcludeSharedTokenCacheCredential { get => throw null; set { } } - public bool ExcludeVisualStudioCodeCredential { get => throw null; set { } } - public bool ExcludeVisualStudioCredential { get => throw null; set { } } - public bool ExcludeWorkloadIdentityCredential { get => throw null; set { } } - public string InteractiveBrowserCredentialClientId { get => throw null; set { } } - public string InteractiveBrowserTenantId { get => throw null; set { } } - public string ManagedIdentityClientId { get => throw null; set { } } - public Azure.Core.ResourceIdentifier ManagedIdentityResourceId { get => throw null; set { } } - public string SharedTokenCacheTenantId { get => throw null; set { } } - public string SharedTokenCacheUsername { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public string VisualStudioCodeTenantId { get => throw null; set { } } - public string VisualStudioTenantId { get => throw null; set { } } - public string WorkloadIdentityClientId { get => throw null; set { } } - } - public class DeviceCodeCredential : Azure.Core.TokenCredential - { - public virtual Azure.Identity.AuthenticationRecord Authenticate(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Identity.AuthenticationRecord Authenticate(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public DeviceCodeCredential() => throw null; - public DeviceCodeCredential(Azure.Identity.DeviceCodeCredentialOptions options) => throw null; - public DeviceCodeCredential(System.Func deviceCodeCallback, string clientId, Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public DeviceCodeCredential(System.Func deviceCodeCallback, string tenantId, string clientId, Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class DeviceCodeCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public Azure.Identity.AuthenticationRecord AuthenticationRecord { get => throw null; set { } } - public string ClientId { get => throw null; set { } } - public DeviceCodeCredentialOptions() => throw null; - public System.Func DeviceCodeCallback { get => throw null; set { } } - public bool DisableAutomaticAuthentication { get => throw null; set { } } - public bool DisableInstanceDiscovery { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public struct DeviceCodeInfo - { - public string ClientId { get => throw null; } - public string DeviceCode { get => throw null; } - public System.DateTimeOffset ExpiresOn { get => throw null; } - public string Message { get => throw null; } - public System.Collections.Generic.IReadOnlyCollection Scopes { get => throw null; } - public string UserCode { get => throw null; } - public System.Uri VerificationUri { get => throw null; } - } - public class EnvironmentCredential : Azure.Core.TokenCredential - { - public EnvironmentCredential() => throw null; - public EnvironmentCredential(Azure.Identity.TokenCredentialOptions options) => throw null; - public EnvironmentCredential(Azure.Identity.EnvironmentCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class EnvironmentCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public EnvironmentCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - } - public static class IdentityModelFactory - { - public static Azure.Identity.AuthenticationRecord AuthenticationRecord(string username, string authority, string homeAccountId, string tenantId, string clientId) => throw null; - public static Azure.Identity.DeviceCodeInfo DeviceCodeInfo(string userCode, string deviceCode, System.Uri verificationUri, System.DateTimeOffset expiresOn, string message, string clientId, System.Collections.Generic.IReadOnlyCollection scopes) => throw null; - } - public class InteractiveBrowserCredential : Azure.Core.TokenCredential - { - public virtual Azure.Identity.AuthenticationRecord Authenticate(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Identity.AuthenticationRecord Authenticate(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public InteractiveBrowserCredential() => throw null; - public InteractiveBrowserCredential(Azure.Identity.InteractiveBrowserCredentialOptions options) => throw null; - public InteractiveBrowserCredential(string clientId) => throw null; - public InteractiveBrowserCredential(string tenantId, string clientId, Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class InteractiveBrowserCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public Azure.Identity.AuthenticationRecord AuthenticationRecord { get => throw null; set { } } - public Azure.Identity.BrowserCustomizationOptions BrowserCustomization { get => throw null; set { } } - public string ClientId { get => throw null; set { } } - public InteractiveBrowserCredentialOptions() => throw null; - public bool DisableAutomaticAuthentication { get => throw null; set { } } - public bool DisableInstanceDiscovery { get => throw null; set { } } - public string LoginHint { get => throw null; set { } } - public System.Uri RedirectUri { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public class ManagedIdentityCredential : Azure.Core.TokenCredential - { - protected ManagedIdentityCredential() => throw null; - public ManagedIdentityCredential(string clientId = default(string), Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public ManagedIdentityCredential(Azure.Core.ResourceIdentifier resourceId, Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class OnBehalfOfCredential : Azure.Core.TokenCredential - { - protected OnBehalfOfCredential() => throw null; - public OnBehalfOfCredential(string tenantId, string clientId, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate, string userAssertion) => throw null; - public OnBehalfOfCredential(string tenantId, string clientId, System.Security.Cryptography.X509Certificates.X509Certificate2 clientCertificate, string userAssertion, Azure.Identity.OnBehalfOfCredentialOptions options) => throw null; - public OnBehalfOfCredential(string tenantId, string clientId, string clientSecret, string userAssertion) => throw null; - public OnBehalfOfCredential(string tenantId, string clientId, string clientSecret, string userAssertion, Azure.Identity.OnBehalfOfCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - } - public class OnBehalfOfCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public OnBehalfOfCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public bool SendCertificateChain { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public class SharedTokenCacheCredential : Azure.Core.TokenCredential - { - public SharedTokenCacheCredential() => throw null; - public SharedTokenCacheCredential(Azure.Identity.SharedTokenCacheCredentialOptions options) => throw null; - public SharedTokenCacheCredential(string username, Azure.Identity.TokenCredentialOptions options = default(Azure.Identity.TokenCredentialOptions)) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class SharedTokenCacheCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public Azure.Identity.AuthenticationRecord AuthenticationRecord { get => throw null; set { } } - public string ClientId { get => throw null; set { } } - public SharedTokenCacheCredentialOptions() => throw null; - public SharedTokenCacheCredentialOptions(Azure.Identity.TokenCachePersistenceOptions tokenCacheOptions) => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public bool EnableGuestTenantAuthentication { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - public string Username { get => throw null; set { } } - } - public struct TokenCacheData - { - public System.ReadOnlyMemory CacheBytes { get => throw null; } - public TokenCacheData(System.ReadOnlyMemory cacheBytes) => throw null; - } - public class TokenCachePersistenceOptions - { - public TokenCachePersistenceOptions() => throw null; - public string Name { get => throw null; set { } } - public bool UnsafeAllowUnencryptedStorage { get => throw null; set { } } - } - public class TokenCacheRefreshArgs - { - public bool IsCaeEnabled { get => throw null; } - public string SuggestedCacheKey { get => throw null; } - } - public class TokenCacheUpdatedArgs - { - public bool IsCaeEnabled { get => throw null; } - public System.ReadOnlyMemory UnsafeCacheData { get => throw null; } - } - public class TokenCredentialDiagnosticsOptions : Azure.Core.DiagnosticsOptions - { - public TokenCredentialDiagnosticsOptions() => throw null; - public bool IsAccountIdentifierLoggingEnabled { get => throw null; set { } } - } - public class TokenCredentialOptions : Azure.Core.ClientOptions - { - public System.Uri AuthorityHost { get => throw null; set { } } - public TokenCredentialOptions() => throw null; - public Azure.Identity.TokenCredentialDiagnosticsOptions Diagnostics { get => throw null; } - public bool IsUnsafeSupportLoggingEnabled { get => throw null; set { } } - } - public abstract class UnsafeTokenCacheOptions : Azure.Identity.TokenCachePersistenceOptions - { - protected UnsafeTokenCacheOptions() => throw null; - protected abstract System.Threading.Tasks.Task> RefreshCacheAsync(); - protected virtual System.Threading.Tasks.Task RefreshCacheAsync(Azure.Identity.TokenCacheRefreshArgs args, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - protected abstract System.Threading.Tasks.Task TokenCacheUpdatedAsync(Azure.Identity.TokenCacheUpdatedArgs tokenCacheUpdatedArgs); - } - public class UsernamePasswordCredential : Azure.Core.TokenCredential - { - public virtual Azure.Identity.AuthenticationRecord Authenticate(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual Azure.Identity.AuthenticationRecord Authenticate(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public virtual System.Threading.Tasks.Task AuthenticateAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - protected UsernamePasswordCredential() => throw null; - public UsernamePasswordCredential(string username, string password, string tenantId, string clientId) => throw null; - public UsernamePasswordCredential(string username, string password, string tenantId, string clientId, Azure.Identity.TokenCredentialOptions options) => throw null; - public UsernamePasswordCredential(string username, string password, string tenantId, string clientId, Azure.Identity.UsernamePasswordCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class UsernamePasswordCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public UsernamePasswordCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public Azure.Identity.TokenCachePersistenceOptions TokenCachePersistenceOptions { get => throw null; set { } } - } - public class VisualStudioCodeCredential : Azure.Core.TokenCredential - { - public VisualStudioCodeCredential() => throw null; - public VisualStudioCodeCredential(Azure.Identity.VisualStudioCodeCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - } - public class VisualStudioCodeCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public VisualStudioCodeCredentialOptions() => throw null; - public string TenantId { get => throw null; set { } } - } - public class VisualStudioCredential : Azure.Core.TokenCredential - { - public VisualStudioCredential() => throw null; - public VisualStudioCredential(Azure.Identity.VisualStudioCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) => throw null; - } - public class VisualStudioCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public VisualStudioCredentialOptions() => throw null; - public System.TimeSpan? ProcessTimeout { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - } - public class WorkloadIdentityCredential : Azure.Core.TokenCredential - { - public WorkloadIdentityCredential() => throw null; - public WorkloadIdentityCredential(Azure.Identity.WorkloadIdentityCredentialOptions options) => throw null; - public override Azure.Core.AccessToken GetToken(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override System.Threading.Tasks.ValueTask GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class WorkloadIdentityCredentialOptions : Azure.Identity.TokenCredentialOptions - { - public System.Collections.Generic.IList AdditionallyAllowedTenants { get => throw null; } - public string ClientId { get => throw null; set { } } - public WorkloadIdentityCredentialOptions() => throw null; - public bool DisableInstanceDiscovery { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public string TokenFilePath { get => throw null; set { } } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj b/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj deleted file mode 100644 index e16e446b3a1b..000000000000 --- a/csharp/ql/test/resources/stubs/Azure.Identity/1.11.4/Azure.Identity.csproj +++ /dev/null @@ -1,19 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj b/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Bcl.AsyncInterfaces/1.1.1/Microsoft.Bcl.AsyncInterfaces.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj b/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Bcl.Cryptography/9.0.4/Microsoft.Bcl.Cryptography.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient.SNI.runtime/6.0.2/Microsoft.Data.SqlClient.SNI.runtime.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.cs b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.cs deleted file mode 100644 index 754a0767f37f..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.cs +++ /dev/null @@ -1,1445 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.Data.SqlClient, Version=6.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5`. -namespace Microsoft -{ - namespace Data - { - public sealed class OperationAbortedException : System.SystemException - { - } - namespace Sql - { - public sealed class SqlDataSourceEnumerator : System.Data.Common.DbDataSourceEnumerator - { - public SqlDataSourceEnumerator() => throw null; - public override System.Data.DataTable GetDataSources() => throw null; - public static Microsoft.Data.Sql.SqlDataSourceEnumerator Instance { get => throw null; } - } - public sealed class SqlNotificationRequest - { - public SqlNotificationRequest() => throw null; - public SqlNotificationRequest(string userData, string options, int timeout) => throw null; - public string Options { get => throw null; set { } } - public int Timeout { get => throw null; set { } } - public string UserData { get => throw null; set { } } - } - } - namespace SqlClient - { - public sealed class ActiveDirectoryAuthenticationProvider : Microsoft.Data.SqlClient.SqlAuthenticationProvider - { - public override System.Threading.Tasks.Task AcquireTokenAsync(Microsoft.Data.SqlClient.SqlAuthenticationParameters parameters) => throw null; - public override void BeforeLoad(Microsoft.Data.SqlClient.SqlAuthenticationMethod authentication) => throw null; - public override void BeforeUnload(Microsoft.Data.SqlClient.SqlAuthenticationMethod authentication) => throw null; - public static void ClearUserTokenCache() => throw null; - public ActiveDirectoryAuthenticationProvider() => throw null; - public ActiveDirectoryAuthenticationProvider(string applicationClientId) => throw null; - public ActiveDirectoryAuthenticationProvider(System.Func deviceCodeFlowCallbackMethod, string applicationClientId = default(string)) => throw null; - public override bool IsSupported(Microsoft.Data.SqlClient.SqlAuthenticationMethod authentication) => throw null; - public void SetAcquireAuthorizationCodeAsyncCallback(System.Func> acquireAuthorizationCodeAsyncCallback) => throw null; - public void SetDeviceCodeFlowCallback(System.Func deviceCodeFlowCallbackMethod) => throw null; - } - public enum ApplicationIntent - { - ReadOnly = 1, - ReadWrite = 0, - } - namespace DataClassification - { - public class ColumnSensitivity - { - public ColumnSensitivity(System.Collections.Generic.IList sensitivityProperties) => throw null; - public System.Collections.ObjectModel.ReadOnlyCollection SensitivityProperties { get => throw null; } - } - public class InformationType - { - public InformationType(string name, string id) => throw null; - public string Id { get => throw null; } - public string Name { get => throw null; } - } - public class Label - { - public Label(string name, string id) => throw null; - public string Id { get => throw null; } - public string Name { get => throw null; } - } - public class SensitivityClassification - { - public System.Collections.ObjectModel.ReadOnlyCollection ColumnSensitivities { get => throw null; } - public SensitivityClassification(System.Collections.Generic.IList labels, System.Collections.Generic.IList informationTypes, System.Collections.Generic.IList columnSensitivity, Microsoft.Data.SqlClient.DataClassification.SensitivityRank sensitivityRank) => throw null; - public System.Collections.ObjectModel.ReadOnlyCollection InformationTypes { get => throw null; } - public System.Collections.ObjectModel.ReadOnlyCollection Labels { get => throw null; } - public Microsoft.Data.SqlClient.DataClassification.SensitivityRank SensitivityRank { get => throw null; } - } - public class SensitivityProperty - { - public SensitivityProperty(Microsoft.Data.SqlClient.DataClassification.Label label, Microsoft.Data.SqlClient.DataClassification.InformationType informationType, Microsoft.Data.SqlClient.DataClassification.SensitivityRank sensitivityRank) => throw null; - public Microsoft.Data.SqlClient.DataClassification.InformationType InformationType { get => throw null; } - public Microsoft.Data.SqlClient.DataClassification.Label Label { get => throw null; } - public Microsoft.Data.SqlClient.DataClassification.SensitivityRank SensitivityRank { get => throw null; } - } - public enum SensitivityRank - { - NOT_DEFINED = -1, - NONE = 0, - LOW = 10, - MEDIUM = 20, - HIGH = 30, - CRITICAL = 40, - } - } - namespace Diagnostics - { - public sealed class SqlClientCommandAfter : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlCommand Command { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientCommandAfter() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.IDictionary Statistics { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientCommandBefore : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlCommand Command { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientCommandBefore() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientCommandError : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlCommand Command { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientCommandError() => throw null; - public System.Exception Exception { get => throw null; } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientConnectionCloseAfter : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionCloseAfter() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.IDictionary Statistics { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientConnectionCloseBefore : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionCloseBefore() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.IDictionary Statistics { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientConnectionCloseError : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public System.Guid? ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionCloseError() => throw null; - public System.Exception Exception { get => throw null; } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.IDictionary Statistics { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientConnectionOpenAfter : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public string ClientVersion { get => throw null; } - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public System.Guid ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionOpenAfter() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.IDictionary Statistics { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientConnectionOpenBefore : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public string ClientVersion { get => throw null; } - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionOpenBefore() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientConnectionOpenError : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public string ClientVersion { get => throw null; } - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public System.Guid ConnectionId { get => throw null; } - public int Count { get => throw null; } - public SqlClientConnectionOpenError() => throw null; - public System.Exception Exception { get => throw null; } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - } - public sealed class SqlClientTransactionCommitAfter : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionCommitAfter() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientTransactionCommitBefore : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionCommitBefore() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientTransactionCommitError : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionCommitError() => throw null; - public System.Exception Exception { get => throw null; } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - } - public sealed class SqlClientTransactionRollbackAfter : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionRollbackAfter() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - public string TransactionName { get => throw null; } - } - public sealed class SqlClientTransactionRollbackBefore : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionRollbackBefore() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - public string TransactionName { get => throw null; } - } - public sealed class SqlClientTransactionRollbackError : System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable, System.Collections.Generic.IReadOnlyCollection>, System.Collections.Generic.IReadOnlyList> - { - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public int Count { get => throw null; } - public SqlClientTransactionRollbackError() => throw null; - public System.Exception Exception { get => throw null; } - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public System.Collections.Generic.IEnumerator> GetEnumerator() => throw null; - public System.Data.IsolationLevel IsolationLevel { get => throw null; } - public const string Name = default; - public string Operation { get => throw null; } - public System.Guid OperationId { get => throw null; } - public System.Collections.Generic.KeyValuePair this[int index] { get => throw null; } - public long Timestamp { get => throw null; } - public long? TransactionId { get => throw null; } - public string TransactionName { get => throw null; } - } - } - public delegate void OnChangeEventHandler(object sender, Microsoft.Data.SqlClient.SqlNotificationEventArgs e); - public enum PoolBlockingPeriod - { - Auto = 0, - AlwaysBlock = 1, - NeverBlock = 2, - } - namespace Server - { - public class SqlDataRecord : System.Data.IDataRecord - { - public SqlDataRecord(params Microsoft.Data.SqlClient.Server.SqlMetaData[] metaData) => throw null; - public virtual int FieldCount { get => throw null; } - public virtual bool GetBoolean(int ordinal) => throw null; - public virtual byte GetByte(int ordinal) => throw null; - public virtual long GetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) => throw null; - public virtual char GetChar(int ordinal) => throw null; - public virtual long GetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) => throw null; - System.Data.IDataReader System.Data.IDataRecord.GetData(int ordinal) => throw null; - public virtual string GetDataTypeName(int ordinal) => throw null; - public virtual System.DateTime GetDateTime(int ordinal) => throw null; - public virtual System.DateTimeOffset GetDateTimeOffset(int ordinal) => throw null; - public virtual decimal GetDecimal(int ordinal) => throw null; - public virtual double GetDouble(int ordinal) => throw null; - public virtual System.Type GetFieldType(int ordinal) => throw null; - public virtual float GetFloat(int ordinal) => throw null; - public virtual System.Guid GetGuid(int ordinal) => throw null; - public virtual short GetInt16(int ordinal) => throw null; - public virtual int GetInt32(int ordinal) => throw null; - public virtual long GetInt64(int ordinal) => throw null; - public virtual string GetName(int ordinal) => throw null; - public virtual int GetOrdinal(string name) => throw null; - public virtual System.Data.SqlTypes.SqlBinary GetSqlBinary(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlBoolean GetSqlBoolean(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlByte GetSqlByte(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlBytes GetSqlBytes(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlChars GetSqlChars(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlDateTime GetSqlDateTime(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlDecimal GetSqlDecimal(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlDouble GetSqlDouble(int ordinal) => throw null; - public virtual System.Type GetSqlFieldType(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlGuid GetSqlGuid(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlInt16 GetSqlInt16(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlInt32 GetSqlInt32(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlInt64 GetSqlInt64(int ordinal) => throw null; - public virtual Microsoft.Data.SqlClient.Server.SqlMetaData GetSqlMetaData(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlMoney GetSqlMoney(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlSingle GetSqlSingle(int ordinal) => throw null; - public virtual System.Data.SqlTypes.SqlString GetSqlString(int ordinal) => throw null; - public virtual object GetSqlValue(int ordinal) => throw null; - public virtual int GetSqlValues(object[] values) => throw null; - public virtual System.Data.SqlTypes.SqlXml GetSqlXml(int ordinal) => throw null; - public virtual string GetString(int ordinal) => throw null; - public virtual System.TimeSpan GetTimeSpan(int ordinal) => throw null; - public virtual object GetValue(int ordinal) => throw null; - public virtual int GetValues(object[] values) => throw null; - public virtual bool IsDBNull(int ordinal) => throw null; - public virtual void SetBoolean(int ordinal, bool value) => throw null; - public virtual void SetByte(int ordinal, byte value) => throw null; - public virtual void SetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) => throw null; - public virtual void SetChar(int ordinal, char value) => throw null; - public virtual void SetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) => throw null; - public virtual void SetDateTime(int ordinal, System.DateTime value) => throw null; - public virtual void SetDateTimeOffset(int ordinal, System.DateTimeOffset value) => throw null; - public virtual void SetDBNull(int ordinal) => throw null; - public virtual void SetDecimal(int ordinal, decimal value) => throw null; - public virtual void SetDouble(int ordinal, double value) => throw null; - public virtual void SetFloat(int ordinal, float value) => throw null; - public virtual void SetGuid(int ordinal, System.Guid value) => throw null; - public virtual void SetInt16(int ordinal, short value) => throw null; - public virtual void SetInt32(int ordinal, int value) => throw null; - public virtual void SetInt64(int ordinal, long value) => throw null; - public virtual void SetSqlBinary(int ordinal, System.Data.SqlTypes.SqlBinary value) => throw null; - public virtual void SetSqlBoolean(int ordinal, System.Data.SqlTypes.SqlBoolean value) => throw null; - public virtual void SetSqlByte(int ordinal, System.Data.SqlTypes.SqlByte value) => throw null; - public virtual void SetSqlBytes(int ordinal, System.Data.SqlTypes.SqlBytes value) => throw null; - public virtual void SetSqlChars(int ordinal, System.Data.SqlTypes.SqlChars value) => throw null; - public virtual void SetSqlDateTime(int ordinal, System.Data.SqlTypes.SqlDateTime value) => throw null; - public virtual void SetSqlDecimal(int ordinal, System.Data.SqlTypes.SqlDecimal value) => throw null; - public virtual void SetSqlDouble(int ordinal, System.Data.SqlTypes.SqlDouble value) => throw null; - public virtual void SetSqlGuid(int ordinal, System.Data.SqlTypes.SqlGuid value) => throw null; - public virtual void SetSqlInt16(int ordinal, System.Data.SqlTypes.SqlInt16 value) => throw null; - public virtual void SetSqlInt32(int ordinal, System.Data.SqlTypes.SqlInt32 value) => throw null; - public virtual void SetSqlInt64(int ordinal, System.Data.SqlTypes.SqlInt64 value) => throw null; - public virtual void SetSqlMoney(int ordinal, System.Data.SqlTypes.SqlMoney value) => throw null; - public virtual void SetSqlSingle(int ordinal, System.Data.SqlTypes.SqlSingle value) => throw null; - public virtual void SetSqlString(int ordinal, System.Data.SqlTypes.SqlString value) => throw null; - public virtual void SetSqlXml(int ordinal, System.Data.SqlTypes.SqlXml value) => throw null; - public virtual void SetString(int ordinal, string value) => throw null; - public virtual void SetTimeSpan(int ordinal, System.TimeSpan value) => throw null; - public virtual void SetValue(int ordinal, object value) => throw null; - public virtual int SetValues(params object[] values) => throw null; - public virtual object this[int ordinal] { get => throw null; } - public virtual object this[string name] { get => throw null; } - } - public sealed class SqlMetaData - { - public bool Adjust(bool value) => throw null; - public byte Adjust(byte value) => throw null; - public byte[] Adjust(byte[] value) => throw null; - public char Adjust(char value) => throw null; - public char[] Adjust(char[] value) => throw null; - public System.Data.SqlTypes.SqlBinary Adjust(System.Data.SqlTypes.SqlBinary value) => throw null; - public System.Data.SqlTypes.SqlBoolean Adjust(System.Data.SqlTypes.SqlBoolean value) => throw null; - public System.Data.SqlTypes.SqlByte Adjust(System.Data.SqlTypes.SqlByte value) => throw null; - public System.Data.SqlTypes.SqlBytes Adjust(System.Data.SqlTypes.SqlBytes value) => throw null; - public System.Data.SqlTypes.SqlChars Adjust(System.Data.SqlTypes.SqlChars value) => throw null; - public System.Data.SqlTypes.SqlDateTime Adjust(System.Data.SqlTypes.SqlDateTime value) => throw null; - public System.Data.SqlTypes.SqlDecimal Adjust(System.Data.SqlTypes.SqlDecimal value) => throw null; - public System.Data.SqlTypes.SqlDouble Adjust(System.Data.SqlTypes.SqlDouble value) => throw null; - public System.Data.SqlTypes.SqlGuid Adjust(System.Data.SqlTypes.SqlGuid value) => throw null; - public System.Data.SqlTypes.SqlInt16 Adjust(System.Data.SqlTypes.SqlInt16 value) => throw null; - public System.Data.SqlTypes.SqlInt32 Adjust(System.Data.SqlTypes.SqlInt32 value) => throw null; - public System.Data.SqlTypes.SqlInt64 Adjust(System.Data.SqlTypes.SqlInt64 value) => throw null; - public System.Data.SqlTypes.SqlMoney Adjust(System.Data.SqlTypes.SqlMoney value) => throw null; - public System.Data.SqlTypes.SqlSingle Adjust(System.Data.SqlTypes.SqlSingle value) => throw null; - public System.Data.SqlTypes.SqlString Adjust(System.Data.SqlTypes.SqlString value) => throw null; - public System.Data.SqlTypes.SqlXml Adjust(System.Data.SqlTypes.SqlXml value) => throw null; - public System.DateTime Adjust(System.DateTime value) => throw null; - public System.DateTimeOffset Adjust(System.DateTimeOffset value) => throw null; - public decimal Adjust(decimal value) => throw null; - public double Adjust(double value) => throw null; - public System.Guid Adjust(System.Guid value) => throw null; - public short Adjust(short value) => throw null; - public int Adjust(int value) => throw null; - public long Adjust(long value) => throw null; - public object Adjust(object value) => throw null; - public float Adjust(float value) => throw null; - public string Adjust(string value) => throw null; - public System.TimeSpan Adjust(System.TimeSpan value) => throw null; - public System.Data.SqlTypes.SqlCompareOptions CompareOptions { get => throw null; } - public SqlMetaData(string name, System.Data.SqlDbType dbType) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, byte precision, byte scale) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, byte precision, byte scale, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, byte precision, byte scale, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions, System.Type userDefinedType) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, byte precision, byte scale, long localeId, System.Data.SqlTypes.SqlCompareOptions compareOptions, System.Type userDefinedType, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, string database, string owningSchema, string objectName) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, string database, string owningSchema, string objectName, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType, string serverTypeName) => throw null; - public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType, string serverTypeName, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) => throw null; - public System.Data.DbType DbType { get => throw null; } - public static Microsoft.Data.SqlClient.Server.SqlMetaData InferFromValue(object value, string name) => throw null; - public bool IsUniqueKey { get => throw null; } - public long LocaleId { get => throw null; } - public static long Max { get => throw null; } - public long MaxLength { get => throw null; } - public string Name { get => throw null; } - public byte Precision { get => throw null; } - public byte Scale { get => throw null; } - public Microsoft.Data.SqlClient.SortOrder SortOrder { get => throw null; } - public int SortOrdinal { get => throw null; } - public System.Data.SqlDbType SqlDbType { get => throw null; } - public System.Type Type { get => throw null; } - public string TypeName { get => throw null; } - public bool UseServerDefault { get => throw null; } - public string XmlSchemaCollectionDatabase { get => throw null; } - public string XmlSchemaCollectionName { get => throw null; } - public string XmlSchemaCollectionOwningSchema { get => throw null; } - } - } - public enum SortOrder - { - Unspecified = -1, - Ascending = 0, - Descending = 1, - } - public abstract class SqlAuthenticationInitializer - { - protected SqlAuthenticationInitializer() => throw null; - public abstract void Initialize(); - } - public enum SqlAuthenticationMethod - { - NotSpecified = 0, - SqlPassword = 1, - ActiveDirectoryPassword = 2, - ActiveDirectoryIntegrated = 3, - ActiveDirectoryInteractive = 4, - ActiveDirectoryServicePrincipal = 5, - ActiveDirectoryDeviceCodeFlow = 6, - ActiveDirectoryManagedIdentity = 7, - ActiveDirectoryMSI = 8, - ActiveDirectoryDefault = 9, - ActiveDirectoryWorkloadIdentity = 10, - } - public class SqlAuthenticationParameters - { - public Microsoft.Data.SqlClient.SqlAuthenticationMethod AuthenticationMethod { get => throw null; } - public string Authority { get => throw null; } - public System.Guid ConnectionId { get => throw null; } - public int ConnectionTimeout { get => throw null; } - protected SqlAuthenticationParameters(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod, string serverName, string databaseName, string resource, string authority, string userId, string password, System.Guid connectionId, int connectionTimeout) => throw null; - public string DatabaseName { get => throw null; } - public string Password { get => throw null; } - public string Resource { get => throw null; } - public string ServerName { get => throw null; } - public string UserId { get => throw null; } - } - public abstract class SqlAuthenticationProvider - { - public abstract System.Threading.Tasks.Task AcquireTokenAsync(Microsoft.Data.SqlClient.SqlAuthenticationParameters parameters); - public virtual void BeforeLoad(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) => throw null; - public virtual void BeforeUnload(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) => throw null; - protected SqlAuthenticationProvider() => throw null; - public static Microsoft.Data.SqlClient.SqlAuthenticationProvider GetProvider(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) => throw null; - public abstract bool IsSupported(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod); - public static bool SetProvider(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod, Microsoft.Data.SqlClient.SqlAuthenticationProvider provider) => throw null; - } - public class SqlAuthenticationToken - { - public string AccessToken { get => throw null; } - public SqlAuthenticationToken(string accessToken, System.DateTimeOffset expiresOn) => throw null; - public System.DateTimeOffset ExpiresOn { get => throw null; } - } - public class SqlBatch : System.Data.Common.DbBatch - { - public Microsoft.Data.SqlClient.SqlBatchCommandCollection BatchCommands { get => throw null; } - public override void Cancel() => throw null; - public System.Collections.Generic.List Commands { get => throw null; } - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; set { } } - protected override System.Data.Common.DbBatchCommand CreateDbBatchCommand() => throw null; - public SqlBatch() => throw null; - public SqlBatch(Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlTransaction transaction = default(Microsoft.Data.SqlClient.SqlTransaction)) => throw null; - protected override System.Data.Common.DbBatchCommandCollection DbBatchCommands { get => throw null; } - protected override System.Data.Common.DbConnection DbConnection { get => throw null; set { } } - protected override System.Data.Common.DbTransaction DbTransaction { get => throw null; set { } } - public override void Dispose() => throw null; - protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) => throw null; - protected override System.Threading.Tasks.Task ExecuteDbDataReaderAsync(System.Data.CommandBehavior behavior, System.Threading.CancellationToken cancellationToken) => throw null; - public override int ExecuteNonQuery() => throw null; - public override System.Threading.Tasks.Task ExecuteNonQueryAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public Microsoft.Data.SqlClient.SqlDataReader ExecuteReader() => throw null; - public System.Threading.Tasks.Task ExecuteReaderAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override object ExecuteScalar() => throw null; - public override System.Threading.Tasks.Task ExecuteScalarAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override void Prepare() => throw null; - public override System.Threading.Tasks.Task PrepareAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public override int Timeout { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlTransaction Transaction { get => throw null; set { } } - } - public class SqlBatchCommand : System.Data.Common.DbBatchCommand - { - public Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting ColumnEncryptionSetting { get => throw null; set { } } - public System.Data.CommandBehavior CommandBehavior { get => throw null; set { } } - public override string CommandText { get => throw null; set { } } - public override System.Data.CommandType CommandType { get => throw null; set { } } - public SqlBatchCommand() => throw null; - public SqlBatchCommand(string commandText, System.Data.CommandType commandType = default(System.Data.CommandType), System.Collections.Generic.IEnumerable parameters = default(System.Collections.Generic.IEnumerable), Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting columnEncryptionSetting = default(Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting)) => throw null; - protected override System.Data.Common.DbParameterCollection DbParameterCollection { get => throw null; } - public Microsoft.Data.SqlClient.SqlParameterCollection Parameters { get => throw null; } - public override int RecordsAffected { get => throw null; } - } - public class SqlBatchCommandCollection : System.Data.Common.DbBatchCommandCollection, System.Collections.Generic.ICollection, System.Collections.Generic.IEnumerable, System.Collections.IEnumerable, System.Collections.Generic.IList - { - public void Add(Microsoft.Data.SqlClient.SqlBatchCommand item) => throw null; - public override void Add(System.Data.Common.DbBatchCommand item) => throw null; - public override void Clear() => throw null; - public bool Contains(Microsoft.Data.SqlClient.SqlBatchCommand item) => throw null; - public override bool Contains(System.Data.Common.DbBatchCommand item) => throw null; - public void CopyTo(Microsoft.Data.SqlClient.SqlBatchCommand[] array, int arrayIndex) => throw null; - public override void CopyTo(System.Data.Common.DbBatchCommand[] array, int arrayIndex) => throw null; - public override int Count { get => throw null; } - public SqlBatchCommandCollection() => throw null; - protected override System.Data.Common.DbBatchCommand GetBatchCommand(int index) => throw null; - System.Collections.Generic.IEnumerator System.Collections.Generic.IEnumerable.GetEnumerator() => throw null; - public override System.Collections.Generic.IEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public int IndexOf(Microsoft.Data.SqlClient.SqlBatchCommand item) => throw null; - public override int IndexOf(System.Data.Common.DbBatchCommand item) => throw null; - public void Insert(int index, Microsoft.Data.SqlClient.SqlBatchCommand item) => throw null; - public override void Insert(int index, System.Data.Common.DbBatchCommand item) => throw null; - public override bool IsReadOnly { get => throw null; } - Microsoft.Data.SqlClient.SqlBatchCommand System.Collections.Generic.IList.this[int index] { get => throw null; set { } } - public bool Remove(Microsoft.Data.SqlClient.SqlBatchCommand item) => throw null; - public override bool Remove(System.Data.Common.DbBatchCommand item) => throw null; - public override void RemoveAt(int index) => throw null; - protected override void SetBatchCommand(int index, System.Data.Common.DbBatchCommand batchCommand) => throw null; - public Microsoft.Data.SqlClient.SqlBatchCommand this[int index] { get => throw null; set { } } - } - public sealed class SqlBulkCopy : System.IDisposable - { - public int BatchSize { get => throw null; set { } } - public int BulkCopyTimeout { get => throw null; set { } } - public void Close() => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMappingCollection ColumnMappings { get => throw null; } - public Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHintCollection ColumnOrderHints { get => throw null; } - public SqlBulkCopy(Microsoft.Data.SqlClient.SqlConnection connection) => throw null; - public SqlBulkCopy(Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction) => throw null; - public SqlBulkCopy(string connectionString) => throw null; - public SqlBulkCopy(string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions) => throw null; - public string DestinationTableName { get => throw null; set { } } - void System.IDisposable.Dispose() => throw null; - public bool EnableStreaming { get => throw null; set { } } - public int NotifyAfter { get => throw null; set { } } - public int RowsCopied { get => throw null; } - public long RowsCopied64 { get => throw null; } - public event Microsoft.Data.SqlClient.SqlRowsCopiedEventHandler SqlRowsCopied; - public void WriteToServer(System.Data.Common.DbDataReader reader) => throw null; - public void WriteToServer(System.Data.DataTable table) => throw null; - public void WriteToServer(System.Data.DataTable table, System.Data.DataRowState rowState) => throw null; - public void WriteToServer(System.Data.DataRow[] rows) => throw null; - public void WriteToServer(System.Data.IDataReader reader) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader) => throw null; - public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader, System.Threading.CancellationToken cancellationToken) => throw null; - } - public sealed class SqlBulkCopyColumnMapping - { - public SqlBulkCopyColumnMapping() => throw null; - public SqlBulkCopyColumnMapping(int sourceColumnOrdinal, int destinationOrdinal) => throw null; - public SqlBulkCopyColumnMapping(int sourceColumnOrdinal, string destinationColumn) => throw null; - public SqlBulkCopyColumnMapping(string sourceColumn, int destinationOrdinal) => throw null; - public SqlBulkCopyColumnMapping(string sourceColumn, string destinationColumn) => throw null; - public string DestinationColumn { get => throw null; set { } } - public int DestinationOrdinal { get => throw null; set { } } - public string SourceColumn { get => throw null; set { } } - public int SourceOrdinal { get => throw null; set { } } - } - public sealed class SqlBulkCopyColumnMappingCollection : System.Collections.CollectionBase - { - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping bulkCopyColumnMapping) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(int sourceColumnIndex, int destinationColumnIndex) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(int sourceColumnIndex, string destinationColumn) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(string sourceColumn, int destinationColumnIndex) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(string sourceColumn, string destinationColumn) => throw null; - public void Clear() => throw null; - public bool Contains(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) => throw null; - public void CopyTo(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping[] array, int index) => throw null; - public int IndexOf(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) => throw null; - public void Insert(int index, Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) => throw null; - public void Remove(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) => throw null; - public void RemoveAt(int index) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping this[int index] { get => throw null; } - } - public sealed class SqlBulkCopyColumnOrderHint - { - public string Column { get => throw null; set { } } - public SqlBulkCopyColumnOrderHint(string column, Microsoft.Data.SqlClient.SortOrder sortOrder) => throw null; - public Microsoft.Data.SqlClient.SortOrder SortOrder { get => throw null; set { } } - } - public sealed class SqlBulkCopyColumnOrderHintCollection : System.Collections.CollectionBase - { - public Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint Add(Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint columnOrderHint) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint Add(string column, Microsoft.Data.SqlClient.SortOrder sortOrder) => throw null; - public void Clear() => throw null; - public bool Contains(Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint value) => throw null; - public void CopyTo(Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint[] array, int index) => throw null; - public SqlBulkCopyColumnOrderHintCollection() => throw null; - public int IndexOf(Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint value) => throw null; - public void Insert(int index, Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint columnOrderHint) => throw null; - public void Remove(Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint columnOrderHint) => throw null; - public void RemoveAt(int index) => throw null; - public Microsoft.Data.SqlClient.SqlBulkCopyColumnOrderHint this[int index] { get => throw null; } - } - [System.Flags] - public enum SqlBulkCopyOptions - { - AllowEncryptedValueModifications = 64, - CheckConstraints = 2, - Default = 0, - FireTriggers = 16, - KeepIdentity = 1, - KeepNulls = 8, - TableLock = 4, - UseInternalTransaction = 32, - } - public sealed class SqlClientFactory : System.Data.Common.DbProviderFactory - { - public override bool CanCreateBatch { get => throw null; } - public override System.Data.Common.DbBatch CreateBatch() => throw null; - public override System.Data.Common.DbBatchCommand CreateBatchCommand() => throw null; - public override System.Data.Common.DbCommand CreateCommand() => throw null; - public override System.Data.Common.DbCommandBuilder CreateCommandBuilder() => throw null; - public override System.Data.Common.DbConnection CreateConnection() => throw null; - public override System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() => throw null; - public override System.Data.Common.DbDataAdapter CreateDataAdapter() => throw null; - public override System.Data.Common.DbDataSourceEnumerator CreateDataSourceEnumerator() => throw null; - public override System.Data.Common.DbParameter CreateParameter() => throw null; - public static readonly Microsoft.Data.SqlClient.SqlClientFactory Instance; - } - public class SqlClientLogger - { - public SqlClientLogger() => throw null; - public bool IsLoggingEnabled { get => throw null; } - public bool LogAssert(bool value, string type, string method, string message) => throw null; - public void LogError(string type, string method, string message) => throw null; - public void LogInfo(string type, string method, string message) => throw null; - public void LogWarning(string type, string method, string message) => throw null; - } - public static class SqlClientMetaDataCollectionNames - { - public static readonly string AllColumns; - public static readonly string Columns; - public static readonly string ColumnSetColumns; - public static readonly string Databases; - public static readonly string ForeignKeys; - public static readonly string IndexColumns; - public static readonly string Indexes; - public static readonly string ProcedureParameters; - public static readonly string Procedures; - public static readonly string StructuredTypeMembers; - public static readonly string Tables; - public static readonly string UserDefinedTypes; - public static readonly string Users; - public static readonly string ViewColumns; - public static readonly string Views; - } - public class SqlColumnEncryptionCertificateStoreProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider - { - public SqlColumnEncryptionCertificateStoreProvider() => throw null; - public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) => throw null; - public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) => throw null; - public const string ProviderName = default; - public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) => throw null; - public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) => throw null; - } - public class SqlColumnEncryptionCngProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider - { - public SqlColumnEncryptionCngProvider() => throw null; - public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) => throw null; - public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) => throw null; - public const string ProviderName = default; - public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) => throw null; - public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) => throw null; - } - public class SqlColumnEncryptionCspProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider - { - public SqlColumnEncryptionCspProvider() => throw null; - public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) => throw null; - public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) => throw null; - public const string ProviderName = default; - public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) => throw null; - public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) => throw null; - } - public abstract class SqlColumnEncryptionKeyStoreProvider - { - public virtual System.TimeSpan? ColumnEncryptionKeyCacheTtl { get => throw null; set { } } - protected SqlColumnEncryptionKeyStoreProvider() => throw null; - public abstract byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey); - public abstract byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey); - public virtual byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) => throw null; - public virtual bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) => throw null; - } - public sealed class SqlCommand : System.Data.Common.DbCommand, System.ICloneable - { - public System.IAsyncResult BeginExecuteNonQuery() => throw null; - public System.IAsyncResult BeginExecuteNonQuery(System.AsyncCallback callback, object stateObject) => throw null; - public System.IAsyncResult BeginExecuteReader() => throw null; - public System.IAsyncResult BeginExecuteReader(System.AsyncCallback callback, object stateObject) => throw null; - public System.IAsyncResult BeginExecuteReader(System.AsyncCallback callback, object stateObject, System.Data.CommandBehavior behavior) => throw null; - public System.IAsyncResult BeginExecuteReader(System.Data.CommandBehavior behavior) => throw null; - public System.IAsyncResult BeginExecuteXmlReader() => throw null; - public System.IAsyncResult BeginExecuteXmlReader(System.AsyncCallback callback, object stateObject) => throw null; - public override void Cancel() => throw null; - object System.ICloneable.Clone() => throw null; - public Microsoft.Data.SqlClient.SqlCommand Clone() => throw null; - public Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting ColumnEncryptionSetting { get => throw null; } - public override string CommandText { get => throw null; set { } } - public override int CommandTimeout { get => throw null; set { } } - public override System.Data.CommandType CommandType { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; set { } } - protected override System.Data.Common.DbParameter CreateDbParameter() => throw null; - public Microsoft.Data.SqlClient.SqlParameter CreateParameter() => throw null; - public SqlCommand() => throw null; - public SqlCommand(string cmdText) => throw null; - public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection) => throw null; - public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlTransaction transaction) => throw null; - public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlTransaction transaction, Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting columnEncryptionSetting) => throw null; - protected override System.Data.Common.DbConnection DbConnection { get => throw null; set { } } - protected override System.Data.Common.DbParameterCollection DbParameterCollection { get => throw null; } - protected override System.Data.Common.DbTransaction DbTransaction { get => throw null; set { } } - public override bool DesignTimeVisible { get => throw null; set { } } - protected override void Dispose(bool disposing) => throw null; - public bool EnableOptimizedParameterBinding { get => throw null; set { } } - public int EndExecuteNonQuery(System.IAsyncResult asyncResult) => throw null; - public Microsoft.Data.SqlClient.SqlDataReader EndExecuteReader(System.IAsyncResult asyncResult) => throw null; - public System.Xml.XmlReader EndExecuteXmlReader(System.IAsyncResult asyncResult) => throw null; - protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) => throw null; - protected override System.Threading.Tasks.Task ExecuteDbDataReaderAsync(System.Data.CommandBehavior behavior, System.Threading.CancellationToken cancellationToken) => throw null; - public override int ExecuteNonQuery() => throw null; - public override System.Threading.Tasks.Task ExecuteNonQueryAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public Microsoft.Data.SqlClient.SqlDataReader ExecuteReader() => throw null; - public Microsoft.Data.SqlClient.SqlDataReader ExecuteReader(System.Data.CommandBehavior behavior) => throw null; - public System.Threading.Tasks.Task ExecuteReaderAsync() => throw null; - public System.Threading.Tasks.Task ExecuteReaderAsync(System.Data.CommandBehavior behavior) => throw null; - public System.Threading.Tasks.Task ExecuteReaderAsync(System.Data.CommandBehavior behavior, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task ExecuteReaderAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public override object ExecuteScalar() => throw null; - public override System.Threading.Tasks.Task ExecuteScalarAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public System.Xml.XmlReader ExecuteXmlReader() => throw null; - public System.Threading.Tasks.Task ExecuteXmlReaderAsync() => throw null; - public System.Threading.Tasks.Task ExecuteXmlReaderAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public Microsoft.Data.Sql.SqlNotificationRequest Notification { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlParameterCollection Parameters { get => throw null; } - public override void Prepare() => throw null; - public void RegisterColumnEncryptionKeyStoreProvidersOnCommand(System.Collections.Generic.IDictionary customProviders) => throw null; - public void ResetCommandTimeout() => throw null; - public Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider RetryLogicProvider { get => throw null; set { } } - public event System.Data.StatementCompletedEventHandler StatementCompleted; - public Microsoft.Data.SqlClient.SqlTransaction Transaction { get => throw null; set { } } - public override System.Data.UpdateRowSource UpdatedRowSource { get => throw null; set { } } - } - public sealed class SqlCommandBuilder : System.Data.Common.DbCommandBuilder - { - protected override void ApplyParameterInfo(System.Data.Common.DbParameter parameter, System.Data.DataRow datarow, System.Data.StatementType statementType, bool whereClause) => throw null; - public override System.Data.Common.CatalogLocation CatalogLocation { get => throw null; set { } } - public override string CatalogSeparator { get => throw null; set { } } - public SqlCommandBuilder() => throw null; - public SqlCommandBuilder(Microsoft.Data.SqlClient.SqlDataAdapter adapter) => throw null; - public Microsoft.Data.SqlClient.SqlDataAdapter DataAdapter { get => throw null; set { } } - public static void DeriveParameters(Microsoft.Data.SqlClient.SqlCommand command) => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetDeleteCommand() => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetDeleteCommand(bool useColumnsForParameterNames) => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetInsertCommand() => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetInsertCommand(bool useColumnsForParameterNames) => throw null; - protected override string GetParameterName(int parameterOrdinal) => throw null; - protected override string GetParameterName(string parameterName) => throw null; - protected override string GetParameterPlaceholder(int parameterOrdinal) => throw null; - protected override System.Data.DataTable GetSchemaTable(System.Data.Common.DbCommand srcCommand) => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetUpdateCommand() => throw null; - public Microsoft.Data.SqlClient.SqlCommand GetUpdateCommand(bool useColumnsForParameterNames) => throw null; - protected override System.Data.Common.DbCommand InitializeCommand(System.Data.Common.DbCommand command) => throw null; - public override string QuoteIdentifier(string unquotedIdentifier) => throw null; - public override string QuotePrefix { get => throw null; set { } } - public override string QuoteSuffix { get => throw null; set { } } - public override string SchemaSeparator { get => throw null; set { } } - protected override void SetRowUpdatingHandler(System.Data.Common.DbDataAdapter adapter) => throw null; - public override string UnquoteIdentifier(string quotedIdentifier) => throw null; - } - public enum SqlCommandColumnEncryptionSetting - { - Disabled = 3, - Enabled = 1, - ResultSetOnly = 2, - UseConnectionSetting = 0, - } - public sealed class SqlConfigurableRetryFactory - { - public static Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider CreateExponentialRetryProvider(Microsoft.Data.SqlClient.SqlRetryLogicOption retryLogicOption) => throw null; - public static Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider CreateFixedRetryProvider(Microsoft.Data.SqlClient.SqlRetryLogicOption retryLogicOption) => throw null; - public static Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider CreateIncrementalRetryProvider(Microsoft.Data.SqlClient.SqlRetryLogicOption retryLogicOption) => throw null; - public static Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider CreateNoneRetryProvider() => throw null; - public SqlConfigurableRetryFactory() => throw null; - } - public sealed class SqlConnection : System.Data.Common.DbConnection, System.ICloneable - { - public string AccessToken { get => throw null; set { } } - public System.Func> AccessTokenCallback { get => throw null; set { } } - protected override System.Data.Common.DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel) => throw null; - public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction() => throw null; - public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso) => throw null; - public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso, string transactionName) => throw null; - public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(string transactionName) => throw null; - public override bool CanCreateBatch { get => throw null; } - public override void ChangeDatabase(string database) => throw null; - public static void ChangePassword(string connectionString, Microsoft.Data.SqlClient.SqlCredential credential, System.Security.SecureString newSecurePassword) => throw null; - public static void ChangePassword(string connectionString, string newPassword) => throw null; - public static void ClearAllPools() => throw null; - public static void ClearPool(Microsoft.Data.SqlClient.SqlConnection connection) => throw null; - public System.Guid ClientConnectionId { get => throw null; } - object System.ICloneable.Clone() => throw null; - public override void Close() => throw null; - public static System.TimeSpan ColumnEncryptionKeyCacheTtl { get => throw null; set { } } - public static bool ColumnEncryptionQueryMetadataCacheEnabled { get => throw null; set { } } - public static System.Collections.Generic.IDictionary> ColumnEncryptionTrustedMasterKeyPaths { get => throw null; } - public int CommandTimeout { get => throw null; } - public override string ConnectionString { get => throw null; set { } } - public override int ConnectionTimeout { get => throw null; } - public Microsoft.Data.SqlClient.SqlCommand CreateCommand() => throw null; - protected override System.Data.Common.DbBatch CreateDbBatch() => throw null; - protected override System.Data.Common.DbCommand CreateDbCommand() => throw null; - public Microsoft.Data.SqlClient.SqlCredential Credential { get => throw null; set { } } - public SqlConnection() => throw null; - public SqlConnection(string connectionString) => throw null; - public SqlConnection(string connectionString, Microsoft.Data.SqlClient.SqlCredential credential) => throw null; - public override string Database { get => throw null; } - public override string DataSource { get => throw null; } - protected override void Dispose(bool disposing) => throw null; - public bool FireInfoMessageEventOnUserErrors { get => throw null; set { } } - public override System.Data.DataTable GetSchema() => throw null; - public override System.Data.DataTable GetSchema(string collectionName) => throw null; - public override System.Data.DataTable GetSchema(string collectionName, string[] restrictionValues) => throw null; - public event Microsoft.Data.SqlClient.SqlInfoMessageEventHandler InfoMessage; - public override void Open() => throw null; - public void Open(Microsoft.Data.SqlClient.SqlConnectionOverrides overrides) => throw null; - public override System.Threading.Tasks.Task OpenAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task OpenAsync(Microsoft.Data.SqlClient.SqlConnectionOverrides overrides, System.Threading.CancellationToken cancellationToken) => throw null; - public int PacketSize { get => throw null; } - public static void RegisterColumnEncryptionKeyStoreProviders(System.Collections.Generic.IDictionary customProviders) => throw null; - public void RegisterColumnEncryptionKeyStoreProvidersOnConnection(System.Collections.Generic.IDictionary customProviders) => throw null; - public void ResetStatistics() => throw null; - public System.Collections.Generic.IDictionary RetrieveInternalInfo() => throw null; - public System.Collections.IDictionary RetrieveStatistics() => throw null; - public Microsoft.Data.SqlClient.SqlRetryLogicBaseProvider RetryLogicProvider { get => throw null; set { } } - public int ServerProcessId { get => throw null; } - public override string ServerVersion { get => throw null; } - public override System.Data.ConnectionState State { get => throw null; } - public bool StatisticsEnabled { get => throw null; set { } } - public string WorkstationId { get => throw null; } - } - public enum SqlConnectionAttestationProtocol - { - NotSpecified = 0, - AAS = 1, - None = 2, - HGS = 3, - } - public enum SqlConnectionColumnEncryptionSetting - { - Disabled = 0, - Enabled = 1, - } - public sealed class SqlConnectionEncryptOption - { - public SqlConnectionEncryptOption() => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public static Microsoft.Data.SqlClient.SqlConnectionEncryptOption Mandatory { get => throw null; } - public static implicit operator Microsoft.Data.SqlClient.SqlConnectionEncryptOption(bool value) => throw null; - public static implicit operator bool(Microsoft.Data.SqlClient.SqlConnectionEncryptOption value) => throw null; - public static Microsoft.Data.SqlClient.SqlConnectionEncryptOption Optional { get => throw null; } - public static Microsoft.Data.SqlClient.SqlConnectionEncryptOption Parse(string value) => throw null; - public static Microsoft.Data.SqlClient.SqlConnectionEncryptOption Strict { get => throw null; } - public override string ToString() => throw null; - public static bool TryParse(string value, out Microsoft.Data.SqlClient.SqlConnectionEncryptOption result) => throw null; - } - public enum SqlConnectionIPAddressPreference - { - IPv4First = 0, - IPv6First = 1, - UsePlatformDefault = 2, - } - public enum SqlConnectionOverrides - { - None = 0, - OpenWithoutRetry = 1, - } - public sealed class SqlConnectionStringBuilder : System.Data.Common.DbConnectionStringBuilder - { - public Microsoft.Data.SqlClient.ApplicationIntent ApplicationIntent { get => throw null; set { } } - public string ApplicationName { get => throw null; set { } } - public string AttachDBFilename { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlConnectionAttestationProtocol AttestationProtocol { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlAuthenticationMethod Authentication { get => throw null; set { } } - public override void Clear() => throw null; - public Microsoft.Data.SqlClient.SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { get => throw null; set { } } - public int CommandTimeout { get => throw null; set { } } - public int ConnectRetryCount { get => throw null; set { } } - public int ConnectRetryInterval { get => throw null; set { } } - public int ConnectTimeout { get => throw null; set { } } - public override bool ContainsKey(string keyword) => throw null; - public SqlConnectionStringBuilder() => throw null; - public SqlConnectionStringBuilder(string connectionString) => throw null; - public string CurrentLanguage { get => throw null; set { } } - public string DataSource { get => throw null; set { } } - public string EnclaveAttestationUrl { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlConnectionEncryptOption Encrypt { get => throw null; set { } } - public bool Enlist { get => throw null; set { } } - public string FailoverPartner { get => throw null; set { } } - public string FailoverPartnerSPN { get => throw null; set { } } - public string HostNameInCertificate { get => throw null; set { } } - public string InitialCatalog { get => throw null; set { } } - public bool IntegratedSecurity { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlConnectionIPAddressPreference IPAddressPreference { get => throw null; set { } } - public override bool IsFixedSize { get => throw null; } - public override System.Collections.ICollection Keys { get => throw null; } - public int LoadBalanceTimeout { get => throw null; set { } } - public int MaxPoolSize { get => throw null; set { } } - public int MinPoolSize { get => throw null; set { } } - public bool MultipleActiveResultSets { get => throw null; set { } } - public bool MultiSubnetFailover { get => throw null; set { } } - public int PacketSize { get => throw null; set { } } - public string Password { get => throw null; set { } } - public bool PersistSecurityInfo { get => throw null; set { } } - public Microsoft.Data.SqlClient.PoolBlockingPeriod PoolBlockingPeriod { get => throw null; set { } } - public bool Pooling { get => throw null; set { } } - public override bool Remove(string keyword) => throw null; - public bool Replication { get => throw null; set { } } - public string ServerCertificate { get => throw null; set { } } - public string ServerSPN { get => throw null; set { } } - public override bool ShouldSerialize(string keyword) => throw null; - public override object this[string keyword] { get => throw null; set { } } - public string TransactionBinding { get => throw null; set { } } - public bool TrustServerCertificate { get => throw null; set { } } - public override bool TryGetValue(string keyword, out object value) => throw null; - public string TypeSystemVersion { get => throw null; set { } } - public string UserID { get => throw null; set { } } - public bool UserInstance { get => throw null; set { } } - public override System.Collections.ICollection Values { get => throw null; } - public string WorkstationID { get => throw null; set { } } - } - public sealed class SqlCredential - { - public SqlCredential(string userId, System.Security.SecureString password) => throw null; - public System.Security.SecureString Password { get => throw null; } - public string UserId { get => throw null; } - } - public sealed class SqlDataAdapter : System.Data.Common.DbDataAdapter, System.ICloneable, System.Data.IDataAdapter, System.Data.IDbDataAdapter - { - object System.ICloneable.Clone() => throw null; - public SqlDataAdapter() => throw null; - public SqlDataAdapter(Microsoft.Data.SqlClient.SqlCommand selectCommand) => throw null; - public SqlDataAdapter(string selectCommandText, Microsoft.Data.SqlClient.SqlConnection selectConnection) => throw null; - public SqlDataAdapter(string selectCommandText, string selectConnectionString) => throw null; - public Microsoft.Data.SqlClient.SqlCommand DeleteCommand { get => throw null; set { } } - System.Data.IDbCommand System.Data.IDbDataAdapter.DeleteCommand { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlCommand InsertCommand { get => throw null; set { } } - System.Data.IDbCommand System.Data.IDbDataAdapter.InsertCommand { get => throw null; set { } } - protected override void OnRowUpdated(System.Data.Common.RowUpdatedEventArgs value) => throw null; - protected override void OnRowUpdating(System.Data.Common.RowUpdatingEventArgs value) => throw null; - public event Microsoft.Data.SqlClient.SqlRowUpdatedEventHandler RowUpdated; - public event Microsoft.Data.SqlClient.SqlRowUpdatingEventHandler RowUpdating; - public Microsoft.Data.SqlClient.SqlCommand SelectCommand { get => throw null; set { } } - System.Data.IDbCommand System.Data.IDbDataAdapter.SelectCommand { get => throw null; set { } } - public override int UpdateBatchSize { get => throw null; set { } } - System.Data.IDbCommand System.Data.IDbDataAdapter.UpdateCommand { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlCommand UpdateCommand { get => throw null; set { } } - } - public class SqlDataReader : System.Data.Common.DbDataReader, System.Data.IDataReader, System.Data.IDataRecord, System.IDisposable - { - public override void Close() => throw null; - protected Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - public override int Depth { get => throw null; } - public override int FieldCount { get => throw null; } - public override bool GetBoolean(int i) => throw null; - public override byte GetByte(int i) => throw null; - public override long GetBytes(int i, long dataIndex, byte[] buffer, int bufferIndex, int length) => throw null; - public override char GetChar(int i) => throw null; - public override long GetChars(int i, long dataIndex, char[] buffer, int bufferIndex, int length) => throw null; - public System.Collections.ObjectModel.ReadOnlyCollection GetColumnSchema() => throw null; - System.Data.IDataReader System.Data.IDataRecord.GetData(int i) => throw null; - public override string GetDataTypeName(int i) => throw null; - public override System.DateTime GetDateTime(int i) => throw null; - public virtual System.DateTimeOffset GetDateTimeOffset(int i) => throw null; - public override decimal GetDecimal(int i) => throw null; - public override double GetDouble(int i) => throw null; - public override System.Collections.IEnumerator GetEnumerator() => throw null; - public override System.Type GetFieldType(int i) => throw null; - public override T GetFieldValue(int i) => throw null; - public override System.Threading.Tasks.Task GetFieldValueAsync(int i, System.Threading.CancellationToken cancellationToken) => throw null; - public override float GetFloat(int i) => throw null; - public override System.Guid GetGuid(int i) => throw null; - public override short GetInt16(int i) => throw null; - public override int GetInt32(int i) => throw null; - public override long GetInt64(int i) => throw null; - public override string GetName(int i) => throw null; - public override int GetOrdinal(string name) => throw null; - public override System.Type GetProviderSpecificFieldType(int i) => throw null; - public override object GetProviderSpecificValue(int i) => throw null; - public override int GetProviderSpecificValues(object[] values) => throw null; - public override System.Data.DataTable GetSchemaTable() => throw null; - public virtual System.Data.SqlTypes.SqlBinary GetSqlBinary(int i) => throw null; - public virtual System.Data.SqlTypes.SqlBoolean GetSqlBoolean(int i) => throw null; - public virtual System.Data.SqlTypes.SqlByte GetSqlByte(int i) => throw null; - public virtual System.Data.SqlTypes.SqlBytes GetSqlBytes(int i) => throw null; - public virtual System.Data.SqlTypes.SqlChars GetSqlChars(int i) => throw null; - public virtual System.Data.SqlTypes.SqlDateTime GetSqlDateTime(int i) => throw null; - public virtual System.Data.SqlTypes.SqlDecimal GetSqlDecimal(int i) => throw null; - public virtual System.Data.SqlTypes.SqlDouble GetSqlDouble(int i) => throw null; - public virtual System.Data.SqlTypes.SqlGuid GetSqlGuid(int i) => throw null; - public virtual System.Data.SqlTypes.SqlInt16 GetSqlInt16(int i) => throw null; - public virtual System.Data.SqlTypes.SqlInt32 GetSqlInt32(int i) => throw null; - public virtual System.Data.SqlTypes.SqlInt64 GetSqlInt64(int i) => throw null; - public virtual Microsoft.Data.SqlTypes.SqlJson GetSqlJson(int i) => throw null; - public virtual System.Data.SqlTypes.SqlMoney GetSqlMoney(int i) => throw null; - public virtual System.Data.SqlTypes.SqlSingle GetSqlSingle(int i) => throw null; - public virtual System.Data.SqlTypes.SqlString GetSqlString(int i) => throw null; - public virtual object GetSqlValue(int i) => throw null; - public virtual int GetSqlValues(object[] values) => throw null; - public virtual System.Data.SqlTypes.SqlXml GetSqlXml(int i) => throw null; - public override System.IO.Stream GetStream(int i) => throw null; - public override string GetString(int i) => throw null; - public override System.IO.TextReader GetTextReader(int i) => throw null; - public virtual System.TimeSpan GetTimeSpan(int i) => throw null; - public override object GetValue(int i) => throw null; - public override int GetValues(object[] values) => throw null; - public virtual System.Xml.XmlReader GetXmlReader(int i) => throw null; - public override bool HasRows { get => throw null; } - public override bool IsClosed { get => throw null; } - protected bool IsCommandBehavior(System.Data.CommandBehavior condition) => throw null; - public override bool IsDBNull(int i) => throw null; - public override System.Threading.Tasks.Task IsDBNullAsync(int i, System.Threading.CancellationToken cancellationToken) => throw null; - public override bool NextResult() => throw null; - public override System.Threading.Tasks.Task NextResultAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public override bool Read() => throw null; - public override System.Threading.Tasks.Task ReadAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public override int RecordsAffected { get => throw null; } - public Microsoft.Data.SqlClient.DataClassification.SensitivityClassification SensitivityClassification { get => throw null; } - public override object this[int i] { get => throw null; } - public override object this[string name] { get => throw null; } - public override int VisibleFieldCount { get => throw null; } - } - public sealed class SqlDependency - { - public void AddCommandDependency(Microsoft.Data.SqlClient.SqlCommand command) => throw null; - public SqlDependency() => throw null; - public SqlDependency(Microsoft.Data.SqlClient.SqlCommand command) => throw null; - public SqlDependency(Microsoft.Data.SqlClient.SqlCommand command, string options, int timeout) => throw null; - public bool HasChanges { get => throw null; } - public string Id { get => throw null; } - public event Microsoft.Data.SqlClient.OnChangeEventHandler OnChange; - public static bool Start(string connectionString) => throw null; - public static bool Start(string connectionString, string queue) => throw null; - public static bool Stop(string connectionString) => throw null; - public static bool Stop(string connectionString, string queue) => throw null; - } - public sealed class SqlError - { - public byte Class { get => throw null; } - public int LineNumber { get => throw null; } - public string Message { get => throw null; } - public int Number { get => throw null; } - public string Procedure { get => throw null; } - public string Server { get => throw null; } - public string Source { get => throw null; } - public byte State { get => throw null; } - public override string ToString() => throw null; - } - public sealed class SqlErrorCollection : System.Collections.ICollection, System.Collections.IEnumerable - { - public void CopyTo(System.Array array, int index) => throw null; - public void CopyTo(Microsoft.Data.SqlClient.SqlError[] array, int index) => throw null; - public int Count { get => throw null; } - public System.Collections.IEnumerator GetEnumerator() => throw null; - bool System.Collections.ICollection.IsSynchronized { get => throw null; } - object System.Collections.ICollection.SyncRoot { get => throw null; } - public Microsoft.Data.SqlClient.SqlError this[int index] { get => throw null; } - } - public sealed class SqlException : System.Data.Common.DbException - { - public Microsoft.Data.SqlClient.SqlBatchCommand BatchCommand { get => throw null; } - public byte Class { get => throw null; } - public System.Guid ClientConnectionId { get => throw null; } - protected override System.Data.Common.DbBatchCommand DbBatchCommand { get => throw null; } - public Microsoft.Data.SqlClient.SqlErrorCollection Errors { get => throw null; } - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null; - public int LineNumber { get => throw null; } - public int Number { get => throw null; } - public string Procedure { get => throw null; } - public string Server { get => throw null; } - public override string Source { get => throw null; } - public byte State { get => throw null; } - public override string ToString() => throw null; - } - public sealed class SqlInfoMessageEventArgs : System.EventArgs - { - public Microsoft.Data.SqlClient.SqlErrorCollection Errors { get => throw null; } - public string Message { get => throw null; } - public string Source { get => throw null; } - public override string ToString() => throw null; - } - public delegate void SqlInfoMessageEventHandler(object sender, Microsoft.Data.SqlClient.SqlInfoMessageEventArgs e); - public class SqlNotificationEventArgs : System.EventArgs - { - public SqlNotificationEventArgs(Microsoft.Data.SqlClient.SqlNotificationType type, Microsoft.Data.SqlClient.SqlNotificationInfo info, Microsoft.Data.SqlClient.SqlNotificationSource source) => throw null; - public Microsoft.Data.SqlClient.SqlNotificationInfo Info { get => throw null; } - public Microsoft.Data.SqlClient.SqlNotificationSource Source { get => throw null; } - public Microsoft.Data.SqlClient.SqlNotificationType Type { get => throw null; } - } - public enum SqlNotificationInfo - { - AlreadyChanged = -2, - Alter = 5, - Delete = 3, - Drop = 4, - Error = 7, - Expired = 12, - Insert = 1, - Invalid = 9, - Isolation = 11, - Merge = 16, - Options = 10, - PreviousFire = 14, - Query = 8, - Resource = 13, - Restart = 6, - TemplateLimit = 15, - Truncate = 0, - Unknown = -1, - Update = 2, - } - public enum SqlNotificationSource - { - Client = -2, - Data = 0, - Database = 3, - Environment = 6, - Execution = 7, - Object = 2, - Owner = 8, - Statement = 5, - System = 4, - Timeout = 1, - Unknown = -1, - } - public enum SqlNotificationType - { - Change = 0, - Subscribe = 1, - Unknown = -1, - } - public sealed class SqlParameter : System.Data.Common.DbParameter, System.ICloneable, System.Data.IDataParameter, System.Data.IDbDataParameter - { - object System.ICloneable.Clone() => throw null; - public System.Data.SqlTypes.SqlCompareOptions CompareInfo { get => throw null; set { } } - public SqlParameter() => throw null; - public SqlParameter(string parameterName, System.Data.SqlDbType dbType) => throw null; - public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size) => throw null; - public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, System.Data.ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, object value) => throw null; - public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, System.Data.ParameterDirection direction, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName) => throw null; - public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, string sourceColumn) => throw null; - public SqlParameter(string parameterName, object value) => throw null; - public override System.Data.DbType DbType { get => throw null; set { } } - public override System.Data.ParameterDirection Direction { get => throw null; set { } } - public bool ForceColumnEncryption { get => throw null; set { } } - public override bool IsNullable { get => throw null; set { } } - public int LocaleId { get => throw null; set { } } - public int Offset { get => throw null; set { } } - public override string ParameterName { get => throw null; set { } } - public byte Precision { get => throw null; set { } } - public override void ResetDbType() => throw null; - public void ResetSqlDbType() => throw null; - public byte Scale { get => throw null; set { } } - public override int Size { get => throw null; set { } } - public override string SourceColumn { get => throw null; set { } } - public override bool SourceColumnNullMapping { get => throw null; set { } } - public override System.Data.DataRowVersion SourceVersion { get => throw null; set { } } - public System.Data.SqlDbType SqlDbType { get => throw null; set { } } - public object SqlValue { get => throw null; set { } } - public override string ToString() => throw null; - public string TypeName { get => throw null; set { } } - public string UdtTypeName { get => throw null; set { } } - public override object Value { get => throw null; set { } } - public string XmlSchemaCollectionDatabase { get => throw null; set { } } - public string XmlSchemaCollectionName { get => throw null; set { } } - public string XmlSchemaCollectionOwningSchema { get => throw null; set { } } - } - public sealed class SqlParameterCollection : System.Data.Common.DbParameterCollection - { - public Microsoft.Data.SqlClient.SqlParameter Add(Microsoft.Data.SqlClient.SqlParameter value) => throw null; - public override int Add(object value) => throw null; - public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType) => throw null; - public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType, int size) => throw null; - public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType, int size, string sourceColumn) => throw null; - public void AddRange(Microsoft.Data.SqlClient.SqlParameter[] values) => throw null; - public override void AddRange(System.Array values) => throw null; - public Microsoft.Data.SqlClient.SqlParameter AddWithValue(string parameterName, object value) => throw null; - public override void Clear() => throw null; - public bool Contains(Microsoft.Data.SqlClient.SqlParameter value) => throw null; - public override bool Contains(object value) => throw null; - public override bool Contains(string value) => throw null; - public override void CopyTo(System.Array array, int index) => throw null; - public void CopyTo(Microsoft.Data.SqlClient.SqlParameter[] array, int index) => throw null; - public override int Count { get => throw null; } - public override System.Collections.IEnumerator GetEnumerator() => throw null; - protected override System.Data.Common.DbParameter GetParameter(int index) => throw null; - protected override System.Data.Common.DbParameter GetParameter(string parameterName) => throw null; - public int IndexOf(Microsoft.Data.SqlClient.SqlParameter value) => throw null; - public override int IndexOf(object value) => throw null; - public override int IndexOf(string parameterName) => throw null; - public void Insert(int index, Microsoft.Data.SqlClient.SqlParameter value) => throw null; - public override void Insert(int index, object value) => throw null; - public override bool IsFixedSize { get => throw null; } - public override bool IsReadOnly { get => throw null; } - public void Remove(Microsoft.Data.SqlClient.SqlParameter value) => throw null; - public override void Remove(object value) => throw null; - public override void RemoveAt(int index) => throw null; - public override void RemoveAt(string parameterName) => throw null; - protected override void SetParameter(int index, System.Data.Common.DbParameter value) => throw null; - protected override void SetParameter(string parameterName, System.Data.Common.DbParameter value) => throw null; - public override object SyncRoot { get => throw null; } - public Microsoft.Data.SqlClient.SqlParameter this[int index] { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlParameter this[string parameterName] { get => throw null; set { } } - } - public sealed class SqlRetryingEventArgs : System.EventArgs - { - public bool Cancel { get => throw null; set { } } - public SqlRetryingEventArgs(int retryCount, System.TimeSpan delay, System.Collections.Generic.IList exceptions) => throw null; - public System.TimeSpan Delay { get => throw null; } - public System.Collections.Generic.IList Exceptions { get => throw null; } - public int RetryCount { get => throw null; } - } - public abstract class SqlRetryIntervalBaseEnumerator : System.ICloneable, System.IDisposable, System.Collections.Generic.IEnumerator, System.Collections.IEnumerator - { - public virtual object Clone() => throw null; - public SqlRetryIntervalBaseEnumerator() => throw null; - public SqlRetryIntervalBaseEnumerator(System.TimeSpan timeInterval, System.TimeSpan maxTime, System.TimeSpan minTime) => throw null; - public System.TimeSpan Current { get => throw null; set { } } - object System.Collections.IEnumerator.Current { get => throw null; } - public virtual void Dispose() => throw null; - public System.TimeSpan GapTimeInterval { get => throw null; set { } } - protected abstract System.TimeSpan GetNextInterval(); - public System.TimeSpan MaxTimeInterval { get => throw null; set { } } - public System.TimeSpan MinTimeInterval { get => throw null; set { } } - public virtual bool MoveNext() => throw null; - public virtual void Reset() => throw null; - protected virtual void Validate(System.TimeSpan timeInterval, System.TimeSpan maxTimeInterval, System.TimeSpan minTimeInterval) => throw null; - } - public abstract class SqlRetryLogicBase : System.ICloneable - { - public virtual object Clone() => throw null; - protected SqlRetryLogicBase() => throw null; - public int Current { get => throw null; set { } } - public int NumberOfTries { get => throw null; set { } } - public abstract void Reset(); - public virtual bool RetryCondition(object sender) => throw null; - public Microsoft.Data.SqlClient.SqlRetryIntervalBaseEnumerator RetryIntervalEnumerator { get => throw null; set { } } - public System.Predicate TransientPredicate { get => throw null; set { } } - public abstract bool TryNextInterval(out System.TimeSpan intervalTime); - } - public abstract class SqlRetryLogicBaseProvider - { - protected SqlRetryLogicBaseProvider() => throw null; - public abstract TResult Execute(object sender, System.Func function); - public abstract System.Threading.Tasks.Task ExecuteAsync(object sender, System.Func> function, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public abstract System.Threading.Tasks.Task ExecuteAsync(object sender, System.Func function, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); - public System.EventHandler Retrying { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlRetryLogicBase RetryLogic { get => throw null; set { } } - } - public sealed class SqlRetryLogicOption - { - public System.Predicate AuthorizedSqlCondition { get => throw null; set { } } - public SqlRetryLogicOption() => throw null; - public System.TimeSpan DeltaTime { get => throw null; set { } } - public System.TimeSpan MaxTimeInterval { get => throw null; set { } } - public System.TimeSpan MinTimeInterval { get => throw null; set { } } - public int NumberOfTries { get => throw null; set { } } - public System.Collections.Generic.IEnumerable TransientErrors { get => throw null; set { } } - } - public class SqlRowsCopiedEventArgs : System.EventArgs - { - public bool Abort { get => throw null; set { } } - public SqlRowsCopiedEventArgs(long rowsCopied) => throw null; - public long RowsCopied { get => throw null; } - } - public delegate void SqlRowsCopiedEventHandler(object sender, Microsoft.Data.SqlClient.SqlRowsCopiedEventArgs e); - public sealed class SqlRowUpdatedEventArgs : System.Data.Common.RowUpdatedEventArgs - { - public Microsoft.Data.SqlClient.SqlCommand Command { get => throw null; } - public SqlRowUpdatedEventArgs(System.Data.DataRow row, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) : base(default(System.Data.DataRow), default(System.Data.IDbCommand), default(System.Data.StatementType), default(System.Data.Common.DataTableMapping)) => throw null; - } - public delegate void SqlRowUpdatedEventHandler(object sender, Microsoft.Data.SqlClient.SqlRowUpdatedEventArgs e); - public sealed class SqlRowUpdatingEventArgs : System.Data.Common.RowUpdatingEventArgs - { - protected override System.Data.IDbCommand BaseCommand { get => throw null; set { } } - public Microsoft.Data.SqlClient.SqlCommand Command { get => throw null; set { } } - public SqlRowUpdatingEventArgs(System.Data.DataRow row, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping) : base(default(System.Data.DataRow), default(System.Data.IDbCommand), default(System.Data.StatementType), default(System.Data.Common.DataTableMapping)) => throw null; - } - public delegate void SqlRowUpdatingEventHandler(object sender, Microsoft.Data.SqlClient.SqlRowUpdatingEventArgs e); - public sealed class SqlTransaction : System.Data.Common.DbTransaction - { - public override void Commit() => throw null; - public Microsoft.Data.SqlClient.SqlConnection Connection { get => throw null; } - protected override System.Data.Common.DbConnection DbConnection { get => throw null; } - protected override void Dispose(bool disposing) => throw null; - public override System.Data.IsolationLevel IsolationLevel { get => throw null; } - public override void Rollback() => throw null; - public override void Rollback(string transactionName) => throw null; - public override void Save(string savePointName) => throw null; - } - } - public static partial class SqlDbTypeExtensions - { - public const System.Data.SqlDbType Json = default; - } - namespace SqlTypes - { - public sealed class SqlFileStream : System.IO.Stream - { - public override System.IAsyncResult BeginRead(byte[] buffer, int offset, int count, System.AsyncCallback callback, object state) => throw null; - public override System.IAsyncResult BeginWrite(byte[] buffer, int offset, int count, System.AsyncCallback callback, object state) => throw null; - public override bool CanRead { get => throw null; } - public override bool CanSeek { get => throw null; } - public override bool CanTimeout { get => throw null; } - public override bool CanWrite { get => throw null; } - public SqlFileStream(string path, byte[] transactionContext, System.IO.FileAccess access) => throw null; - public SqlFileStream(string path, byte[] transactionContext, System.IO.FileAccess access, System.IO.FileOptions options, long allocationSize) => throw null; - public override int EndRead(System.IAsyncResult asyncResult) => throw null; - public override void EndWrite(System.IAsyncResult asyncResult) => throw null; - public override void Flush() => throw null; - public override long Length { get => throw null; } - public string Name { get => throw null; } - public override long Position { get => throw null; set { } } - public override int Read(byte[] buffer, int offset, int count) => throw null; - public override int ReadByte() => throw null; - public override int ReadTimeout { get => throw null; } - public override long Seek(long offset, System.IO.SeekOrigin origin) => throw null; - public override void SetLength(long value) => throw null; - public byte[] TransactionContext { get => throw null; } - public override void Write(byte[] buffer, int offset, int count) => throw null; - public override void WriteByte(byte value) => throw null; - public override int WriteTimeout { get => throw null; } - } - public class SqlJson : System.Data.SqlTypes.INullable - { - public SqlJson() => throw null; - public SqlJson(string jsonString) => throw null; - public SqlJson(System.Text.Json.JsonDocument jsonDoc) => throw null; - public bool IsNull { get => throw null; } - public static Microsoft.Data.SqlTypes.SqlJson Null { get => throw null; } - public string Value { get => throw null; } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj b/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj deleted file mode 100644 index 457f65b723ba..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Data.SqlClient/6.0.2/Microsoft.Data.SqlClient.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj deleted file mode 100644 index ba6857adb2b9..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Abstractions/9.0.4/Microsoft.Extensions.Caching.Abstractions.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj deleted file mode 100644 index 611dcc85a91d..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Caching.Memory/9.0.4/Microsoft.Extensions.Caching.Memory.csproj +++ /dev/null @@ -1,17 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.DependencyInjection.Abstractions/9.0.4/Microsoft.Extensions.DependencyInjection.Abstractions.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj deleted file mode 100644 index 24dcab514cf1..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Logging.Abstractions/9.0.4/Microsoft.Extensions.Logging.Abstractions.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj deleted file mode 100644 index be3f78d87fc7..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Options/9.0.4/Microsoft.Extensions.Options.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj b/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Extensions.Primitives/9.0.4/Microsoft.Extensions.Primitives.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.cs b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.cs deleted file mode 100644 index 878df0d485a8..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.cs +++ /dev/null @@ -1,103 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.Identity.Client.Extensions.Msal, Version=4.61.3.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae`. -namespace Microsoft -{ - namespace Identity - { - namespace Client - { - namespace Extensions - { - namespace Msal - { - public class CacheChangedEventArgs : System.EventArgs - { - public readonly System.Collections.Generic.IEnumerable AccountsAdded; - public readonly System.Collections.Generic.IEnumerable AccountsRemoved; - public CacheChangedEventArgs(System.Collections.Generic.IEnumerable added, System.Collections.Generic.IEnumerable removed) => throw null; - } - public sealed class CrossPlatLock : System.IDisposable - { - public CrossPlatLock(string lockfilePath, int lockFileRetryDelay = default(int), int lockFileRetryCount = default(int)) => throw null; - public void Dispose() => throw null; - } - public class MsalCacheHelper - { - public event System.EventHandler CacheChanged; - public void Clear() => throw null; - public static System.Threading.Tasks.Task CreateAsync(Microsoft.Identity.Client.Extensions.Msal.StorageCreationProperties storageCreationProperties, System.Diagnostics.TraceSource logger = default(System.Diagnostics.TraceSource)) => throw null; - public const string LinuxKeyRingDefaultCollection = default; - public const string LinuxKeyRingSessionCollection = default; - public byte[] LoadUnencryptedTokenCache() => throw null; - public void RegisterCache(Microsoft.Identity.Client.ITokenCache tokenCache) => throw null; - public void SaveUnencryptedTokenCache(byte[] tokenCache) => throw null; - public void UnregisterCache(Microsoft.Identity.Client.ITokenCache tokenCache) => throw null; - public static string UserRootDirectory { get => throw null; } - public void VerifyPersistence() => throw null; - } - public class MsalCachePersistenceException : System.Exception - { - public MsalCachePersistenceException() => throw null; - public MsalCachePersistenceException(string message) => throw null; - public MsalCachePersistenceException(string message, System.Exception innerException) => throw null; - protected MsalCachePersistenceException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public static class SharedUtilities - { - public static string GetUserRootDirectory() => throw null; - public static bool IsLinuxPlatform() => throw null; - public static bool IsMacPlatform() => throw null; - public static bool IsWindowsPlatform() => throw null; - } - public class Storage - { - public void Clear(bool ignoreExceptions = default(bool)) => throw null; - public static Microsoft.Identity.Client.Extensions.Msal.Storage Create(Microsoft.Identity.Client.Extensions.Msal.StorageCreationProperties creationProperties, System.Diagnostics.TraceSource logger = default(System.Diagnostics.TraceSource)) => throw null; - public byte[] ReadData() => throw null; - public void VerifyPersistence() => throw null; - public void WriteData(byte[] data) => throw null; - } - public class StorageCreationProperties - { - public string Authority { get => throw null; } - public readonly string CacheDirectory; - public readonly string CacheFileName; - public string CacheFilePath { get => throw null; } - public string ClientId { get => throw null; } - public readonly System.Collections.Generic.KeyValuePair KeyringAttribute1; - public readonly System.Collections.Generic.KeyValuePair KeyringAttribute2; - public readonly string KeyringCollection; - public readonly string KeyringSchemaName; - public readonly string KeyringSecretLabel; - public readonly int LockRetryCount; - public readonly int LockRetryDelay; - public readonly string MacKeyChainAccountName; - public readonly string MacKeyChainServiceName; - public readonly bool UseLinuxUnencryptedFallback; - public readonly bool UseUnencryptedFallback; - } - public class StorageCreationPropertiesBuilder - { - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationProperties Build() => throw null; - public StorageCreationPropertiesBuilder(string cacheFileName, string cacheDirectory, string clientId) => throw null; - public StorageCreationPropertiesBuilder(string cacheFileName, string cacheDirectory) => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder CustomizeLockRetry(int lockRetryDelay, int lockRetryCount) => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder WithCacheChangedEvent(string clientId, string authority = default(string)) => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder WithLinuxKeyring(string schemaName, string collection, string secretLabel, System.Collections.Generic.KeyValuePair attribute1, System.Collections.Generic.KeyValuePair attribute2) => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder WithLinuxUnprotectedFile() => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder WithMacKeyChain(string serviceName, string accountName) => throw null; - public Microsoft.Identity.Client.Extensions.Msal.StorageCreationPropertiesBuilder WithUnprotectedFile() => throw null; - } - public class TraceSourceLogger - { - public TraceSourceLogger(System.Diagnostics.TraceSource traceSource) => throw null; - public void LogError(string message) => throw null; - public void LogInformation(string message) => throw null; - public void LogWarning(string message) => throw null; - public System.Diagnostics.TraceSource Source { get => throw null; } - } - } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj deleted file mode 100644 index a085743bd520..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client.Extensions.Msal/4.61.3/Microsoft.Identity.Client.Extensions.Msal.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.cs b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.cs deleted file mode 100644 index 01ea5340e8ef..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.cs +++ /dev/null @@ -1,1350 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.Identity.Client, Version=4.61.3.0, Culture=neutral, PublicKeyToken=0a613f4dd989e8ae`. -namespace Microsoft -{ - namespace Identity - { - namespace Client - { - public enum AadAuthorityAudience - { - None = 0, - AzureAdMyOrg = 1, - AzureAdAndPersonalMicrosoftAccount = 2, - AzureAdMultipleOrgs = 3, - PersonalMicrosoftAccount = 4, - } - public abstract class AbstractAcquireTokenParameterBuilder : Microsoft.Identity.Client.BaseAbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.BaseAbstractAcquireTokenParameterBuilder - { - protected AbstractAcquireTokenParameterBuilder() => throw null; - public T WithAdfsAuthority(string authorityUri, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string authorityUri, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string cloudInstanceUri, System.Guid tenantId, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string cloudInstanceUri, string tenant, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, System.Guid tenantId, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, string tenant, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, Microsoft.Identity.Client.AadAuthorityAudience authorityAudience, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AadAuthorityAudience authorityAudience, bool validateAuthority = default(bool)) => throw null; - public T WithB2CAuthority(string authorityUri) => throw null; - public T WithClaims(string claims) => throw null; - public T WithExtraQueryParameters(System.Collections.Generic.Dictionary extraQueryParameters) => throw null; - public T WithExtraQueryParameters(string extraQueryParameters) => throw null; - protected T WithScopes(System.Collections.Generic.IEnumerable scopes) => throw null; - public T WithTenantId(string tenantId) => throw null; - public T WithTenantIdFromAuthority(System.Uri authorityUri) => throw null; - } - public abstract class AbstractApplicationBuilder : Microsoft.Identity.Client.BaseAbstractApplicationBuilder where T : Microsoft.Identity.Client.BaseAbstractApplicationBuilder - { - public T WithAdfsAuthority(string authorityUri, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(System.Uri authorityUri, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string authorityUri, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string cloudInstanceUri, System.Guid tenantId, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(string cloudInstanceUri, string tenant, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, System.Guid tenantId, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, string tenant, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AzureCloudInstance azureCloudInstance, Microsoft.Identity.Client.AadAuthorityAudience authorityAudience, bool validateAuthority = default(bool)) => throw null; - public T WithAuthority(Microsoft.Identity.Client.AadAuthorityAudience authorityAudience, bool validateAuthority = default(bool)) => throw null; - public T WithB2CAuthority(string authorityUri) => throw null; - public T WithCacheOptions(Microsoft.Identity.Client.CacheOptions options) => throw null; - public T WithClientCapabilities(System.Collections.Generic.IEnumerable clientCapabilities) => throw null; - public T WithClientId(string clientId) => throw null; - public T WithClientName(string clientName) => throw null; - public T WithClientVersion(string clientVersion) => throw null; - public T WithExtraQueryParameters(System.Collections.Generic.IDictionary extraQueryParameters) => throw null; - public T WithExtraQueryParameters(string extraQueryParameters) => throw null; - public T WithInstanceDicoveryMetadata(string instanceDiscoveryJson) => throw null; - public T WithInstanceDicoveryMetadata(System.Uri instanceDiscoveryUri) => throw null; - public T WithInstanceDiscovery(bool enableInstanceDiscovery) => throw null; - public T WithInstanceDiscoveryMetadata(string instanceDiscoveryJson) => throw null; - public T WithInstanceDiscoveryMetadata(System.Uri instanceDiscoveryUri) => throw null; - public T WithLegacyCacheCompatibility(bool enableLegacyCacheCompatibility = default(bool)) => throw null; - protected T WithOptions(Microsoft.Identity.Client.ApplicationOptions applicationOptions) => throw null; - public T WithRedirectUri(string redirectUri) => throw null; - public T WithTelemetry(Microsoft.Identity.Client.ITelemetryConfig telemetryConfig) => throw null; - public T WithTenantId(string tenantId) => throw null; - } - public abstract class AbstractClientAppBaseAcquireTokenParameterBuilder : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder - { - public override System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken) => throw null; - } - public abstract class AbstractConfidentialClientAcquireTokenParameterBuilder : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder - { - public override System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken) => throw null; - protected override void Validate() => throw null; - public T WithProofOfPossession(Microsoft.Identity.Client.AppConfig.PoPAuthenticationConfiguration popAuthenticationConfiguration) => throw null; - } - public abstract class AbstractManagedIdentityAcquireTokenParameterBuilder : Microsoft.Identity.Client.BaseAbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.BaseAbstractAcquireTokenParameterBuilder - { - protected AbstractManagedIdentityAcquireTokenParameterBuilder() => throw null; - public override System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken) => throw null; - } - public abstract class AbstractPublicClientAcquireTokenParameterBuilder : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder - { - public override System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken) => throw null; - } - public static partial class AccountExtensions - { - public static System.Collections.Generic.IEnumerable GetTenantProfiles(this Microsoft.Identity.Client.IAccount account) => throw null; - } - public class AccountId - { - public AccountId(string identifier, string objectId, string tenantId) => throw null; - public AccountId(string adfsIdentifier) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public string Identifier { get => throw null; } - public string ObjectId { get => throw null; } - public string TenantId { get => throw null; } - public override string ToString() => throw null; - } - public sealed class AcquireTokenByAuthorizationCodeParameterBuilder : Microsoft.Identity.Client.AbstractConfidentialClientAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder WithCcsRoutingHint(string userObjectIdentifier, string tenantIdentifier) => throw null; - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder WithCcsRoutingHint(string userName) => throw null; - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder WithPkceCodeVerifier(string pkceCodeVerifier) => throw null; - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder WithSendX5C(bool withSendX5C) => throw null; - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder WithSpaAuthorizationCode(bool requestSpaAuthorizationCode = default(bool)) => throw null; - } - public sealed class AcquireTokenByIntegratedWindowsAuthParameterBuilder : Microsoft.Identity.Client.AbstractPublicClientAcquireTokenParameterBuilder - { - public Microsoft.Identity.Client.AcquireTokenByIntegratedWindowsAuthParameterBuilder WithFederationMetadata(string federationMetadata) => throw null; - public Microsoft.Identity.Client.AcquireTokenByIntegratedWindowsAuthParameterBuilder WithUsername(string username) => throw null; - } - public sealed class AcquireTokenByRefreshTokenParameterBuilder : Microsoft.Identity.Client.AbstractClientAppBaseAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenByRefreshTokenParameterBuilder WithSendX5C(bool withSendX5C) => throw null; - } - public sealed class AcquireTokenByUsernamePasswordParameterBuilder : Microsoft.Identity.Client.AbstractPublicClientAcquireTokenParameterBuilder - { - public Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder WithFederationMetadata(string federationMetadata) => throw null; - public Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder WithProofOfPossession(string nonce, System.Net.Http.HttpMethod httpMethod, System.Uri requestUri) => throw null; - } - public sealed class AcquireTokenForClientParameterBuilder : Microsoft.Identity.Client.AbstractConfidentialClientAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder WithAzureRegion(bool useAzureRegion) => throw null; - public Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder WithForceRefresh(bool forceRefresh) => throw null; - public Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder WithPreferredAzureRegion(bool useAzureRegion = default(bool), string regionUsedIfAutoDetectFails = default(string), bool fallbackToGlobal = default(bool)) => throw null; - public Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder WithSendX5C(bool withSendX5C) => throw null; - } - public sealed class AcquireTokenForManagedIdentityParameterBuilder : Microsoft.Identity.Client.AbstractManagedIdentityAcquireTokenParameterBuilder - { - public Microsoft.Identity.Client.AcquireTokenForManagedIdentityParameterBuilder WithForceRefresh(bool forceRefresh) => throw null; - } - public sealed class AcquireTokenInteractiveParameterBuilder : Microsoft.Identity.Client.AbstractPublicClientAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithAccount(Microsoft.Identity.Client.IAccount account) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithEmbeddedWebViewOptions(Microsoft.Identity.Client.EmbeddedWebViewOptions options) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithExtraScopesToConsent(System.Collections.Generic.IEnumerable extraScopesToConsent) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithLoginHint(string loginHint) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithParentActivityOrWindow(object parent) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithParentActivityOrWindow(nint window) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithPrompt(Microsoft.Identity.Client.Prompt prompt) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithProofOfPossession(string nonce, System.Net.Http.HttpMethod httpMethod, System.Uri requestUri) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithSystemWebViewOptions(Microsoft.Identity.Client.SystemWebViewOptions options) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithUseEmbeddedWebView(bool useEmbeddedWebView) => throw null; - } - public sealed class AcquireTokenOnBehalfOfParameterBuilder : Microsoft.Identity.Client.AbstractConfidentialClientAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder WithCcsRoutingHint(string userObjectIdentifier, string tenantIdentifier) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder WithCcsRoutingHint(string userName) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder WithForceRefresh(bool forceRefresh) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder WithSendX5C(bool withSendX5C) => throw null; - } - public sealed class AcquireTokenSilentParameterBuilder : Microsoft.Identity.Client.AbstractClientAppBaseAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder WithForceRefresh(bool forceRefresh) => throw null; - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder WithProofOfPossession(Microsoft.Identity.Client.AppConfig.PoPAuthenticationConfiguration popAuthenticationConfiguration) => throw null; - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder WithProofOfPossession(string nonce, System.Net.Http.HttpMethod httpMethod, System.Uri requestUri) => throw null; - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder WithSendX5C(bool withSendX5C) => throw null; - } - public sealed class AcquireTokenWithDeviceCodeParameterBuilder : Microsoft.Identity.Client.AbstractPublicClientAcquireTokenParameterBuilder - { - protected override void Validate() => throw null; - public Microsoft.Identity.Client.AcquireTokenWithDeviceCodeParameterBuilder WithDeviceCodeResultCallback(System.Func deviceCodeResultCallback) => throw null; - } - namespace Advanced - { - public static partial class AcquireTokenParameterBuilderExtensions - { - public static T WithExtraHttpHeaders(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Collections.Generic.IDictionary extraHttpHeaders) where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder => throw null; - } - } - namespace AppConfig - { - public class ManagedIdentityId - { - public static Microsoft.Identity.Client.AppConfig.ManagedIdentityId SystemAssigned { get => throw null; } - public static Microsoft.Identity.Client.AppConfig.ManagedIdentityId WithUserAssignedClientId(string clientId) => throw null; - public static Microsoft.Identity.Client.AppConfig.ManagedIdentityId WithUserAssignedObjectId(string objectId) => throw null; - public static Microsoft.Identity.Client.AppConfig.ManagedIdentityId WithUserAssignedResourceId(string resourceId) => throw null; - } - public class PoPAuthenticationConfiguration - { - public PoPAuthenticationConfiguration() => throw null; - public PoPAuthenticationConfiguration(System.Net.Http.HttpRequestMessage httpRequestMessage) => throw null; - public PoPAuthenticationConfiguration(System.Uri requestUri) => throw null; - public string HttpHost { get => throw null; set { } } - public System.Net.Http.HttpMethod HttpMethod { get => throw null; set { } } - public string HttpPath { get => throw null; set { } } - public string Nonce { get => throw null; set { } } - public Microsoft.Identity.Client.AuthScheme.PoP.IPoPCryptoProvider PopCryptoProvider { get => throw null; set { } } - public bool SignHttpRequest { get => throw null; set { } } - } - } - public abstract class ApplicationBase : Microsoft.Identity.Client.IApplicationBase - { - } - public abstract class ApplicationOptions : Microsoft.Identity.Client.BaseApplicationOptions - { - public Microsoft.Identity.Client.AadAuthorityAudience AadAuthorityAudience { get => throw null; set { } } - public Microsoft.Identity.Client.AzureCloudInstance AzureCloudInstance { get => throw null; set { } } - public System.Collections.Generic.IEnumerable ClientCapabilities { get => throw null; set { } } - public string ClientId { get => throw null; set { } } - public string ClientName { get => throw null; set { } } - public string ClientVersion { get => throw null; set { } } - protected ApplicationOptions() => throw null; - public string Instance { get => throw null; set { } } - public string KerberosServicePrincipalName { get => throw null; set { } } - public bool LegacyCacheCompatibilityEnabled { get => throw null; set { } } - public string RedirectUri { get => throw null; set { } } - public string TenantId { get => throw null; set { } } - public Microsoft.Identity.Client.Kerberos.KerberosTicketContainer TicketContainer { get => throw null; set { } } - } - public class AssertionRequestOptions - { - public System.Threading.CancellationToken CancellationToken { get => throw null; set { } } - public string ClientID { get => throw null; set { } } - public AssertionRequestOptions() => throw null; - public string TokenEndpoint { get => throw null; set { } } - } - public class AuthenticationHeaderParser - { - public Microsoft.Identity.Client.AuthenticationInfoParameters AuthenticationInfoParameters { get => throw null; } - public AuthenticationHeaderParser() => throw null; - public static Microsoft.Identity.Client.AuthenticationHeaderParser ParseAuthenticationHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders) => throw null; - public static System.Threading.Tasks.Task ParseAuthenticationHeadersAsync(string resourceUri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task ParseAuthenticationHeadersAsync(string resourceUri, System.Net.Http.HttpClient httpClient, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public string PopNonce { get => throw null; } - public System.Collections.Generic.IReadOnlyList WwwAuthenticateParameters { get => throw null; } - } - public class AuthenticationInfoParameters - { - public static Microsoft.Identity.Client.AuthenticationInfoParameters CreateFromResponseHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders) => throw null; - public AuthenticationInfoParameters() => throw null; - public string NextNonce { get => throw null; } - public string this[string key] { get => throw null; } - } - public class AuthenticationResult - { - public string AccessToken { get => throw null; } - public Microsoft.Identity.Client.IAccount Account { get => throw null; } - public System.Collections.Generic.IReadOnlyDictionary AdditionalResponseParameters { get => throw null; } - public Microsoft.Identity.Client.AuthenticationResultMetadata AuthenticationResultMetadata { get => throw null; } - public System.Security.Claims.ClaimsPrincipal ClaimsPrincipal { get => throw null; } - public System.Guid CorrelationId { get => throw null; } - public string CreateAuthorizationHeader() => throw null; - public AuthenticationResult(string accessToken, bool isExtendedLifeTimeToken, string uniqueId, System.DateTimeOffset expiresOn, System.DateTimeOffset extendedExpiresOn, string tenantId, Microsoft.Identity.Client.IAccount account, string idToken, System.Collections.Generic.IEnumerable scopes, System.Guid correlationId, string tokenType = default(string), Microsoft.Identity.Client.AuthenticationResultMetadata authenticationResultMetadata = default(Microsoft.Identity.Client.AuthenticationResultMetadata), System.Security.Claims.ClaimsPrincipal claimsPrincipal = default(System.Security.Claims.ClaimsPrincipal), string spaAuthCode = default(string), System.Collections.Generic.IReadOnlyDictionary additionalResponseParameters = default(System.Collections.Generic.IReadOnlyDictionary)) => throw null; - public AuthenticationResult(string accessToken, bool isExtendedLifeTimeToken, string uniqueId, System.DateTimeOffset expiresOn, System.DateTimeOffset extendedExpiresOn, string tenantId, Microsoft.Identity.Client.IAccount account, string idToken, System.Collections.Generic.IEnumerable scopes, System.Guid correlationId, Microsoft.Identity.Client.AuthenticationResultMetadata authenticationResultMetadata, string tokenType = default(string)) => throw null; - public System.DateTimeOffset ExpiresOn { get => throw null; } - public System.DateTimeOffset ExtendedExpiresOn { get => throw null; } - public string IdToken { get => throw null; } - public bool IsExtendedLifeTimeToken { get => throw null; } - public System.Collections.Generic.IEnumerable Scopes { get => throw null; } - public string SpaAuthCode { get => throw null; } - public string TenantId { get => throw null; } - public string TokenType { get => throw null; } - public string UniqueId { get => throw null; } - public Microsoft.Identity.Client.IUser User { get => throw null; } - } - public class AuthenticationResultMetadata - { - public Microsoft.Identity.Client.Cache.CacheLevel CacheLevel { get => throw null; set { } } - public Microsoft.Identity.Client.CacheRefreshReason CacheRefreshReason { get => throw null; set { } } - public AuthenticationResultMetadata(Microsoft.Identity.Client.TokenSource tokenSource) => throw null; - public long DurationInCacheInMs { get => throw null; set { } } - public long DurationInHttpInMs { get => throw null; set { } } - public long DurationTotalInMs { get => throw null; set { } } - public System.DateTimeOffset? RefreshOn { get => throw null; set { } } - public Microsoft.Identity.Client.RegionDetails RegionDetails { get => throw null; set { } } - public string Telemetry { get => throw null; set { } } - public string TokenEndpoint { get => throw null; set { } } - public Microsoft.Identity.Client.TokenSource TokenSource { get => throw null; } - } - namespace AuthScheme - { - namespace PoP - { - public interface IPoPCryptoProvider - { - string CannonicalPublicKeyJwk { get; } - string CryptographicAlgorithm { get; } - byte[] Sign(byte[] data); - } - } - } - public enum AzureCloudInstance - { - None = 0, - AzurePublic = 1, - AzureChina = 2, - AzureGermany = 3, - AzureUsGovernment = 4, - } - public abstract class BaseAbstractAcquireTokenParameterBuilder where T : Microsoft.Identity.Client.BaseAbstractAcquireTokenParameterBuilder - { - protected BaseAbstractAcquireTokenParameterBuilder() => throw null; - public abstract System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken); - public System.Threading.Tasks.Task ExecuteAsync() => throw null; - protected virtual void Validate() => throw null; - public T WithCorrelationId(System.Guid correlationId) => throw null; - } - public abstract class BaseAbstractApplicationBuilder where T : Microsoft.Identity.Client.BaseAbstractApplicationBuilder - { - public T WithDebugLoggingCallback(Microsoft.Identity.Client.LogLevel logLevel = default(Microsoft.Identity.Client.LogLevel), bool enablePiiLogging = default(bool), bool withDefaultPlatformLoggingEnabled = default(bool)) => throw null; - public T WithExperimentalFeatures(bool enableExperimentalFeatures = default(bool)) => throw null; - public T WithHttpClientFactory(Microsoft.Identity.Client.IMsalHttpClientFactory httpClientFactory) => throw null; - public T WithHttpClientFactory(Microsoft.Identity.Client.IMsalHttpClientFactory httpClientFactory, bool retryOnceOn5xx) => throw null; - public T WithLogging(Microsoft.Identity.Client.LogCallback loggingCallback, Microsoft.Identity.Client.LogLevel? logLevel = default(Microsoft.Identity.Client.LogLevel?), bool? enablePiiLogging = default(bool?), bool? enableDefaultPlatformLogging = default(bool?)) => throw null; - public T WithLogging(Microsoft.IdentityModel.Abstractions.IIdentityLogger identityLogger, bool enablePiiLogging = default(bool)) => throw null; - protected T WithOptions(Microsoft.Identity.Client.BaseApplicationOptions applicationOptions) => throw null; - } - public abstract class BaseApplicationOptions - { - protected BaseApplicationOptions() => throw null; - public bool EnablePiiLogging { get => throw null; set { } } - public bool IsDefaultPlatformLoggingEnabled { get => throw null; set { } } - public Microsoft.Identity.Client.LogLevel LogLevel { get => throw null; set { } } - } - public class BrokerOptions - { - public BrokerOptions(Microsoft.Identity.Client.BrokerOptions.OperatingSystems enabledOn) => throw null; - public Microsoft.Identity.Client.BrokerOptions.OperatingSystems EnabledOn { get => throw null; } - public bool ListOperatingSystemAccounts { get => throw null; set { } } - public bool MsaPassthrough { get => throw null; set { } } - [System.Flags] - public enum OperatingSystems - { - None = 0, - Windows = 1, - } - public string Title { get => throw null; set { } } - } - namespace Cache - { - public class CacheData - { - public byte[] AdalV3State { get => throw null; set { } } - public CacheData() => throw null; - public byte[] UnifiedState { get => throw null; set { } } - } - public enum CacheLevel - { - None = 0, - Unknown = 1, - L1Cache = 2, - L2Cache = 3, - } - } - public class CacheOptions - { - public CacheOptions() => throw null; - public CacheOptions(bool useSharedCache) => throw null; - public static Microsoft.Identity.Client.CacheOptions EnableSharedCacheOptions { get => throw null; } - public bool UseSharedCache { get => throw null; set { } } - } - public enum CacheRefreshReason - { - NotApplicable = 0, - ForceRefreshOrClaims = 1, - NoCachedAccessToken = 2, - Expired = 3, - ProactivelyRefreshed = 4, - } - public abstract class ClientApplicationBase : Microsoft.Identity.Client.ApplicationBase, Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IClientApplicationBase - { - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder AcquireTokenSilent(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account) => throw null; - public Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder AcquireTokenSilent(System.Collections.Generic.IEnumerable scopes, string loginHint) => throw null; - public System.Threading.Tasks.Task AcquireTokenSilentAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, string authority, bool forceRefresh) => throw null; - public System.Threading.Tasks.Task AcquireTokenSilentAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account) => throw null; - public Microsoft.Identity.Client.IAppConfig AppConfig { get => throw null; } - public string Authority { get => throw null; } - public string ClientId { get => throw null; } - public string Component { get => throw null; set { } } - public System.Threading.Tasks.Task GetAccountAsync(string accountId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public System.Threading.Tasks.Task GetAccountAsync(string accountId) => throw null; - public System.Threading.Tasks.Task> GetAccountsAsync() => throw null; - public System.Threading.Tasks.Task> GetAccountsAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public System.Threading.Tasks.Task> GetAccountsAsync(string userFlow) => throw null; - public System.Threading.Tasks.Task> GetAccountsAsync(string userFlow, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public Microsoft.Identity.Client.IUser GetUser(string identifier) => throw null; - public string RedirectUri { get => throw null; set { } } - public void Remove(Microsoft.Identity.Client.IUser user) => throw null; - public System.Threading.Tasks.Task RemoveAsync(Microsoft.Identity.Client.IAccount account) => throw null; - public System.Threading.Tasks.Task RemoveAsync(Microsoft.Identity.Client.IAccount account, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public string SliceParameters { get => throw null; set { } } - public System.Collections.Generic.IEnumerable Users { get => throw null; } - public Microsoft.Identity.Client.ITokenCache UserTokenCache { get => throw null; } - public bool ValidateAuthority { get => throw null; set { } } - } - public sealed class ClientAssertionCertificate - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public ClientAssertionCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public static int MinKeySizeInBits { get => throw null; } - } - public sealed class ClientCredential - { - public ClientCredential(Microsoft.Identity.Client.ClientAssertionCertificate certificate) => throw null; - public ClientCredential(string secret) => throw null; - } - public sealed class ConfidentialClientApplication : Microsoft.Identity.Client.ClientApplicationBase, Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IByRefreshToken, Microsoft.Identity.Client.IClientApplicationBase, Microsoft.Identity.Client.IConfidentialClientApplication, Microsoft.Identity.Client.IConfidentialClientApplicationWithCertificate, Microsoft.Identity.Client.ILongRunningWebApi - { - public Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder AcquireTokenByAuthorizationCode(System.Collections.Generic.IEnumerable scopes, string authorizationCode) => throw null; - public System.Threading.Tasks.Task AcquireTokenByAuthorizationCodeAsync(string authorizationCode, System.Collections.Generic.IEnumerable scopes) => throw null; - Microsoft.Identity.Client.AcquireTokenByRefreshTokenParameterBuilder Microsoft.Identity.Client.IByRefreshToken.AcquireTokenByRefreshToken(System.Collections.Generic.IEnumerable scopes, string refreshToken) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IByRefreshToken.AcquireTokenByRefreshTokenAsync(System.Collections.Generic.IEnumerable scopes, string refreshToken) => throw null; - public Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder AcquireTokenForClient(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task AcquireTokenForClientAsync(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task AcquireTokenForClientAsync(System.Collections.Generic.IEnumerable scopes, bool forceRefresh) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IConfidentialClientApplicationWithCertificate.AcquireTokenForClientWithCertificateAsync(System.Collections.Generic.IEnumerable scopes) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IConfidentialClientApplicationWithCertificate.AcquireTokenForClientWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, bool forceRefresh) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder AcquireTokenInLongRunningProcess(System.Collections.Generic.IEnumerable scopes, string longRunningProcessSessionKey) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder AcquireTokenOnBehalfOf(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion) => throw null; - public System.Threading.Tasks.Task AcquireTokenOnBehalfOfAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion) => throw null; - public System.Threading.Tasks.Task AcquireTokenOnBehalfOfAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion, string authority) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IConfidentialClientApplicationWithCertificate.AcquireTokenOnBehalfOfWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IConfidentialClientApplicationWithCertificate.AcquireTokenOnBehalfOfWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion, string authority) => throw null; - public Microsoft.Identity.Client.ITokenCache AppTokenCache { get => throw null; } - public const string AttemptRegionDiscovery = default; - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public ConfidentialClientApplication(string clientId, string redirectUri, Microsoft.Identity.Client.ClientCredential clientCredential, Microsoft.Identity.Client.TokenCache userTokenCache, Microsoft.Identity.Client.TokenCache appTokenCache) => throw null; - public ConfidentialClientApplication(string clientId, string authority, string redirectUri, Microsoft.Identity.Client.ClientCredential clientCredential, Microsoft.Identity.Client.TokenCache userTokenCache, Microsoft.Identity.Client.TokenCache appTokenCache) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder GetAuthorizationRequestUrl(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task GetAuthorizationRequestUrlAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, string extraQueryParameters) => throw null; - public System.Threading.Tasks.Task GetAuthorizationRequestUrlAsync(System.Collections.Generic.IEnumerable scopes, string redirectUri, string loginHint, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority) => throw null; - public Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder InitiateLongRunningProcessInWebApi(System.Collections.Generic.IEnumerable scopes, string userToken, ref string longRunningProcessSessionKey) => throw null; - public System.Threading.Tasks.Task StopLongRunningProcessInWebApiAsync(string longRunningProcessSessionKey, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public class ConfidentialClientApplicationBuilder : Microsoft.Identity.Client.AbstractApplicationBuilder - { - public Microsoft.Identity.Client.IConfidentialClientApplication Build() => throw null; - public static Microsoft.Identity.Client.ConfidentialClientApplicationBuilder Create(string clientId) => throw null; - public static Microsoft.Identity.Client.ConfidentialClientApplicationBuilder CreateWithApplicationOptions(Microsoft.Identity.Client.ConfidentialClientApplicationOptions options) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithAzureRegion(string azureRegion = default(string)) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithCacheSynchronization(bool enableCacheSynchronization) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, bool sendX5C) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientAssertion(string signedClientAssertion) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientAssertion(System.Func clientAssertionDelegate) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientAssertion(System.Func> clientAssertionAsyncDelegate) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientAssertion(System.Func> clientAssertionAsyncDelegate) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientClaims(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Collections.Generic.IDictionary claimsToSign, bool mergeWithDefaultClaims) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientClaims(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Collections.Generic.IDictionary claimsToSign, bool mergeWithDefaultClaims = default(bool), bool sendX5C = default(bool)) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithClientSecret(string clientSecret) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithGenericAuthority(string authorityUri) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithOidcAuthority(string authorityUri) => throw null; - public Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithTelemetryClient(params Microsoft.IdentityModel.Abstractions.ITelemetryClient[] telemetryClients) => throw null; - } - public class ConfidentialClientApplicationOptions : Microsoft.Identity.Client.ApplicationOptions - { - public string AzureRegion { get => throw null; set { } } - public string ClientSecret { get => throw null; set { } } - public ConfidentialClientApplicationOptions() => throw null; - public bool EnableCacheSynchronization { get => throw null; set { } } - } - public class DeviceCodeResult - { - public string ClientId { get => throw null; } - public string DeviceCode { get => throw null; } - public System.DateTimeOffset ExpiresOn { get => throw null; } - public long Interval { get => throw null; } - public string Message { get => throw null; } - public System.Collections.Generic.IReadOnlyCollection Scopes { get => throw null; } - public string UserCode { get => throw null; } - public string VerificationUrl { get => throw null; } - } - public class EmbeddedWebViewOptions - { - public EmbeddedWebViewOptions() => throw null; - public string Title { get => throw null; set { } } - public string WebView2BrowserExecutableFolder { get => throw null; set { } } - } - namespace Extensibility - { - public static class AbstractConfidentialClientAcquireTokenParameterBuilderExtension - { - public static Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder OnBeforeTokenRequest(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, System.Func onBeforeTokenRequestHandler) where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder => throw null; - public static Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder WithProofOfPosessionKeyId(this Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder builder, string keyId, string expectedTokenTypeFromAad = default(string)) where T : Microsoft.Identity.Client.AbstractAcquireTokenParameterBuilder => throw null; - } - public static partial class AcquireTokenForClientBuilderExtensions - { - public static Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder WithProofOfPosessionKeyId(this Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder builder, string keyId, string expectedTokenTypeFromAad = default(string)) => throw null; - } - public static partial class AcquireTokenInteractiveParameterBuilderExtensions - { - public static Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithCustomWebUi(this Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder builder, Microsoft.Identity.Client.Extensibility.ICustomWebUi customWebUi) => throw null; - } - public static partial class AcquireTokenOnBehalfOfParameterBuilderExtensions - { - public static Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder WithSearchInCacheForLongRunningProcess(this Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder builder, bool searchInCache = default(bool)) => throw null; - } - public class AppTokenProviderParameters - { - public System.Threading.CancellationToken CancellationToken { get => throw null; } - public string Claims { get => throw null; } - public string CorrelationId { get => throw null; } - public AppTokenProviderParameters() => throw null; - public System.Collections.Generic.IEnumerable Scopes { get => throw null; } - public string TenantId { get => throw null; } - } - public class AppTokenProviderResult - { - public string AccessToken { get => throw null; set { } } - public AppTokenProviderResult() => throw null; - public long ExpiresInSeconds { get => throw null; set { } } - public long? RefreshInSeconds { get => throw null; set { } } - } - public static partial class ConfidentialClientApplicationBuilderExtensions - { - public static Microsoft.Identity.Client.ConfidentialClientApplicationBuilder WithAppTokenProvider(this Microsoft.Identity.Client.ConfidentialClientApplicationBuilder builder, System.Func> appTokenProvider) => throw null; - } - public static partial class ConfidentialClientApplicationExtensions - { - public static System.Threading.Tasks.Task StopLongRunningProcessInWebApiAsync(this Microsoft.Identity.Client.ILongRunningWebApi clientApp, string longRunningProcessSessionKey, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - } - public interface ICustomWebUi - { - System.Threading.Tasks.Task AcquireAuthorizationCodeAsync(System.Uri authorizationUri, System.Uri redirectUri, System.Threading.CancellationToken cancellationToken); - } - public sealed class OnBeforeTokenRequestData - { - public System.Collections.Generic.IDictionary BodyParameters { get => throw null; } - public System.Threading.CancellationToken CancellationToken { get => throw null; } - public OnBeforeTokenRequestData(System.Collections.Generic.IDictionary bodyParameters, System.Collections.Generic.IDictionary headers, System.Uri requestUri, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Collections.Generic.IDictionary Headers { get => throw null; } - public System.Uri RequestUri { get => throw null; set { } } - } - } - public sealed class GetAuthorizationRequestUrlParameterBuilder : Microsoft.Identity.Client.AbstractConfidentialClientAcquireTokenParameterBuilder - { - public System.Threading.Tasks.Task ExecuteAsync(System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task ExecuteAsync() => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithAccount(Microsoft.Identity.Client.IAccount account) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithCcsRoutingHint(string userObjectIdentifier, string tenantIdentifier) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithExtraScopesToConsent(System.Collections.Generic.IEnumerable extraScopesToConsent) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithLoginHint(string loginHint) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithPkce(out string codeVerifier) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithPrompt(Microsoft.Identity.Client.Prompt prompt) => throw null; - public Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder WithRedirectUri(string redirectUri) => throw null; - } - public interface IAccount - { - string Environment { get; } - Microsoft.Identity.Client.AccountId HomeAccountId { get; } - string Username { get; } - } - public interface IAppConfig - { - System.Collections.Generic.IEnumerable ClientCapabilities { get; } - System.Security.Cryptography.X509Certificates.X509Certificate2 ClientCredentialCertificate { get; } - string ClientId { get; } - string ClientName { get; } - string ClientSecret { get; } - string ClientVersion { get; } - bool EnablePiiLogging { get; } - bool ExperimentalFeaturesEnabled { get; } - System.Collections.Generic.IDictionary ExtraQueryParameters { get; } - Microsoft.Identity.Client.IMsalHttpClientFactory HttpClientFactory { get; } - bool IsBrokerEnabled { get; } - bool IsDefaultPlatformLoggingEnabled { get; } - bool LegacyCacheCompatibilityEnabled { get; } - Microsoft.Identity.Client.LogCallback LoggingCallback { get; } - Microsoft.Identity.Client.LogLevel LogLevel { get; } - System.Func ParentActivityOrWindowFunc { get; } - string RedirectUri { get; } - Microsoft.Identity.Client.ITelemetryConfig TelemetryConfig { get; } - string TenantId { get; } - } - public interface IApplicationBase - { - } - public interface IByRefreshToken - { - Microsoft.Identity.Client.AcquireTokenByRefreshTokenParameterBuilder AcquireTokenByRefreshToken(System.Collections.Generic.IEnumerable scopes, string refreshToken); - System.Threading.Tasks.Task AcquireTokenByRefreshTokenAsync(System.Collections.Generic.IEnumerable scopes, string refreshToken); - } - public interface IClientApplicationBase : Microsoft.Identity.Client.IApplicationBase - { - Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder AcquireTokenSilent(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account); - Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder AcquireTokenSilent(System.Collections.Generic.IEnumerable scopes, string loginHint); - System.Threading.Tasks.Task AcquireTokenSilentAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account); - System.Threading.Tasks.Task AcquireTokenSilentAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, string authority, bool forceRefresh); - Microsoft.Identity.Client.IAppConfig AppConfig { get; } - string Authority { get; } - string ClientId { get; } - string Component { get; set; } - System.Threading.Tasks.Task GetAccountAsync(string identifier); - System.Threading.Tasks.Task> GetAccountsAsync(); - System.Threading.Tasks.Task> GetAccountsAsync(string userFlow); - Microsoft.Identity.Client.IUser GetUser(string identifier); - string RedirectUri { get; set; } - void Remove(Microsoft.Identity.Client.IUser user); - System.Threading.Tasks.Task RemoveAsync(Microsoft.Identity.Client.IAccount account); - string SliceParameters { get; set; } - System.Collections.Generic.IEnumerable Users { get; } - Microsoft.Identity.Client.ITokenCache UserTokenCache { get; } - bool ValidateAuthority { get; } - } - public interface IConfidentialClientApplication : Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IClientApplicationBase - { - Microsoft.Identity.Client.AcquireTokenByAuthorizationCodeParameterBuilder AcquireTokenByAuthorizationCode(System.Collections.Generic.IEnumerable scopes, string authorizationCode); - System.Threading.Tasks.Task AcquireTokenByAuthorizationCodeAsync(string authorizationCode, System.Collections.Generic.IEnumerable scopes); - Microsoft.Identity.Client.AcquireTokenForClientParameterBuilder AcquireTokenForClient(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenForClientAsync(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenForClientAsync(System.Collections.Generic.IEnumerable scopes, bool forceRefresh); - Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder AcquireTokenOnBehalfOf(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion); - System.Threading.Tasks.Task AcquireTokenOnBehalfOfAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion); - System.Threading.Tasks.Task AcquireTokenOnBehalfOfAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion, string authority); - Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder AcquireTokenSilent(System.Collections.Generic.IEnumerable scopes, string loginHint); - Microsoft.Identity.Client.ITokenCache AppTokenCache { get; } - System.Threading.Tasks.Task> GetAccountsAsync(); - Microsoft.Identity.Client.GetAuthorizationRequestUrlParameterBuilder GetAuthorizationRequestUrl(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task GetAuthorizationRequestUrlAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, string extraQueryParameters); - System.Threading.Tasks.Task GetAuthorizationRequestUrlAsync(System.Collections.Generic.IEnumerable scopes, string redirectUri, string loginHint, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority); - } - public interface IConfidentialClientApplicationWithCertificate - { - System.Threading.Tasks.Task AcquireTokenForClientWithCertificateAsync(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenForClientWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, bool forceRefresh); - System.Threading.Tasks.Task AcquireTokenOnBehalfOfWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion); - System.Threading.Tasks.Task AcquireTokenOnBehalfOfWithCertificateAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UserAssertion userAssertion, string authority); - } - public interface ILongRunningWebApi - { - Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder AcquireTokenInLongRunningProcess(System.Collections.Generic.IEnumerable scopes, string longRunningProcessSessionKey); - Microsoft.Identity.Client.AcquireTokenOnBehalfOfParameterBuilder InitiateLongRunningProcessInWebApi(System.Collections.Generic.IEnumerable scopes, string userToken, ref string longRunningProcessSessionKey); - } - public interface IManagedIdentityApplication : Microsoft.Identity.Client.IApplicationBase - { - Microsoft.Identity.Client.AcquireTokenForManagedIdentityParameterBuilder AcquireTokenForManagedIdentity(string resource); - } - public interface IMsalHttpClientFactory - { - System.Net.Http.HttpClient GetHttpClient(); - } - public class IntuneAppProtectionPolicyRequiredException : Microsoft.Identity.Client.MsalServiceException - { - public string AccountUserId { get => throw null; set { } } - public string AuthorityUrl { get => throw null; set { } } - public IntuneAppProtectionPolicyRequiredException(string errorCode, string errorMessage) : base(default(string), default(string)) => throw null; - public string TenantId { get => throw null; set { } } - public string Upn { get => throw null; set { } } - } - public interface IPublicClientApplication : Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IClientApplicationBase - { - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority, Microsoft.Identity.Client.UIParent parent); - System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority, Microsoft.Identity.Client.UIParent parent); - Microsoft.Identity.Client.AcquireTokenByIntegratedWindowsAuthParameterBuilder AcquireTokenByIntegratedWindowsAuth(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenByIntegratedWindowsAuthAsync(System.Collections.Generic.IEnumerable scopes); - System.Threading.Tasks.Task AcquireTokenByIntegratedWindowsAuthAsync(System.Collections.Generic.IEnumerable scopes, string username); - Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(System.Collections.Generic.IEnumerable scopes, string username, System.Security.SecureString password); - Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(System.Collections.Generic.IEnumerable scopes, string username, string password); - System.Threading.Tasks.Task AcquireTokenByUsernamePasswordAsync(System.Collections.Generic.IEnumerable scopes, string username, System.Security.SecureString securePassword); - Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder AcquireTokenInteractive(System.Collections.Generic.IEnumerable scopes); - Microsoft.Identity.Client.AcquireTokenWithDeviceCodeParameterBuilder AcquireTokenWithDeviceCode(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback); - System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback); - System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, string extraQueryParameters, System.Func deviceCodeResultCallback); - System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback, System.Threading.CancellationToken cancellationToken); - System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, string extraQueryParameters, System.Func deviceCodeResultCallback, System.Threading.CancellationToken cancellationToken); - bool IsSystemWebViewAvailable { get; } - } - public interface ITelemetryConfig - { - Microsoft.Identity.Client.TelemetryAudienceType AudienceType { get; } - System.Action DispatchAction { get; } - string SessionId { get; } - } - public interface ITelemetryEventPayload - { - System.Collections.Generic.IReadOnlyDictionary BoolValues { get; } - System.Collections.Generic.IReadOnlyDictionary Int64Values { get; } - System.Collections.Generic.IReadOnlyDictionary IntValues { get; } - string Name { get; } - System.Collections.Generic.IReadOnlyDictionary StringValues { get; } - string ToJsonString(); - } - public interface ITokenCache - { - void Deserialize(byte[] msalV2State); - void DeserializeAdalV3(byte[] adalV3State); - void DeserializeMsalV2(byte[] msalV2State); - void DeserializeMsalV3(byte[] msalV3State, bool shouldClearExistingCache = default(bool)); - void DeserializeUnifiedAndAdalCache(Microsoft.Identity.Client.Cache.CacheData cacheData); - byte[] Serialize(); - byte[] SerializeAdalV3(); - byte[] SerializeMsalV2(); - byte[] SerializeMsalV3(); - Microsoft.Identity.Client.Cache.CacheData SerializeUnifiedAndAdalCache(); - void SetAfterAccess(Microsoft.Identity.Client.TokenCacheCallback afterAccess); - void SetAfterAccessAsync(System.Func afterAccess); - void SetBeforeAccess(Microsoft.Identity.Client.TokenCacheCallback beforeAccess); - void SetBeforeAccessAsync(System.Func beforeAccess); - void SetBeforeWrite(Microsoft.Identity.Client.TokenCacheCallback beforeWrite); - void SetBeforeWriteAsync(System.Func beforeWrite); - } - public interface ITokenCacheSerializer - { - void DeserializeAdalV3(byte[] adalV3State); - void DeserializeMsalV2(byte[] msalV2State); - void DeserializeMsalV3(byte[] msalV3State, bool shouldClearExistingCache = default(bool)); - byte[] SerializeAdalV3(); - byte[] SerializeMsalV2(); - byte[] SerializeMsalV3(); - } - public interface IUser - { - string DisplayableId { get; } - string Identifier { get; } - string IdentityProvider { get; } - string Name { get; } - } - namespace Kerberos - { - public enum KerberosKeyTypes - { - None = 0, - DecCbcCrc = 1, - DesCbcMd5 = 3, - Aes128CtsHmacSha196 = 17, - Aes256CtsHmacSha196 = 18, - } - public class KerberosSupplementalTicket - { - public string ClientKey { get => throw null; set { } } - public string ClientName { get => throw null; set { } } - public KerberosSupplementalTicket() => throw null; - public KerberosSupplementalTicket(string errorMessage) => throw null; - public string ErrorMessage { get => throw null; set { } } - public string KerberosMessageBuffer { get => throw null; set { } } - public Microsoft.Identity.Client.Kerberos.KerberosKeyTypes KeyType { get => throw null; set { } } - public string Realm { get => throw null; set { } } - public string ServicePrincipalName { get => throw null; set { } } - public override string ToString() => throw null; - } - public static class KerberosSupplementalTicketManager - { - public static Microsoft.Identity.Client.Kerberos.KerberosSupplementalTicket FromIdToken(string idToken) => throw null; - public static byte[] GetKerberosTicketFromWindowsTicketCache(string servicePrincipalName) => throw null; - public static byte[] GetKerberosTicketFromWindowsTicketCache(string servicePrincipalName, long logonId) => throw null; - public static byte[] GetKrbCred(Microsoft.Identity.Client.Kerberos.KerberosSupplementalTicket ticket) => throw null; - public static void SaveToWindowsTicketCache(Microsoft.Identity.Client.Kerberos.KerberosSupplementalTicket ticket) => throw null; - public static void SaveToWindowsTicketCache(Microsoft.Identity.Client.Kerberos.KerberosSupplementalTicket ticket, long logonId) => throw null; - } - public enum KerberosTicketContainer - { - IdToken = 0, - AccessToken = 1, - } - } - public delegate void LogCallback(Microsoft.Identity.Client.LogLevel level, string message, bool containsPii); - public sealed class Logger - { - public Logger() => throw null; - public static bool DefaultLoggingEnabled { get => throw null; set { } } - public static Microsoft.Identity.Client.LogLevel Level { get => throw null; set { } } - public static Microsoft.Identity.Client.LogCallback LogCallback { set { } } - public static bool PiiLoggingEnabled { get => throw null; set { } } - } - public enum LogLevel - { - Always = -1, - Error = 0, - Warning = 1, - Info = 2, - Verbose = 3, - } - namespace ManagedIdentity - { - public enum ManagedIdentitySource - { - None = 0, - Imds = 1, - AppService = 2, - AzureArc = 3, - CloudShell = 4, - ServiceFabric = 5, - DefaultToImds = 6, - } - } - public sealed class ManagedIdentityApplication : Microsoft.Identity.Client.ApplicationBase, Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IManagedIdentityApplication - { - public Microsoft.Identity.Client.AcquireTokenForManagedIdentityParameterBuilder AcquireTokenForManagedIdentity(string resource) => throw null; - public static Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource GetManagedIdentitySource() => throw null; - } - public sealed class ManagedIdentityApplicationBuilder : Microsoft.Identity.Client.BaseAbstractApplicationBuilder - { - public Microsoft.Identity.Client.IManagedIdentityApplication Build() => throw null; - public static Microsoft.Identity.Client.ManagedIdentityApplicationBuilder Create(Microsoft.Identity.Client.AppConfig.ManagedIdentityId managedIdentityId) => throw null; - public Microsoft.Identity.Client.ManagedIdentityApplicationBuilder WithTelemetryClient(params Microsoft.IdentityModel.Abstractions.ITelemetryClient[] telemetryClients) => throw null; - } - public class Metrics - { - public static long TotalAccessTokensFromBroker { get => throw null; } - public static long TotalAccessTokensFromCache { get => throw null; } - public static long TotalAccessTokensFromIdP { get => throw null; } - public static long TotalDurationInMs { get => throw null; } - } - public class MsalClaimsChallengeException : Microsoft.Identity.Client.MsalUiRequiredException - { - public MsalClaimsChallengeException(string errorCode, string errorMessage) : base(default(string), default(string)) => throw null; - public MsalClaimsChallengeException(string errorCode, string errorMessage, System.Exception innerException) : base(default(string), default(string)) => throw null; - public MsalClaimsChallengeException(string errorCode, string errorMessage, System.Exception innerException, Microsoft.Identity.Client.UiRequiredExceptionClassification classification) : base(default(string), default(string)) => throw null; - } - public class MsalClientException : Microsoft.Identity.Client.MsalException - { - public MsalClientException(string errorCode) => throw null; - public MsalClientException(string errorCode, string errorMessage) => throw null; - public MsalClientException(string errorCode, string errorMessage, System.Exception innerException) => throw null; - } - public static class MsalError - { - public const string AccessDenied = default; - public const string AccessingWsMetadataExchangeFailed = default; - public const string AccessTokenTypeMissing = default; - public const string ActivityRequired = default; - public const string AdfsNotSupportedWithBroker = default; - public const string AndroidBrokerOperationFailed = default; - public const string AndroidBrokerSignatureVerificationFailed = default; - public const string AuthenticationCanceledError = default; - public const string AuthenticationFailed = default; - public const string AuthenticationUiFailed = default; - public const string AuthenticationUiFailedError = default; - public const string AuthorityHostMismatch = default; - public const string AuthorityTenantSpecifiedTwice = default; - public const string AuthorityTypeMismatch = default; - public const string AuthorityValidationFailed = default; - public const string B2CAuthorityHostMismatch = default; - public const string BrokerApplicationRequired = default; - public const string BrokerDoesNotSupportPop = default; - public const string BrokerNonceMismatch = default; - public const string BrokerRequiredForPop = default; - public const string BrokerResponseHashMismatch = default; - public const string BrokerResponseReturnedError = default; - public const string CannotAccessUserInformationOrUserNotDomainJoined = default; - public const string CannotInvokeBroker = default; - public const string CertificateNotRsa = default; - public const string CertWithoutPrivateKey = default; - public const string ClientCredentialAuthenticationTypeMustBeDefined = default; - public const string ClientCredentialAuthenticationTypesAreMutuallyExclusive = default; - public const string CodeExpired = default; - public const string CombinedUserAppCacheNotSupported = default; - public const string CryptographicError = default; - public const string CurrentBrokerAccount = default; - public const string CustomMetadataInstanceOrUri = default; - public const string CustomWebUiRedirectUriMismatch = default; - public const string CustomWebUiReturnedInvalidUri = default; - public const string DefaultRedirectUriIsInvalid = default; - public const string DeviceCertificateNotFound = default; - public const string DuplicateQueryParameterError = default; - public const string EncodedTokenTooLong = default; - public const string ExactlyOneScopeExpected = default; - public const string ExperimentalFeature = default; - public const string FailedToAcquireTokenSilentlyFromBroker = default; - public const string FailedToGetBrokerResponse = default; - public const string FailedToRefreshToken = default; - public const string FederatedServiceReturnedError = default; - public const string GetUserNameFailed = default; - public const string HttpListenerError = default; - public const string HttpStatusCodeNotOk = default; - public const string HttpStatusNotFound = default; - public const string InitializeProcessSecurityError = default; - public const string IntegratedWindowsAuthenticationFailed = default; - public const string IntegratedWindowsAuthNotSupportedForManagedUser = default; - public const string InteractionRequired = default; - public const string InternalError = default; - public const string InvalidAdalCacheMultipleRTs = default; - public const string InvalidAuthority = default; - public const string InvalidAuthorityType = default; - public const string InvalidAuthorizationUri = default; - public const string InvalidClient = default; - public const string InvalidGrantError = default; - public const string InvalidInstance = default; - public const string InvalidJsonClaimsFormat = default; - public const string InvalidJwtError = default; - public const string InvalidManagedIdentityEndpoint = default; - public const string InvalidManagedIdentityResponse = default; - public const string InvalidOwnerWindowType = default; - public const string InvalidRequest = default; - public const string InvalidTokenProviderResponseValue = default; - public const string InvalidUserInstanceMetadata = default; - public const string JsonParseError = default; - public const string LinuxXdgOpen = default; - public const string LoopbackRedirectUri = default; - public const string LoopbackResponseUriMismatch = default; - public const string ManagedIdentityRequestFailed = default; - public const string ManagedIdentityUnreachableNetwork = default; - public const string MissingFederationMetadataUrl = default; - public const string MissingPassiveAuthEndpoint = default; - public const string MultipleAccountsForLoginHint = default; - public const string MultipleTokensMatchedError = default; - public const string NetworkNotAvailableError = default; - public const string NoAccountForLoginHint = default; - public const string NoAndroidBrokerAccountFound = default; - public const string NoAndroidBrokerInstalledOnDevice = default; - public const string NoClientId = default; - public const string NonceRequiredForPopOnPCA = default; - public const string NonHttpsRedirectNotSupported = default; - public const string NonParsableOAuthError = default; - public const string NoPromptFailedError = default; - public const string NoRedirectUri = default; - public const string NoTokensFoundError = default; - public const string NoUsernameOrAccountIDProvidedForSilentAndroidBrokerAuthentication = default; - public const string NullIntentReturnedFromAndroidBroker = default; - public const string OboCacheKeyNotInCacheError = default; - public const string ParsingWsMetadataExchangeFailed = default; - public const string ParsingWsTrustResponseFailed = default; - public const string PasswordRequiredForManagedUserError = default; - public const string PlatformNotSupported = default; - public const string RedirectUriValidationFailed = default; - public const string RegionalAndAuthorityOverride = default; - public const string RegionalAuthorityValidation = default; - public const string RegionDiscoveryFailed = default; - public const string RegionDiscoveryNotEnabled = default; - public const string RegionDiscoveryWithCustomInstanceMetadata = default; - public const string RequestThrottled = default; - public const string RequestTimeout = default; - public const string RopcDoesNotSupportMsaAccounts = default; - public const string ScopesRequired = default; - public const string ServiceNotAvailable = default; - public const string SetCiamAuthorityAtRequestLevelNotSupported = default; - public const string SSHCertUsedAsHttpHeader = default; - public const string StateMismatchError = default; - public const string StaticCacheWithExternalSerialization = default; - public const string SystemWebviewOptionsNotApplicable = default; - public const string TelemetryConfigOrTelemetryCallback = default; - public const string TenantDiscoveryFailedError = default; - public const string TenantOverrideNonAad = default; - public const string TokenCacheNullError = default; - public const string TokenTypeMismatch = default; - public const string UapCannotFindDomainUser = default; - public const string UapCannotFindUpn = default; - public const string UnableToParseAuthenticationHeader = default; - public const string UnauthorizedClient = default; - public const string UnknownBrokerError = default; - public const string UnknownError = default; - public const string UnknownManagedIdentityError = default; - public const string UnknownUser = default; - public const string UnknownUserType = default; - public const string UpnRequired = default; - public const string UserAssertionNullError = default; - public const string UserAssignedManagedIdentityNotConfigurableAtRuntime = default; - public const string UserAssignedManagedIdentityNotSupported = default; - public const string UserMismatch = default; - public const string UserNullError = default; - public const string UserRealmDiscoveryFailed = default; - public const string ValidateAuthorityOrCustomMetadata = default; - public const string WABError = default; - public const string WamFailedToSignout = default; - public const string WamInteractiveError = default; - public const string WamNoB2C = default; - public const string WamPickerError = default; - public const string WamScopesRequired = default; - public const string WamUiThread = default; - public const string WebView2LoaderNotFound = default; - public const string WebView2NotInstalled = default; - public const string WebviewUnavailable = default; - public const string WsTrustEndpointNotFoundInMetadataDocument = default; - } - public class MsalException : System.Exception - { - public System.Collections.Generic.IReadOnlyDictionary AdditionalExceptionData { get => throw null; set { } } - public const string BrokerErrorCode = default; - public const string BrokerErrorContext = default; - public const string BrokerErrorStatus = default; - public const string BrokerErrorTag = default; - public const string BrokerTelemetry = default; - public string CorrelationId { get => throw null; set { } } - public MsalException() => throw null; - public MsalException(string errorCode) => throw null; - public MsalException(string errorCode, string errorMessage) => throw null; - public MsalException(string errorCode, string errorMessage, System.Exception innerException) => throw null; - public string ErrorCode { get => throw null; } - public static Microsoft.Identity.Client.MsalException FromJsonString(string json) => throw null; - public bool IsRetryable { get => throw null; set { } } - public const string ManagedIdentitySource = default; - public string ToJsonString() => throw null; - public override string ToString() => throw null; - } - public class MsalManagedIdentityException : Microsoft.Identity.Client.MsalServiceException - { - public MsalManagedIdentityException(string errorCode, string errorMessage, Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource source) : base(default(string), default(string)) => throw null; - public MsalManagedIdentityException(string errorCode, string errorMessage, Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource source, int statusCode) : base(default(string), default(string)) => throw null; - public MsalManagedIdentityException(string errorCode, string errorMessage, System.Exception innerException, Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource source, int statusCode) : base(default(string), default(string)) => throw null; - public MsalManagedIdentityException(string errorCode, string errorMessage, System.Exception innerException, Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource source) : base(default(string), default(string)) => throw null; - public Microsoft.Identity.Client.ManagedIdentity.ManagedIdentitySource ManagedIdentitySource { get => throw null; } - protected override void UpdateIsRetryable() => throw null; - } - public class MsalServiceException : Microsoft.Identity.Client.MsalException - { - public string Claims { get => throw null; } - public MsalServiceException(string errorCode, string errorMessage) => throw null; - public MsalServiceException(string errorCode, string errorMessage, int statusCode) => throw null; - public MsalServiceException(string errorCode, string errorMessage, System.Exception innerException) => throw null; - public MsalServiceException(string errorCode, string errorMessage, int statusCode, System.Exception innerException) => throw null; - public MsalServiceException(string errorCode, string errorMessage, int statusCode, string claims, System.Exception innerException) => throw null; - public System.Net.Http.Headers.HttpResponseHeaders Headers { get => throw null; set { } } - public string ResponseBody { get => throw null; set { } } - public int StatusCode { get => throw null; } - public override string ToString() => throw null; - protected virtual void UpdateIsRetryable() => throw null; - } - public class MsalThrottledServiceException : Microsoft.Identity.Client.MsalServiceException - { - public MsalThrottledServiceException(Microsoft.Identity.Client.MsalServiceException originalException) : base(default(string), default(string)) => throw null; - public Microsoft.Identity.Client.MsalServiceException OriginalServiceException { get => throw null; } - } - public class MsalThrottledUiRequiredException : Microsoft.Identity.Client.MsalUiRequiredException - { - public MsalThrottledUiRequiredException(Microsoft.Identity.Client.MsalUiRequiredException originalException) : base(default(string), default(string)) => throw null; - public Microsoft.Identity.Client.MsalUiRequiredException OriginalServiceException { get => throw null; } - } - public class MsalUiRequiredException : Microsoft.Identity.Client.MsalServiceException - { - public Microsoft.Identity.Client.UiRequiredExceptionClassification Classification { get => throw null; } - public MsalUiRequiredException(string errorCode, string errorMessage) : base(default(string), default(string)) => throw null; - public MsalUiRequiredException(string errorCode, string errorMessage, System.Exception innerException) : base(default(string), default(string)) => throw null; - public MsalUiRequiredException(string errorCode, string errorMessage, System.Exception innerException, Microsoft.Identity.Client.UiRequiredExceptionClassification classification) : base(default(string), default(string)) => throw null; - } - public static partial class OsCapabilitiesExtensions - { - public static System.Security.Cryptography.X509Certificates.X509Certificate2 GetCertificate(this Microsoft.Identity.Client.IConfidentialClientApplication confidentialClientApplication) => throw null; - public static bool IsEmbeddedWebViewAvailable(this Microsoft.Identity.Client.IPublicClientApplication publicClientApplication) => throw null; - public static bool IsSystemWebViewAvailable(this Microsoft.Identity.Client.IPublicClientApplication publicClientApplication) => throw null; - public static bool IsUserInteractive(this Microsoft.Identity.Client.IPublicClientApplication publicClientApplication) => throw null; - } - namespace Platforms - { - namespace Features - { - namespace DesktopOs - { - namespace Kerberos - { - public abstract class Credential - { - protected Credential() => throw null; - public static Microsoft.Identity.Client.Platforms.Features.DesktopOs.Kerberos.Credential Current() => throw null; - } - } - } - } - } - public struct Prompt - { - public static readonly Microsoft.Identity.Client.Prompt Consent; - public static readonly Microsoft.Identity.Client.Prompt Create; - public override bool Equals(object obj) => throw null; - public static readonly Microsoft.Identity.Client.Prompt ForceLogin; - public override int GetHashCode() => throw null; - public static readonly Microsoft.Identity.Client.Prompt NoPrompt; - public static bool operator ==(Microsoft.Identity.Client.Prompt x, Microsoft.Identity.Client.Prompt y) => throw null; - public static bool operator !=(Microsoft.Identity.Client.Prompt x, Microsoft.Identity.Client.Prompt y) => throw null; - public static readonly Microsoft.Identity.Client.Prompt SelectAccount; - } - public sealed class PublicClientApplication : Microsoft.Identity.Client.ClientApplicationBase, Microsoft.Identity.Client.IApplicationBase, Microsoft.Identity.Client.IByRefreshToken, Microsoft.Identity.Client.IClientApplicationBase, Microsoft.Identity.Client.IPublicClientApplication - { - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, string loginHint, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority, Microsoft.Identity.Client.UIParent parent) => throw null; - public System.Threading.Tasks.Task AcquireTokenAsync(System.Collections.Generic.IEnumerable scopes, Microsoft.Identity.Client.IAccount account, Microsoft.Identity.Client.Prompt prompt, string extraQueryParameters, System.Collections.Generic.IEnumerable extraScopesToConsent, string authority, Microsoft.Identity.Client.UIParent parent) => throw null; - public Microsoft.Identity.Client.AcquireTokenByIntegratedWindowsAuthParameterBuilder AcquireTokenByIntegratedWindowsAuth(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task AcquireTokenByIntegratedWindowsAuthAsync(System.Collections.Generic.IEnumerable scopes) => throw null; - public System.Threading.Tasks.Task AcquireTokenByIntegratedWindowsAuthAsync(System.Collections.Generic.IEnumerable scopes, string username) => throw null; - Microsoft.Identity.Client.AcquireTokenByRefreshTokenParameterBuilder Microsoft.Identity.Client.IByRefreshToken.AcquireTokenByRefreshToken(System.Collections.Generic.IEnumerable scopes, string refreshToken) => throw null; - System.Threading.Tasks.Task Microsoft.Identity.Client.IByRefreshToken.AcquireTokenByRefreshTokenAsync(System.Collections.Generic.IEnumerable scopes, string refreshToken) => throw null; - public Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(System.Collections.Generic.IEnumerable scopes, string username, System.Security.SecureString password) => throw null; - public Microsoft.Identity.Client.AcquireTokenByUsernamePasswordParameterBuilder AcquireTokenByUsernamePassword(System.Collections.Generic.IEnumerable scopes, string username, string password) => throw null; - public System.Threading.Tasks.Task AcquireTokenByUsernamePasswordAsync(System.Collections.Generic.IEnumerable scopes, string username, System.Security.SecureString securePassword) => throw null; - public Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder AcquireTokenInteractive(System.Collections.Generic.IEnumerable scopes) => throw null; - public Microsoft.Identity.Client.AcquireTokenWithDeviceCodeParameterBuilder AcquireTokenWithDeviceCode(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback) => throw null; - public System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback) => throw null; - public System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, string extraQueryParameters, System.Func deviceCodeResultCallback) => throw null; - public System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, System.Func deviceCodeResultCallback, System.Threading.CancellationToken cancellationToken) => throw null; - public System.Threading.Tasks.Task AcquireTokenWithDeviceCodeAsync(System.Collections.Generic.IEnumerable scopes, string extraQueryParameters, System.Func deviceCodeResultCallback, System.Threading.CancellationToken cancellationToken) => throw null; - public PublicClientApplication(string clientId) => throw null; - public PublicClientApplication(string clientId, string authority) => throw null; - public PublicClientApplication(string clientId, string authority, Microsoft.Identity.Client.TokenCache userTokenCache) => throw null; - public bool IsBrokerAvailable() => throw null; - public bool IsEmbeddedWebViewAvailable() => throw null; - public bool IsProofOfPossessionSupportedByClient() => throw null; - public bool IsSystemWebViewAvailable { get => throw null; } - public bool IsUserInteractive() => throw null; - public static Microsoft.Identity.Client.IAccount OperatingSystemAccount { get => throw null; } - } - public sealed class PublicClientApplicationBuilder : Microsoft.Identity.Client.AbstractApplicationBuilder - { - public Microsoft.Identity.Client.IPublicClientApplication Build() => throw null; - public static Microsoft.Identity.Client.PublicClientApplicationBuilder Create(string clientId) => throw null; - public static Microsoft.Identity.Client.PublicClientApplicationBuilder CreateWithApplicationOptions(Microsoft.Identity.Client.PublicClientApplicationOptions options) => throw null; - public bool IsBrokerAvailable() => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithBroker(bool enableBroker = default(bool)) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithDefaultRedirectUri() => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithIosKeychainSecurityGroup(string keychainSecurityGroup) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithKerberosTicketClaim(string servicePrincipalName, Microsoft.Identity.Client.Kerberos.KerberosTicketContainer ticketContainer) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithMultiCloudSupport(bool enableMultiCloudSupport) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithOidcAuthority(string authorityUri) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithParentActivityOrWindow(System.Func parentActivityOrWindowFunc) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithParentActivityOrWindow(System.Func windowFunc) => throw null; - public Microsoft.Identity.Client.PublicClientApplicationBuilder WithWindowsBrokerOptions(Microsoft.Identity.Client.WindowsBrokerOptions options) => throw null; - } - public static partial class PublicClientApplicationExtensions - { - public static bool IsProofOfPossessionSupportedByClient(this Microsoft.Identity.Client.IPublicClientApplication app) => throw null; - } - public class PublicClientApplicationOptions : Microsoft.Identity.Client.ApplicationOptions - { - public PublicClientApplicationOptions() => throw null; - } - namespace Region - { - public enum RegionOutcome - { - None = 0, - UserProvidedValid = 1, - UserProvidedAutodetectionFailed = 2, - UserProvidedInvalid = 3, - AutodetectSuccess = 4, - FallbackToGlobal = 5, - } - } - public class RegionDetails - { - public string AutoDetectionError { get => throw null; } - public RegionDetails(Microsoft.Identity.Client.Region.RegionOutcome regionOutcome, string regionUsed, string autoDetectionError) => throw null; - public Microsoft.Identity.Client.Region.RegionOutcome RegionOutcome { get => throw null; } - public string RegionUsed { get => throw null; } - } - namespace SSHCertificates - { - public static partial class SSHExtensions - { - public static Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder WithSSHCertificateAuthenticationScheme(this Microsoft.Identity.Client.AcquireTokenInteractiveParameterBuilder builder, string publicKeyJwk, string keyId) => throw null; - public static Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder WithSSHCertificateAuthenticationScheme(this Microsoft.Identity.Client.AcquireTokenSilentParameterBuilder builder, string publicKeyJwk, string keyId) => throw null; - } - } - public class SystemWebViewOptions - { - public System.Uri BrowserRedirectError { get => throw null; set { } } - public System.Uri BrowserRedirectSuccess { get => throw null; set { } } - public SystemWebViewOptions() => throw null; - public string HtmlMessageError { get => throw null; set { } } - public string HtmlMessageSuccess { get => throw null; set { } } - public bool iOSHidePrivacyPrompt { get => throw null; set { } } - public System.Func OpenBrowserAsync { get => throw null; set { } } - public static System.Threading.Tasks.Task OpenWithChromeEdgeBrowserAsync(System.Uri uri) => throw null; - public static System.Threading.Tasks.Task OpenWithEdgeBrowserAsync(System.Uri uri) => throw null; - } - public class Telemetry - { - public Telemetry() => throw null; - public static Microsoft.Identity.Client.Telemetry GetInstance() => throw null; - public bool HasRegisteredReceiver() => throw null; - public delegate void Receiver(System.Collections.Generic.List> events); - public void RegisterReceiver(Microsoft.Identity.Client.Telemetry.Receiver r) => throw null; - public bool TelemetryOnFailureOnly { get => throw null; set { } } - } - public enum TelemetryAudienceType - { - PreProduction = 0, - Production = 1, - } - namespace TelemetryCore - { - namespace TelemetryClient - { - public class TelemetryData - { - public Microsoft.Identity.Client.Cache.CacheLevel CacheLevel { get => throw null; set { } } - public TelemetryData() => throw null; - } - } - } - public class TenantProfile - { - public System.Security.Claims.ClaimsPrincipal ClaimsPrincipal { get => throw null; } - public bool IsHomeTenant { get => throw null; } - public string Oid { get => throw null; } - public string TenantId { get => throw null; } - } - public sealed class TokenCache : Microsoft.Identity.Client.ITokenCache, Microsoft.Identity.Client.ITokenCacheSerializer - { - public TokenCache() => throw null; - public void Deserialize(byte[] msalV2State) => throw null; - public void DeserializeAdalV3(byte[] adalV3State) => throw null; - void Microsoft.Identity.Client.ITokenCacheSerializer.DeserializeAdalV3(byte[] adalV3State) => throw null; - public void DeserializeMsalV2(byte[] msalV2State) => throw null; - void Microsoft.Identity.Client.ITokenCacheSerializer.DeserializeMsalV2(byte[] msalV2State) => throw null; - public void DeserializeMsalV3(byte[] msalV3State, bool shouldClearExistingCache) => throw null; - void Microsoft.Identity.Client.ITokenCacheSerializer.DeserializeMsalV3(byte[] msalV3State, bool shouldClearExistingCache) => throw null; - public void DeserializeUnifiedAndAdalCache(Microsoft.Identity.Client.Cache.CacheData cacheData) => throw null; - public bool HasStateChanged { get => throw null; set { } } - public byte[] Serialize() => throw null; - public byte[] SerializeAdalV3() => throw null; - byte[] Microsoft.Identity.Client.ITokenCacheSerializer.SerializeAdalV3() => throw null; - public byte[] SerializeMsalV2() => throw null; - byte[] Microsoft.Identity.Client.ITokenCacheSerializer.SerializeMsalV2() => throw null; - public byte[] SerializeMsalV3() => throw null; - byte[] Microsoft.Identity.Client.ITokenCacheSerializer.SerializeMsalV3() => throw null; - public Microsoft.Identity.Client.Cache.CacheData SerializeUnifiedAndAdalCache() => throw null; - public void SetAfterAccess(Microsoft.Identity.Client.TokenCacheCallback afterAccess) => throw null; - public void SetAfterAccessAsync(System.Func afterAccess) => throw null; - public void SetBeforeAccess(Microsoft.Identity.Client.TokenCacheCallback beforeAccess) => throw null; - public void SetBeforeAccessAsync(System.Func beforeAccess) => throw null; - public void SetBeforeWrite(Microsoft.Identity.Client.TokenCacheCallback beforeWrite) => throw null; - public void SetBeforeWriteAsync(System.Func beforeWrite) => throw null; - public void SetIosKeychainSecurityGroup(string securityGroup) => throw null; - public delegate void TokenCacheNotification(Microsoft.Identity.Client.TokenCacheNotificationArgs args); - } - public delegate void TokenCacheCallback(Microsoft.Identity.Client.TokenCacheNotificationArgs args); - public static partial class TokenCacheExtensions - { - public static void SetCacheOptions(this Microsoft.Identity.Client.ITokenCache tokenCache, Microsoft.Identity.Client.CacheOptions options) => throw null; - } - public sealed class TokenCacheNotificationArgs - { - public Microsoft.Identity.Client.IAccount Account { get => throw null; } - public System.Threading.CancellationToken CancellationToken { get => throw null; } - public string ClientId { get => throw null; } - public System.Guid CorrelationId { get => throw null; } - public TokenCacheNotificationArgs(Microsoft.Identity.Client.ITokenCacheSerializer tokenCache, string clientId, Microsoft.Identity.Client.IAccount account, bool hasStateChanged, bool isApplicationCache, string suggestedCacheKey, bool hasTokens, System.DateTimeOffset? suggestedCacheExpiry, System.Threading.CancellationToken cancellationToken) => throw null; - public TokenCacheNotificationArgs(Microsoft.Identity.Client.ITokenCacheSerializer tokenCache, string clientId, Microsoft.Identity.Client.IAccount account, bool hasStateChanged, bool isApplicationCache, string suggestedCacheKey, bool hasTokens, System.DateTimeOffset? suggestedCacheExpiry, System.Threading.CancellationToken cancellationToken, System.Guid correlationId) => throw null; - public TokenCacheNotificationArgs(Microsoft.Identity.Client.ITokenCacheSerializer tokenCache, string clientId, Microsoft.Identity.Client.IAccount account, bool hasStateChanged, bool isApplicationCache, string suggestedCacheKey, bool hasTokens, System.DateTimeOffset? suggestedCacheExpiry, System.Threading.CancellationToken cancellationToken, System.Guid correlationId, System.Collections.Generic.IEnumerable requestScopes, string requestTenantId) => throw null; - public TokenCacheNotificationArgs(Microsoft.Identity.Client.ITokenCacheSerializer tokenCache, string clientId, Microsoft.Identity.Client.IAccount account, bool hasStateChanged, bool isApplicationCache, string suggestedCacheKey, bool hasTokens, System.DateTimeOffset? suggestedCacheExpiry, System.Threading.CancellationToken cancellationToken, System.Guid correlationId, System.Collections.Generic.IEnumerable requestScopes, string requestTenantId, Microsoft.IdentityModel.Abstractions.IIdentityLogger identityLogger, bool piiLoggingEnabled, Microsoft.Identity.Client.TelemetryCore.TelemetryClient.TelemetryData telemetryData = default(Microsoft.Identity.Client.TelemetryCore.TelemetryClient.TelemetryData)) => throw null; - public bool HasStateChanged { get => throw null; } - public bool HasTokens { get => throw null; } - public Microsoft.IdentityModel.Abstractions.IIdentityLogger IdentityLogger { get => throw null; } - public bool IsApplicationCache { get => throw null; } - public bool PiiLoggingEnabled { get => throw null; } - public System.Collections.Generic.IEnumerable RequestScopes { get => throw null; } - public string RequestTenantId { get => throw null; } - public System.DateTimeOffset? SuggestedCacheExpiry { get => throw null; } - public string SuggestedCacheKey { get => throw null; } - public Microsoft.Identity.Client.TelemetryCore.TelemetryClient.TelemetryData TelemetryData { get => throw null; } - public Microsoft.Identity.Client.ITokenCacheSerializer TokenCache { get => throw null; } - public Microsoft.Identity.Client.IUser User { get => throw null; } - } - public enum TokenSource - { - IdentityProvider = 0, - Cache = 1, - Broker = 2, - } - public class TraceTelemetryConfig : Microsoft.Identity.Client.ITelemetryConfig - { - public System.Collections.Generic.IEnumerable AllowedScopes { get => throw null; } - public Microsoft.Identity.Client.TelemetryAudienceType AudienceType { get => throw null; } - public TraceTelemetryConfig() => throw null; - public System.Action DispatchAction { get => throw null; } - public string SessionId { get => throw null; } - } - public struct UIBehavior - { - } - public sealed class UIParent - { - public UIParent() => throw null; - public UIParent(object parent, bool useEmbeddedWebView) => throw null; - public static bool IsSystemWebviewAvailable() => throw null; - } - public enum UiRequiredExceptionClassification - { - None = 0, - MessageOnly = 1, - BasicAction = 2, - AdditionalAction = 3, - ConsentRequired = 4, - UserPasswordExpired = 5, - PromptNeverFailed = 6, - AcquireTokenSilentFailed = 7, - } - public sealed class UserAssertion - { - public string Assertion { get => throw null; } - public string AssertionType { get => throw null; } - public UserAssertion(string jwtBearerToken) => throw null; - public UserAssertion(string assertion, string assertionType) => throw null; - } - namespace Utils - { - namespace Windows - { - public static class WindowsNativeUtils - { - public static void InitializeProcessSecurity() => throw null; - public static bool IsElevatedUser() => throw null; - } - } - } - public class WindowsBrokerOptions - { - public WindowsBrokerOptions() => throw null; - public string HeaderText { get => throw null; set { } } - public bool ListWindowsWorkAndSchoolAccounts { get => throw null; set { } } - public bool MsaPassthrough { get => throw null; set { } } - } - public class WwwAuthenticateParameters - { - public string AuthenticationScheme { get => throw null; } - public string Authority { get => throw null; set { } } - public string Claims { get => throw null; set { } } - public static Microsoft.Identity.Client.WwwAuthenticateParameters CreateFromAuthenticationHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders, string scheme) => throw null; - public static System.Collections.Generic.IReadOnlyList CreateFromAuthenticationHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders) => throw null; - public static System.Threading.Tasks.Task CreateFromAuthenticationResponseAsync(string resourceUri, string scheme, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task CreateFromAuthenticationResponseAsync(string resourceUri, string scheme, System.Net.Http.HttpClient httpClient, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task> CreateFromAuthenticationResponseAsync(string resourceUri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task> CreateFromAuthenticationResponseAsync(string resourceUri, System.Net.Http.HttpClient httpClient, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task CreateFromResourceResponseAsync(string resourceUri) => throw null; - public static System.Threading.Tasks.Task CreateFromResourceResponseAsync(string resourceUri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.Threading.Tasks.Task CreateFromResourceResponseAsync(System.Net.Http.HttpClient httpClient, string resourceUri, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static Microsoft.Identity.Client.WwwAuthenticateParameters CreateFromResponseHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders, string scheme = default(string)) => throw null; - public static Microsoft.Identity.Client.WwwAuthenticateParameters CreateFromWwwAuthenticateHeaderValue(string wwwAuthenticateValue) => throw null; - public WwwAuthenticateParameters() => throw null; - public string Error { get => throw null; set { } } - public static string GetClaimChallengeFromResponseHeaders(System.Net.Http.Headers.HttpResponseHeaders httpResponseHeaders, string scheme = default(string)) => throw null; - public string GetTenantId() => throw null; - public string Nonce { get => throw null; } - public string Resource { get => throw null; set { } } - public System.Collections.Generic.IEnumerable Scopes { get => throw null; set { } } - public string this[string key] { get => throw null; } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj b/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj deleted file mode 100644 index 3951c0cd04ff..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.Identity.Client/4.61.3/Microsoft.Identity.Client.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.cs deleted file mode 100644 index 04ee4e6d957e..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.cs +++ /dev/null @@ -1,77 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.Abstractions, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace Abstractions - { - public enum EventLogLevel - { - LogAlways = 0, - Critical = 1, - Error = 2, - Warning = 3, - Informational = 4, - Verbose = 5, - } - public interface IIdentityLogger - { - bool IsEnabled(Microsoft.IdentityModel.Abstractions.EventLogLevel eventLogLevel); - void Log(Microsoft.IdentityModel.Abstractions.LogEntry entry); - } - public interface ITelemetryClient - { - string ClientId { get; set; } - void Initialize(); - bool IsEnabled(); - bool IsEnabled(string eventName); - void TrackEvent(Microsoft.IdentityModel.Abstractions.TelemetryEventDetails eventDetails); - void TrackEvent(string eventName, System.Collections.Generic.IDictionary stringProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary longProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary boolProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary dateTimeProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary doubleProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary guidProperties = default(System.Collections.Generic.IDictionary)); - } - public class LogEntry - { - public string CorrelationId { get => throw null; set { } } - public LogEntry() => throw null; - public Microsoft.IdentityModel.Abstractions.EventLogLevel EventLogLevel { get => throw null; set { } } - public string Message { get => throw null; set { } } - } - public sealed class NullIdentityModelLogger : Microsoft.IdentityModel.Abstractions.IIdentityLogger - { - public static Microsoft.IdentityModel.Abstractions.NullIdentityModelLogger Instance { get => throw null; } - public bool IsEnabled(Microsoft.IdentityModel.Abstractions.EventLogLevel eventLogLevel) => throw null; - public void Log(Microsoft.IdentityModel.Abstractions.LogEntry entry) => throw null; - } - public class NullTelemetryClient : Microsoft.IdentityModel.Abstractions.ITelemetryClient - { - public string ClientId { get => throw null; set { } } - public void Initialize() => throw null; - public static Microsoft.IdentityModel.Abstractions.NullTelemetryClient Instance { get => throw null; } - public bool IsEnabled() => throw null; - public bool IsEnabled(string eventName) => throw null; - public void TrackEvent(Microsoft.IdentityModel.Abstractions.TelemetryEventDetails eventDetails) => throw null; - public void TrackEvent(string eventName, System.Collections.Generic.IDictionary stringProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary longProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary boolProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary dateTimeProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary doubleProperties = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IDictionary guidProperties = default(System.Collections.Generic.IDictionary)) => throw null; - } - public static class ObservabilityConstants - { - public const string ActivityId = default; - public const string ClientId = default; - public const string Duration = default; - public const string Succeeded = default; - } - public abstract class TelemetryEventDetails - { - protected TelemetryEventDetails() => throw null; - public virtual string Name { get => throw null; set { } } - public virtual System.Collections.Generic.IReadOnlyDictionary Properties { get => throw null; } - protected System.Collections.Generic.IDictionary PropertyValues { get => throw null; } - public virtual void SetProperty(string key, string value) => throw null; - public virtual void SetProperty(string key, long value) => throw null; - public virtual void SetProperty(string key, bool value) => throw null; - public virtual void SetProperty(string key, System.DateTime value) => throw null; - public virtual void SetProperty(string key, double value) => throw null; - public virtual void SetProperty(string key, System.Guid value) => throw null; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Abstractions/7.5.0/Microsoft.IdentityModel.Abstractions.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.cs deleted file mode 100644 index b5068997c2c6..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.cs +++ /dev/null @@ -1,174 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.JsonWebTokens, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace JsonWebTokens - { - public static class JsonClaimValueTypes - { - public const string Json = default; - public const string JsonArray = default; - public const string JsonNull = default; - } - public class JsonWebToken : Microsoft.IdentityModel.Tokens.SecurityToken - { - public string Actor { get => throw null; } - public string Alg { get => throw null; } - public System.Collections.Generic.IEnumerable Audiences { get => throw null; } - public string AuthenticationTag { get => throw null; } - public string Azp { get => throw null; } - public string Ciphertext { get => throw null; } - public virtual System.Collections.Generic.IEnumerable Claims { get => throw null; } - public JsonWebToken(string jwtEncodedString) => throw null; - public JsonWebToken(System.ReadOnlyMemory encodedTokenMemory) => throw null; - public JsonWebToken(string header, string payload) => throw null; - public string Cty { get => throw null; } - public string Enc { get => throw null; } - public string EncodedHeader { get => throw null; } - public string EncodedPayload { get => throw null; } - public string EncodedSignature { get => throw null; } - public string EncodedToken { get => throw null; } - public string EncryptedKey { get => throw null; } - public System.Security.Claims.Claim GetClaim(string key) => throw null; - public T GetHeaderValue(string key) => throw null; - public T GetPayloadValue(string key) => throw null; - public override string Id { get => throw null; } - public string InitializationVector { get => throw null; } - public Microsoft.IdentityModel.JsonWebTokens.JsonWebToken InnerToken { get => throw null; } - public bool IsEncrypted { get => throw null; } - public bool IsSigned { get => throw null; } - public System.DateTime IssuedAt { get => throw null; } - public override string Issuer { get => throw null; } - public string Kid { get => throw null; } - public override Microsoft.IdentityModel.Tokens.SecurityKey SecurityKey { get => throw null; } - public override Microsoft.IdentityModel.Tokens.SecurityKey SigningKey { get => throw null; set { } } - public string Subject { get => throw null; } - public override string ToString() => throw null; - public bool TryGetClaim(string key, out System.Security.Claims.Claim value) => throw null; - public bool TryGetHeaderValue(string key, out T value) => throw null; - public bool TryGetPayloadValue(string key, out T value) => throw null; - public bool TryGetValue(string key, out T value) => throw null; - public string Typ { get => throw null; } - public override string UnsafeToString() => throw null; - public override System.DateTime ValidFrom { get => throw null; } - public override System.DateTime ValidTo { get => throw null; } - public string X5t { get => throw null; } - public string Zip { get => throw null; } - } - public class JsonWebTokenHandler : Microsoft.IdentityModel.Tokens.TokenHandler - { - public const string Base64UrlEncodedUnsignedJWSHeader = default; - public virtual bool CanReadToken(string token) => throw null; - public virtual bool CanValidateToken { get => throw null; } - protected virtual System.Security.Claims.ClaimsIdentity CreateClaimsIdentity(Microsoft.IdentityModel.JsonWebTokens.JsonWebToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual System.Security.Claims.ClaimsIdentity CreateClaimsIdentity(Microsoft.IdentityModel.JsonWebTokens.JsonWebToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, string issuer) => throw null; - public virtual string CreateToken(string payload) => throw null; - public virtual string CreateToken(string payload, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public virtual string CreateToken(Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor tokenDescriptor) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string compressionAlgorithm) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string compressionAlgorithm) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string compressionAlgorithm, System.Collections.Generic.IDictionary additionalHeaderClaims, System.Collections.Generic.IDictionary additionalInnerHeaderClaims) => throw null; - public virtual string CreateToken(string payload, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string compressionAlgorithm, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public JsonWebTokenHandler() => throw null; - public string DecryptToken(Microsoft.IdentityModel.JsonWebTokens.JsonWebToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static System.Collections.Generic.IDictionary DefaultInboundClaimTypeMap; - public static bool DefaultMapInboundClaims; - public string EncryptToken(string innerJwt, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public string EncryptToken(string innerJwt, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public string EncryptToken(string innerJwt, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string algorithm) => throw null; - public string EncryptToken(string innerJwt, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, string algorithm, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public System.Collections.Generic.IDictionary InboundClaimTypeMap { get => throw null; set { } } - public bool MapInboundClaims { get => throw null; set { } } - public virtual Microsoft.IdentityModel.JsonWebTokens.JsonWebToken ReadJsonWebToken(string token) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(string token) => throw null; - protected virtual Microsoft.IdentityModel.Tokens.SecurityKey ResolveTokenDecryptionKey(string token, Microsoft.IdentityModel.JsonWebTokens.JsonWebToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static string ShortClaimTypeProperty { get => throw null; set { } } - public System.Type TokenType { get => throw null; } - public virtual Microsoft.IdentityModel.Tokens.TokenValidationResult ValidateToken(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public override System.Threading.Tasks.Task ValidateTokenAsync(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public override System.Threading.Tasks.Task ValidateTokenAsync(Microsoft.IdentityModel.Tokens.SecurityToken token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - } - public static class JwtConstants - { - public const string DirectKeyUseAlg = default; - public const string HeaderType = default; - public const string HeaderTypeAlt = default; - public const string JsonCompactSerializationRegex = default; - public const string JweCompactSerializationRegex = default; - public const int JweSegmentCount = 5; - public const int JwsSegmentCount = 3; - public const int MaxJwtSegmentCount = 5; - public const string TokenType = default; - public const string TokenTypeAlt = default; - } - public struct JwtHeaderParameterNames - { - public const string Alg = default; - public const string Apu = default; - public const string Apv = default; - public const string Cty = default; - public const string Enc = default; - public const string Epk = default; - public const string IV = default; - public const string Jku = default; - public const string Jwk = default; - public const string Kid = default; - public const string Typ = default; - public const string X5c = default; - public const string X5t = default; - public const string X5u = default; - public const string Zip = default; - } - public struct JwtRegisteredClaimNames - { - public const string Acr = default; - public const string Actort = default; - public const string Amr = default; - public const string AtHash = default; - public const string Aud = default; - public const string AuthTime = default; - public const string Azp = default; - public const string Birthdate = default; - public const string CHash = default; - public const string Email = default; - public const string Exp = default; - public const string FamilyName = default; - public const string Gender = default; - public const string GivenName = default; - public const string Iat = default; - public const string Iss = default; - public const string Jti = default; - public const string Name = default; - public const string NameId = default; - public const string Nbf = default; - public const string Nonce = default; - public const string PhoneNumber = default; - public const string PhoneNumberVerified = default; - public const string Prn = default; - public const string Sid = default; - public const string Sub = default; - public const string Typ = default; - public const string UniqueName = default; - public const string Website = default; - } - public class JwtTokenUtilities - { - public static string CreateEncodedSignature(string input, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials) => throw null; - public static string CreateEncodedSignature(string input, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, bool cacheProvider) => throw null; - public JwtTokenUtilities() => throw null; - public static byte[] GenerateKeyBytes(int sizeInBits) => throw null; - public static System.Collections.Generic.IEnumerable GetAllDecryptionKeys(Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static System.Text.RegularExpressions.Regex RegexJwe; - public static System.Text.RegularExpressions.Regex RegexJws; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj deleted file mode 100644 index 3f7a9eeb43fa..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.JsonWebTokens/7.5.0/Microsoft.IdentityModel.JsonWebTokens.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.cs deleted file mode 100644 index 0952b4a44244..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.cs +++ /dev/null @@ -1,98 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.Logging, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace Logging - { - public class IdentityModelEventSource : System.Diagnostics.Tracing.EventSource - { - public static bool HeaderWritten { get => throw null; set { } } - public static string HiddenPIIString { get => throw null; } - public static string HiddenSecurityArtifactString { get => throw null; } - public static bool LogCompleteSecurityArtifact { get => throw null; set { } } - public static Microsoft.IdentityModel.Logging.IdentityModelEventSource Logger { get => throw null; } - public System.Diagnostics.Tracing.EventLevel LogLevel { get => throw null; set { } } - public static bool ShowPII { get => throw null; set { } } - public void Write(System.Diagnostics.Tracing.EventLevel level, System.Exception innerException, string message) => throw null; - public void Write(System.Diagnostics.Tracing.EventLevel level, System.Exception innerException, string message, params object[] args) => throw null; - public void WriteAlways(string message) => throw null; - public void WriteAlways(string message, params object[] args) => throw null; - public void WriteCritical(string message) => throw null; - public void WriteCritical(string message, params object[] args) => throw null; - public void WriteError(string message) => throw null; - public void WriteError(string message, params object[] args) => throw null; - public void WriteInformation(string message) => throw null; - public void WriteInformation(string message, params object[] args) => throw null; - public void WriteVerbose(string message) => throw null; - public void WriteVerbose(string message, params object[] args) => throw null; - public void WriteWarning(string message) => throw null; - public void WriteWarning(string message, params object[] args) => throw null; - } - public static class IdentityModelTelemetryUtil - { - public static bool AddTelemetryData(string key, string value) => throw null; - public static string ClientSku { get => throw null; } - public static string ClientVer { get => throw null; } - public static bool RemoveTelemetryData(string key) => throw null; - } - public interface ISafeLogSecurityArtifact - { - string UnsafeToString(); - } - public class LoggerContext - { - public System.Guid ActivityId { get => throw null; set { } } - public bool CaptureLogs { get => throw null; set { } } - public LoggerContext() => throw null; - public LoggerContext(System.Guid activityId) => throw null; - public virtual string DebugId { get => throw null; set { } } - public System.Collections.Generic.ICollection Logs { get => throw null; } - public System.Collections.Generic.IDictionary PropertyBag { get => throw null; set { } } - } - public class LogHelper - { - public LogHelper() => throw null; - public static string FormatInvariant(string format, params object[] args) => throw null; - public static bool IsEnabled(Microsoft.IdentityModel.Abstractions.EventLogLevel level) => throw null; - public static T LogArgumentException(string argumentName, string message) where T : System.ArgumentException => throw null; - public static T LogArgumentException(string argumentName, string format, params object[] args) where T : System.ArgumentException => throw null; - public static T LogArgumentException(string argumentName, System.Exception innerException, string message) where T : System.ArgumentException => throw null; - public static T LogArgumentException(string argumentName, System.Exception innerException, string format, params object[] args) where T : System.ArgumentException => throw null; - public static T LogArgumentException(System.Diagnostics.Tracing.EventLevel eventLevel, string argumentName, string message) where T : System.ArgumentException => throw null; - public static T LogArgumentException(System.Diagnostics.Tracing.EventLevel eventLevel, string argumentName, string format, params object[] args) where T : System.ArgumentException => throw null; - public static T LogArgumentException(System.Diagnostics.Tracing.EventLevel eventLevel, string argumentName, System.Exception innerException, string message) where T : System.ArgumentException => throw null; - public static T LogArgumentException(System.Diagnostics.Tracing.EventLevel eventLevel, string argumentName, System.Exception innerException, string format, params object[] args) where T : System.ArgumentException => throw null; - public static System.ArgumentNullException LogArgumentNullException(string argument) => throw null; - public static T LogException(string message) where T : System.Exception => throw null; - public static T LogException(string format, params object[] args) where T : System.Exception => throw null; - public static T LogException(System.Exception innerException, string message) where T : System.Exception => throw null; - public static T LogException(System.Exception innerException, string format, params object[] args) where T : System.Exception => throw null; - public static T LogException(System.Diagnostics.Tracing.EventLevel eventLevel, string message) where T : System.Exception => throw null; - public static T LogException(System.Diagnostics.Tracing.EventLevel eventLevel, string format, params object[] args) where T : System.Exception => throw null; - public static T LogException(System.Diagnostics.Tracing.EventLevel eventLevel, System.Exception innerException, string message) where T : System.Exception => throw null; - public static T LogException(System.Diagnostics.Tracing.EventLevel eventLevel, System.Exception innerException, string format, params object[] args) where T : System.Exception => throw null; - public static System.Exception LogExceptionMessage(System.Exception exception) => throw null; - public static System.Exception LogExceptionMessage(System.Diagnostics.Tracing.EventLevel eventLevel, System.Exception exception) => throw null; - public static Microsoft.IdentityModel.Abstractions.IIdentityLogger Logger { get => throw null; set { } } - public static void LogInformation(string message, params object[] args) => throw null; - public static void LogVerbose(string message, params object[] args) => throw null; - public static void LogWarning(string message, params object[] args) => throw null; - public static object MarkAsNonPII(object arg) => throw null; - public static object MarkAsSecurityArtifact(object arg, System.Func callback) => throw null; - public static object MarkAsSecurityArtifact(object arg, System.Func callback, System.Func callbackUnsafe) => throw null; - public static object MarkAsUnsafeSecurityArtifact(object arg, System.Func callbackUnsafe) => throw null; - } - public class TextWriterEventListener : System.Diagnostics.Tracing.EventListener - { - public TextWriterEventListener() => throw null; - public TextWriterEventListener(string filePath) => throw null; - public TextWriterEventListener(System.IO.StreamWriter streamWriter) => throw null; - public static readonly string DefaultLogFileName; - public override void Dispose() => throw null; - protected override void OnEventWritten(System.Diagnostics.Tracing.EventWrittenEventArgs eventData) => throw null; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj deleted file mode 100644 index ccae125b498e..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Logging/7.5.0/Microsoft.IdentityModel.Logging.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.cs deleted file mode 100644 index 9d945dc9033c..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.cs +++ /dev/null @@ -1,396 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace Protocols - { - namespace OpenIdConnect - { - public static class ActiveDirectoryOpenIdConnectEndpoints - { - public const string Authorize = default; - public const string Logout = default; - public const string Token = default; - } - namespace Configuration - { - public class OpenIdConnectConfigurationValidator : Microsoft.IdentityModel.Protocols.IConfigurationValidator - { - public OpenIdConnectConfigurationValidator() => throw null; - public int MinimumNumberOfKeys { get => throw null; set { } } - public Microsoft.IdentityModel.Protocols.ConfigurationValidationResult Validate(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration openIdConnectConfiguration) => throw null; - } - } - public delegate void IdTokenValidator(System.IdentityModel.Tokens.Jwt.JwtSecurityToken idToken, Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext context); - public class OpenIdConnectConfiguration : Microsoft.IdentityModel.Tokens.BaseConfiguration - { - public System.Collections.Generic.ICollection AcrValuesSupported { get => throw null; } - public override string ActiveTokenEndpoint { get => throw null; set { } } - public System.Collections.Generic.IDictionary AdditionalData { get => throw null; } - public string AuthorizationEndpoint { get => throw null; set { } } - public string CheckSessionIframe { get => throw null; set { } } - public System.Collections.Generic.ICollection ClaimsLocalesSupported { get => throw null; } - public bool ClaimsParameterSupported { get => throw null; set { } } - public System.Collections.Generic.ICollection ClaimsSupported { get => throw null; } - public System.Collections.Generic.ICollection ClaimTypesSupported { get => throw null; } - public static Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration Create(string json) => throw null; - public OpenIdConnectConfiguration() => throw null; - public OpenIdConnectConfiguration(string json) => throw null; - public System.Collections.Generic.ICollection DisplayValuesSupported { get => throw null; } - public string EndSessionEndpoint { get => throw null; set { } } - public string FrontchannelLogoutSessionSupported { get => throw null; set { } } - public string FrontchannelLogoutSupported { get => throw null; set { } } - public System.Collections.Generic.ICollection GrantTypesSupported { get => throw null; } - public bool HttpLogoutSupported { get => throw null; set { } } - public System.Collections.Generic.ICollection IdTokenEncryptionAlgValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection IdTokenEncryptionEncValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection IdTokenSigningAlgValuesSupported { get => throw null; } - public string IntrospectionEndpoint { get => throw null; set { } } - public System.Collections.Generic.ICollection IntrospectionEndpointAuthMethodsSupported { get => throw null; } - public System.Collections.Generic.ICollection IntrospectionEndpointAuthSigningAlgValuesSupported { get => throw null; } - public override string Issuer { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.JsonWebKeySet JsonWebKeySet { get => throw null; set { } } - public string JwksUri { get => throw null; set { } } - public bool LogoutSessionSupported { get => throw null; set { } } - public string OpPolicyUri { get => throw null; set { } } - public string OpTosUri { get => throw null; set { } } - public string RegistrationEndpoint { get => throw null; set { } } - public System.Collections.Generic.ICollection RequestObjectEncryptionAlgValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection RequestObjectEncryptionEncValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection RequestObjectSigningAlgValuesSupported { get => throw null; } - public bool RequestParameterSupported { get => throw null; set { } } - public bool RequestUriParameterSupported { get => throw null; set { } } - public bool RequireRequestUriRegistration { get => throw null; set { } } - public System.Collections.Generic.ICollection ResponseModesSupported { get => throw null; } - public System.Collections.Generic.ICollection ResponseTypesSupported { get => throw null; } - public System.Collections.Generic.ICollection ScopesSupported { get => throw null; } - public string ServiceDocumentation { get => throw null; set { } } - public bool ShouldSerializeAcrValuesSupported() => throw null; - public bool ShouldSerializeClaimsLocalesSupported() => throw null; - public bool ShouldSerializeClaimsSupported() => throw null; - public bool ShouldSerializeClaimTypesSupported() => throw null; - public bool ShouldSerializeDisplayValuesSupported() => throw null; - public bool ShouldSerializeGrantTypesSupported() => throw null; - public bool ShouldSerializeIdTokenEncryptionAlgValuesSupported() => throw null; - public bool ShouldSerializeIdTokenEncryptionEncValuesSupported() => throw null; - public bool ShouldSerializeIdTokenSigningAlgValuesSupported() => throw null; - public bool ShouldSerializeIntrospectionEndpointAuthMethodsSupported() => throw null; - public bool ShouldSerializeIntrospectionEndpointAuthSigningAlgValuesSupported() => throw null; - public bool ShouldSerializeRequestObjectEncryptionAlgValuesSupported() => throw null; - public bool ShouldSerializeRequestObjectEncryptionEncValuesSupported() => throw null; - public bool ShouldSerializeRequestObjectSigningAlgValuesSupported() => throw null; - public bool ShouldSerializeResponseModesSupported() => throw null; - public bool ShouldSerializeResponseTypesSupported() => throw null; - public bool ShouldSerializeScopesSupported() => throw null; - public bool ShouldSerializeSigningKeys() => throw null; - public bool ShouldSerializeSubjectTypesSupported() => throw null; - public bool ShouldSerializeTokenEndpointAuthMethodsSupported() => throw null; - public bool ShouldSerializeTokenEndpointAuthSigningAlgValuesSupported() => throw null; - public bool ShouldSerializeUILocalesSupported() => throw null; - public bool ShouldSerializeUserInfoEndpointEncryptionAlgValuesSupported() => throw null; - public bool ShouldSerializeUserInfoEndpointEncryptionEncValuesSupported() => throw null; - public bool ShouldSerializeUserInfoEndpointSigningAlgValuesSupported() => throw null; - public override System.Collections.Generic.ICollection SigningKeys { get => throw null; } - public System.Collections.Generic.ICollection SubjectTypesSupported { get => throw null; } - public override string TokenEndpoint { get => throw null; set { } } - public System.Collections.Generic.ICollection TokenEndpointAuthMethodsSupported { get => throw null; } - public System.Collections.Generic.ICollection TokenEndpointAuthSigningAlgValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection UILocalesSupported { get => throw null; } - public string UserInfoEndpoint { get => throw null; set { } } - public System.Collections.Generic.ICollection UserInfoEndpointEncryptionAlgValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection UserInfoEndpointEncryptionEncValuesSupported { get => throw null; } - public System.Collections.Generic.ICollection UserInfoEndpointSigningAlgValuesSupported { get => throw null; } - public static string Write(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration configuration) => throw null; - } - public class OpenIdConnectConfigurationRetriever : Microsoft.IdentityModel.Protocols.IConfigurationRetriever - { - public OpenIdConnectConfigurationRetriever() => throw null; - public static System.Threading.Tasks.Task GetAsync(string address, System.Threading.CancellationToken cancel) => throw null; - public static System.Threading.Tasks.Task GetAsync(string address, System.Net.Http.HttpClient httpClient, System.Threading.CancellationToken cancel) => throw null; - public static System.Threading.Tasks.Task GetAsync(string address, Microsoft.IdentityModel.Protocols.IDocumentRetriever retriever, System.Threading.CancellationToken cancel) => throw null; - System.Threading.Tasks.Task Microsoft.IdentityModel.Protocols.IConfigurationRetriever.GetConfigurationAsync(string address, Microsoft.IdentityModel.Protocols.IDocumentRetriever retriever, System.Threading.CancellationToken cancel) => throw null; - } - public static class OpenIdConnectGrantTypes - { - public const string AuthorizationCode = default; - public const string ClientCredentials = default; - public const string Password = default; - public const string RefreshToken = default; - } - public class OpenIdConnectMessage : Microsoft.IdentityModel.Protocols.AuthenticationProtocolMessage - { - public string AccessToken { get => throw null; set { } } - public string AcrValues { get => throw null; set { } } - public string AuthorizationEndpoint { get => throw null; set { } } - public string ClaimsLocales { get => throw null; set { } } - public string ClientAssertion { get => throw null; set { } } - public string ClientAssertionType { get => throw null; set { } } - public string ClientId { get => throw null; set { } } - public string ClientSecret { get => throw null; set { } } - public virtual Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectMessage Clone() => throw null; - public string Code { get => throw null; set { } } - public virtual string CreateAuthenticationRequestUrl() => throw null; - public virtual string CreateLogoutRequestUrl() => throw null; - public OpenIdConnectMessage() => throw null; - public OpenIdConnectMessage(string json) => throw null; - protected OpenIdConnectMessage(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectMessage other) => throw null; - public OpenIdConnectMessage(System.Collections.Specialized.NameValueCollection nameValueCollection) => throw null; - public OpenIdConnectMessage(System.Collections.Generic.IEnumerable> parameters) => throw null; - public string Display { get => throw null; set { } } - public string DomainHint { get => throw null; set { } } - public bool EnableTelemetryParameters { get => throw null; set { } } - public static bool EnableTelemetryParametersByDefault { get => throw null; set { } } - public string Error { get => throw null; set { } } - public string ErrorDescription { get => throw null; set { } } - public string ErrorUri { get => throw null; set { } } - public string ExpiresIn { get => throw null; set { } } - public string GrantType { get => throw null; set { } } - public string IdentityProvider { get => throw null; set { } } - public string IdToken { get => throw null; set { } } - public string IdTokenHint { get => throw null; set { } } - public string Iss { get => throw null; set { } } - public string LoginHint { get => throw null; set { } } - public string MaxAge { get => throw null; set { } } - public string Nonce { get => throw null; set { } } - public string Password { get => throw null; set { } } - public string PostLogoutRedirectUri { get => throw null; set { } } - public string Prompt { get => throw null; set { } } - public string RedirectUri { get => throw null; set { } } - public string RefreshToken { get => throw null; set { } } - public Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectRequestType RequestType { get => throw null; set { } } - public string RequestUri { get => throw null; set { } } - public string Resource { get => throw null; set { } } - public string ResponseMode { get => throw null; set { } } - public string ResponseType { get => throw null; set { } } - public string Scope { get => throw null; set { } } - public string SessionState { get => throw null; set { } } - public string Sid { get => throw null; set { } } - public string SkuTelemetryValue { get => throw null; set { } } - public string State { get => throw null; set { } } - public string TargetLinkUri { get => throw null; set { } } - public string TokenEndpoint { get => throw null; set { } } - public string TokenType { get => throw null; set { } } - public string UiLocales { get => throw null; set { } } - public string UserId { get => throw null; set { } } - public string Username { get => throw null; set { } } - } - public static class OpenIdConnectParameterNames - { - public const string AccessToken = default; - public const string AcrValues = default; - public const string ClaimsLocales = default; - public const string ClientAssertion = default; - public const string ClientAssertionType = default; - public const string ClientId = default; - public const string ClientSecret = default; - public const string Code = default; - public const string Display = default; - public const string DomainHint = default; - public const string Error = default; - public const string ErrorDescription = default; - public const string ErrorUri = default; - public const string ExpiresIn = default; - public const string GrantType = default; - public const string IdentityProvider = default; - public const string IdToken = default; - public const string IdTokenHint = default; - public const string Iss = default; - public const string LoginHint = default; - public const string MaxAge = default; - public const string Nonce = default; - public const string Password = default; - public const string PostLogoutRedirectUri = default; - public const string Prompt = default; - public const string RedirectUri = default; - public const string RefreshToken = default; - public const string RequestUri = default; - public const string Resource = default; - public const string ResponseMode = default; - public const string ResponseType = default; - public const string Scope = default; - public const string SessionState = default; - public const string Sid = default; - public const string SkuTelemetry = default; - public const string State = default; - public const string TargetLinkUri = default; - public const string TokenType = default; - public const string UiLocales = default; - public const string UserId = default; - public const string Username = default; - public const string VersionTelemetry = default; - } - public static class OpenIdConnectPrompt - { - public const string Consent = default; - public const string Login = default; - public const string None = default; - public const string SelectAccount = default; - } - public class OpenIdConnectProtocolException : System.Exception - { - public OpenIdConnectProtocolException() => throw null; - public OpenIdConnectProtocolException(string message) => throw null; - public OpenIdConnectProtocolException(string message, System.Exception innerException) => throw null; - protected OpenIdConnectProtocolException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class OpenIdConnectProtocolInvalidAtHashException : Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException - { - public OpenIdConnectProtocolInvalidAtHashException() => throw null; - public OpenIdConnectProtocolInvalidAtHashException(string message) => throw null; - public OpenIdConnectProtocolInvalidAtHashException(string message, System.Exception innerException) => throw null; - protected OpenIdConnectProtocolInvalidAtHashException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class OpenIdConnectProtocolInvalidCHashException : Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException - { - public OpenIdConnectProtocolInvalidCHashException() => throw null; - public OpenIdConnectProtocolInvalidCHashException(string message) => throw null; - public OpenIdConnectProtocolInvalidCHashException(string message, System.Exception innerException) => throw null; - protected OpenIdConnectProtocolInvalidCHashException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class OpenIdConnectProtocolInvalidNonceException : Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException - { - public OpenIdConnectProtocolInvalidNonceException() => throw null; - public OpenIdConnectProtocolInvalidNonceException(string message) => throw null; - public OpenIdConnectProtocolInvalidNonceException(string message, System.Exception innerException) => throw null; - protected OpenIdConnectProtocolInvalidNonceException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class OpenIdConnectProtocolInvalidStateException : Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolException - { - public OpenIdConnectProtocolInvalidStateException() => throw null; - public OpenIdConnectProtocolInvalidStateException(string message) => throw null; - public OpenIdConnectProtocolInvalidStateException(string message, System.Exception innerException) => throw null; - protected OpenIdConnectProtocolInvalidStateException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class OpenIdConnectProtocolValidationContext - { - public string ClientId { get => throw null; set { } } - public OpenIdConnectProtocolValidationContext() => throw null; - public string Nonce { get => throw null; set { } } - public Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectMessage ProtocolMessage { get => throw null; set { } } - public string State { get => throw null; set { } } - public string UserInfoEndpointResponse { get => throw null; set { } } - public System.IdentityModel.Tokens.Jwt.JwtSecurityToken ValidatedIdToken { get => throw null; set { } } - } - public class OpenIdConnectProtocolValidator - { - public Microsoft.IdentityModel.Tokens.CryptoProviderFactory CryptoProviderFactory { get => throw null; set { } } - public OpenIdConnectProtocolValidator() => throw null; - public static readonly System.TimeSpan DefaultNonceLifetime; - public virtual string GenerateNonce() => throw null; - public virtual System.Security.Cryptography.HashAlgorithm GetHashAlgorithm(string algorithm) => throw null; - public System.Collections.Generic.IDictionary HashAlgorithmMap { get => throw null; } - public Microsoft.IdentityModel.Protocols.OpenIdConnect.IdTokenValidator IdTokenValidator { get => throw null; set { } } - public System.TimeSpan NonceLifetime { get => throw null; set { } } - public bool RequireAcr { get => throw null; set { } } - public bool RequireAmr { get => throw null; set { } } - public bool RequireAuthTime { get => throw null; set { } } - public bool RequireAzp { get => throw null; set { } } - public bool RequireNonce { get => throw null; set { } } - public bool RequireState { get => throw null; set { } } - public bool RequireStateValidation { get => throw null; set { } } - public bool RequireSub { get => throw null; set { } } - public static bool RequireSubByDefault { get => throw null; set { } } - public bool RequireTimeStampInNonce { get => throw null; set { } } - protected virtual void ValidateAtHash(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - public virtual void ValidateAuthenticationResponse(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - protected virtual void ValidateCHash(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - protected virtual void ValidateIdToken(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - protected virtual void ValidateNonce(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - protected virtual void ValidateState(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - public virtual void ValidateTokenResponse(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - public virtual void ValidateUserInfoResponse(Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidationContext validationContext) => throw null; - } - public enum OpenIdConnectRequestType - { - Authentication = 0, - Logout = 1, - Token = 2, - } - public static class OpenIdConnectResponseMode - { - public const string FormPost = default; - public const string Fragment = default; - public const string Query = default; - } - public static class OpenIdConnectResponseType - { - public const string Code = default; - public const string CodeIdToken = default; - public const string CodeIdTokenToken = default; - public const string CodeToken = default; - public const string IdToken = default; - public const string IdTokenToken = default; - public const string None = default; - public const string Token = default; - } - public static class OpenIdConnectScope - { - public const string Address = default; - public const string Email = default; - public const string OfflineAccess = default; - public const string OpenId = default; - public const string OpenIdProfile = default; - public const string Phone = default; - public const string UserImpersonation = default; - } - public static class OpenIdConnectSessionProperties - { - public const string CheckSessionIFrame = default; - public const string RedirectUri = default; - public const string SessionState = default; - } - public static class OpenIdProviderMetadataNames - { - public const string AcrValuesSupported = default; - public const string AuthorizationEndpoint = default; - public const string CheckSessionIframe = default; - public const string ClaimsLocalesSupported = default; - public const string ClaimsParameterSupported = default; - public const string ClaimsSupported = default; - public const string ClaimTypesSupported = default; - public const string Discovery = default; - public const string DisplayValuesSupported = default; - public const string EndSessionEndpoint = default; - public const string FrontchannelLogoutSessionSupported = default; - public const string FrontchannelLogoutSupported = default; - public const string GrantTypesSupported = default; - public const string HttpLogoutSupported = default; - public const string IdTokenEncryptionAlgValuesSupported = default; - public const string IdTokenEncryptionEncValuesSupported = default; - public const string IdTokenSigningAlgValuesSupported = default; - public const string IntrospectionEndpoint = default; - public const string IntrospectionEndpointAuthMethodsSupported = default; - public const string IntrospectionEndpointAuthSigningAlgValuesSupported = default; - public const string Issuer = default; - public const string JwksUri = default; - public const string LogoutSessionSupported = default; - public const string MicrosoftMultiRefreshToken = default; - public const string OpPolicyUri = default; - public const string OpTosUri = default; - public const string RegistrationEndpoint = default; - public const string RequestObjectEncryptionAlgValuesSupported = default; - public const string RequestObjectEncryptionEncValuesSupported = default; - public const string RequestObjectSigningAlgValuesSupported = default; - public const string RequestParameterSupported = default; - public const string RequestUriParameterSupported = default; - public const string RequireRequestUriRegistration = default; - public const string ResponseModesSupported = default; - public const string ResponseTypesSupported = default; - public const string ScopesSupported = default; - public const string ServiceDocumentation = default; - public const string SubjectTypesSupported = default; - public const string TokenEndpoint = default; - public const string TokenEndpointAuthMethodsSupported = default; - public const string TokenEndpointAuthSigningAlgValuesSupported = default; - public const string UILocalesSupported = default; - public const string UserInfoEncryptionAlgValuesSupported = default; - public const string UserInfoEncryptionEncValuesSupported = default; - public const string UserInfoEndpoint = default; - public const string UserInfoSigningAlgValuesSupported = default; - } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj deleted file mode 100644 index 4fcb6a92ab72..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols.OpenIdConnect/7.5.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.cs deleted file mode 100644 index d7d2fc40cd0f..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.cs +++ /dev/null @@ -1,120 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.Protocols, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace Protocols - { - public abstract class AuthenticationProtocolMessage - { - public virtual string BuildFormPost() => throw null; - public virtual string BuildRedirectUrl() => throw null; - protected AuthenticationProtocolMessage() => throw null; - public virtual string GetParameter(string parameter) => throw null; - public string IssuerAddress { get => throw null; set { } } - public System.Collections.Generic.IDictionary Parameters { get => throw null; } - public string PostTitle { get => throw null; set { } } - public virtual void RemoveParameter(string parameter) => throw null; - public string Script { get => throw null; set { } } - public string ScriptButtonText { get => throw null; set { } } - public string ScriptDisabledText { get => throw null; set { } } - public void SetParameter(string parameter, string value) => throw null; - public virtual void SetParameters(System.Collections.Specialized.NameValueCollection nameValueCollection) => throw null; - } - namespace Configuration - { - public class InvalidConfigurationException : System.Exception - { - public InvalidConfigurationException() => throw null; - public InvalidConfigurationException(string message) => throw null; - public InvalidConfigurationException(string message, System.Exception innerException) => throw null; - protected InvalidConfigurationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class LastKnownGoodConfigurationCacheOptions : Microsoft.IdentityModel.Tokens.Configuration.LKGConfigurationCacheOptions - { - public LastKnownGoodConfigurationCacheOptions() => throw null; - public static readonly int DefaultLastKnownGoodConfigurationSizeLimit; - } - } - public class ConfigurationManager : Microsoft.IdentityModel.Tokens.BaseConfigurationManager, Microsoft.IdentityModel.Protocols.IConfigurationManager where T : class - { - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever) => throw null; - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever, System.Net.Http.HttpClient httpClient) => throw null; - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever, Microsoft.IdentityModel.Protocols.IDocumentRetriever docRetriever) => throw null; - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever, Microsoft.IdentityModel.Protocols.IDocumentRetriever docRetriever, Microsoft.IdentityModel.Protocols.Configuration.LastKnownGoodConfigurationCacheOptions lkgCacheOptions) => throw null; - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever, Microsoft.IdentityModel.Protocols.IDocumentRetriever docRetriever, Microsoft.IdentityModel.Protocols.IConfigurationValidator configValidator) => throw null; - public ConfigurationManager(string metadataAddress, Microsoft.IdentityModel.Protocols.IConfigurationRetriever configRetriever, Microsoft.IdentityModel.Protocols.IDocumentRetriever docRetriever, Microsoft.IdentityModel.Protocols.IConfigurationValidator configValidator, Microsoft.IdentityModel.Protocols.Configuration.LastKnownGoodConfigurationCacheOptions lkgCacheOptions) => throw null; - public static readonly System.TimeSpan DefaultAutomaticRefreshInterval; - public static readonly System.TimeSpan DefaultRefreshInterval; - public override System.Threading.Tasks.Task GetBaseConfigurationAsync(System.Threading.CancellationToken cancel) => throw null; - public System.Threading.Tasks.Task GetConfigurationAsync() => throw null; - public System.Threading.Tasks.Task GetConfigurationAsync(System.Threading.CancellationToken cancel) => throw null; - public static readonly System.TimeSpan MinimumAutomaticRefreshInterval; - public static readonly System.TimeSpan MinimumRefreshInterval; - public override void RequestRefresh() => throw null; - } - public class ConfigurationValidationResult - { - public ConfigurationValidationResult() => throw null; - public string ErrorMessage { get => throw null; set { } } - public bool Succeeded { get => throw null; set { } } - } - public class FileDocumentRetriever : Microsoft.IdentityModel.Protocols.IDocumentRetriever - { - public FileDocumentRetriever() => throw null; - public System.Threading.Tasks.Task GetDocumentAsync(string address, System.Threading.CancellationToken cancel) => throw null; - } - public class HttpDocumentRetriever : Microsoft.IdentityModel.Protocols.IDocumentRetriever - { - public HttpDocumentRetriever() => throw null; - public HttpDocumentRetriever(System.Net.Http.HttpClient httpClient) => throw null; - public static bool DefaultSendAdditionalHeaderData { get => throw null; set { } } - public System.Threading.Tasks.Task GetDocumentAsync(string address, System.Threading.CancellationToken cancel) => throw null; - public bool RequireHttps { get => throw null; set { } } - public const string ResponseContent = default; - public bool SendAdditionalHeaderData { get => throw null; set { } } - public const string StatusCode = default; - } - public class HttpRequestData - { - public void AppendHeaders(System.Net.Http.Headers.HttpHeaders headers) => throw null; - public byte[] Body { get => throw null; set { } } - public System.Security.Cryptography.X509Certificates.X509Certificate2Collection ClientCertificates { get => throw null; } - public HttpRequestData() => throw null; - public System.Collections.Generic.IDictionary> Headers { get => throw null; set { } } - public string Method { get => throw null; set { } } - public System.Collections.Generic.IDictionary PropertyBag { get => throw null; set { } } - public System.Uri Uri { get => throw null; set { } } - } - public interface IConfigurationManager where T : class - { - System.Threading.Tasks.Task GetConfigurationAsync(System.Threading.CancellationToken cancel); - void RequestRefresh(); - } - public interface IConfigurationRetriever - { - System.Threading.Tasks.Task GetConfigurationAsync(string address, Microsoft.IdentityModel.Protocols.IDocumentRetriever retriever, System.Threading.CancellationToken cancel); - } - public interface IConfigurationValidator - { - Microsoft.IdentityModel.Protocols.ConfigurationValidationResult Validate(T configuration); - } - public interface IDocumentRetriever - { - System.Threading.Tasks.Task GetDocumentAsync(string address, System.Threading.CancellationToken cancel); - } - public class StaticConfigurationManager : Microsoft.IdentityModel.Tokens.BaseConfigurationManager, Microsoft.IdentityModel.Protocols.IConfigurationManager where T : class - { - public StaticConfigurationManager(T configuration) => throw null; - public override System.Threading.Tasks.Task GetBaseConfigurationAsync(System.Threading.CancellationToken cancel) => throw null; - public System.Threading.Tasks.Task GetConfigurationAsync(System.Threading.CancellationToken cancel) => throw null; - public override void RequestRefresh() => throw null; - } - public class X509CertificateValidationMode - { - public X509CertificateValidationMode() => throw null; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj deleted file mode 100644 index 3f7a9eeb43fa..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Protocols/7.5.0/Microsoft.IdentityModel.Protocols.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.cs b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.cs deleted file mode 100644 index 8cc98b2580c1..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.cs +++ /dev/null @@ -1,959 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.IdentityModel.Tokens, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace Microsoft -{ - namespace IdentityModel - { - namespace Tokens - { - public delegate bool AlgorithmValidator(string algorithm, Microsoft.IdentityModel.Tokens.SecurityKey securityKey, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public abstract class AsymmetricSecurityKey : Microsoft.IdentityModel.Tokens.SecurityKey - { - public AsymmetricSecurityKey() => throw null; - public abstract bool HasPrivateKey { get; } - public abstract Microsoft.IdentityModel.Tokens.PrivateKeyStatus PrivateKeyStatus { get; } - } - public class AsymmetricSignatureProvider : Microsoft.IdentityModel.Tokens.SignatureProvider - { - public AsymmetricSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) : base(default(Microsoft.IdentityModel.Tokens.SecurityKey), default(string)) => throw null; - public AsymmetricSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool willCreateSignatures) : base(default(Microsoft.IdentityModel.Tokens.SecurityKey), default(string)) => throw null; - public static readonly System.Collections.Generic.Dictionary DefaultMinimumAsymmetricKeySizeInBitsForSigningMap; - public static readonly System.Collections.Generic.Dictionary DefaultMinimumAsymmetricKeySizeInBitsForVerifyingMap; - protected override void Dispose(bool disposing) => throw null; - protected virtual System.Security.Cryptography.HashAlgorithmName GetHashAlgorithmName(string algorithm) => throw null; - public System.Collections.Generic.IReadOnlyDictionary MinimumAsymmetricKeySizeInBitsForSigningMap { get => throw null; } - public System.Collections.Generic.IReadOnlyDictionary MinimumAsymmetricKeySizeInBitsForVerifyingMap { get => throw null; } - public override bool Sign(System.ReadOnlySpan input, System.Span signature, out int bytesWritten) => throw null; - public override byte[] Sign(byte[] input) => throw null; - public override byte[] Sign(byte[] input, int offset, int count) => throw null; - public virtual void ValidateAsymmetricSecurityKeySize(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool willCreateSignatures) => throw null; - public override bool Verify(byte[] input, byte[] signature) => throw null; - public override bool Verify(byte[] input, int inputOffset, int inputLength, byte[] signature, int signatureOffset, int signatureLength) => throw null; - } - public delegate bool AudienceValidator(System.Collections.Generic.IEnumerable audiences, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public class AuthenticatedEncryptionProvider : System.IDisposable - { - public string Algorithm { get => throw null; } - public string Context { get => throw null; set { } } - public AuthenticatedEncryptionProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public virtual byte[] Decrypt(byte[] ciphertext, byte[] authenticatedData, byte[] iv, byte[] authenticationTag) => throw null; - public void Dispose() => throw null; - protected virtual void Dispose(bool disposing) => throw null; - public virtual Microsoft.IdentityModel.Tokens.AuthenticatedEncryptionResult Encrypt(byte[] plaintext, byte[] authenticatedData) => throw null; - public virtual Microsoft.IdentityModel.Tokens.AuthenticatedEncryptionResult Encrypt(byte[] plaintext, byte[] authenticatedData, byte[] iv) => throw null; - protected virtual byte[] GetKeyBytes(Microsoft.IdentityModel.Tokens.SecurityKey key) => throw null; - protected virtual bool IsSupportedAlgorithm(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - protected virtual void ValidateKeySize(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - } - public class AuthenticatedEncryptionResult - { - public byte[] AuthenticationTag { get => throw null; } - public byte[] Ciphertext { get => throw null; } - public AuthenticatedEncryptionResult(Microsoft.IdentityModel.Tokens.SecurityKey key, byte[] ciphertext, byte[] iv, byte[] authenticationTag) => throw null; - public byte[] IV { get => throw null; } - public Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - } - public static class Base64UrlEncoder - { - public static string Decode(string arg) => throw null; - public static byte[] DecodeBytes(string str) => throw null; - public static string Encode(string arg) => throw null; - public static string Encode(byte[] inArray) => throw null; - public static string Encode(byte[] inArray, int offset, int length) => throw null; - public static int Encode(System.ReadOnlySpan inArray, System.Span output) => throw null; - } - public abstract class BaseConfiguration - { - public virtual string ActiveTokenEndpoint { get => throw null; set { } } - protected BaseConfiguration() => throw null; - public virtual string Issuer { get => throw null; set { } } - public virtual System.Collections.Generic.ICollection SigningKeys { get => throw null; } - public virtual System.Collections.Generic.ICollection TokenDecryptionKeys { get => throw null; } - public virtual string TokenEndpoint { get => throw null; set { } } - } - public abstract class BaseConfigurationManager - { - public System.TimeSpan AutomaticRefreshInterval { get => throw null; set { } } - public BaseConfigurationManager() => throw null; - public BaseConfigurationManager(Microsoft.IdentityModel.Tokens.Configuration.LKGConfigurationCacheOptions options) => throw null; - public static readonly System.TimeSpan DefaultAutomaticRefreshInterval; - public static readonly System.TimeSpan DefaultLastKnownGoodConfigurationLifetime; - public static readonly System.TimeSpan DefaultRefreshInterval; - public virtual System.Threading.Tasks.Task GetBaseConfigurationAsync(System.Threading.CancellationToken cancel) => throw null; - public bool IsLastKnownGoodValid { get => throw null; } - public Microsoft.IdentityModel.Tokens.BaseConfiguration LastKnownGoodConfiguration { get => throw null; set { } } - public System.TimeSpan LastKnownGoodLifetime { get => throw null; set { } } - public string MetadataAddress { get => throw null; set { } } - public static readonly System.TimeSpan MinimumAutomaticRefreshInterval; - public static readonly System.TimeSpan MinimumRefreshInterval; - public System.TimeSpan RefreshInterval { get => throw null; set { } } - public abstract void RequestRefresh(); - public bool UseLastKnownGoodConfiguration { get => throw null; set { } } - } - public class CallContext : Microsoft.IdentityModel.Logging.LoggerContext - { - public CallContext() => throw null; - public CallContext(System.Guid activityId) => throw null; - } - public static class CollectionUtilities - { - public static bool IsNullOrEmpty(this System.Collections.Generic.IEnumerable enumerable) => throw null; - } - public class CompressionAlgorithms - { - public CompressionAlgorithms() => throw null; - public const string Deflate = default; - } - public class CompressionProviderFactory - { - public Microsoft.IdentityModel.Tokens.ICompressionProvider CreateCompressionProvider(string algorithm) => throw null; - public Microsoft.IdentityModel.Tokens.ICompressionProvider CreateCompressionProvider(string algorithm, int maximumDeflateSize) => throw null; - public CompressionProviderFactory() => throw null; - public CompressionProviderFactory(Microsoft.IdentityModel.Tokens.CompressionProviderFactory other) => throw null; - public Microsoft.IdentityModel.Tokens.ICompressionProvider CustomCompressionProvider { get => throw null; set { } } - public static Microsoft.IdentityModel.Tokens.CompressionProviderFactory Default { get => throw null; set { } } - public virtual bool IsSupportedAlgorithm(string algorithm) => throw null; - } - namespace Configuration - { - public class LKGConfigurationCacheOptions - { - public System.Collections.Generic.IEqualityComparer BaseConfigurationComparer { get => throw null; set { } } - public LKGConfigurationCacheOptions() => throw null; - public static readonly int DefaultLKGConfigurationSizeLimit; - public int LastKnownGoodConfigurationSizeLimit { get => throw null; set { } } - public bool RemoveExpiredValues { get => throw null; set { } } - public System.Threading.Tasks.TaskCreationOptions TaskCreationOptions { get => throw null; set { } } - } - } - public abstract class CryptoProviderCache - { - protected CryptoProviderCache() => throw null; - protected abstract string GetCacheKey(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider); - protected abstract string GetCacheKey(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, string algorithm, string typeofProvider); - public abstract bool TryAdd(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider); - public abstract bool TryGetSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, string algorithm, string typeofProvider, bool willCreateSignatures, out Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider); - public abstract bool TryRemove(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider); - } - public class CryptoProviderCacheOptions - { - public CryptoProviderCacheOptions() => throw null; - public static readonly int DefaultSizeLimit; - public int SizeLimit { get => throw null; set { } } - } - public class CryptoProviderFactory - { - public bool CacheSignatureProviders { get => throw null; set { } } - public virtual Microsoft.IdentityModel.Tokens.AuthenticatedEncryptionProvider CreateAuthenticatedEncryptionProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public virtual Microsoft.IdentityModel.Tokens.SignatureProvider CreateForSigning(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public virtual Microsoft.IdentityModel.Tokens.SignatureProvider CreateForSigning(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool cacheProvider) => throw null; - public virtual Microsoft.IdentityModel.Tokens.SignatureProvider CreateForVerifying(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public virtual Microsoft.IdentityModel.Tokens.SignatureProvider CreateForVerifying(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool cacheProvider) => throw null; - public virtual System.Security.Cryptography.HashAlgorithm CreateHashAlgorithm(System.Security.Cryptography.HashAlgorithmName algorithm) => throw null; - public virtual System.Security.Cryptography.HashAlgorithm CreateHashAlgorithm(string algorithm) => throw null; - public virtual System.Security.Cryptography.KeyedHashAlgorithm CreateKeyedHashAlgorithm(byte[] keyBytes, string algorithm) => throw null; - public virtual Microsoft.IdentityModel.Tokens.KeyWrapProvider CreateKeyWrapProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public virtual Microsoft.IdentityModel.Tokens.KeyWrapProvider CreateKeyWrapProviderForUnwrap(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public Microsoft.IdentityModel.Tokens.CryptoProviderCache CryptoProviderCache { get => throw null; } - public CryptoProviderFactory() => throw null; - public CryptoProviderFactory(Microsoft.IdentityModel.Tokens.CryptoProviderCache cache) => throw null; - public CryptoProviderFactory(Microsoft.IdentityModel.Tokens.CryptoProviderFactory other) => throw null; - public Microsoft.IdentityModel.Tokens.ICryptoProvider CustomCryptoProvider { get => throw null; set { } } - public static Microsoft.IdentityModel.Tokens.CryptoProviderFactory Default { get => throw null; set { } } - public static bool DefaultCacheSignatureProviders { get => throw null; set { } } - public static int DefaultSignatureProviderObjectPoolCacheSize { get => throw null; set { } } - public virtual bool IsSupportedAlgorithm(string algorithm) => throw null; - public virtual bool IsSupportedAlgorithm(string algorithm, Microsoft.IdentityModel.Tokens.SecurityKey key) => throw null; - public virtual void ReleaseHashAlgorithm(System.Security.Cryptography.HashAlgorithm hashAlgorithm) => throw null; - public virtual void ReleaseKeyWrapProvider(Microsoft.IdentityModel.Tokens.KeyWrapProvider provider) => throw null; - public virtual void ReleaseRsaKeyWrapProvider(Microsoft.IdentityModel.Tokens.RsaKeyWrapProvider provider) => throw null; - public virtual void ReleaseSignatureProvider(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider) => throw null; - public int SignatureProviderObjectPoolCacheSize { get => throw null; set { } } - } - public static class DateTimeUtil - { - public static System.DateTime Add(System.DateTime time, System.TimeSpan timespan) => throw null; - public static System.DateTime GetMaxValue(System.DateTimeKind kind) => throw null; - public static System.DateTime GetMinValue(System.DateTimeKind kind) => throw null; - public static System.DateTime? ToUniversalTime(System.DateTime? value) => throw null; - public static System.DateTime ToUniversalTime(System.DateTime value) => throw null; - } - public class DeflateCompressionProvider : Microsoft.IdentityModel.Tokens.ICompressionProvider - { - public string Algorithm { get => throw null; } - public byte[] Compress(byte[] value) => throw null; - public System.IO.Compression.CompressionLevel CompressionLevel { get => throw null; } - public DeflateCompressionProvider() => throw null; - public DeflateCompressionProvider(System.IO.Compression.CompressionLevel compressionLevel) => throw null; - public byte[] Decompress(byte[] value) => throw null; - public bool IsSupportedAlgorithm(string algorithm) => throw null; - public int MaximumDeflateSize { get => throw null; set { } } - } - public class EcdhKeyExchangeProvider - { - public EcdhKeyExchangeProvider(Microsoft.IdentityModel.Tokens.SecurityKey privateKey, Microsoft.IdentityModel.Tokens.SecurityKey publicKey, string alg, string enc) => throw null; - public Microsoft.IdentityModel.Tokens.SecurityKey GenerateKdf(string apu = default(string), string apv = default(string)) => throw null; - public int KeyDataLen { get => throw null; set { } } - } - public class ECDsaSecurityKey : Microsoft.IdentityModel.Tokens.AsymmetricSecurityKey - { - public override bool CanComputeJwkThumbprint() => throw null; - public override byte[] ComputeJwkThumbprint() => throw null; - public ECDsaSecurityKey(System.Security.Cryptography.ECDsa ecdsa) => throw null; - public System.Security.Cryptography.ECDsa ECDsa { get => throw null; } - public override bool HasPrivateKey { get => throw null; } - public override int KeySize { get => throw null; } - public override Microsoft.IdentityModel.Tokens.PrivateKeyStatus PrivateKeyStatus { get => throw null; } - } - public class EncryptingCredentials - { - public string Alg { get => throw null; } - public Microsoft.IdentityModel.Tokens.CryptoProviderFactory CryptoProviderFactory { get => throw null; set { } } - protected EncryptingCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, string alg, string enc) => throw null; - public EncryptingCredentials(Microsoft.IdentityModel.Tokens.SecurityKey key, string alg, string enc) => throw null; - public EncryptingCredentials(Microsoft.IdentityModel.Tokens.SymmetricSecurityKey key, string enc) => throw null; - public string Enc { get => throw null; } - public Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - public Microsoft.IdentityModel.Tokens.SecurityKey KeyExchangePublicKey { get => throw null; set { } } - public bool SetDefaultCtyClaim { get => throw null; set { } } - } - public static class EpochTime - { - public static System.DateTime DateTime(long secondsSinceUnixEpoch) => throw null; - public static long GetIntDate(System.DateTime datetime) => throw null; - public static readonly System.DateTime UnixEpoch; - } - public interface ICompressionProvider - { - string Algorithm { get; } - byte[] Compress(byte[] value); - byte[] Decompress(byte[] value); - bool IsSupportedAlgorithm(string algorithm); - } - public interface ICryptoProvider - { - object Create(string algorithm, params object[] args); - bool IsSupportedAlgorithm(string algorithm, params object[] args); - void Release(object cryptoInstance); - } - public class InMemoryCryptoProviderCache : Microsoft.IdentityModel.Tokens.CryptoProviderCache, System.IDisposable - { - public InMemoryCryptoProviderCache() => throw null; - public InMemoryCryptoProviderCache(Microsoft.IdentityModel.Tokens.CryptoProviderCacheOptions cryptoProviderCacheOptions) => throw null; - public void Dispose() => throw null; - protected virtual void Dispose(bool disposing) => throw null; - protected override string GetCacheKey(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider) => throw null; - protected override string GetCacheKey(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, string algorithm, string typeofProvider) => throw null; - public override bool TryAdd(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider) => throw null; - public override bool TryGetSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, string algorithm, string typeofProvider, bool willCreateSignatures, out Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider) => throw null; - public override bool TryRemove(Microsoft.IdentityModel.Tokens.SignatureProvider signatureProvider) => throw null; - } - public interface ISecurityTokenValidator - { - bool CanReadToken(string securityToken); - bool CanValidateToken { get; } - int MaximumTokenSizeInBytes { get; set; } - System.Security.Claims.ClaimsPrincipal ValidateToken(string securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, out Microsoft.IdentityModel.Tokens.SecurityToken validatedToken); - } - public delegate System.Collections.Generic.IEnumerable IssuerSigningKeyResolver(string token, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, string kid, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate System.Collections.Generic.IEnumerable IssuerSigningKeyResolverUsingConfiguration(string token, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, string kid, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, Microsoft.IdentityModel.Tokens.BaseConfiguration configuration); - public delegate bool IssuerSigningKeyValidator(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate bool IssuerSigningKeyValidatorUsingConfiguration(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, Microsoft.IdentityModel.Tokens.BaseConfiguration configuration); - public delegate string IssuerValidator(string issuer, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate string IssuerValidatorUsingConfiguration(string issuer, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, Microsoft.IdentityModel.Tokens.BaseConfiguration configuration); - public interface ITokenReplayCache - { - bool TryAdd(string securityToken, System.DateTime expiresOn); - bool TryFind(string securityToken); - } - public static class JsonWebAlgorithmsKeyTypes - { - public const string EllipticCurve = default; - public const string Octet = default; - public const string RSA = default; - } - public class JsonWebKey : Microsoft.IdentityModel.Tokens.SecurityKey - { - public System.Collections.Generic.IDictionary AdditionalData { get => throw null; } - public string Alg { get => throw null; set { } } - public override bool CanComputeJwkThumbprint() => throw null; - public override byte[] ComputeJwkThumbprint() => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey Create(string json) => throw null; - public string Crv { get => throw null; set { } } - public JsonWebKey() => throw null; - public JsonWebKey(string json) => throw null; - public string D { get => throw null; set { } } - public string DP { get => throw null; set { } } - public string DQ { get => throw null; set { } } - public string E { get => throw null; set { } } - public bool HasPrivateKey { get => throw null; } - public string K { get => throw null; set { } } - public override string KeyId { get => throw null; set { } } - public System.Collections.Generic.IList KeyOps { get => throw null; } - public override int KeySize { get => throw null; } - public string Kid { get => throw null; set { } } - public string Kty { get => throw null; set { } } - public string N { get => throw null; set { } } - public System.Collections.Generic.IList Oth { get => throw null; } - public string P { get => throw null; set { } } - public string Q { get => throw null; set { } } - public string QI { get => throw null; set { } } - public override string ToString() => throw null; - public string Use { get => throw null; set { } } - public string X { get => throw null; set { } } - public System.Collections.Generic.IList X5c { get => throw null; } - public string X5t { get => throw null; set { } } - public string X5tS256 { get => throw null; set { } } - public string X5u { get => throw null; set { } } - public string Y { get => throw null; set { } } - } - public class JsonWebKeyConverter - { - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromECDsaSecurityKey(Microsoft.IdentityModel.Tokens.ECDsaSecurityKey key) => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromRSASecurityKey(Microsoft.IdentityModel.Tokens.RsaSecurityKey key) => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromSecurityKey(Microsoft.IdentityModel.Tokens.SecurityKey key) => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromSymmetricSecurityKey(Microsoft.IdentityModel.Tokens.SymmetricSecurityKey key) => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromX509SecurityKey(Microsoft.IdentityModel.Tokens.X509SecurityKey key) => throw null; - public static Microsoft.IdentityModel.Tokens.JsonWebKey ConvertFromX509SecurityKey(Microsoft.IdentityModel.Tokens.X509SecurityKey key, bool representAsRsaKey) => throw null; - public JsonWebKeyConverter() => throw null; - } - public static class JsonWebKeyECTypes - { - public const string P256 = default; - public const string P384 = default; - public const string P512 = default; - public const string P521 = default; - } - public static class JsonWebKeyParameterNames - { - public const string Alg = default; - public const string Crv = default; - public const string D = default; - public const string DP = default; - public const string DQ = default; - public const string E = default; - public const string K = default; - public const string KeyOps = default; - public const string Keys = default; - public const string Kid = default; - public const string Kty = default; - public const string N = default; - public const string Oth = default; - public const string P = default; - public const string Q = default; - public const string QI = default; - public const string Use = default; - public const string X = default; - public const string X5c = default; - public const string X5t = default; - public const string X5tS256 = default; - public const string X5u = default; - public const string Y = default; - } - public class JsonWebKeySet - { - public System.Collections.Generic.IDictionary AdditionalData { get => throw null; } - public static Microsoft.IdentityModel.Tokens.JsonWebKeySet Create(string json) => throw null; - public JsonWebKeySet() => throw null; - public JsonWebKeySet(string json) => throw null; - public static bool DefaultSkipUnresolvedJsonWebKeys; - public System.Collections.Generic.IList GetSigningKeys() => throw null; - public System.Collections.Generic.IList Keys { get => throw null; } - public bool SkipUnresolvedJsonWebKeys { get => throw null; set { } } - } - public static class JsonWebKeySetParameterNames - { - public const string Keys = default; - } - public static class JsonWebKeyUseNames - { - public const string Enc = default; - public const string Sig = default; - } - public abstract class KeyWrapProvider : System.IDisposable - { - public abstract string Algorithm { get; } - public abstract string Context { get; set; } - protected KeyWrapProvider() => throw null; - public void Dispose() => throw null; - protected abstract void Dispose(bool disposing); - public abstract Microsoft.IdentityModel.Tokens.SecurityKey Key { get; } - public abstract byte[] UnwrapKey(byte[] keyBytes); - public abstract byte[] WrapKey(byte[] keyBytes); - } - public delegate bool LifetimeValidator(System.DateTime? notBefore, System.DateTime? expires, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public enum PrivateKeyStatus - { - Exists = 0, - DoesNotExist = 1, - Unknown = 2, - } - public class RsaKeyWrapProvider : Microsoft.IdentityModel.Tokens.KeyWrapProvider - { - public override string Algorithm { get => throw null; } - public override string Context { get => throw null; set { } } - public RsaKeyWrapProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool willUnwrap) => throw null; - protected override void Dispose(bool disposing) => throw null; - protected virtual bool IsSupportedAlgorithm(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - public override byte[] UnwrapKey(byte[] keyBytes) => throw null; - public override byte[] WrapKey(byte[] keyBytes) => throw null; - } - public class RsaSecurityKey : Microsoft.IdentityModel.Tokens.AsymmetricSecurityKey - { - public override bool CanComputeJwkThumbprint() => throw null; - public override byte[] ComputeJwkThumbprint() => throw null; - public RsaSecurityKey(System.Security.Cryptography.RSAParameters rsaParameters) => throw null; - public RsaSecurityKey(System.Security.Cryptography.RSA rsa) => throw null; - public override bool HasPrivateKey { get => throw null; } - public override int KeySize { get => throw null; } - public System.Security.Cryptography.RSAParameters Parameters { get => throw null; } - public override Microsoft.IdentityModel.Tokens.PrivateKeyStatus PrivateKeyStatus { get => throw null; } - public System.Security.Cryptography.RSA Rsa { get => throw null; } - } - public static class SecurityAlgorithms - { - public const string Aes128CbcHmacSha256 = default; - public const string Aes128Encryption = default; - public const string Aes128Gcm = default; - public const string Aes128KeyWrap = default; - public const string Aes128KW = default; - public const string Aes192CbcHmacSha384 = default; - public const string Aes192Encryption = default; - public const string Aes192Gcm = default; - public const string Aes192KeyWrap = default; - public const string Aes192KW = default; - public const string Aes256CbcHmacSha512 = default; - public const string Aes256Encryption = default; - public const string Aes256Gcm = default; - public const string Aes256KeyWrap = default; - public const string Aes256KW = default; - public const string DesEncryption = default; - public const string EcdhEs = default; - public const string EcdhEsA128kw = default; - public const string EcdhEsA192kw = default; - public const string EcdhEsA256kw = default; - public const string EcdsaSha256 = default; - public const string EcdsaSha256Signature = default; - public const string EcdsaSha384 = default; - public const string EcdsaSha384Signature = default; - public const string EcdsaSha512 = default; - public const string EcdsaSha512Signature = default; - public const string EnvelopedSignature = default; - public const string ExclusiveC14n = default; - public const string ExclusiveC14nWithComments = default; - public const string HmacSha256 = default; - public const string HmacSha256Signature = default; - public const string HmacSha384 = default; - public const string HmacSha384Signature = default; - public const string HmacSha512 = default; - public const string HmacSha512Signature = default; - public const string None = default; - public const string Ripemd160Digest = default; - public const string RsaOAEP = default; - public const string RsaOaepKeyWrap = default; - public const string RsaPKCS1 = default; - public const string RsaSha256 = default; - public const string RsaSha256Signature = default; - public const string RsaSha384 = default; - public const string RsaSha384Signature = default; - public const string RsaSha512 = default; - public const string RsaSha512Signature = default; - public const string RsaSsaPssSha256 = default; - public const string RsaSsaPssSha256Signature = default; - public const string RsaSsaPssSha384 = default; - public const string RsaSsaPssSha384Signature = default; - public const string RsaSsaPssSha512 = default; - public const string RsaSsaPssSha512Signature = default; - public const string RsaV15KeyWrap = default; - public const string Sha256 = default; - public const string Sha256Digest = default; - public const string Sha384 = default; - public const string Sha384Digest = default; - public const string Sha512 = default; - public const string Sha512Digest = default; - } - public abstract class SecurityKey - { - public virtual bool CanComputeJwkThumbprint() => throw null; - public virtual byte[] ComputeJwkThumbprint() => throw null; - public Microsoft.IdentityModel.Tokens.CryptoProviderFactory CryptoProviderFactory { get => throw null; set { } } - public SecurityKey() => throw null; - public virtual bool IsSupportedAlgorithm(string algorithm) => throw null; - public virtual string KeyId { get => throw null; set { } } - public abstract int KeySize { get; } - public override string ToString() => throw null; - } - public class SecurityKeyIdentifierClause - { - public SecurityKeyIdentifierClause() => throw null; - } - public abstract class SecurityToken : Microsoft.IdentityModel.Logging.ISafeLogSecurityArtifact - { - protected SecurityToken() => throw null; - public abstract string Id { get; } - public abstract string Issuer { get; } - public abstract Microsoft.IdentityModel.Tokens.SecurityKey SecurityKey { get; } - public abstract Microsoft.IdentityModel.Tokens.SecurityKey SigningKey { get; set; } - public virtual string UnsafeToString() => throw null; - public abstract System.DateTime ValidFrom { get; } - public abstract System.DateTime ValidTo { get; } - } - public class SecurityTokenArgumentException : System.ArgumentException - { - public SecurityTokenArgumentException() => throw null; - public SecurityTokenArgumentException(string message) => throw null; - public SecurityTokenArgumentException(string message, System.Exception innerException) => throw null; - protected SecurityTokenArgumentException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenCompressionFailedException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenCompressionFailedException() => throw null; - public SecurityTokenCompressionFailedException(string message) => throw null; - public SecurityTokenCompressionFailedException(string message, System.Exception inner) => throw null; - protected SecurityTokenCompressionFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenDecompressionFailedException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenDecompressionFailedException() => throw null; - public SecurityTokenDecompressionFailedException(string message) => throw null; - public SecurityTokenDecompressionFailedException(string message, System.Exception inner) => throw null; - protected SecurityTokenDecompressionFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenDecryptionFailedException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenDecryptionFailedException() => throw null; - public SecurityTokenDecryptionFailedException(string message) => throw null; - public SecurityTokenDecryptionFailedException(string message, System.Exception innerException) => throw null; - protected SecurityTokenDecryptionFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenDescriptor - { - public System.Collections.Generic.IDictionary AdditionalHeaderClaims { get => throw null; set { } } - public System.Collections.Generic.IDictionary AdditionalInnerHeaderClaims { get => throw null; set { } } - public string Audience { get => throw null; set { } } - public System.Collections.Generic.IDictionary Claims { get => throw null; set { } } - public string CompressionAlgorithm { get => throw null; set { } } - public SecurityTokenDescriptor() => throw null; - public Microsoft.IdentityModel.Tokens.EncryptingCredentials EncryptingCredentials { get => throw null; set { } } - public System.DateTime? Expires { get => throw null; set { } } - public System.DateTime? IssuedAt { get => throw null; set { } } - public string Issuer { get => throw null; set { } } - public System.DateTime? NotBefore { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SigningCredentials SigningCredentials { get => throw null; set { } } - public System.Security.Claims.ClaimsIdentity Subject { get => throw null; set { } } - public string TokenType { get => throw null; set { } } - } - public class SecurityTokenEncryptionFailedException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenEncryptionFailedException() => throw null; - public SecurityTokenEncryptionFailedException(string message) => throw null; - public SecurityTokenEncryptionFailedException(string message, System.Exception innerException) => throw null; - protected SecurityTokenEncryptionFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenEncryptionKeyNotFoundException : Microsoft.IdentityModel.Tokens.SecurityTokenDecryptionFailedException - { - public SecurityTokenEncryptionKeyNotFoundException() => throw null; - public SecurityTokenEncryptionKeyNotFoundException(string message) => throw null; - public SecurityTokenEncryptionKeyNotFoundException(string message, System.Exception innerException) => throw null; - protected SecurityTokenEncryptionKeyNotFoundException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenException : System.Exception - { - public SecurityTokenException() => throw null; - public SecurityTokenException(string message) => throw null; - public SecurityTokenException(string message, System.Exception innerException) => throw null; - protected SecurityTokenException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenExpiredException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenExpiredException() => throw null; - public SecurityTokenExpiredException(string message) => throw null; - public SecurityTokenExpiredException(string message, System.Exception inner) => throw null; - protected SecurityTokenExpiredException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public System.DateTime Expires { get => throw null; set { } } - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public abstract class SecurityTokenHandler : Microsoft.IdentityModel.Tokens.TokenHandler, Microsoft.IdentityModel.Tokens.ISecurityTokenValidator - { - public virtual bool CanReadToken(System.Xml.XmlReader reader) => throw null; - public virtual bool CanReadToken(string tokenString) => throw null; - public virtual bool CanValidateToken { get => throw null; } - public virtual bool CanWriteToken { get => throw null; } - public virtual Microsoft.IdentityModel.Tokens.SecurityKeyIdentifierClause CreateSecurityTokenReference(Microsoft.IdentityModel.Tokens.SecurityToken token, bool attached) => throw null; - public virtual Microsoft.IdentityModel.Tokens.SecurityToken CreateToken(Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor tokenDescriptor) => throw null; - protected SecurityTokenHandler() => throw null; - public virtual Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(System.Xml.XmlReader reader) => throw null; - public abstract Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(System.Xml.XmlReader reader, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public abstract System.Type TokenType { get; } - public virtual System.Security.Claims.ClaimsPrincipal ValidateToken(string securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, out Microsoft.IdentityModel.Tokens.SecurityToken validatedToken) => throw null; - public virtual System.Security.Claims.ClaimsPrincipal ValidateToken(System.Xml.XmlReader reader, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, out Microsoft.IdentityModel.Tokens.SecurityToken validatedToken) => throw null; - public virtual string WriteToken(Microsoft.IdentityModel.Tokens.SecurityToken token) => throw null; - public abstract void WriteToken(System.Xml.XmlWriter writer, Microsoft.IdentityModel.Tokens.SecurityToken token); - } - public class SecurityTokenInvalidAlgorithmException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidAlgorithmException() => throw null; - public SecurityTokenInvalidAlgorithmException(string message) => throw null; - public SecurityTokenInvalidAlgorithmException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidAlgorithmException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public string InvalidAlgorithm { get => throw null; set { } } - } - public class SecurityTokenInvalidAudienceException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidAudienceException() => throw null; - public SecurityTokenInvalidAudienceException(string message) => throw null; - public SecurityTokenInvalidAudienceException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidAudienceException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public string InvalidAudience { get => throw null; set { } } - } - public class SecurityTokenInvalidIssuerException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidIssuerException() => throw null; - public SecurityTokenInvalidIssuerException(string message) => throw null; - public SecurityTokenInvalidIssuerException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidIssuerException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public string InvalidIssuer { get => throw null; set { } } - } - public class SecurityTokenInvalidLifetimeException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidLifetimeException() => throw null; - public SecurityTokenInvalidLifetimeException(string message) => throw null; - public SecurityTokenInvalidLifetimeException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidLifetimeException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public System.DateTime? Expires { get => throw null; set { } } - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public System.DateTime? NotBefore { get => throw null; set { } } - } - public class SecurityTokenInvalidSignatureException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidSignatureException() => throw null; - public SecurityTokenInvalidSignatureException(string message) => throw null; - public SecurityTokenInvalidSignatureException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidSignatureException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenInvalidSigningKeyException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidSigningKeyException() => throw null; - public SecurityTokenInvalidSigningKeyException(string message) => throw null; - public SecurityTokenInvalidSigningKeyException(string message, System.Exception inner) => throw null; - protected SecurityTokenInvalidSigningKeyException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public Microsoft.IdentityModel.Tokens.SecurityKey SigningKey { get => throw null; set { } } - } - public class SecurityTokenInvalidTypeException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenInvalidTypeException() => throw null; - public SecurityTokenInvalidTypeException(string message) => throw null; - public SecurityTokenInvalidTypeException(string message, System.Exception innerException) => throw null; - protected SecurityTokenInvalidTypeException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public string InvalidType { get => throw null; set { } } - } - public class SecurityTokenKeyWrapException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenKeyWrapException() => throw null; - public SecurityTokenKeyWrapException(string message) => throw null; - public SecurityTokenKeyWrapException(string message, System.Exception innerException) => throw null; - protected SecurityTokenKeyWrapException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenMalformedException : Microsoft.IdentityModel.Tokens.SecurityTokenArgumentException - { - public SecurityTokenMalformedException() => throw null; - public SecurityTokenMalformedException(string message) => throw null; - public SecurityTokenMalformedException(string message, System.Exception innerException) => throw null; - protected SecurityTokenMalformedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenNoExpirationException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenNoExpirationException() => throw null; - public SecurityTokenNoExpirationException(string message) => throw null; - public SecurityTokenNoExpirationException(string message, System.Exception innerException) => throw null; - protected SecurityTokenNoExpirationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenNotYetValidException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenNotYetValidException() => throw null; - public SecurityTokenNotYetValidException(string message) => throw null; - public SecurityTokenNotYetValidException(string message, System.Exception inner) => throw null; - protected SecurityTokenNotYetValidException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public System.DateTime NotBefore { get => throw null; set { } } - } - public class SecurityTokenReplayAddFailedException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenReplayAddFailedException() => throw null; - public SecurityTokenReplayAddFailedException(string message) => throw null; - public SecurityTokenReplayAddFailedException(string message, System.Exception innerException) => throw null; - protected SecurityTokenReplayAddFailedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenReplayDetectedException : Microsoft.IdentityModel.Tokens.SecurityTokenValidationException - { - public SecurityTokenReplayDetectedException() => throw null; - public SecurityTokenReplayDetectedException(string message) => throw null; - public SecurityTokenReplayDetectedException(string message, System.Exception inner) => throw null; - protected SecurityTokenReplayDetectedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenSignatureKeyNotFoundException : Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException - { - public SecurityTokenSignatureKeyNotFoundException() => throw null; - public SecurityTokenSignatureKeyNotFoundException(string message) => throw null; - public SecurityTokenSignatureKeyNotFoundException(string message, System.Exception innerException) => throw null; - protected SecurityTokenSignatureKeyNotFoundException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public class SecurityTokenUnableToValidateException : Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException - { - public SecurityTokenUnableToValidateException() => throw null; - public SecurityTokenUnableToValidateException(Microsoft.IdentityModel.Tokens.ValidationFailure validationFailure, string message) => throw null; - public SecurityTokenUnableToValidateException(string message) => throw null; - public SecurityTokenUnableToValidateException(string message, System.Exception innerException) => throw null; - protected SecurityTokenUnableToValidateException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - public Microsoft.IdentityModel.Tokens.ValidationFailure ValidationFailure { get => throw null; set { } } - } - public class SecurityTokenValidationException : Microsoft.IdentityModel.Tokens.SecurityTokenException - { - public SecurityTokenValidationException() => throw null; - public SecurityTokenValidationException(string message) => throw null; - public SecurityTokenValidationException(string message, System.Exception innerException) => throw null; - protected SecurityTokenValidationException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) => throw null; - } - public abstract class SignatureProvider : System.IDisposable - { - public string Algorithm { get => throw null; } - public string Context { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.CryptoProviderCache CryptoProviderCache { get => throw null; set { } } - protected SignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public void Dispose() => throw null; - protected abstract void Dispose(bool disposing); - public Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - public abstract byte[] Sign(byte[] input); - public virtual byte[] Sign(byte[] input, int offset, int count) => throw null; - public virtual bool Sign(System.ReadOnlySpan data, System.Span destination, out int bytesWritten) => throw null; - public abstract bool Verify(byte[] input, byte[] signature); - public virtual bool Verify(byte[] input, int inputOffset, int inputLength, byte[] signature, int signatureOffset, int signatureLength) => throw null; - public bool WillCreateSignatures { get => throw null; set { } } - } - public delegate Microsoft.IdentityModel.Tokens.SecurityToken SignatureValidator(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate Microsoft.IdentityModel.Tokens.SecurityToken SignatureValidatorUsingConfiguration(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, Microsoft.IdentityModel.Tokens.BaseConfiguration configuration); - public class SigningCredentials - { - public string Algorithm { get => throw null; } - public Microsoft.IdentityModel.Tokens.CryptoProviderFactory CryptoProviderFactory { get => throw null; set { } } - protected SigningCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - protected SigningCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, string algorithm) => throw null; - public SigningCredentials(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public SigningCredentials(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, string digest) => throw null; - public string Digest { get => throw null; } - public Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - public string Kid { get => throw null; } - } - public class SymmetricKeyWrapProvider : Microsoft.IdentityModel.Tokens.KeyWrapProvider - { - public override string Algorithm { get => throw null; } - public override string Context { get => throw null; set { } } - public SymmetricKeyWrapProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - protected override void Dispose(bool disposing) => throw null; - protected virtual System.Security.Cryptography.SymmetricAlgorithm GetSymmetricAlgorithm(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - protected virtual bool IsSupportedAlgorithm(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityKey Key { get => throw null; } - public override byte[] UnwrapKey(byte[] keyBytes) => throw null; - public override byte[] WrapKey(byte[] keyBytes) => throw null; - } - public class SymmetricSecurityKey : Microsoft.IdentityModel.Tokens.SecurityKey - { - public override bool CanComputeJwkThumbprint() => throw null; - public override byte[] ComputeJwkThumbprint() => throw null; - public SymmetricSecurityKey(byte[] key) => throw null; - public virtual byte[] Key { get => throw null; } - public override int KeySize { get => throw null; } - } - public class SymmetricSignatureProvider : Microsoft.IdentityModel.Tokens.SignatureProvider - { - public SymmetricSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm) : base(default(Microsoft.IdentityModel.Tokens.SecurityKey), default(string)) => throw null; - public SymmetricSignatureProvider(Microsoft.IdentityModel.Tokens.SecurityKey key, string algorithm, bool willCreateSignatures) : base(default(Microsoft.IdentityModel.Tokens.SecurityKey), default(string)) => throw null; - public static readonly int DefaultMinimumSymmetricKeySizeInBits; - protected override void Dispose(bool disposing) => throw null; - protected virtual byte[] GetKeyBytes(Microsoft.IdentityModel.Tokens.SecurityKey key) => throw null; - protected virtual System.Security.Cryptography.KeyedHashAlgorithm GetKeyedHashAlgorithm(byte[] keyBytes, string algorithm) => throw null; - public int MinimumSymmetricKeySizeInBits { get => throw null; set { } } - protected virtual void ReleaseKeyedHashAlgorithm(System.Security.Cryptography.KeyedHashAlgorithm keyedHashAlgorithm) => throw null; - public override byte[] Sign(byte[] input) => throw null; - public override bool Sign(System.ReadOnlySpan input, System.Span signature, out int bytesWritten) => throw null; - public override byte[] Sign(byte[] input, int offset, int count) => throw null; - public override bool Verify(byte[] input, byte[] signature) => throw null; - public bool Verify(byte[] input, byte[] signature, int length) => throw null; - public override bool Verify(byte[] input, int inputOffset, int inputLength, byte[] signature, int signatureOffset, int signatureLength) => throw null; - } - public class TokenContext : Microsoft.IdentityModel.Tokens.CallContext - { - public TokenContext() => throw null; - public TokenContext(System.Guid activityId) => throw null; - } - public delegate System.Collections.Generic.IEnumerable TokenDecryptionKeyResolver(string token, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, string kid, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public abstract class TokenHandler - { - protected TokenHandler() => throw null; - public static readonly int DefaultTokenLifetimeInMinutes; - public virtual int MaximumTokenSizeInBytes { get => throw null; set { } } - public virtual Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(string token) => throw null; - public bool SetDefaultTimesOnTokenCreation { get => throw null; set { } } - public int TokenLifetimeInMinutes { get => throw null; set { } } - public virtual System.Threading.Tasks.Task ValidateTokenAsync(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public virtual System.Threading.Tasks.Task ValidateTokenAsync(Microsoft.IdentityModel.Tokens.SecurityToken token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - } - public delegate Microsoft.IdentityModel.Tokens.SecurityToken TokenReader(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate bool TokenReplayValidator(System.DateTime? expirationTime, string securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public class TokenValidationParameters - { - public Microsoft.IdentityModel.Tokens.TokenValidationParameters ActorValidationParameters { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.AlgorithmValidator AlgorithmValidator { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.AudienceValidator AudienceValidator { get => throw null; set { } } - public string AuthenticationType { get => throw null; set { } } - public System.TimeSpan ClockSkew { get => throw null; set { } } - public virtual Microsoft.IdentityModel.Tokens.TokenValidationParameters Clone() => throw null; - public Microsoft.IdentityModel.Tokens.BaseConfigurationManager ConfigurationManager { get => throw null; set { } } - public virtual System.Security.Claims.ClaimsIdentity CreateClaimsIdentity(Microsoft.IdentityModel.Tokens.SecurityToken securityToken, string issuer) => throw null; - public Microsoft.IdentityModel.Tokens.CryptoProviderFactory CryptoProviderFactory { get => throw null; set { } } - protected TokenValidationParameters(Microsoft.IdentityModel.Tokens.TokenValidationParameters other) => throw null; - public TokenValidationParameters() => throw null; - public string DebugId { get => throw null; set { } } - public static readonly string DefaultAuthenticationType; - public static readonly System.TimeSpan DefaultClockSkew; - public const int DefaultMaximumTokenSizeInBytes = 256000; - public bool IgnoreTrailingSlashWhenValidatingAudience { get => throw null; set { } } - public bool IncludeTokenOnFailedValidation { get => throw null; set { } } - public System.Collections.Generic.IDictionary InstancePropertyBag { get => throw null; } - public bool IsClone { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SecurityKey IssuerSigningKey { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerSigningKeyResolver IssuerSigningKeyResolver { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerSigningKeyResolverUsingConfiguration IssuerSigningKeyResolverUsingConfiguration { get => throw null; set { } } - public System.Collections.Generic.IEnumerable IssuerSigningKeys { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerSigningKeyValidator IssuerSigningKeyValidator { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerSigningKeyValidatorUsingConfiguration IssuerSigningKeyValidatorUsingConfiguration { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerValidator IssuerValidator { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.IssuerValidatorUsingConfiguration IssuerValidatorUsingConfiguration { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.LifetimeValidator LifetimeValidator { get => throw null; set { } } - public bool LogTokenId { get => throw null; set { } } - public bool LogValidationExceptions { get => throw null; set { } } - public string NameClaimType { get => throw null; set { } } - public System.Func NameClaimTypeRetriever { get => throw null; set { } } - public System.Collections.Generic.IDictionary PropertyBag { get => throw null; set { } } - public bool RefreshBeforeValidation { get => throw null; set { } } - public bool RequireAudience { get => throw null; set { } } - public bool RequireExpirationTime { get => throw null; set { } } - public bool RequireSignedTokens { get => throw null; set { } } - public string RoleClaimType { get => throw null; set { } } - public System.Func RoleClaimTypeRetriever { get => throw null; set { } } - public bool SaveSigninToken { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SignatureValidator SignatureValidator { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SignatureValidatorUsingConfiguration SignatureValidatorUsingConfiguration { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SecurityKey TokenDecryptionKey { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.TokenDecryptionKeyResolver TokenDecryptionKeyResolver { get => throw null; set { } } - public System.Collections.Generic.IEnumerable TokenDecryptionKeys { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.TokenReader TokenReader { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.ITokenReplayCache TokenReplayCache { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.TokenReplayValidator TokenReplayValidator { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.TransformBeforeSignatureValidation TransformBeforeSignatureValidation { get => throw null; set { } } - public bool TryAllIssuerSigningKeys { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.TypeValidator TypeValidator { get => throw null; set { } } - public System.Collections.Generic.IEnumerable ValidAlgorithms { get => throw null; set { } } - public bool ValidateActor { get => throw null; set { } } - public bool ValidateAudience { get => throw null; set { } } - public bool ValidateIssuer { get => throw null; set { } } - public bool ValidateIssuerSigningKey { get => throw null; set { } } - public bool ValidateLifetime { get => throw null; set { } } - public bool ValidateSignatureLast { get => throw null; set { } } - public bool ValidateTokenReplay { get => throw null; set { } } - public bool ValidateWithLKG { get => throw null; set { } } - public string ValidAudience { get => throw null; set { } } - public System.Collections.Generic.IEnumerable ValidAudiences { get => throw null; set { } } - public string ValidIssuer { get => throw null; set { } } - public System.Collections.Generic.IEnumerable ValidIssuers { get => throw null; set { } } - public System.Collections.Generic.IEnumerable ValidTypes { get => throw null; set { } } - } - public class TokenValidationResult - { - public System.Collections.Generic.IDictionary Claims { get => throw null; } - public System.Security.Claims.ClaimsIdentity ClaimsIdentity { get => throw null; set { } } - public TokenValidationResult() => throw null; - public System.Exception Exception { get => throw null; set { } } - public string Issuer { get => throw null; set { } } - public bool IsValid { get => throw null; set { } } - public System.Collections.Generic.IDictionary PropertyBag { get => throw null; } - public Microsoft.IdentityModel.Tokens.SecurityToken SecurityToken { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.CallContext TokenContext { get => throw null; set { } } - public Microsoft.IdentityModel.Tokens.SecurityToken TokenOnFailedValidation { get => throw null; } - public string TokenType { get => throw null; set { } } - } - public delegate Microsoft.IdentityModel.Tokens.SecurityToken TransformBeforeSignatureValidation(Microsoft.IdentityModel.Tokens.SecurityToken token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public delegate string TypeValidator(string type, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters); - public static class UniqueId - { - public static string CreateRandomId() => throw null; - public static string CreateRandomId(string prefix) => throw null; - public static System.Uri CreateRandomUri() => throw null; - public static string CreateUniqueId() => throw null; - public static string CreateUniqueId(string prefix) => throw null; - } - public static class Utility - { - public static bool AreEqual(byte[] a, byte[] b) => throw null; - public static byte[] CloneByteArray(this byte[] src) => throw null; - public const string Empty = default; - public static bool IsHttps(string address) => throw null; - public static bool IsHttps(System.Uri uri) => throw null; - public const string Null = default; - } - public enum ValidationFailure - { - None = 0, - InvalidLifetime = 1, - InvalidIssuer = 2, - } - public static class Validators - { - public static void ValidateAlgorithm(string algorithm, Microsoft.IdentityModel.Tokens.SecurityKey securityKey, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static void ValidateAudience(System.Collections.Generic.IEnumerable audiences, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static string ValidateIssuer(string issuer, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static void ValidateIssuerSecurityKey(Microsoft.IdentityModel.Tokens.SecurityKey securityKey, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static void ValidateLifetime(System.DateTime? notBefore, System.DateTime? expires, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static void ValidateTokenReplay(System.DateTime? expirationTime, string securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static void ValidateTokenReplay(string securityToken, System.DateTime? expirationTime, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static string ValidateTokenType(string type, Microsoft.IdentityModel.Tokens.SecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - } - public class X509EncryptingCredentials : Microsoft.IdentityModel.Tokens.EncryptingCredentials - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public X509EncryptingCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) : base(default(Microsoft.IdentityModel.Tokens.SymmetricSecurityKey), default(string)) => throw null; - public X509EncryptingCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, string keyWrapAlgorithm, string dataEncryptionAlgorithm) : base(default(Microsoft.IdentityModel.Tokens.SymmetricSecurityKey), default(string)) => throw null; - } - public class X509SecurityKey : Microsoft.IdentityModel.Tokens.AsymmetricSecurityKey - { - public override bool CanComputeJwkThumbprint() => throw null; - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public override byte[] ComputeJwkThumbprint() => throw null; - public X509SecurityKey(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public X509SecurityKey(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, string keyId) => throw null; - public override bool Equals(object obj) => throw null; - public override int GetHashCode() => throw null; - public override bool HasPrivateKey { get => throw null; } - public override int KeySize { get => throw null; } - public System.Security.Cryptography.AsymmetricAlgorithm PrivateKey { get => throw null; } - public override Microsoft.IdentityModel.Tokens.PrivateKeyStatus PrivateKeyStatus { get => throw null; } - public System.Security.Cryptography.AsymmetricAlgorithm PublicKey { get => throw null; } - public string X5t { get => throw null; } - } - public class X509SigningCredentials : Microsoft.IdentityModel.Tokens.SigningCredentials - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public X509SigningCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) : base(default(System.Security.Cryptography.X509Certificates.X509Certificate2)) => throw null; - public X509SigningCredentials(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, string algorithm) : base(default(System.Security.Cryptography.X509Certificates.X509Certificate2)) => throw null; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj b/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj deleted file mode 100644 index 524740979fa2..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.IdentityModel.Tokens/7.5.0/Microsoft.IdentityModel.Tokens.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.cs b/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.cs deleted file mode 100644 index 8c197a3d6824..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.cs +++ /dev/null @@ -1,91 +0,0 @@ -// This file contains auto-generated code. -// Generated from `Microsoft.SqlServer.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5`. -namespace Microsoft -{ - namespace SqlServer - { - namespace Server - { - public enum DataAccessKind - { - None = 0, - Read = 1, - } - public enum Format - { - Unknown = 0, - Native = 1, - UserDefined = 2, - } - public interface IBinarySerialize - { - void Read(System.IO.BinaryReader r); - void Write(System.IO.BinaryWriter w); - } - public sealed class InvalidUdtException : System.SystemException - { - public static Microsoft.SqlServer.Server.InvalidUdtException Create(System.Type udtType, string resourceReason = default(string)) => throw null; - public override void GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) => throw null; - } - [System.AttributeUsage((System.AttributeTargets)10624, AllowMultiple = false, Inherited = false)] - public class SqlFacetAttribute : System.Attribute - { - public SqlFacetAttribute() => throw null; - public bool IsFixedLength { get => throw null; set { } } - public bool IsNullable { get => throw null; set { } } - public int MaxSize { get => throw null; set { } } - public int Precision { get => throw null; set { } } - public int Scale { get => throw null; set { } } - } - [System.AttributeUsage((System.AttributeTargets)64, AllowMultiple = false, Inherited = false)] - public class SqlFunctionAttribute : System.Attribute - { - public SqlFunctionAttribute() => throw null; - public Microsoft.SqlServer.Server.DataAccessKind DataAccess { get => throw null; set { } } - public string FillRowMethodName { get => throw null; set { } } - public bool IsDeterministic { get => throw null; set { } } - public bool IsPrecise { get => throw null; set { } } - public string Name { get => throw null; set { } } - public Microsoft.SqlServer.Server.SystemDataAccessKind SystemDataAccess { get => throw null; set { } } - public string TableDefinition { get => throw null; set { } } - } - [System.AttributeUsage((System.AttributeTargets)64, AllowMultiple = false, Inherited = false)] - public sealed class SqlMethodAttribute : Microsoft.SqlServer.Server.SqlFunctionAttribute - { - public SqlMethodAttribute() => throw null; - public bool InvokeIfReceiverIsNull { get => throw null; set { } } - public bool IsMutator { get => throw null; set { } } - public bool OnNullCall { get => throw null; set { } } - } - [System.AttributeUsage((System.AttributeTargets)12, AllowMultiple = false, Inherited = false)] - public sealed class SqlUserDefinedAggregateAttribute : System.Attribute - { - public SqlUserDefinedAggregateAttribute(Microsoft.SqlServer.Server.Format format) => throw null; - public Microsoft.SqlServer.Server.Format Format { get => throw null; } - public bool IsInvariantToDuplicates { get => throw null; set { } } - public bool IsInvariantToNulls { get => throw null; set { } } - public bool IsInvariantToOrder { get => throw null; set { } } - public bool IsNullIfEmpty { get => throw null; set { } } - public int MaxByteSize { get => throw null; set { } } - public const int MaxByteSizeValue = 8000; - public string Name { get => throw null; set { } } - } - [System.AttributeUsage((System.AttributeTargets)12, AllowMultiple = false, Inherited = true)] - public sealed class SqlUserDefinedTypeAttribute : System.Attribute - { - public SqlUserDefinedTypeAttribute(Microsoft.SqlServer.Server.Format format) => throw null; - public Microsoft.SqlServer.Server.Format Format { get => throw null; } - public bool IsByteOrdered { get => throw null; set { } } - public bool IsFixedLength { get => throw null; set { } } - public int MaxByteSize { get => throw null; set { } } - public string Name { get => throw null; set { } } - public string ValidationMethodName { get => throw null; set { } } - } - public enum SystemDataAccessKind - { - None = 0, - Read = 1, - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj b/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/Microsoft.SqlServer.Server/1.0.0/Microsoft.SqlServer.Server.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.cs b/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.cs deleted file mode 100644 index 964fecb626d4..000000000000 --- a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.cs +++ /dev/null @@ -1,42 +0,0 @@ -// This file contains auto-generated code. -// Generated from `System.ClientModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8`. -namespace System -{ - namespace ClientModel - { - namespace Primitives - { - public interface IJsonModel : System.ClientModel.Primitives.IPersistableModel - { - T Create(ref System.Text.Json.Utf8JsonReader reader, System.ClientModel.Primitives.ModelReaderWriterOptions options); - void Write(System.Text.Json.Utf8JsonWriter writer, System.ClientModel.Primitives.ModelReaderWriterOptions options); - } - public interface IPersistableModel - { - T Create(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options); - string GetFormatFromOptions(System.ClientModel.Primitives.ModelReaderWriterOptions options); - System.BinaryData Write(System.ClientModel.Primitives.ModelReaderWriterOptions options); - } - public static class ModelReaderWriter - { - public static T Read(System.BinaryData data, System.ClientModel.Primitives.ModelReaderWriterOptions options = default(System.ClientModel.Primitives.ModelReaderWriterOptions)) where T : System.ClientModel.Primitives.IPersistableModel => throw null; - public static object Read(System.BinaryData data, System.Type returnType, System.ClientModel.Primitives.ModelReaderWriterOptions options = default(System.ClientModel.Primitives.ModelReaderWriterOptions)) => throw null; - public static System.BinaryData Write(T model, System.ClientModel.Primitives.ModelReaderWriterOptions options = default(System.ClientModel.Primitives.ModelReaderWriterOptions)) where T : System.ClientModel.Primitives.IPersistableModel => throw null; - public static System.BinaryData Write(object model, System.ClientModel.Primitives.ModelReaderWriterOptions options = default(System.ClientModel.Primitives.ModelReaderWriterOptions)) => throw null; - } - public class ModelReaderWriterOptions - { - public ModelReaderWriterOptions(string format) => throw null; - public string Format { get => throw null; } - public static System.ClientModel.Primitives.ModelReaderWriterOptions Json { get => throw null; } - public static System.ClientModel.Primitives.ModelReaderWriterOptions Xml { get => throw null; } - } - [System.AttributeUsage((System.AttributeTargets)4)] - public sealed class PersistableModelProxyAttribute : System.Attribute - { - public PersistableModelProxyAttribute(System.Type proxyType) => throw null; - public System.Type ProxyType { get => throw null; } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj b/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj deleted file mode 100644 index af9830f6d13d..000000000000 --- a/csharp/ql/test/resources/stubs/System.ClientModel/1.0.0/System.ClientModel.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj b/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj deleted file mode 100644 index 8017e89ccf27..000000000000 --- a/csharp/ql/test/resources/stubs/System.Configuration.ConfigurationManager/9.0.4/System.Configuration.ConfigurationManager.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj deleted file mode 100644 index 44f3b6c98d18..000000000000 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.DiagnosticSource/6.0.1/System.Diagnostics.DiagnosticSource.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj b/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Diagnostics.EventLog/9.0.4/System.Diagnostics.EventLog.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.cs b/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.cs deleted file mode 100644 index ad97899809de..000000000000 --- a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.cs +++ /dev/null @@ -1,227 +0,0 @@ -// This file contains auto-generated code. -// Generated from `System.IdentityModel.Tokens.Jwt, Version=7.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35`. -namespace System -{ - namespace IdentityModel - { - namespace Tokens - { - namespace Jwt - { - public static class JsonClaimValueTypes - { - public const string Json = default; - public const string JsonArray = default; - public const string JsonNull = default; - } - public static class JwtConstants - { - public const string DirectKeyUseAlg = default; - public const string HeaderType = default; - public const string HeaderTypeAlt = default; - public const string JsonCompactSerializationRegex = default; - public const string JweCompactSerializationRegex = default; - public const string TokenType = default; - public const string TokenTypeAlt = default; - } - public class JwtHeader : System.Collections.Generic.Dictionary - { - public string Alg { get => throw null; } - public static System.IdentityModel.Tokens.Jwt.JwtHeader Base64UrlDeserialize(string base64UrlEncodedJsonString) => throw null; - public virtual string Base64UrlEncode() => throw null; - public JwtHeader() => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap, string tokenType) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap, string tokenType, System.Collections.Generic.IDictionary additionalInnerHeaderClaims) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap, string tokenType) => throw null; - public JwtHeader(Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary outboundAlgorithmMap, string tokenType, System.Collections.Generic.IDictionary additionalHeaderClaims) => throw null; - public string Cty { get => throw null; } - public string Enc { get => throw null; } - public Microsoft.IdentityModel.Tokens.EncryptingCredentials EncryptingCredentials { get => throw null; } - public string IV { get => throw null; } - public string Kid { get => throw null; } - public virtual string SerializeToJson() => throw null; - public Microsoft.IdentityModel.Tokens.SigningCredentials SigningCredentials { get => throw null; } - public string Typ { get => throw null; } - public string X5c { get => throw null; } - public string X5t { get => throw null; } - public string Zip { get => throw null; } - } - public struct JwtHeaderParameterNames - { - public const string Alg = default; - public const string Apu = default; - public const string Apv = default; - public const string Cty = default; - public const string Enc = default; - public const string Epk = default; - public const string IV = default; - public const string Jku = default; - public const string Jwk = default; - public const string Kid = default; - public const string Typ = default; - public const string X5c = default; - public const string X5t = default; - public const string X5u = default; - public const string Zip = default; - } - public class JwtPayload : System.Collections.Generic.Dictionary - { - public string Acr { get => throw null; } - public string Actort { get => throw null; } - public void AddClaim(System.Security.Claims.Claim claim) => throw null; - public void AddClaims(System.Collections.Generic.IEnumerable claims) => throw null; - public System.Collections.Generic.IList Amr { get => throw null; } - public System.Collections.Generic.IList Aud { get => throw null; } - public int? AuthTime { get => throw null; } - public string Azp { get => throw null; } - public static System.IdentityModel.Tokens.Jwt.JwtPayload Base64UrlDeserialize(string base64UrlEncodedJsonString) => throw null; - public virtual string Base64UrlEncode() => throw null; - public string CHash { get => throw null; } - public virtual System.Collections.Generic.IEnumerable Claims { get => throw null; } - public JwtPayload() => throw null; - public JwtPayload(System.Collections.Generic.IEnumerable claims) => throw null; - public JwtPayload(string issuer, string audience, System.Collections.Generic.IEnumerable claims, System.DateTime? notBefore, System.DateTime? expires) => throw null; - public JwtPayload(string issuer, string audience, System.Collections.Generic.IEnumerable claims, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt) => throw null; - public JwtPayload(string issuer, string audience, System.Collections.Generic.IEnumerable claims, System.Collections.Generic.IDictionary claimsCollection, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt) => throw null; - public static System.IdentityModel.Tokens.Jwt.JwtPayload Deserialize(string jsonString) => throw null; - public int? Exp { get => throw null; } - public long? Expiration { get => throw null; } - public int? Iat { get => throw null; } - public string Iss { get => throw null; } - public System.DateTime IssuedAt { get => throw null; } - public string Jti { get => throw null; } - public int? Nbf { get => throw null; } - public string Nonce { get => throw null; } - public long? NotBefore { get => throw null; } - public virtual string SerializeToJson() => throw null; - public string Sub { get => throw null; } - public System.DateTime ValidFrom { get => throw null; } - public System.DateTime ValidTo { get => throw null; } - } - public struct JwtRegisteredClaimNames - { - public const string Acr = default; - public const string Actort = default; - public const string Amr = default; - public const string AtHash = default; - public const string Aud = default; - public const string AuthTime = default; - public const string Azp = default; - public const string Birthdate = default; - public const string CHash = default; - public const string Email = default; - public const string Exp = default; - public const string FamilyName = default; - public const string Gender = default; - public const string GivenName = default; - public const string Iat = default; - public const string Iss = default; - public const string Jti = default; - public const string Name = default; - public const string NameId = default; - public const string Nbf = default; - public const string Nonce = default; - public const string Prn = default; - public const string Sid = default; - public const string Sub = default; - public const string Typ = default; - public const string UniqueName = default; - public const string Website = default; - } - public class JwtSecurityToken : Microsoft.IdentityModel.Tokens.SecurityToken - { - public string Actor { get => throw null; } - public System.Collections.Generic.IEnumerable Audiences { get => throw null; } - public System.Collections.Generic.IEnumerable Claims { get => throw null; } - public JwtSecurityToken(string jwtEncodedString) => throw null; - public JwtSecurityToken(System.IdentityModel.Tokens.Jwt.JwtHeader header, System.IdentityModel.Tokens.Jwt.JwtPayload payload, string rawHeader, string rawPayload, string rawSignature) => throw null; - public JwtSecurityToken(System.IdentityModel.Tokens.Jwt.JwtHeader header, System.IdentityModel.Tokens.Jwt.JwtSecurityToken innerToken, string rawHeader, string rawEncryptedKey, string rawInitializationVector, string rawCiphertext, string rawAuthenticationTag) => throw null; - public JwtSecurityToken(System.IdentityModel.Tokens.Jwt.JwtHeader header, System.IdentityModel.Tokens.Jwt.JwtPayload payload) => throw null; - public JwtSecurityToken(string issuer = default(string), string audience = default(string), System.Collections.Generic.IEnumerable claims = default(System.Collections.Generic.IEnumerable), System.DateTime? notBefore = default(System.DateTime?), System.DateTime? expires = default(System.DateTime?), Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials = default(Microsoft.IdentityModel.Tokens.SigningCredentials)) => throw null; - public virtual string EncodedHeader { get => throw null; } - public virtual string EncodedPayload { get => throw null; } - public Microsoft.IdentityModel.Tokens.EncryptingCredentials EncryptingCredentials { get => throw null; } - public System.IdentityModel.Tokens.Jwt.JwtHeader Header { get => throw null; } - public override string Id { get => throw null; } - public System.IdentityModel.Tokens.Jwt.JwtSecurityToken InnerToken { get => throw null; } - public virtual System.DateTime IssuedAt { get => throw null; } - public override string Issuer { get => throw null; } - public System.IdentityModel.Tokens.Jwt.JwtPayload Payload { get => throw null; } - public string RawAuthenticationTag { get => throw null; } - public string RawCiphertext { get => throw null; } - public string RawData { get => throw null; } - public string RawEncryptedKey { get => throw null; } - public string RawHeader { get => throw null; } - public string RawInitializationVector { get => throw null; } - public string RawPayload { get => throw null; } - public string RawSignature { get => throw null; } - public override Microsoft.IdentityModel.Tokens.SecurityKey SecurityKey { get => throw null; } - public string SignatureAlgorithm { get => throw null; } - public Microsoft.IdentityModel.Tokens.SigningCredentials SigningCredentials { get => throw null; } - public override Microsoft.IdentityModel.Tokens.SecurityKey SigningKey { get => throw null; set { } } - public string Subject { get => throw null; } - public override string ToString() => throw null; - public override string UnsafeToString() => throw null; - public override System.DateTime ValidFrom { get => throw null; } - public override System.DateTime ValidTo { get => throw null; } - } - public static class JwtSecurityTokenConverter - { - public static System.IdentityModel.Tokens.Jwt.JwtSecurityToken Convert(Microsoft.IdentityModel.JsonWebTokens.JsonWebToken token) => throw null; - } - public class JwtSecurityTokenHandler : Microsoft.IdentityModel.Tokens.SecurityTokenHandler - { - public override bool CanReadToken(string token) => throw null; - public override bool CanValidateToken { get => throw null; } - public override bool CanWriteToken { get => throw null; } - protected virtual string CreateActorValue(System.Security.Claims.ClaimsIdentity actor) => throw null; - protected virtual System.Security.Claims.ClaimsIdentity CreateClaimsIdentity(System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, string issuer, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public virtual string CreateEncodedJwt(Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor tokenDescriptor) => throw null; - public virtual string CreateEncodedJwt(string issuer, string audience, System.Security.Claims.ClaimsIdentity subject, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials) => throw null; - public virtual string CreateEncodedJwt(string issuer, string audience, System.Security.Claims.ClaimsIdentity subject, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public virtual string CreateEncodedJwt(string issuer, string audience, System.Security.Claims.ClaimsIdentity subject, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary claimCollection) => throw null; - public virtual System.IdentityModel.Tokens.Jwt.JwtSecurityToken CreateJwtSecurityToken(Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor tokenDescriptor) => throw null; - public virtual System.IdentityModel.Tokens.Jwt.JwtSecurityToken CreateJwtSecurityToken(string issuer, string audience, System.Security.Claims.ClaimsIdentity subject, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials) => throw null; - public virtual System.IdentityModel.Tokens.Jwt.JwtSecurityToken CreateJwtSecurityToken(string issuer, string audience, System.Security.Claims.ClaimsIdentity subject, System.DateTime? notBefore, System.DateTime? expires, System.DateTime? issuedAt, Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials, Microsoft.IdentityModel.Tokens.EncryptingCredentials encryptingCredentials, System.Collections.Generic.IDictionary claimCollection) => throw null; - public virtual System.IdentityModel.Tokens.Jwt.JwtSecurityToken CreateJwtSecurityToken(string issuer = default(string), string audience = default(string), System.Security.Claims.ClaimsIdentity subject = default(System.Security.Claims.ClaimsIdentity), System.DateTime? notBefore = default(System.DateTime?), System.DateTime? expires = default(System.DateTime?), System.DateTime? issuedAt = default(System.DateTime?), Microsoft.IdentityModel.Tokens.SigningCredentials signingCredentials = default(Microsoft.IdentityModel.Tokens.SigningCredentials)) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityToken CreateToken(Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor tokenDescriptor) => throw null; - public JwtSecurityTokenHandler() => throw null; - protected string DecryptToken(System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static System.Collections.Generic.ISet DefaultInboundClaimFilter; - public static System.Collections.Generic.IDictionary DefaultInboundClaimTypeMap; - public static bool DefaultMapInboundClaims; - public static System.Collections.Generic.IDictionary DefaultOutboundAlgorithmMap; - public static System.Collections.Generic.IDictionary DefaultOutboundClaimTypeMap; - public System.Collections.Generic.ISet InboundClaimFilter { get => throw null; set { } } - public System.Collections.Generic.IDictionary InboundClaimTypeMap { get => throw null; set { } } - public static string JsonClaimTypeProperty { get => throw null; set { } } - public bool MapInboundClaims { get => throw null; set { } } - public System.Collections.Generic.IDictionary OutboundAlgorithmMap { get => throw null; } - public System.Collections.Generic.IDictionary OutboundClaimTypeMap { get => throw null; set { } } - public System.IdentityModel.Tokens.Jwt.JwtSecurityToken ReadJwtToken(string token) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(string token) => throw null; - public override Microsoft.IdentityModel.Tokens.SecurityToken ReadToken(System.Xml.XmlReader reader, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual Microsoft.IdentityModel.Tokens.SecurityKey ResolveIssuerSigningKey(string token, System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual Microsoft.IdentityModel.Tokens.SecurityKey ResolveTokenDecryptionKey(string token, System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public static string ShortClaimTypeProperty { get => throw null; set { } } - public override System.Type TokenType { get => throw null; } - protected virtual void ValidateAudience(System.Collections.Generic.IEnumerable audiences, System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual string ValidateIssuer(string issuer, System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual void ValidateIssuerSecurityKey(Microsoft.IdentityModel.Tokens.SecurityKey key, System.IdentityModel.Tokens.Jwt.JwtSecurityToken securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual void ValidateLifetime(System.DateTime? notBefore, System.DateTime? expires, System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual System.IdentityModel.Tokens.Jwt.JwtSecurityToken ValidateSignature(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public override System.Security.Claims.ClaimsPrincipal ValidateToken(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters, out Microsoft.IdentityModel.Tokens.SecurityToken validatedToken) => throw null; - public override System.Threading.Tasks.Task ValidateTokenAsync(string token, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected System.Security.Claims.ClaimsPrincipal ValidateTokenPayload(System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - protected virtual void ValidateTokenReplay(System.DateTime? expires, string securityToken, Microsoft.IdentityModel.Tokens.TokenValidationParameters validationParameters) => throw null; - public override string WriteToken(Microsoft.IdentityModel.Tokens.SecurityToken token) => throw null; - public override void WriteToken(System.Xml.XmlWriter writer, Microsoft.IdentityModel.Tokens.SecurityToken token) => throw null; - } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj b/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj deleted file mode 100644 index 2f5d2330dc95..000000000000 --- a/csharp/ql/test/resources/stubs/System.IdentityModel.Tokens.Jwt/7.5.0/System.IdentityModel.Tokens.Jwt.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.cs b/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.cs deleted file mode 100644 index 123c87b4e1c6..000000000000 --- a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.cs +++ /dev/null @@ -1,27 +0,0 @@ -// This file contains auto-generated code. -// Generated from `System.Memory.Data, Version=1.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51`. -namespace System -{ - public class BinaryData - { - public BinaryData(byte[] data) => throw null; - public BinaryData(object jsonSerializable, System.Text.Json.JsonSerializerOptions options = default(System.Text.Json.JsonSerializerOptions), System.Type type = default(System.Type)) => throw null; - public BinaryData(System.ReadOnlyMemory data) => throw null; - public BinaryData(string data) => throw null; - public override bool Equals(object obj) => throw null; - public static System.BinaryData FromBytes(System.ReadOnlyMemory data) => throw null; - public static System.BinaryData FromBytes(byte[] data) => throw null; - public static System.BinaryData FromObjectAsJson(T jsonSerializable, System.Text.Json.JsonSerializerOptions options = default(System.Text.Json.JsonSerializerOptions)) => throw null; - public static System.BinaryData FromStream(System.IO.Stream stream) => throw null; - public static System.Threading.Tasks.Task FromStreamAsync(System.IO.Stream stream, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) => throw null; - public static System.BinaryData FromString(string data) => throw null; - public override int GetHashCode() => throw null; - public static implicit operator System.ReadOnlyMemory(System.BinaryData data) => throw null; - public static implicit operator System.ReadOnlySpan(System.BinaryData data) => throw null; - public byte[] ToArray() => throw null; - public System.ReadOnlyMemory ToMemory() => throw null; - public T ToObjectFromJson(System.Text.Json.JsonSerializerOptions options = default(System.Text.Json.JsonSerializerOptions)) => throw null; - public System.IO.Stream ToStream() => throw null; - public override string ToString() => throw null; - } -} diff --git a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj b/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj deleted file mode 100644 index c444f79ac6f3..000000000000 --- a/csharp/ql/test/resources/stubs/System.Memory.Data/1.0.2/System.Memory.Data.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj b/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Memory/4.5.4/System.Memory.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj b/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Numerics.Vectors/4.5.0/System.Numerics.Vectors.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj b/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Runtime.CompilerServices.Unsafe/6.0.0/System.Runtime.CompilerServices.Unsafe.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.cs b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.cs deleted file mode 100644 index 4dcb51a937f6..000000000000 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.cs +++ /dev/null @@ -1,503 +0,0 @@ -// This file contains auto-generated code. -// Generated from `System.Security.Cryptography.Pkcs, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`. -namespace System -{ - namespace Security - { - namespace Cryptography - { - public sealed class CryptographicAttributeObject - { - public CryptographicAttributeObject(System.Security.Cryptography.Oid oid) => throw null; - public CryptographicAttributeObject(System.Security.Cryptography.Oid oid, System.Security.Cryptography.AsnEncodedDataCollection values) => throw null; - public System.Security.Cryptography.Oid Oid { get => throw null; } - public System.Security.Cryptography.AsnEncodedDataCollection Values { get => throw null; } - } - public sealed class CryptographicAttributeObjectCollection : System.Collections.ICollection, System.Collections.IEnumerable - { - public int Add(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public int Add(System.Security.Cryptography.CryptographicAttributeObject attribute) => throw null; - void System.Collections.ICollection.CopyTo(System.Array array, int index) => throw null; - public void CopyTo(System.Security.Cryptography.CryptographicAttributeObject[] array, int index) => throw null; - public int Count { get => throw null; } - public CryptographicAttributeObjectCollection() => throw null; - public CryptographicAttributeObjectCollection(System.Security.Cryptography.CryptographicAttributeObject attribute) => throw null; - public System.Security.Cryptography.CryptographicAttributeObjectEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public bool IsSynchronized { get => throw null; } - public void Remove(System.Security.Cryptography.CryptographicAttributeObject attribute) => throw null; - public object SyncRoot { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObject this[int index] { get => throw null; } - } - public sealed class CryptographicAttributeObjectEnumerator : System.Collections.IEnumerator - { - public System.Security.Cryptography.CryptographicAttributeObject Current { get => throw null; } - object System.Collections.IEnumerator.Current { get => throw null; } - public bool MoveNext() => throw null; - public void Reset() => throw null; - } - namespace Pkcs - { - public sealed class AlgorithmIdentifier - { - public AlgorithmIdentifier() => throw null; - public AlgorithmIdentifier(System.Security.Cryptography.Oid oid) => throw null; - public AlgorithmIdentifier(System.Security.Cryptography.Oid oid, int keyLength) => throw null; - public int KeyLength { get => throw null; set { } } - public System.Security.Cryptography.Oid Oid { get => throw null; set { } } - public byte[] Parameters { get => throw null; set { } } - } - public sealed class CmsRecipient - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public CmsRecipient(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public CmsRecipient(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Security.Cryptography.RSAEncryptionPadding rsaEncryptionPadding) => throw null; - public CmsRecipient(System.Security.Cryptography.Pkcs.SubjectIdentifierType recipientIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Security.Cryptography.RSAEncryptionPadding rsaEncryptionPadding) => throw null; - public CmsRecipient(System.Security.Cryptography.Pkcs.SubjectIdentifierType recipientIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public System.Security.Cryptography.Pkcs.SubjectIdentifierType RecipientIdentifierType { get => throw null; } - public System.Security.Cryptography.RSAEncryptionPadding RSAEncryptionPadding { get => throw null; } - } - public sealed class CmsRecipientCollection : System.Collections.ICollection, System.Collections.IEnumerable - { - public int Add(System.Security.Cryptography.Pkcs.CmsRecipient recipient) => throw null; - public void CopyTo(System.Array array, int index) => throw null; - public void CopyTo(System.Security.Cryptography.Pkcs.CmsRecipient[] array, int index) => throw null; - public int Count { get => throw null; } - public CmsRecipientCollection() => throw null; - public CmsRecipientCollection(System.Security.Cryptography.Pkcs.CmsRecipient recipient) => throw null; - public CmsRecipientCollection(System.Security.Cryptography.Pkcs.SubjectIdentifierType recipientIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2Collection certificates) => throw null; - public System.Security.Cryptography.Pkcs.CmsRecipientEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public bool IsSynchronized { get => throw null; } - public void Remove(System.Security.Cryptography.Pkcs.CmsRecipient recipient) => throw null; - public object SyncRoot { get => throw null; } - public System.Security.Cryptography.Pkcs.CmsRecipient this[int index] { get => throw null; } - } - public sealed class CmsRecipientEnumerator : System.Collections.IEnumerator - { - public System.Security.Cryptography.Pkcs.CmsRecipient Current { get => throw null; } - object System.Collections.IEnumerator.Current { get => throw null; } - public bool MoveNext() => throw null; - public void Reset() => throw null; - } - public sealed class CmsSigner - { - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; set { } } - public System.Security.Cryptography.X509Certificates.X509Certificate2Collection Certificates { get => throw null; } - public CmsSigner() => throw null; - public CmsSigner(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType) => throw null; - public CmsSigner(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public CmsSigner(System.Security.Cryptography.CspParameters parameters) => throw null; - public CmsSigner(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public CmsSigner(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Security.Cryptography.AsymmetricAlgorithm privateKey) => throw null; - public CmsSigner(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType, System.Security.Cryptography.X509Certificates.X509Certificate2 certificate, System.Security.Cryptography.RSA privateKey, System.Security.Cryptography.RSASignaturePadding signaturePadding) => throw null; - public System.Security.Cryptography.Oid DigestAlgorithm { get => throw null; set { } } - public System.Security.Cryptography.X509Certificates.X509IncludeOption IncludeOption { get => throw null; set { } } - public System.Security.Cryptography.AsymmetricAlgorithm PrivateKey { get => throw null; set { } } - public System.Security.Cryptography.RSASignaturePadding SignaturePadding { get => throw null; set { } } - public System.Security.Cryptography.CryptographicAttributeObjectCollection SignedAttributes { get => throw null; } - public System.Security.Cryptography.Pkcs.SubjectIdentifierType SignerIdentifierType { get => throw null; set { } } - public System.Security.Cryptography.CryptographicAttributeObjectCollection UnsignedAttributes { get => throw null; } - } - public sealed class ContentInfo - { - public byte[] Content { get => throw null; } - public System.Security.Cryptography.Oid ContentType { get => throw null; } - public ContentInfo(byte[] content) => throw null; - public ContentInfo(System.Security.Cryptography.Oid contentType, byte[] content) => throw null; - public static System.Security.Cryptography.Oid GetContentType(byte[] encodedMessage) => throw null; - public static System.Security.Cryptography.Oid GetContentType(System.ReadOnlySpan encodedMessage) => throw null; - } - public sealed class EnvelopedCms - { - public System.Security.Cryptography.X509Certificates.X509Certificate2Collection Certificates { get => throw null; } - public System.Security.Cryptography.Pkcs.AlgorithmIdentifier ContentEncryptionAlgorithm { get => throw null; } - public System.Security.Cryptography.Pkcs.ContentInfo ContentInfo { get => throw null; } - public EnvelopedCms() => throw null; - public EnvelopedCms(System.Security.Cryptography.Pkcs.ContentInfo contentInfo) => throw null; - public EnvelopedCms(System.Security.Cryptography.Pkcs.ContentInfo contentInfo, System.Security.Cryptography.Pkcs.AlgorithmIdentifier encryptionAlgorithm) => throw null; - public void Decode(byte[] encodedMessage) => throw null; - public void Decode(System.ReadOnlySpan encodedMessage) => throw null; - public void Decrypt() => throw null; - public void Decrypt(System.Security.Cryptography.Pkcs.RecipientInfo recipientInfo) => throw null; - public void Decrypt(System.Security.Cryptography.Pkcs.RecipientInfo recipientInfo, System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraStore) => throw null; - public void Decrypt(System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraStore) => throw null; - public void Decrypt(System.Security.Cryptography.Pkcs.RecipientInfo recipientInfo, System.Security.Cryptography.AsymmetricAlgorithm privateKey) => throw null; - public byte[] Encode() => throw null; - public void Encrypt(System.Security.Cryptography.Pkcs.CmsRecipient recipient) => throw null; - public void Encrypt(System.Security.Cryptography.Pkcs.CmsRecipientCollection recipients) => throw null; - public System.Security.Cryptography.Pkcs.RecipientInfoCollection RecipientInfos { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObjectCollection UnprotectedAttributes { get => throw null; } - public int Version { get => throw null; } - } - public sealed class KeyAgreeRecipientInfo : System.Security.Cryptography.Pkcs.RecipientInfo - { - public System.DateTime Date { get => throw null; } - public override byte[] EncryptedKey { get => throw null; } - public override System.Security.Cryptography.Pkcs.AlgorithmIdentifier KeyEncryptionAlgorithm { get => throw null; } - public System.Security.Cryptography.Pkcs.SubjectIdentifierOrKey OriginatorIdentifierOrKey { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObject OtherKeyAttribute { get => throw null; } - public override System.Security.Cryptography.Pkcs.SubjectIdentifier RecipientIdentifier { get => throw null; } - public override int Version { get => throw null; } - } - public sealed class KeyTransRecipientInfo : System.Security.Cryptography.Pkcs.RecipientInfo - { - public override byte[] EncryptedKey { get => throw null; } - public override System.Security.Cryptography.Pkcs.AlgorithmIdentifier KeyEncryptionAlgorithm { get => throw null; } - public override System.Security.Cryptography.Pkcs.SubjectIdentifier RecipientIdentifier { get => throw null; } - public override int Version { get => throw null; } - } - public sealed class Pkcs12Builder - { - public void AddSafeContentsEncrypted(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents, byte[] passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public void AddSafeContentsEncrypted(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents, System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public void AddSafeContentsEncrypted(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents, string password, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public void AddSafeContentsEncrypted(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents, System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public void AddSafeContentsUnencrypted(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents) => throw null; - public Pkcs12Builder() => throw null; - public byte[] Encode() => throw null; - public bool IsSealed { get => throw null; } - public void SealWithMac(string password, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, int iterationCount) => throw null; - public void SealWithMac(System.ReadOnlySpan password, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, int iterationCount) => throw null; - public void SealWithoutIntegrity() => throw null; - public bool TryEncode(System.Span destination, out int bytesWritten) => throw null; - } - public sealed class Pkcs12CertBag : System.Security.Cryptography.Pkcs.Pkcs12SafeBag - { - public Pkcs12CertBag(System.Security.Cryptography.Oid certificateType, System.ReadOnlyMemory encodedCertificate) : base(default(string), default(System.ReadOnlyMemory), default(bool)) => throw null; - public System.ReadOnlyMemory EncodedCertificate { get => throw null; } - public System.Security.Cryptography.X509Certificates.X509Certificate2 GetCertificate() => throw null; - public System.Security.Cryptography.Oid GetCertificateType() => throw null; - public bool IsX509Certificate { get => throw null; } - } - public enum Pkcs12ConfidentialityMode - { - Unknown = 0, - None = 1, - Password = 2, - PublicKey = 3, - } - public sealed class Pkcs12Info - { - public System.Collections.ObjectModel.ReadOnlyCollection AuthenticatedSafe { get => throw null; } - public static System.Security.Cryptography.Pkcs.Pkcs12Info Decode(System.ReadOnlyMemory encodedBytes, out int bytesConsumed, bool skipCopy = default(bool)) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12IntegrityMode IntegrityMode { get => throw null; } - public bool VerifyMac(string password) => throw null; - public bool VerifyMac(System.ReadOnlySpan password) => throw null; - } - public enum Pkcs12IntegrityMode - { - Unknown = 0, - None = 1, - Password = 2, - PublicKey = 3, - } - public sealed class Pkcs12KeyBag : System.Security.Cryptography.Pkcs.Pkcs12SafeBag - { - public Pkcs12KeyBag(System.ReadOnlyMemory pkcs8PrivateKey, bool skipCopy = default(bool)) : base(default(string), default(System.ReadOnlyMemory), default(bool)) => throw null; - public System.ReadOnlyMemory Pkcs8PrivateKey { get => throw null; } - } - public abstract class Pkcs12SafeBag - { - public System.Security.Cryptography.CryptographicAttributeObjectCollection Attributes { get => throw null; } - protected Pkcs12SafeBag(string bagIdValue, System.ReadOnlyMemory encodedBagValue, bool skipCopy = default(bool)) => throw null; - public byte[] Encode() => throw null; - public System.ReadOnlyMemory EncodedBagValue { get => throw null; } - public System.Security.Cryptography.Oid GetBagId() => throw null; - public bool TryEncode(System.Span destination, out int bytesWritten) => throw null; - } - public sealed class Pkcs12SafeContents - { - public System.Security.Cryptography.Pkcs.Pkcs12CertBag AddCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12KeyBag AddKeyUnencrypted(System.Security.Cryptography.AsymmetricAlgorithm key) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12SafeContentsBag AddNestedContents(System.Security.Cryptography.Pkcs.Pkcs12SafeContents safeContents) => throw null; - public void AddSafeBag(System.Security.Cryptography.Pkcs.Pkcs12SafeBag safeBag) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12SecretBag AddSecret(System.Security.Cryptography.Oid secretType, System.ReadOnlyMemory secretValue) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12ShroudedKeyBag AddShroudedKey(System.Security.Cryptography.AsymmetricAlgorithm key, byte[] passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12ShroudedKeyBag AddShroudedKey(System.Security.Cryptography.AsymmetricAlgorithm key, System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12ShroudedKeyBag AddShroudedKey(System.Security.Cryptography.AsymmetricAlgorithm key, string password, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12ShroudedKeyBag AddShroudedKey(System.Security.Cryptography.AsymmetricAlgorithm key, System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public System.Security.Cryptography.Pkcs.Pkcs12ConfidentialityMode ConfidentialityMode { get => throw null; } - public Pkcs12SafeContents() => throw null; - public void Decrypt(byte[] passwordBytes) => throw null; - public void Decrypt(System.ReadOnlySpan passwordBytes) => throw null; - public void Decrypt(string password) => throw null; - public void Decrypt(System.ReadOnlySpan password) => throw null; - public System.Collections.Generic.IEnumerable GetBags() => throw null; - public bool IsReadOnly { get => throw null; } - } - public sealed class Pkcs12SafeContentsBag : System.Security.Cryptography.Pkcs.Pkcs12SafeBag - { - public System.Security.Cryptography.Pkcs.Pkcs12SafeContents SafeContents { get => throw null; } - internal Pkcs12SafeContentsBag() : base(default(string), default(System.ReadOnlyMemory), default(bool)) { } - } - public sealed class Pkcs12SecretBag : System.Security.Cryptography.Pkcs.Pkcs12SafeBag - { - public System.Security.Cryptography.Oid GetSecretType() => throw null; - public System.ReadOnlyMemory SecretValue { get => throw null; } - internal Pkcs12SecretBag() : base(default(string), default(System.ReadOnlyMemory), default(bool)) { } - } - public sealed class Pkcs12ShroudedKeyBag : System.Security.Cryptography.Pkcs.Pkcs12SafeBag - { - public Pkcs12ShroudedKeyBag(System.ReadOnlyMemory encryptedPkcs8PrivateKey, bool skipCopy = default(bool)) : base(default(string), default(System.ReadOnlyMemory), default(bool)) => throw null; - public System.ReadOnlyMemory EncryptedPkcs8PrivateKey { get => throw null; } - } - public sealed class Pkcs8PrivateKeyInfo - { - public System.Security.Cryptography.Oid AlgorithmId { get => throw null; } - public System.ReadOnlyMemory? AlgorithmParameters { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObjectCollection Attributes { get => throw null; } - public static System.Security.Cryptography.Pkcs.Pkcs8PrivateKeyInfo Create(System.Security.Cryptography.AsymmetricAlgorithm privateKey) => throw null; - public Pkcs8PrivateKeyInfo(System.Security.Cryptography.Oid algorithmId, System.ReadOnlyMemory? algorithmParameters, System.ReadOnlyMemory privateKey, bool skipCopies = default(bool)) => throw null; - public static System.Security.Cryptography.Pkcs.Pkcs8PrivateKeyInfo Decode(System.ReadOnlyMemory source, out int bytesRead, bool skipCopy = default(bool)) => throw null; - public static System.Security.Cryptography.Pkcs.Pkcs8PrivateKeyInfo DecryptAndDecode(System.ReadOnlySpan password, System.ReadOnlyMemory source, out int bytesRead) => throw null; - public static System.Security.Cryptography.Pkcs.Pkcs8PrivateKeyInfo DecryptAndDecode(System.ReadOnlySpan passwordBytes, System.ReadOnlyMemory source, out int bytesRead) => throw null; - public byte[] Encode() => throw null; - public byte[] Encrypt(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public byte[] Encrypt(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters) => throw null; - public System.ReadOnlyMemory PrivateKeyBytes { get => throw null; } - public bool TryEncode(System.Span destination, out int bytesWritten) => throw null; - public bool TryEncrypt(System.ReadOnlySpan password, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) => throw null; - public bool TryEncrypt(System.ReadOnlySpan passwordBytes, System.Security.Cryptography.PbeParameters pbeParameters, System.Span destination, out int bytesWritten) => throw null; - } - public class Pkcs9AttributeObject : System.Security.Cryptography.AsnEncodedData - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9AttributeObject() => throw null; - public Pkcs9AttributeObject(string oid, byte[] encodedData) => throw null; - public Pkcs9AttributeObject(System.Security.Cryptography.Oid oid, byte[] encodedData) => throw null; - public Pkcs9AttributeObject(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public System.Security.Cryptography.Oid Oid { get => throw null; } - } - public sealed class Pkcs9ContentType : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public System.Security.Cryptography.Oid ContentType { get => throw null; } - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9ContentType() => throw null; - } - public sealed class Pkcs9DocumentDescription : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9DocumentDescription() => throw null; - public Pkcs9DocumentDescription(string documentDescription) => throw null; - public Pkcs9DocumentDescription(byte[] encodedDocumentDescription) => throw null; - public string DocumentDescription { get => throw null; } - } - public sealed class Pkcs9DocumentName : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9DocumentName() => throw null; - public Pkcs9DocumentName(string documentName) => throw null; - public Pkcs9DocumentName(byte[] encodedDocumentName) => throw null; - public string DocumentName { get => throw null; } - } - public sealed class Pkcs9LocalKeyId : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9LocalKeyId() => throw null; - public Pkcs9LocalKeyId(byte[] keyId) => throw null; - public Pkcs9LocalKeyId(System.ReadOnlySpan keyId) => throw null; - public System.ReadOnlyMemory KeyId { get => throw null; } - } - public sealed class Pkcs9MessageDigest : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9MessageDigest() => throw null; - public byte[] MessageDigest { get => throw null; } - } - public sealed class Pkcs9SigningTime : System.Security.Cryptography.Pkcs.Pkcs9AttributeObject - { - public override void CopyFrom(System.Security.Cryptography.AsnEncodedData asnEncodedData) => throw null; - public Pkcs9SigningTime() => throw null; - public Pkcs9SigningTime(System.DateTime signingTime) => throw null; - public Pkcs9SigningTime(byte[] encodedSigningTime) => throw null; - public System.DateTime SigningTime { get => throw null; } - } - public sealed class PublicKeyInfo - { - public System.Security.Cryptography.Pkcs.AlgorithmIdentifier Algorithm { get => throw null; } - public byte[] KeyValue { get => throw null; } - } - public abstract class RecipientInfo - { - public abstract byte[] EncryptedKey { get; } - public abstract System.Security.Cryptography.Pkcs.AlgorithmIdentifier KeyEncryptionAlgorithm { get; } - public abstract System.Security.Cryptography.Pkcs.SubjectIdentifier RecipientIdentifier { get; } - public System.Security.Cryptography.Pkcs.RecipientInfoType Type { get => throw null; } - public abstract int Version { get; } - } - public sealed class RecipientInfoCollection : System.Collections.ICollection, System.Collections.IEnumerable - { - public void CopyTo(System.Array array, int index) => throw null; - public void CopyTo(System.Security.Cryptography.Pkcs.RecipientInfo[] array, int index) => throw null; - public int Count { get => throw null; } - public System.Security.Cryptography.Pkcs.RecipientInfoEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public bool IsSynchronized { get => throw null; } - public object SyncRoot { get => throw null; } - public System.Security.Cryptography.Pkcs.RecipientInfo this[int index] { get => throw null; } - } - public sealed class RecipientInfoEnumerator : System.Collections.IEnumerator - { - public System.Security.Cryptography.Pkcs.RecipientInfo Current { get => throw null; } - object System.Collections.IEnumerator.Current { get => throw null; } - public bool MoveNext() => throw null; - public void Reset() => throw null; - } - public enum RecipientInfoType - { - Unknown = 0, - KeyTransport = 1, - KeyAgreement = 2, - } - public sealed class Rfc3161TimestampRequest - { - public static System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest CreateFromData(System.ReadOnlySpan data, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, System.Security.Cryptography.Oid requestedPolicyId = default(System.Security.Cryptography.Oid), System.ReadOnlyMemory? nonce = default(System.ReadOnlyMemory?), bool requestSignerCertificates = default(bool), System.Security.Cryptography.X509Certificates.X509ExtensionCollection extensions = default(System.Security.Cryptography.X509Certificates.X509ExtensionCollection)) => throw null; - public static System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest CreateFromHash(System.ReadOnlyMemory hash, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, System.Security.Cryptography.Oid requestedPolicyId = default(System.Security.Cryptography.Oid), System.ReadOnlyMemory? nonce = default(System.ReadOnlyMemory?), bool requestSignerCertificates = default(bool), System.Security.Cryptography.X509Certificates.X509ExtensionCollection extensions = default(System.Security.Cryptography.X509Certificates.X509ExtensionCollection)) => throw null; - public static System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest CreateFromHash(System.ReadOnlyMemory hash, System.Security.Cryptography.Oid hashAlgorithmId, System.Security.Cryptography.Oid requestedPolicyId = default(System.Security.Cryptography.Oid), System.ReadOnlyMemory? nonce = default(System.ReadOnlyMemory?), bool requestSignerCertificates = default(bool), System.Security.Cryptography.X509Certificates.X509ExtensionCollection extensions = default(System.Security.Cryptography.X509Certificates.X509ExtensionCollection)) => throw null; - public static System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest CreateFromSignerInfo(System.Security.Cryptography.Pkcs.SignerInfo signerInfo, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, System.Security.Cryptography.Oid requestedPolicyId = default(System.Security.Cryptography.Oid), System.ReadOnlyMemory? nonce = default(System.ReadOnlyMemory?), bool requestSignerCertificates = default(bool), System.Security.Cryptography.X509Certificates.X509ExtensionCollection extensions = default(System.Security.Cryptography.X509Certificates.X509ExtensionCollection)) => throw null; - public byte[] Encode() => throw null; - public System.Security.Cryptography.X509Certificates.X509ExtensionCollection GetExtensions() => throw null; - public System.ReadOnlyMemory GetMessageHash() => throw null; - public System.ReadOnlyMemory? GetNonce() => throw null; - public bool HasExtensions { get => throw null; } - public System.Security.Cryptography.Oid HashAlgorithmId { get => throw null; } - public System.Security.Cryptography.Pkcs.Rfc3161TimestampToken ProcessResponse(System.ReadOnlyMemory responseBytes, out int bytesConsumed) => throw null; - public System.Security.Cryptography.Oid RequestedPolicyId { get => throw null; } - public bool RequestSignerCertificate { get => throw null; } - public static bool TryDecode(System.ReadOnlyMemory encodedBytes, out System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest request, out int bytesConsumed) => throw null; - public bool TryEncode(System.Span destination, out int bytesWritten) => throw null; - public int Version { get => throw null; } - } - public sealed class Rfc3161TimestampToken - { - public System.Security.Cryptography.Pkcs.SignedCms AsSignedCms() => throw null; - public System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo TokenInfo { get => throw null; } - public static bool TryDecode(System.ReadOnlyMemory encodedBytes, out System.Security.Cryptography.Pkcs.Rfc3161TimestampToken token, out int bytesConsumed) => throw null; - public bool VerifySignatureForData(System.ReadOnlySpan data, out System.Security.Cryptography.X509Certificates.X509Certificate2 signerCertificate, System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraCandidates = default(System.Security.Cryptography.X509Certificates.X509Certificate2Collection)) => throw null; - public bool VerifySignatureForHash(System.ReadOnlySpan hash, System.Security.Cryptography.HashAlgorithmName hashAlgorithm, out System.Security.Cryptography.X509Certificates.X509Certificate2 signerCertificate, System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraCandidates = default(System.Security.Cryptography.X509Certificates.X509Certificate2Collection)) => throw null; - public bool VerifySignatureForHash(System.ReadOnlySpan hash, System.Security.Cryptography.Oid hashAlgorithmId, out System.Security.Cryptography.X509Certificates.X509Certificate2 signerCertificate, System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraCandidates = default(System.Security.Cryptography.X509Certificates.X509Certificate2Collection)) => throw null; - public bool VerifySignatureForSignerInfo(System.Security.Cryptography.Pkcs.SignerInfo signerInfo, out System.Security.Cryptography.X509Certificates.X509Certificate2 signerCertificate, System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraCandidates = default(System.Security.Cryptography.X509Certificates.X509Certificate2Collection)) => throw null; - } - public sealed class Rfc3161TimestampTokenInfo - { - public long? AccuracyInMicroseconds { get => throw null; } - public Rfc3161TimestampTokenInfo(System.Security.Cryptography.Oid policyId, System.Security.Cryptography.Oid hashAlgorithmId, System.ReadOnlyMemory messageHash, System.ReadOnlyMemory serialNumber, System.DateTimeOffset timestamp, long? accuracyInMicroseconds = default(long?), bool isOrdering = default(bool), System.ReadOnlyMemory? nonce = default(System.ReadOnlyMemory?), System.ReadOnlyMemory? timestampAuthorityName = default(System.ReadOnlyMemory?), System.Security.Cryptography.X509Certificates.X509ExtensionCollection extensions = default(System.Security.Cryptography.X509Certificates.X509ExtensionCollection)) => throw null; - public byte[] Encode() => throw null; - public System.Security.Cryptography.X509Certificates.X509ExtensionCollection GetExtensions() => throw null; - public System.ReadOnlyMemory GetMessageHash() => throw null; - public System.ReadOnlyMemory? GetNonce() => throw null; - public System.ReadOnlyMemory GetSerialNumber() => throw null; - public System.ReadOnlyMemory? GetTimestampAuthorityName() => throw null; - public bool HasExtensions { get => throw null; } - public System.Security.Cryptography.Oid HashAlgorithmId { get => throw null; } - public bool IsOrdering { get => throw null; } - public System.Security.Cryptography.Oid PolicyId { get => throw null; } - public System.DateTimeOffset Timestamp { get => throw null; } - public static bool TryDecode(System.ReadOnlyMemory encodedBytes, out System.Security.Cryptography.Pkcs.Rfc3161TimestampTokenInfo timestampTokenInfo, out int bytesConsumed) => throw null; - public bool TryEncode(System.Span destination, out int bytesWritten) => throw null; - public int Version { get => throw null; } - } - public sealed class SignedCms - { - public void AddCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public System.Security.Cryptography.X509Certificates.X509Certificate2Collection Certificates { get => throw null; } - public void CheckHash() => throw null; - public void CheckSignature(bool verifySignatureOnly) => throw null; - public void CheckSignature(System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraStore, bool verifySignatureOnly) => throw null; - public void ComputeSignature() => throw null; - public void ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner signer) => throw null; - public void ComputeSignature(System.Security.Cryptography.Pkcs.CmsSigner signer, bool silent) => throw null; - public System.Security.Cryptography.Pkcs.ContentInfo ContentInfo { get => throw null; } - public SignedCms(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType, System.Security.Cryptography.Pkcs.ContentInfo contentInfo, bool detached) => throw null; - public SignedCms() => throw null; - public SignedCms(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType) => throw null; - public SignedCms(System.Security.Cryptography.Pkcs.ContentInfo contentInfo) => throw null; - public SignedCms(System.Security.Cryptography.Pkcs.SubjectIdentifierType signerIdentifierType, System.Security.Cryptography.Pkcs.ContentInfo contentInfo) => throw null; - public SignedCms(System.Security.Cryptography.Pkcs.ContentInfo contentInfo, bool detached) => throw null; - public void Decode(byte[] encodedMessage) => throw null; - public void Decode(System.ReadOnlySpan encodedMessage) => throw null; - public bool Detached { get => throw null; } - public byte[] Encode() => throw null; - public void RemoveCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public void RemoveSignature(int index) => throw null; - public void RemoveSignature(System.Security.Cryptography.Pkcs.SignerInfo signerInfo) => throw null; - public System.Security.Cryptography.Pkcs.SignerInfoCollection SignerInfos { get => throw null; } - public int Version { get => throw null; } - } - public sealed class SignerInfo - { - public void AddUnsignedAttribute(System.Security.Cryptography.AsnEncodedData unsignedAttribute) => throw null; - public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate { get => throw null; } - public void CheckHash() => throw null; - public void CheckSignature(bool verifySignatureOnly) => throw null; - public void CheckSignature(System.Security.Cryptography.X509Certificates.X509Certificate2Collection extraStore, bool verifySignatureOnly) => throw null; - public void ComputeCounterSignature() => throw null; - public void ComputeCounterSignature(System.Security.Cryptography.Pkcs.CmsSigner signer) => throw null; - public System.Security.Cryptography.Pkcs.SignerInfoCollection CounterSignerInfos { get => throw null; } - public System.Security.Cryptography.Oid DigestAlgorithm { get => throw null; } - public byte[] GetSignature() => throw null; - public void RemoveCounterSignature(int index) => throw null; - public void RemoveCounterSignature(System.Security.Cryptography.Pkcs.SignerInfo counterSignerInfo) => throw null; - public void RemoveUnsignedAttribute(System.Security.Cryptography.AsnEncodedData unsignedAttribute) => throw null; - public System.Security.Cryptography.Oid SignatureAlgorithm { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObjectCollection SignedAttributes { get => throw null; } - public System.Security.Cryptography.Pkcs.SubjectIdentifier SignerIdentifier { get => throw null; } - public System.Security.Cryptography.CryptographicAttributeObjectCollection UnsignedAttributes { get => throw null; } - public int Version { get => throw null; } - } - public sealed class SignerInfoCollection : System.Collections.ICollection, System.Collections.IEnumerable - { - public void CopyTo(System.Array array, int index) => throw null; - public void CopyTo(System.Security.Cryptography.Pkcs.SignerInfo[] array, int index) => throw null; - public int Count { get => throw null; } - public System.Security.Cryptography.Pkcs.SignerInfoEnumerator GetEnumerator() => throw null; - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() => throw null; - public bool IsSynchronized { get => throw null; } - public object SyncRoot { get => throw null; } - public System.Security.Cryptography.Pkcs.SignerInfo this[int index] { get => throw null; } - } - public sealed class SignerInfoEnumerator : System.Collections.IEnumerator - { - public System.Security.Cryptography.Pkcs.SignerInfo Current { get => throw null; } - object System.Collections.IEnumerator.Current { get => throw null; } - public bool MoveNext() => throw null; - public void Reset() => throw null; - } - public sealed class SubjectIdentifier - { - public bool MatchesCertificate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) => throw null; - public System.Security.Cryptography.Pkcs.SubjectIdentifierType Type { get => throw null; } - public object Value { get => throw null; } - } - public sealed class SubjectIdentifierOrKey - { - public System.Security.Cryptography.Pkcs.SubjectIdentifierOrKeyType Type { get => throw null; } - public object Value { get => throw null; } - } - public enum SubjectIdentifierOrKeyType - { - Unknown = 0, - IssuerAndSerialNumber = 1, - SubjectKeyIdentifier = 2, - PublicKeyInfo = 3, - } - public enum SubjectIdentifierType - { - Unknown = 0, - IssuerAndSerialNumber = 1, - SubjectKeyIdentifier = 2, - NoSignature = 3, - } - } - namespace Xml - { - public struct X509IssuerSerial - { - public string IssuerName { get => throw null; set { } } - public string SerialNumber { get => throw null; set { } } - } - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.Pkcs/9.0.4/System.Security.Cryptography.Pkcs.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.cs b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.cs deleted file mode 100644 index 112088cf6b5d..000000000000 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.cs +++ /dev/null @@ -1,21 +0,0 @@ -// This file contains auto-generated code. -// Generated from `System.Security.Cryptography.ProtectedData, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a`. -namespace System -{ - namespace Security - { - namespace Cryptography - { - public enum DataProtectionScope - { - CurrentUser = 0, - LocalMachine = 1, - } - public static class ProtectedData - { - public static byte[] Protect(byte[] userData, byte[] optionalEntropy, System.Security.Cryptography.DataProtectionScope scope) => throw null; - public static byte[] Unprotect(byte[] encryptedData, byte[] optionalEntropy, System.Security.Cryptography.DataProtectionScope scope) => throw null; - } - } - } -} diff --git a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj b/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Security.Cryptography.ProtectedData/9.0.4/System.Security.Cryptography.ProtectedData.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj b/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Text.Encodings.Web/4.7.2/System.Text.Encodings.Web.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj b/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Text.Json/4.7.2/System.Text.Json.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj b/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj deleted file mode 100644 index c7646fbae204..000000000000 --- a/csharp/ql/test/resources/stubs/System.Threading.Tasks.Extensions/4.5.4/System.Threading.Tasks.Extensions.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - net9.0 - true - bin\ - false - - - - - - diff --git a/csharp/scripts/stubs/make_stubs_all.py b/csharp/scripts/stubs/make_stubs_all.py index 51d3dd894a73..5204d9ceb725 100644 --- a/csharp/scripts/stubs/make_stubs_all.py +++ b/csharp/scripts/stubs/make_stubs_all.py @@ -14,7 +14,6 @@ "Amazon.Lambda.APIGatewayEvents", "Dapper", "EntityFramework", - "Microsoft.Data.SqlClient", "Newtonsoft.Json", "NHibernate", "System.Data.OleDb", diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst index 413471be8854..fa2c1d4e8a82 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-javascript.rst @@ -517,6 +517,7 @@ The following components are supported: - **Member[**\ `name`\ **]** selects the property with the given name. - **AnyMember** selects any property regardless of name. - **ArrayElement** selects an element of an array. +- **Element** selects an element of an array, iterator, or set object. - **MapValue** selects a value of a map object. - **Awaited** selects the value of a promise. - **Instance** selects instances of a class, including instances of its subclasses. diff --git a/docs/query-help-style-guide.md b/docs/query-help-style-guide.md index 820c1da0260b..3ed9f439490b 100644 --- a/docs/query-help-style-guide.md +++ b/docs/query-help-style-guide.md @@ -100,7 +100,7 @@ Note, if any code words are included in the `overview` and `recommendation` sect ## Including references -You should include one or more references, formatted as an unordered list (`- ...` or `* ...`) in Markdown or with `
  • ...
  • ` for each item in XML, to provide further information about the problem that your query is designed to find. Each reference should end in a full stop. References can be of the following types: +You should include one or more references, formatted as an unordered list (`- ...` or `* ...`) in Markdown or with `
  • ...
  • ` for each item in XML, to provide further information about the problem that your query is designed to find. References can be of the following types: ### Books @@ -124,7 +124,7 @@ If you are citing an academic paper, we recommend adopting the reference style o If you are citing a website, please use the following format, without breadcrumb trails: ->\: \. +>\: \ For example: @@ -242,8 +242,8 @@ tab width settings cannot be taken into account. ## References -* Java SE Documentation: [Compound Statements](https://www.oracle.com/java/technologies/javase/codeconventions-statements.html#15395). -* Wikipedia: [Indentation style](https://en.wikipedia.org/wiki/Indentation_style). +* Java SE Documentation: [Compound Statements](https://www.oracle.com/java/technologies/javase/codeconventions-statements.html#15395) +* Wikipedia: [Indentation style](https://en.wikipedia.org/wiki/Indentation_style) ```` ### XML example diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index e964007a13da..1dc60b720290 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.27-dev +version: 1.0.26 groups: - go - queries diff --git a/go/ql/lib/change-notes/2025-06-03-fix-definedtype-getbasetype.md b/go/ql/lib/change-notes/2025-06-03-fix-definedtype-getbasetype.md deleted file mode 100644 index b58ebf64f09a..000000000000 --- a/go/ql/lib/change-notes/2025-06-03-fix-definedtype-getbasetype.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Previously, `DefinedType.getBaseType` gave the underlying type. It now gives the right hand side of the type declaration, as the documentation indicated that it should. diff --git a/go/ql/lib/change-notes/2025-06-05-deprecate-DeclaredType-BuiltinType.md b/go/ql/lib/change-notes/2025-06-05-deprecate-DeclaredType-BuiltinType.md deleted file mode 100644 index 6744743ea27a..000000000000 --- a/go/ql/lib/change-notes/2025-06-05-deprecate-DeclaredType-BuiltinType.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: deprecated ---- -* The class `BuiltinType` is now deprecated. Use the new replacement `BuiltinTypeEntity` instead. -* The class `DeclaredType` is now deprecated. Use the new replacement `DeclaredTypeEntity` instead. diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 44d63e64e3b3..3ec41de9accc 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.9-dev +version: 4.2.8 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/lib/semmle/go/Decls.qll b/go/ql/lib/semmle/go/Decls.qll index 9d1e4d2611a9..785a09b25499 100644 --- a/go/ql/lib/semmle/go/Decls.qll +++ b/go/ql/lib/semmle/go/Decls.qll @@ -381,20 +381,10 @@ class TypeSpec extends @typespec, Spec, TypeParamDeclParent { string getName() { result = this.getNameExpr().getName() } /** - * Gets the declared type of this specifier. - * - * Note that for alias types this will give the underlying type. - */ - Type getDeclaredType() { result = this.getNameExpr().getType() } - - /** - * Gets the expression denoting the underlying type to which the declared type is bound. + * Gets the expression denoting the underlying type to which the newly declared type is bound. */ Expr getTypeExpr() { result = this.getChildExpr(1) } - /** Gets the underlying type to which the declared type is bound. */ - Type getRhsType() { result = this.getTypeExpr().getType() } - override string toString() { result = "type declaration specifier" } override string getAPrimaryQlClass() { result = "TypeSpec" } @@ -471,7 +461,6 @@ class FieldBase extends @field, ExprParent { * Examples: * * ```go - * io.Reader * Name string `json:"name"` * x, y int * ``` @@ -480,9 +469,8 @@ class FieldBase extends @field, ExprParent { * * ```go * struct { - * io.Reader // embedded field - * Name string `json:"name"` // field with tag - * x, y int // declares two fields with the same type + * Name string `json:"name"` + * x, y int * } * ``` */ @@ -494,24 +482,12 @@ class FieldDecl extends FieldBase, Documentable, ExprParent { /** * Gets the expression representing the name of the `i`th field declared in this declaration * (0-based). - * - * This is not defined for embedded fields. */ Expr getNameExpr(int i) { i >= 0 and result = this.getChildExpr(i + 1) } - /** - * Gets the `i`th field declared in this declaration (0-based). - * - * This is not defined for embedded fields. - */ - Field getField(int i) { this.getNameExpr(i).(Ident).declares(result) } - - /** Holds if this field declaration declares an embedded type. */ - predicate isEmbedded() { not exists(this.getNameExpr(_)) } - /** Gets the tag expression of this field declaration, if any. */ Expr getTag() { result = this.getChildExpr(-1) } diff --git a/go/ql/lib/semmle/go/Scopes.qll b/go/ql/lib/semmle/go/Scopes.qll index 2ab08b5b5b4f..82b4db7e3221 100644 --- a/go/ql/lib/semmle/go/Scopes.qll +++ b/go/ql/lib/semmle/go/Scopes.qll @@ -202,19 +202,13 @@ class TypeEntity extends Entity, @typeobject { } class TypeParamParentEntity extends Entity, @typeparamparentobject { } /** A named type which has a declaration. */ -class DeclaredTypeEntity extends TypeEntity, DeclaredEntity, TypeParamParentEntity, @decltypeobject { +class DeclaredType extends TypeEntity, DeclaredEntity, TypeParamParentEntity, @decltypeobject { /** Gets the declaration specifier declaring this type. */ TypeSpec getSpec() { result.getNameExpr() = this.getDeclaration() } } -/** DEPRECATED: Use `DeclaredTypeEntity` instead. */ -deprecated class DeclaredType = DeclaredTypeEntity; - /** A built-in type. */ -class BuiltinTypeEntity extends TypeEntity, BuiltinEntity, @builtintypeobject { } - -/** DEPRECATED: Use `BuiltinTypeEntity` instead. */ -deprecated class BuiltinType = BuiltinTypeEntity; +class BuiltinType extends TypeEntity, BuiltinEntity, @builtintypeobject { } /** A built-in or declared constant, variable, field, method or function. */ class ValueEntity extends Entity, @valueobject { @@ -760,64 +754,64 @@ private predicate builtinFunction( module Builtin { // built-in types /** Gets the built-in type `bool`. */ - BuiltinTypeEntity bool() { result.getName() = "bool" } + BuiltinType bool() { result.getName() = "bool" } /** Gets the built-in type `byte`. */ - BuiltinTypeEntity byte() { result.getName() = "byte" } + BuiltinType byte() { result.getName() = "byte" } /** Gets the built-in type `complex64`. */ - BuiltinTypeEntity complex64() { result.getName() = "complex64" } + BuiltinType complex64() { result.getName() = "complex64" } /** Gets the built-in type `complex128`. */ - BuiltinTypeEntity complex128() { result.getName() = "complex128" } + BuiltinType complex128() { result.getName() = "complex128" } /** Gets the built-in type `error`. */ - BuiltinTypeEntity error() { result.getName() = "error" } + BuiltinType error() { result.getName() = "error" } /** Gets the built-in type `float32`. */ - BuiltinTypeEntity float32() { result.getName() = "float32" } + BuiltinType float32() { result.getName() = "float32" } /** Gets the built-in type `float64`. */ - BuiltinTypeEntity float64() { result.getName() = "float64" } + BuiltinType float64() { result.getName() = "float64" } /** Gets the built-in type `int`. */ - BuiltinTypeEntity int_() { result.getName() = "int" } + BuiltinType int_() { result.getName() = "int" } /** Gets the built-in type `int8`. */ - BuiltinTypeEntity int8() { result.getName() = "int8" } + BuiltinType int8() { result.getName() = "int8" } /** Gets the built-in type `int16`. */ - BuiltinTypeEntity int16() { result.getName() = "int16" } + BuiltinType int16() { result.getName() = "int16" } /** Gets the built-in type `int32`. */ - BuiltinTypeEntity int32() { result.getName() = "int32" } + BuiltinType int32() { result.getName() = "int32" } /** Gets the built-in type `int64`. */ - BuiltinTypeEntity int64() { result.getName() = "int64" } + BuiltinType int64() { result.getName() = "int64" } /** Gets the built-in type `rune`. */ - BuiltinTypeEntity rune() { result.getName() = "rune" } + BuiltinType rune() { result.getName() = "rune" } /** Gets the built-in type `string`. */ - BuiltinTypeEntity string_() { result.getName() = "string" } + BuiltinType string_() { result.getName() = "string" } /** Gets the built-in type `uint`. */ - BuiltinTypeEntity uint() { result.getName() = "uint" } + BuiltinType uint() { result.getName() = "uint" } /** Gets the built-in type `uint8`. */ - BuiltinTypeEntity uint8() { result.getName() = "uint8" } + BuiltinType uint8() { result.getName() = "uint8" } /** Gets the built-in type `uint16`. */ - BuiltinTypeEntity uint16() { result.getName() = "uint16" } + BuiltinType uint16() { result.getName() = "uint16" } /** Gets the built-in type `uint32`. */ - BuiltinTypeEntity uint32() { result.getName() = "uint32" } + BuiltinType uint32() { result.getName() = "uint32" } /** Gets the built-in type `uint64`. */ - BuiltinTypeEntity uint64() { result.getName() = "uint64" } + BuiltinType uint64() { result.getName() = "uint64" } /** Gets the built-in type `uintptr`. */ - BuiltinTypeEntity uintptr() { result.getName() = "uintptr" } + BuiltinType uintptr() { result.getName() = "uintptr" } // built-in constants /** Gets the built-in constant `true`. */ diff --git a/go/ql/lib/semmle/go/Types.qll b/go/ql/lib/semmle/go/Types.qll index d377cb2c9d87..d6765f136628 100644 --- a/go/ql/lib/semmle/go/Types.qll +++ b/go/ql/lib/semmle/go/Types.qll @@ -1038,15 +1038,8 @@ deprecated class NamedType = DefinedType; /** A defined type. */ class DefinedType extends @definedtype, CompositeType { - /** - * Gets the type which this type is defined to be, if available. - * - * Note that this is only defined for types declared in the project being - * analyzed. It will not be defined for types declared in external packages. - */ - Type getBaseType() { - result = this.getEntity().(DeclaredTypeEntity).getSpec().getTypeExpr().getType() - } + /** Gets the type which this type is defined to be. */ + Type getBaseType() { underlying_type(this, result) } override Method getMethod(string m) { result = CompositeType.super.getMethod(m) @@ -1056,7 +1049,7 @@ class DefinedType extends @definedtype, CompositeType { or // handle promoted methods exists(StructType s, Type embedded | - s = this.getUnderlyingType() and + s = this.getBaseType() and s.hasOwnField(_, _, embedded, true) and // ensure `m` can be promoted not s.hasOwnField(_, m, _, _) and @@ -1070,7 +1063,7 @@ class DefinedType extends @definedtype, CompositeType { ) } - override Type getUnderlyingType() { underlying_type(this, result) } + override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() } } /** diff --git a/go/ql/src/codeql-suites/go-security-and-quality.qls b/go/ql/src/codeql-suites/go-security-and-quality.qls index cb026a7700c9..1043f46b27f4 100644 --- a/go/ql/src/codeql-suites/go-security-and-quality.qls +++ b/go/ql/src/codeql-suites/go-security-and-quality.qls @@ -1,28 +1,4 @@ - description: Security-and-quality queries for Go - queries: . -- apply: security-and-frozen-quality-selectors.yml +- apply: security-and-quality-selectors.yml from: codeql/suite-helpers -- include: - id: - - go/comparison-of-identical-expressions - - go/constant-length-comparison - - go/duplicate-branches - - go/duplicate-condition - - go/duplicate-switch-case - - go/impossible-interface-nil-check - - go/inconsistent-loop-direction - - go/index-out-of-bounds - - go/missing-error-check - - go/mistyped-exponentiation - - go/negative-length-check - - go/redundant-assignment - - go/redundant-operation - - go/redundant-recover - - go/shift-out-of-range - - go/unexpected-nil-value - - go/unhandled-writable-file-close - - go/unreachable-statement - - go/useless-assignment-to-field - - go/useless-assignment-to-local - - go/useless-expression - - go/whitespace-contradicts-precedence diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index ad2712943a3c..25b99dd292b2 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.4.1-dev +version: 1.4.0 groups: - go - queries diff --git a/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.expected b/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.expected index d4000d910cf1..73f614a03f14 100644 --- a/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.expected +++ b/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.expected @@ -1,2 +1,2 @@ -| main.go:3:6:3:15 | type declaration specifier | status | status | main.go:3:13:3:15 | int | int | def | -| main.go:5:6:5:20 | type declaration specifier | intlist | []int | main.go:5:16:5:20 | array type | []int | alias | +| main.go:3:6:3:15 | type declaration specifier | status | int | def | +| main.go:5:6:5:20 | type declaration specifier | intlist | []int | alias | diff --git a/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.ql b/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.ql index bbbc5345ed65..70a527d311c7 100644 --- a/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.ql +++ b/go/ql/test/library-tests/semmle/go/Decl/TypeSpec.ql @@ -2,4 +2,4 @@ import go from TypeSpec ts, string kind where if ts instanceof AliasSpec then kind = "alias" else kind = "def" -select ts, ts.getName(), ts.getDeclaredType().pp(), ts.getTypeExpr(), ts.getRhsType().pp(), kind +select ts, ts.getName(), ts.getTypeExpr().getType().pp(), kind diff --git a/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.expected b/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.expected deleted file mode 100644 index 123c6ac7a359..000000000000 --- a/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.expected +++ /dev/null @@ -1,112 +0,0 @@ -| aliases.go:19:6:19:7 | S3 | struct { x int } | -| aliases.go:29:6:29:11 | MyType | struct { x MyTypeT } | -| cyclic.go:3:6:3:6 | s | struct { * s } | -| cyclic.go:7:6:7:6 | t | struct { * u; f int } | -| cyclic.go:12:6:12:6 | u | struct { t } | -| cyclic.go:16:6:16:6 | v | struct { s } | -| depth.go:5:6:5:6 | a | struct { b; c } | -| depth.go:10:6:10:6 | b | struct { f int } | -| depth.go:14:6:14:6 | c | struct { d } | -| depth.go:18:6:18:6 | d | struct { f string } | -| embedded.go:3:6:3:8 | Baz | struct { A string } | -| embedded.go:7:6:7:8 | Qux | struct { * Baz } | -| embedded.go:11:6:11:14 | EmbedsBaz | struct { Qux; Baz string } | -| generic.go:3:6:3:19 | GenericStruct1 | struct { valueField T; pointerField * T; arrayField [10]T; sliceField []T; mapField [string]T } | -| generic.go:11:6:11:27 | CircularGenericStruct1 | struct { pointerField * CircularGenericStruct1 } | -| generic.go:15:6:15:31 | UsesCircularGenericStruct1 | struct { root CircularGenericStruct1 } | -| generic.go:19:6:19:19 | GenericStruct2 | struct { structField GenericStruct1; mapField [S]T } | -| generic.go:24:6:24:20 | GenericStruct2b | struct { structField GenericStruct2 } | -| generic.go:28:6:28:27 | CircularGenericStruct2 | struct { pointerField * CircularGenericStruct2 } | -| generic.go:32:6:32:21 | GenericInterface | interface { GetT func() T } | -| generic.go:36:6:36:17 | GenericArray | [10]T | -| generic.go:37:6:37:19 | GenericPointer | * T | -| generic.go:38:6:38:17 | GenericSlice | []T | -| generic.go:39:6:39:16 | GenericMap1 | [string]V | -| generic.go:40:6:40:16 | GenericMap2 | [K]V | -| generic.go:41:6:41:19 | GenericChannel | chan<- T | -| generic.go:42:6:42:14 | MyMapType | [string]int | -| generic.go:43:6:43:19 | GenericDefined | MyMapType | -| generic.go:44:6:44:16 | MyFuncType1 | func(T) | -| generic.go:45:6:45:16 | MyFuncType2 | func(T1) T2 | -| generic.go:47:6:47:16 | MyInterface | interface { clone func() MyInterface; dummy1 func() [10]U; dummy11 func() GenericArray; dummy12 func() GenericPointer; dummy13 func() GenericSlice; dummy14 func() GenericMap1; dummy15 func() GenericMap2; dummy17 func() GenericChannel; dummy18 func() GenericDefined; dummy19 func() MyFuncType1; dummy2 func() * U; dummy20 func() MyFuncType2; dummy3 func() []U; dummy4 func() [U]U; dummy5 func() chan<- U; dummy6 func() MyMapType; dummy7 func() MyFuncType2 } | -| generic.go:67:6:67:22 | HasBlankTypeParam | struct { } | -| generic.go:68:6:68:23 | HasBlankTypeParams | struct { } | -| generic.go:84:6:84:21 | GenericSignature | func(T) T | -| interface.go:3:6:3:7 | i0 | comparable | -| interface.go:5:6:5:7 | i1 | interface { int } | -| interface.go:9:6:9:7 | i2 | interface { ~string } | -| interface.go:13:6:13:7 | i3 | interface { [5]int \| ~string } | -| interface.go:18:6:18:7 | i4 | interface { i1 \| i2 \| float32 } | -| interface.go:23:6:23:7 | i5 | interface { []uint8; int \| ~[]uint8 } | -| interface.go:28:6:28:7 | i6 | interface { ~[]int \| ~string; String func() string } | -| interface.go:34:6:34:7 | i7 | interface { [5]int \| ~string; ~string; String func() string } | -| interface.go:41:6:41:7 | i8 | interface { ~[]int \| ~string; String func() string; StringA func() string } | -| interface.go:47:6:47:7 | i9 | interface { ~[]int \| ~string; String func() string; StringB func() string } | -| interface.go:52:6:52:8 | i10 | interface { comparable } | -| interface.go:57:6:57:8 | i11 | interface { [5]uint8 \| string; int } | -| interface.go:63:6:63:8 | i12 | interface { comparable; []uint8 \| string } | -| interface.go:69:6:69:8 | i13 | interface { comparable; []uint8 \| string } | -| interface.go:75:6:75:8 | i14 | interface { []uint8 \| string; ~[]int \| ~string; String func() string; StringA func() string } | -| interface.go:81:6:81:8 | i15 | interface { []uint8 \| string; ~[]int \| ~string; String func() string; StringB func() string } | -| interface.go:87:6:87:8 | i16 | interface { } | -| interface.go:91:6:91:8 | i17 | interface { StringA func() string } | -| interface.go:95:6:95:8 | i18 | interface { comparable; StringA func() string } | -| interface.go:101:6:101:8 | i19 | interface { StringB func() string } | -| interface.go:105:6:105:8 | i20 | interface { comparable; StringB func() string } | -| interface.go:114:6:114:19 | testComparable | struct { } | -| interface.go:115:6:115:20 | testComparable0 | struct { } | -| interface.go:116:6:116:20 | testComparable1 | struct { } | -| interface.go:117:6:117:20 | testComparable2 | struct { } | -| interface.go:118:6:118:20 | testComparable3 | struct { } | -| interface.go:119:6:119:20 | testComparable4 | struct { } | -| interface.go:120:6:120:20 | testComparable5 | struct { } | -| interface.go:121:6:121:20 | testComparable6 | struct { } | -| interface.go:122:6:122:20 | testComparable7 | struct { } | -| interface.go:123:6:123:20 | testComparable8 | struct { } | -| interface.go:124:6:124:20 | testComparable9 | struct { } | -| interface.go:125:6:125:21 | testComparable10 | struct { } | -| interface.go:126:6:126:21 | testComparable11 | struct { } | -| interface.go:127:6:127:21 | testComparable12 | struct { } | -| interface.go:128:6:128:21 | testComparable13 | struct { } | -| interface.go:129:6:129:21 | testComparable14 | struct { } | -| interface.go:130:6:130:21 | testComparable15 | struct { } | -| interface.go:131:6:131:21 | testComparable16 | struct { } | -| interface.go:132:6:132:21 | testComparable17 | struct { } | -| interface.go:133:6:133:21 | testComparable18 | struct { } | -| interface.go:134:6:134:21 | testComparable19 | struct { } | -| interface.go:135:6:135:21 | testComparable20 | struct { } | -| interface.go:136:6:136:21 | testComparable21 | struct { } | -| interface.go:137:6:137:21 | testComparable22 | struct { } | -| interface.go:138:6:138:21 | testComparable23 | struct { } | -| main.go:17:6:17:20 | EmbedsNameClash | struct { NameClash } | -| pkg1/embedding.go:8:6:8:9 | base | struct { } | -| pkg1/embedding.go:19:6:19:13 | embedder | struct { base } | -| pkg1/embedding.go:22:6:22:16 | ptrembedder | struct { * base } | -| pkg1/embedding.go:25:6:25:14 | embedder2 | struct { embedder } | -| pkg1/embedding.go:28:6:28:14 | embedder3 | struct { embedder } | -| pkg1/embedding.go:35:6:35:14 | embedder4 | struct { base; f int } | -| pkg1/interfaces.go:3:6:3:6 | A | interface { m func() } | -| pkg1/interfaces.go:7:6:7:6 | B | interface { m func() ; n func() } | -| pkg1/interfaces.go:12:6:12:6 | C | interface { n func() ; o func() } | -| pkg1/interfaces.go:17:6:17:14 | AEmbedded | interface { m func() } | -| pkg1/interfaces.go:21:6:21:7 | AC | interface { m func() ; n func() ; o func() } | -| pkg1/interfaces.go:26:6:26:14 | AExtended | interface { m func() ; n func() } | -| pkg1/interfaces.go:31:6:31:7 | A2 | interface { m func() } | -| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | interface { Exported func() ; notExported func() } | -| pkg1/promotedStructs.go:4:6:4:6 | S | struct { SField string } | -| pkg1/promotedStructs.go:13:6:13:6 | P | struct { PField string } | -| pkg1/promotedStructs.go:22:6:22:12 | SEmbedS | struct { S } | -| pkg1/promotedStructs.go:25:6:25:12 | SEmbedP | struct { P } | -| pkg1/tst.go:5:6:5:6 | T | struct { f int; Foo; Bar } | -| pkg1/tst.go:11:6:11:7 | T2 | struct { Foo Foo; Bar } | -| pkg1/tst.go:16:6:16:7 | T3 | struct { * Foo; * Bar } | -| pkg1/tst.go:21:6:21:7 | T4 | struct { * Foo; Bar Bar } | -| pkg1/tst.go:26:6:26:8 | Foo | struct { val int; flag bool } | -| pkg1/tst.go:31:6:31:8 | Bar | struct { flag bool } | -| pkg1/tst.go:61:6:61:14 | NameClash | struct { NameClash } | -| pkg2/tst.go:3:6:3:6 | T | struct { g int } | -| pkg2/tst.go:7:6:7:6 | G | struct { g int } | -| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | interface { Exported func() ; notExported func() } | -| pkg2/tst.go:16:6:16:14 | NameClash | struct { NCField string } | -| struct_tags.go:3:6:3:7 | S1 | struct { field1 int `tag1a`; field2 int `tag2a` } | -| struct_tags.go:8:6:8:7 | S2 | struct { field1 int `tag1b`; field2 int `tag2b` } | diff --git a/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.ql b/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.ql deleted file mode 100644 index 6b257110792a..000000000000 --- a/go/ql/test/library-tests/semmle/go/Types/DefinedType_getBaseType.ql +++ /dev/null @@ -1,5 +0,0 @@ -import go - -from DefinedType dt, Type tp -where tp = dt.getBaseType() -select dt, tp.pp() diff --git a/go/ql/test/library-tests/semmle/go/Types/FieldDecl.expected b/go/ql/test/library-tests/semmle/go/Types/FieldDecl.expected deleted file mode 100644 index b1eb47a7945f..000000000000 --- a/go/ql/test/library-tests/semmle/go/Types/FieldDecl.expected +++ /dev/null @@ -1,70 +0,0 @@ -fieldDeclWithNamedFields -| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:6:26:6:26 | x | -| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:8:26:8:26 | x | -| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:19:17:19:17 | x | -| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:6:26:6:26 | x | -| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:8:26:8:26 | x | -| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:19:17:19:17 | x | -| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:6:26:6:26 | x | -| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:8:26:8:26 | x | -| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:19:17:19:17 | x | -| aliases.go:29:34:29:42 | field declaration | 0 | aliases.go:29:34:29:34 | x | -| cyclic.go:9:2:9:6 | field declaration | 0 | cyclic.go:9:2:9:2 | f | -| depth.go:11:2:11:6 | field declaration | 0 | depth.go:11:2:11:2 | f | -| depth.go:19:2:19:9 | field declaration | 0 | depth.go:19:2:19:2 | f | -| embedded.go:4:2:4:9 | field declaration | 0 | embedded.go:4:2:4:2 | A | -| embedded.go:13:2:13:11 | field declaration | 0 | embedded.go:13:2:13:4 | Baz | -| generic.go:4:2:4:15 | field declaration | 0 | generic.go:4:2:4:11 | valueField | -| generic.go:5:2:5:16 | field declaration | 0 | generic.go:5:2:5:13 | pointerField | -| generic.go:6:2:6:19 | field declaration | 0 | generic.go:6:2:6:11 | arrayField | -| generic.go:7:2:7:17 | field declaration | 0 | generic.go:7:2:7:11 | sliceField | -| generic.go:8:2:8:26 | field declaration | 0 | generic.go:8:2:8:9 | mapField | -| generic.go:12:2:12:40 | field declaration | 0 | generic.go:12:2:12:13 | pointerField | -| generic.go:16:2:16:31 | field declaration | 0 | generic.go:16:2:16:5 | root | -| generic.go:20:2:20:30 | field declaration | 0 | generic.go:20:2:20:12 | structField | -| generic.go:21:2:21:20 | field declaration | 0 | generic.go:21:2:21:9 | mapField | -| generic.go:25:2:25:33 | field declaration | 0 | generic.go:25:2:25:12 | structField | -| generic.go:29:2:29:43 | field declaration | 0 | generic.go:29:2:29:13 | pointerField | -| pkg1/embedding.go:37:2:37:6 | field declaration | 0 | pkg1/embedding.go:37:2:37:2 | f | -| pkg1/promotedStructs.go:5:2:5:14 | field declaration | 0 | pkg1/promotedStructs.go:5:2:5:7 | SField | -| pkg1/promotedStructs.go:14:2:14:14 | field declaration | 0 | pkg1/promotedStructs.go:14:2:14:7 | PField | -| pkg1/tst.go:6:2:6:6 | field declaration | 0 | pkg1/tst.go:6:2:6:2 | f | -| pkg1/tst.go:12:2:12:8 | field declaration | 0 | pkg1/tst.go:12:2:12:4 | Foo | -| pkg1/tst.go:23:2:23:8 | field declaration | 0 | pkg1/tst.go:23:2:23:4 | Bar | -| pkg1/tst.go:27:2:27:9 | field declaration | 0 | pkg1/tst.go:27:2:27:4 | val | -| pkg1/tst.go:28:2:28:10 | field declaration | 0 | pkg1/tst.go:28:2:28:5 | flag | -| pkg1/tst.go:32:2:32:10 | field declaration | 0 | pkg1/tst.go:32:2:32:5 | flag | -| pkg2/tst.go:4:2:4:6 | field declaration | 0 | pkg2/tst.go:4:2:4:2 | g | -| pkg2/tst.go:4:2:4:6 | field declaration | 0 | pkg2/tst.go:8:2:8:2 | g | -| pkg2/tst.go:8:2:8:6 | field declaration | 0 | pkg2/tst.go:4:2:4:2 | g | -| pkg2/tst.go:8:2:8:6 | field declaration | 0 | pkg2/tst.go:8:2:8:2 | g | -| pkg2/tst.go:17:2:17:15 | field declaration | 0 | pkg2/tst.go:17:2:17:8 | NCField | -| struct_tags.go:4:2:4:19 | field declaration | 0 | struct_tags.go:4:2:4:7 | field1 | -| struct_tags.go:5:2:5:19 | field declaration | 0 | struct_tags.go:5:2:5:7 | field2 | -| struct_tags.go:9:2:9:19 | field declaration | 0 | struct_tags.go:9:2:9:7 | field1 | -| struct_tags.go:10:2:10:19 | field declaration | 0 | struct_tags.go:10:2:10:7 | field2 | -fieldDeclWithEmbeddedField -| cyclic.go:4:2:4:3 | field declaration | * s | -| cyclic.go:8:2:8:3 | field declaration | * u | -| cyclic.go:13:2:13:2 | field declaration | t | -| cyclic.go:17:2:17:2 | field declaration | s | -| depth.go:6:2:6:2 | field declaration | b | -| depth.go:7:2:7:2 | field declaration | c | -| depth.go:15:2:15:2 | field declaration | d | -| embedded.go:8:2:8:5 | field declaration | * Baz | -| embedded.go:12:2:12:4 | field declaration | Qux | -| main.go:18:2:18:15 | field declaration | NameClash | -| pkg1/embedding.go:19:23:19:26 | field declaration | base | -| pkg1/embedding.go:22:26:22:30 | field declaration | * base | -| pkg1/embedding.go:25:24:25:31 | field declaration | embedder | -| pkg1/embedding.go:28:24:28:31 | field declaration | embedder | -| pkg1/embedding.go:36:2:36:5 | field declaration | base | -| pkg1/promotedStructs.go:22:22:22:22 | field declaration | S | -| pkg1/promotedStructs.go:25:22:25:22 | field declaration | P | -| pkg1/tst.go:7:2:7:4 | field declaration | Foo | -| pkg1/tst.go:8:2:8:4 | field declaration | Bar | -| pkg1/tst.go:13:2:13:4 | field declaration | Bar | -| pkg1/tst.go:17:2:17:5 | field declaration | * Foo | -| pkg1/tst.go:18:2:18:5 | field declaration | * Bar | -| pkg1/tst.go:22:2:22:5 | field declaration | * Foo | -| pkg1/tst.go:62:2:62:15 | field declaration | NameClash | diff --git a/go/ql/test/library-tests/semmle/go/Types/FieldDecl.ql b/go/ql/test/library-tests/semmle/go/Types/FieldDecl.ql deleted file mode 100644 index 2cdbcc9e57b9..000000000000 --- a/go/ql/test/library-tests/semmle/go/Types/FieldDecl.ql +++ /dev/null @@ -1,7 +0,0 @@ -import go - -query predicate fieldDeclWithNamedFields(FieldDecl fd, int i, Field f) { fd.getField(i) = f } - -query predicate fieldDeclWithEmbeddedField(FieldDecl fd, string tp) { - fd.isEmbedded() and tp = fd.getType().pp() -} diff --git a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected index 0306a98051e6..f5af1c53e406 100644 --- a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected +++ b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.expected @@ -31,12 +31,12 @@ | interface.go:101:6:101:8 | i19 | StringB | func() string | | interface.go:105:6:105:8 | i20 | StringB | func() string | | main.go:17:6:17:20 | EmbedsNameClash | NCMethod | func() | -| pkg1/embedding.go:8:6:8:9 | base | f | func() int | | pkg1/embedding.go:19:6:19:13 | embedder | f | func() int | | pkg1/embedding.go:22:6:22:16 | ptrembedder | f | func() int | | pkg1/embedding.go:22:6:22:16 | ptrembedder | g | func() int | | pkg1/embedding.go:25:6:25:14 | embedder2 | f | func() int | | pkg1/embedding.go:28:6:28:14 | embedder3 | f | func() int | +| pkg1/embedding.go:35:6:35:14 | embedder4 | f | func() int | | pkg1/interfaces.go:3:6:3:6 | A | m | func() | | pkg1/interfaces.go:7:6:7:6 | B | m | func() | | pkg1/interfaces.go:7:6:7:6 | B | n | func() | @@ -51,13 +51,10 @@ | pkg1/interfaces.go:31:6:31:7 | A2 | m | func() | | pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | Exported | func() | | pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | notExported | func() | -| pkg1/promotedStructs.go:4:6:4:6 | S | SMethod | func() interface { } | | pkg1/promotedStructs.go:22:6:22:12 | SEmbedS | SMethod | func() interface { } | | pkg1/tst.go:5:6:5:6 | T | half | func() Foo | | pkg1/tst.go:16:6:16:7 | T3 | half | func() Foo | | pkg1/tst.go:21:6:21:7 | T4 | half | func() Foo | -| pkg1/tst.go:26:6:26:8 | Foo | half | func() Foo | | pkg1/tst.go:61:6:61:14 | NameClash | NCMethod | func() | | pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | Exported | func() | | pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | notExported | func() | -| pkg2/tst.go:16:6:16:14 | NameClash | NCMethod | func() | diff --git a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.ql b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.ql index 89a62ef2f655..f9eae96b5296 100644 --- a/go/ql/test/library-tests/semmle/go/Types/MethodTypes.ql +++ b/go/ql/test/library-tests/semmle/go/Types/MethodTypes.ql @@ -1,7 +1,7 @@ import go -from Type t, string m, Type tp +from DefinedType t, string m, Type tp where exists(t.getEntity().getDeclaration()) and - t.hasMethod(m, tp) + t.getBaseType().hasMethod(m, tp) select t, m, tp.pp() diff --git a/go/ql/test/query-tests/Security/CWE-681/FilterTestResults.ql b/go/ql/test/query-tests/Security/CWE-681/FilterTestResults.ql deleted file mode 100644 index 9b3e77c416f9..000000000000 --- a/go/ql/test/query-tests/Security/CWE-681/FilterTestResults.ql +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @kind test-postprocess - * @description Remove the query predicates that differ based on 32/64-bit architecture. This should leave behind `invalidModelRowAdd` and `testFailures` in case of test failures. - */ - -/** - * The input test results: query predicate `relation` contains `data` at (`row`, `column`). - */ -external private predicate queryResults(string relation, int row, int column, string data); - -/** Holds if the test output's query predicate `relation` contains `data` at (`row`, `column`). */ -query predicate results(string relation, int row, int column, string data) { - queryResults(relation, row, column, data) and - not relation in ["#select", "nodes", "edges"] -} diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected index e69de29bb2d1..42831abaf155 100644 --- a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected +++ b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.expected @@ -0,0 +1,2 @@ +invalidModelRow +testFailures diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.go b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.go index 0eee414716b5..7927a5fe252c 100644 --- a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.go +++ b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.go @@ -24,7 +24,7 @@ func lookupNumberByName(reg *registry, name string) (int32, error) { return 567, nil } func lab(s string) (*something, error) { - num, err := strconv.Atoi(s) // $ Source + num, err := strconv.Atoi(s) if err != nil { number, err := lookupNumberByName(®istry{}, s) @@ -33,7 +33,7 @@ func lab(s string) (*something, error) { } num = int(number) } - target, err := lookupTarget(&config{}, int32(num)) // $ Alert + target, err := lookupTarget(&config{}, int32(num)) // $ hasValueFlow="num" if err != nil { return nil, err } @@ -63,12 +63,12 @@ func testParseInt() { _ = uint(parsed) } { - parsed, err := strconv.ParseInt("3456", 10, 16) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 16) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" _ = int16(parsed) _ = uint16(parsed) _ = int32(parsed) @@ -79,14 +79,14 @@ func testParseInt() { _ = uint(parsed) } { - parsed, err := strconv.ParseInt("3456", 10, 32) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 32) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" _ = int32(parsed) _ = uint32(parsed) _ = int64(parsed) @@ -95,32 +95,32 @@ func testParseInt() { _ = uint(parsed) } { - parsed, err := strconv.ParseInt("3456", 10, 64) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 64) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" _ = int64(parsed) _ = uint64(parsed) - _ = int(parsed) // $ Alert - _ = uint(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" + _ = uint(parsed) // $ hasValueFlow="parsed" } { - parsed, err := strconv.ParseInt("3456", 10, 0) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 0) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" _ = int64(parsed) _ = uint64(parsed) _ = int(parsed) @@ -130,11 +130,11 @@ func testParseInt() { func testParseUint() { { - parsed, err := strconv.ParseUint("3456", 10, 8) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 8) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" _ = uint8(parsed) _ = int16(parsed) _ = uint16(parsed) @@ -146,13 +146,13 @@ func testParseUint() { _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 16) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 16) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" _ = uint16(parsed) _ = int32(parsed) _ = uint32(parsed) @@ -162,66 +162,66 @@ func testParseUint() { _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 32) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 32) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" _ = uint32(parsed) _ = int64(parsed) _ = uint64(parsed) - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 64) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 64) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert - _ = int64(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" + _ = int64(parsed) // $ hasValueFlow="parsed" _ = uint64(parsed) - _ = int(parsed) // $ Alert - _ = uint(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" + _ = uint(parsed) // $ hasValueFlow="parsed" } { - parsed, err := strconv.ParseUint("3456", 10, 0) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 0) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert - _ = int64(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" + _ = int64(parsed) // $ hasValueFlow="parsed" _ = uint64(parsed) - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } } func testAtoi() { - parsed, err := strconv.Atoi("3456") // $ Source + parsed, err := strconv.Atoi("3456") if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" _ = int64(parsed) _ = uint64(parsed) _ = int(parsed) @@ -233,19 +233,19 @@ type customInt int16 // these should be caught: func typeAliases(input string) { { - parsed, err := strconv.ParseInt(input, 10, 32) // $ Source + parsed, err := strconv.ParseInt(input, 10, 32) if err != nil { panic(err) } // NOTE: byte is uint8 - _ = byte(parsed) // $ Alert - _ = customInt(parsed) // $ Alert + _ = byte(parsed) // $ hasValueFlow="parsed" + _ = customInt(parsed) // $ hasValueFlow="parsed" } } func testBoundsChecking(input string) { { - parsed, err := strconv.Atoi(input) // $ Source + parsed, err := strconv.Atoi(input) if err != nil { panic(err) } @@ -253,13 +253,13 @@ func testBoundsChecking(input string) { _ = int8(parsed) } if parsed < math.MaxInt8 { - _ = int8(parsed) // $ MISSING: Alert // Not found because we only check for upper bounds + _ = int8(parsed) // $ MISSING: hasValueFlow="parsed" // Not found because we only check for upper bounds if parsed >= 0 { _ = int16(parsed) } } if parsed >= math.MinInt8 { - _ = int8(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" if parsed <= 0 { _ = int16(parsed) } @@ -271,51 +271,51 @@ func testBoundsChecking(input string) { } } { - parsed, err := strconv.ParseUint(input, 10, 0) // $ Source + parsed, err := strconv.ParseUint(input, 10, 0) if err != nil { panic(err) } if parsed <= math.MaxUint64 { - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert - _ = int64(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" + _ = int64(parsed) // $ hasValueFlow="parsed" _ = uint64(parsed) - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } if parsed <= math.MaxInt64 { - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" _ = int64(parsed) _ = uint64(parsed) - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } if parsed <= math.MaxUint32 { - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" _ = uint32(parsed) _ = int64(parsed) _ = uint64(parsed) - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } if parsed <= math.MaxInt32 { - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" _ = int32(parsed) _ = uint32(parsed) _ = int64(parsed) @@ -325,25 +325,25 @@ func testBoundsChecking(input string) { } } { - parsed, err := strconv.ParseUint(input, 10, 32) // $ Source + parsed, err := strconv.ParseUint(input, 10, 32) if err != nil { panic(err) } if parsed <= math.MaxUint16 { _ = uint16(parsed) - _ = int16(parsed) // $ Alert + _ = int16(parsed) // $ hasValueFlow="parsed" } if parsed <= 255 { _ = uint8(parsed) } if parsed <= 256 { - _ = uint8(parsed) // $ Alert + _ = uint8(parsed) // $ hasValueFlow="parsed" } if err == nil && 1 == 1 && parsed < math.MaxInt8 { _ = int8(parsed) } if parsed > 42 { - _ = uint16(parsed) // $ Alert + _ = uint16(parsed) // $ hasValueFlow="parsed" } if parsed >= math.MaxUint8+1 { return @@ -389,64 +389,64 @@ func testRightShifted(input string) { _ = byte(parsed >> 8 & 0xff) } { - parsed, err := strconv.ParseInt(input, 10, 16) // $ Source + parsed, err := strconv.ParseInt(input, 10, 16) if err != nil { panic(err) } - _ = byte(parsed) // $ Alert + _ = byte(parsed) // $ hasValueFlow="parsed" _ = byte(parsed << 8) } } func testPathWithMoreThanOneSink(input string) { { - parsed, err := strconv.ParseInt(input, 10, 32) // $ Source + parsed, err := strconv.ParseInt(input, 10, 32) if err != nil { panic(err) } - v1 := int16(parsed) // $ Alert + v1 := int16(parsed) // $ hasValueFlow="parsed" _ = int16(v1) } { - parsed, err := strconv.ParseInt(input, 10, 32) // $ Source + parsed, err := strconv.ParseInt(input, 10, 32) if err != nil { panic(err) } - v := int16(parsed) // $ Alert + v := int16(parsed) // $ hasValueFlow="parsed" _ = int8(v) } { - parsed, err := strconv.ParseInt(input, 10, 32) // $ Source + parsed, err := strconv.ParseInt(input, 10, 32) if err != nil { panic(err) } v1 := int32(parsed) - v2 := int16(v1) // $ Alert + v2 := int16(v1) // $ hasValueFlow="v1" _ = int8(v2) } { - parsed, err := strconv.ParseInt(input, 10, 16) // $ Source + parsed, err := strconv.ParseInt(input, 10, 16) if err != nil { panic(err) } v1 := int64(parsed) v2 := int32(v1) v3 := int16(v2) - _ = int8(v3) // $ Alert + _ = int8(v3) // $ hasValueFlow="v3" } } func testUsingStrConvIntSize(input string) { - parsed, err := strconv.ParseInt(input, 10, strconv.IntSize) // $ Source + parsed, err := strconv.ParseInt(input, 10, strconv.IntSize) if err != nil { panic(err) } - _ = int8(parsed) // $ Alert - _ = uint8(parsed) // $ Alert - _ = int16(parsed) // $ Alert - _ = uint16(parsed) // $ Alert - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int8(parsed) // $ hasValueFlow="parsed" + _ = uint8(parsed) // $ hasValueFlow="parsed" + _ = int16(parsed) // $ hasValueFlow="parsed" + _ = uint16(parsed) // $ hasValueFlow="parsed" + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" _ = int64(parsed) _ = uint64(parsed) _ = int(parsed) @@ -490,7 +490,7 @@ func dealWithArchSizeCorrectly(s string) uint { } func typeSwitch1(s string) { - i64, _ := strconv.ParseInt(s, 10, 64) // $ Source + i64, _ := strconv.ParseInt(s, 10, 64) var input any = i64 switch v := input.(type) { case int16, string: @@ -498,19 +498,19 @@ func typeSwitch1(s string) { return } _ = int16(v.(int16)) - _ = int8(v.(int16)) // $ Alert + _ = int8(v.(int16)) // $ hasValueFlow="type assertion" case int32: _ = int32(v) - _ = int8(v) // $ Alert + _ = int8(v) // $ hasValueFlow="v" case int64: - _ = int8(v) // $ Alert + _ = int8(v) // $ hasValueFlow="v" default: - _ = int8(v.(int64)) // $ Alert + _ = int8(v.(int64)) // $ hasValueFlow="type assertion" } } func typeSwitch2(s string) { - i64, _ := strconv.ParseInt(s, 10, 64) // $ Source + i64, _ := strconv.ParseInt(s, 10, 64) var input any = i64 switch input.(type) { case int16, string: @@ -518,25 +518,25 @@ func typeSwitch2(s string) { return } _ = int16(input.(int16)) - _ = int8(input.(int16)) // $ Alert + _ = int8(input.(int16)) // $ hasValueFlow="type assertion" case int32: _ = int32(input.(int32)) - _ = int8(input.(int32)) // $ Alert + _ = int8(input.(int32)) // $ hasValueFlow="type assertion" case int64: - _ = int8(input.(int64)) // $ Alert + _ = int8(input.(int64)) // $ hasValueFlow="type assertion" default: - _ = int8(input.(int64)) // $ Alert + _ = int8(input.(int64)) // $ hasValueFlow="type assertion" } } func checkedTypeAssertion(s string) { - i64, _ := strconv.ParseInt(s, 10, 64) // $ Source + i64, _ := strconv.ParseInt(s, 10, 64) var input any = i64 if v, ok := input.(int16); ok { // Need to account for the fact that within this case clause, v is an int16 _ = int16(v) - _ = int8(v) // $ Alert + _ = int8(v) // $ hasValueFlow="v" } else if v, ok := input.(int32); ok { - _ = int16(v) // $ Alert + _ = int16(v) // $ hasValueFlow="v" } } diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql new file mode 100644 index 000000000000..e5d1b2aebabe --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.ql @@ -0,0 +1,20 @@ +import go +import semmle.go.dataflow.ExternalFlow +import ModelValidation +import utils.test.InlineExpectationsTest +import semmle.go.security.IncorrectIntegerConversionLib + +module TestIncorrectIntegerConversion implements TestSig { + string getARelevantTag() { result = "hasValueFlow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node sink | Flow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "\"" + sink.toString() + "\"" + ) + } +} + +import MakeTest diff --git a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.qlref b/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.qlref deleted file mode 100644 index d424ad73de84..000000000000 --- a/go/ql/test/query-tests/Security/CWE-681/IncorrectIntegerConversion.qlref +++ /dev/null @@ -1,5 +0,0 @@ -query: Security/CWE-681/IncorrectIntegerConversionQuery.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql - - ./FilterTestResults.ql diff --git a/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraintInFileName_386.go b/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraintInFileName_386.go index 21eff8479a89..0ff7b0e87acc 100644 --- a/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraintInFileName_386.go +++ b/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraintInFileName_386.go @@ -16,11 +16,11 @@ func testIntSource386() { _ = uint32(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 0) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 0) if err != nil { panic(err) } - _ = int32(parsed) // $ Alert + _ = int32(parsed) // $ hasValueFlow="parsed" _ = uint32(parsed) } { diff --git a/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraints.go b/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraints.go index 16d5bba86c64..79b776bdcac2 100644 --- a/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraints.go +++ b/go/ql/test/query-tests/Security/CWE-681/Test32BitArchitectureBuildConstraints.go @@ -19,11 +19,11 @@ func testIntSource32() { _ = uint32(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 0) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 0) if err != nil { panic(err) } - _ = int32(parsed) // $ Alert + _ = int32(parsed) // $ hasValueFlow="parsed" _ = uint32(parsed) } { diff --git a/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraintInFileName_amd64.go b/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraintInFileName_amd64.go index d1bd2673729e..b5becec4af90 100644 --- a/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraintInFileName_amd64.go +++ b/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraintInFileName_amd64.go @@ -16,11 +16,11 @@ func testIntSinkAmd64() { _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 64) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 64) if err != nil { panic(err) } - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } } diff --git a/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraints.go b/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraints.go index b07727d25ade..cf7aaf439a82 100644 --- a/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraints.go +++ b/go/ql/test/query-tests/Security/CWE-681/Test64BitArchitectureBuildConstraints.go @@ -19,11 +19,11 @@ func testIntSink64() { _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 64) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 64) if err != nil { panic(err) } - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } } diff --git a/go/ql/test/query-tests/Security/CWE-681/TestNoArchitectureBuildConstraints.go b/go/ql/test/query-tests/Security/CWE-681/TestNoArchitectureBuildConstraints.go index 3138dd9a8c27..70f1938b5b35 100644 --- a/go/ql/test/query-tests/Security/CWE-681/TestNoArchitectureBuildConstraints.go +++ b/go/ql/test/query-tests/Security/CWE-681/TestNoArchitectureBuildConstraints.go @@ -9,19 +9,19 @@ import ( func testIntSizeIsArchicturallyDependent1() { { - parsed, err := strconv.ParseInt("3456", 10, 0) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 0) if err != nil { panic(err) } - _ = int32(parsed) // $ Alert - _ = uint32(parsed) // $ Alert + _ = int32(parsed) // $ hasValueFlow="parsed" + _ = uint32(parsed) // $ hasValueFlow="parsed" } { - parsed, err := strconv.ParseInt("3456", 10, 64) // $ Source + parsed, err := strconv.ParseInt("3456", 10, 64) if err != nil { panic(err) } - _ = int(parsed) // $ Alert - _ = uint(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" + _ = uint(parsed) // $ hasValueFlow="parsed" } } diff --git a/go/ql/test/query-tests/Security/CWE-681/TestOldBuildConstraints.go b/go/ql/test/query-tests/Security/CWE-681/TestOldBuildConstraints.go index 35980ee9978d..34f686c6e8ad 100644 --- a/go/ql/test/query-tests/Security/CWE-681/TestOldBuildConstraints.go +++ b/go/ql/test/query-tests/Security/CWE-681/TestOldBuildConstraints.go @@ -20,11 +20,11 @@ func oldTestIntSink64() { _ = uint(parsed) } { - parsed, err := strconv.ParseUint("3456", 10, 64) // $ Source + parsed, err := strconv.ParseUint("3456", 10, 64) if err != nil { panic(err) } - _ = int(parsed) // $ Alert + _ = int(parsed) // $ hasValueFlow="parsed" _ = uint(parsed) } } diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected index bdcf83b8935f..42831abaf155 100644 --- a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.expected @@ -1,22 +1,2 @@ -#select -| UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | UncontrolledAllocationSizeBad.go:11:12:11:16 | selection of URL | UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | This memory allocation depends on a $@. | UncontrolledAllocationSizeBad.go:11:12:11:16 | selection of URL | user-provided value | -edges -| UncontrolledAllocationSizeBad.go:11:12:11:16 | selection of URL | UncontrolledAllocationSizeBad.go:11:12:11:24 | call to Query | provenance | Src:MaD:1 MaD:2 | -| UncontrolledAllocationSizeBad.go:11:12:11:24 | call to Query | UncontrolledAllocationSizeBad.go:13:15:13:20 | source | provenance | | -| UncontrolledAllocationSizeBad.go:13:15:13:20 | source | UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | provenance | MaD:3 | -| UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | provenance | | -| UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | provenance | | -| UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | provenance | Config | -models -| 1 | Source: net/http; Request; true; URL; ; ; ; remote; manual | -| 2 | Summary: net/url; URL; true; Query; ; ; Argument[receiver]; ReturnValue; taint; manual | -| 3 | Summary: net/url; Values; true; Get; ; ; Argument[receiver]; ReturnValue; taint; manual | -nodes -| UncontrolledAllocationSizeBad.go:11:12:11:16 | selection of URL | semmle.label | selection of URL | -| UncontrolledAllocationSizeBad.go:11:12:11:24 | call to Query | semmle.label | call to Query | -| UncontrolledAllocationSizeBad.go:13:15:13:20 | source | semmle.label | source | -| UncontrolledAllocationSizeBad.go:13:15:13:29 | call to Get | semmle.label | call to Get | -| UncontrolledAllocationSizeBad.go:14:2:14:37 | ... := ...[0] | semmle.label | ... := ...[0] | -| UncontrolledAllocationSizeBad.go:14:28:14:36 | sourceStr | semmle.label | sourceStr | -| UncontrolledAllocationSizeBad.go:20:27:20:30 | sink | semmle.label | sink | -subpaths +invalidModelRow +testFailures diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql new file mode 100644 index 000000000000..de10220d7e35 --- /dev/null +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.ql @@ -0,0 +1,6 @@ +import go +import semmle.go.dataflow.ExternalFlow +import ModelValidation +import semmle.go.security.UncontrolledAllocationSize +import utils.test.InlineFlowTest +import FlowTest diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.qlref b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.qlref deleted file mode 100644 index 82741d2fbaaa..000000000000 --- a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSize.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE-770/UncontrolledAllocationSize.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go index ae0525627058..0ae70436bdec 100644 --- a/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go +++ b/go/ql/test/query-tests/Security/CWE-770/UncontrolledAllocationSizeBad.go @@ -8,7 +8,7 @@ import ( ) func OutOfMemoryBad(w http.ResponseWriter, r *http.Request) { - source := r.URL.Query() // $ Source + source := r.URL.Query() sourceStr := source.Get("n") sink, err := strconv.Atoi(sourceStr) @@ -17,7 +17,7 @@ func OutOfMemoryBad(w http.ResponseWriter, r *http.Request) { return } - result := make([]string, sink) // $ Alert + result := make([]string, sink) // $hasTaintFlow="sink" for i := 0; i < sink; i++ { result[i] = fmt.Sprintf("Item %d", i+1) } diff --git a/java/kotlin-extractor/pick-kotlin-version.py b/java/kotlin-extractor/pick-kotlin-version.py index 718592d2bd61..d4d85820a8e2 100755 --- a/java/kotlin-extractor/pick-kotlin-version.py +++ b/java/kotlin-extractor/pick-kotlin-version.py @@ -26,7 +26,7 @@ def version_tuple(v): res = subprocess.run([kotlinc, "-version"], text=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) if res.returncode != 0: raise Exception(f"kotlinc -version failed: {res.stderr}") -m = re.search(r' kotlinc-jvm ([0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z][a-zA-Z0-9]*)?) ', res.stderr) +m = re.match(r'.* kotlinc-jvm ([0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z][a-zA-Z0-9]*)?) .*', res.stderr) if m is None: raise Exception(f'Cannot detect version of kotlinc (got {res.stderr})') version = m[1] diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected index 5c82bd5e3498..d177c4ad6a59 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected @@ -32,7 +32,6 @@ ql/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLockingWithInitRace.ql ql/java/ql/src/Likely Bugs/Concurrency/NonSynchronizedOverride.ql -ql/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchOnBoxedType.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchSetUnsynchGet.ql ql/java/ql/src/Likely Bugs/Frameworks/JUnit/JUnit5MissingNestedAnnotation.ql diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected index e558cf3ffc48..05565601e404 100644 --- a/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected +++ b/java/ql/integration-tests/java/query-suite/java-code-quality.qls.expected @@ -30,7 +30,6 @@ ql/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLocking.ql ql/java/ql/src/Likely Bugs/Concurrency/DoubleCheckedLockingWithInitRace.ql ql/java/ql/src/Likely Bugs/Concurrency/NonSynchronizedOverride.ql -ql/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchOnBoxedType.ql ql/java/ql/src/Likely Bugs/Concurrency/SynchSetUnsynchGet.ql ql/java/ql/src/Likely Bugs/Frameworks/JUnit/JUnit5MissingNestedAnnotation.ql diff --git a/java/ql/lib/Customizations.qll b/java/ql/lib/Customizations.qll index f083e0864507..1f5716726e30 100644 --- a/java/ql/lib/Customizations.qll +++ b/java/ql/lib/Customizations.qll @@ -8,7 +8,5 @@ * the `RemoteFlowSource` and `AdditionalTaintStep` classes associated with the security queries * to model frameworks that are not covered by the standard library. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/IDEContextual.qll b/java/ql/lib/IDEContextual.qll index e74d51898e8d..f26956bcca01 100644 --- a/java/ql/lib/IDEContextual.qll +++ b/java/ql/lib/IDEContextual.qll @@ -1,8 +1,6 @@ /** * Provides shared predicates related to contextual queries in the code viewer. */ -overlay[local?] -module; import semmle.files.FileSystem private import codeql.util.FileSystem diff --git a/java/ql/lib/default.qll b/java/ql/lib/default.qll index 66060273e966..79ed05a7c378 100644 --- a/java/ql/lib/default.qll +++ b/java/ql/lib/default.qll @@ -1,5 +1,3 @@ /** DEPRECATED: use `java.qll` instead. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/definitions.qll b/java/ql/lib/definitions.qll index f0a4e859b08e..aa5de3eb4019 100644 --- a/java/ql/lib/definitions.qll +++ b/java/ql/lib/definitions.qll @@ -2,8 +2,6 @@ * Provides classes and predicates related to jump-to-definition links * in the code viewer. */ -overlay[local?] -module; import java import IDEContextual diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index dc86c4637505..16afa26347fe 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking @@ -8,7 +5,7 @@ import semmle.code.java.controlflow.Dominance module JCAModel { import Language - import codeql.quantum.experimental.Standardization::Types::KeyOpAlg as KeyOpAlg + import Crypto::KeyOpAlg as KeyOpAlg abstract class CipherAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { } @@ -118,7 +115,7 @@ module JCAModel { } bindingset[name] - Crypto::HashType hash_name_to_type_known(string name, int digestLength) { + Crypto::THashType hash_name_to_type_known(string name, int digestLength) { name = "SHA-1" and result instanceof Crypto::SHA1 and digestLength = 160 or name = ["SHA-256", "SHA-384", "SHA-512"] and @@ -155,22 +152,24 @@ module JCAModel { } bindingset[name] - private predicate mode_name_to_type_known(KeyOpAlg::ModeOfOperationType type, string name) { - type = KeyOpAlg::ECB() and name = "ECB" + private predicate mode_name_to_type_known( + Crypto::TBlockCipherModeOfOperationType type, string name + ) { + type = Crypto::ECB() and name = "ECB" or - type = KeyOpAlg::CBC() and name = "CBC" + type = Crypto::CBC() and name = "CBC" or - type = KeyOpAlg::GCM() and name = "GCM" + type = Crypto::GCM() and name = "GCM" or - type = KeyOpAlg::CTR() and name = "CTR" + type = Crypto::CTR() and name = "CTR" or - type = KeyOpAlg::XTS() and name = "XTS" + type = Crypto::XTS() and name = "XTS" or - type = KeyOpAlg::CCM() and name = "CCM" + type = Crypto::CCM() and name = "CCM" or - type = KeyOpAlg::SIV() and name = "SIV" + type = Crypto::SIV() and name = "SIV" or - type = KeyOpAlg::OCB() and name = "OCB" + type = Crypto::OCB() and name = "OCB" } bindingset[name] @@ -183,7 +182,7 @@ module JCAModel { type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::DES()) or upper = "TRIPLEDES" and - type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::TRIPLE_DES()) + type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::TripleDES()) or upper = "IDEA" and type = KeyOpAlg::TSymmetricCipher(KeyOpAlg::IDEA()) @@ -206,8 +205,8 @@ module JCAModel { } bindingset[name] - predicate mac_name_to_mac_type_known(Crypto::TMacType type, string name) { - type = Crypto::HMAC() and + predicate mac_name_to_mac_type_known(Crypto::TMACType type, string name) { + type = Crypto::THMAC() and name.toUpperCase().matches("HMAC%") } @@ -299,18 +298,18 @@ module JCAModel { override string getRawPaddingAlgorithmName() { result = super.getPadding() } bindingset[name] - private predicate paddingToNameMappingKnown(KeyOpAlg::PaddingSchemeType type, string name) { - type instanceof KeyOpAlg::NoPadding and name = "NOPADDING" + private predicate paddingToNameMappingKnown(Crypto::TPaddingType type, string name) { + type instanceof Crypto::NoPadding and name = "NOPADDING" or - type instanceof KeyOpAlg::PKCS7 and name = ["PKCS5Padding", "PKCS7Padding"] // TODO: misnomer in the JCA? + type instanceof Crypto::PKCS7 and name = ["PKCS5Padding", "PKCS7Padding"] // TODO: misnomer in the JCA? or - type instanceof KeyOpAlg::OAEP and name.matches("OAEP%") // TODO: handle OAEPWith% + type instanceof Crypto::OAEP and name.matches("OAEP%") // TODO: handle OAEPWith% } - override KeyOpAlg::PaddingSchemeType getPaddingType() { + override Crypto::TPaddingType getPaddingType() { if this.paddingToNameMappingKnown(_, super.getPadding()) then this.paddingToNameMappingKnown(result, super.getPadding()) - else result instanceof KeyOpAlg::OtherPadding + else result instanceof Crypto::OtherPadding } } @@ -321,10 +320,10 @@ module JCAModel { override string getRawModeAlgorithmName() { result = super.getMode() } - override KeyOpAlg::ModeOfOperationType getModeType() { + override Crypto::TBlockCipherModeOfOperationType getModeType() { if mode_name_to_type_known(_, super.getMode()) then mode_name_to_type_known(result, super.getMode()) - else result instanceof KeyOpAlg::OtherMode + else result instanceof Crypto::OtherMode } } @@ -348,7 +347,7 @@ module JCAModel { override string getRawAlgorithmName() { result = super.getValue() } - override KeyOpAlg::AlgorithmType getAlgorithmType() { + override KeyOpAlg::Algorithm getAlgorithmType() { if cipher_name_to_type_known(_, super.getAlgorithmName()) then cipher_name_to_type_known(result, super.getAlgorithmName()) else result instanceof KeyOpAlg::TUnknownKeyOperationAlgorithmType @@ -374,12 +373,12 @@ module JCAModel { oaep_padding_string_components(any(CipherStringLiteral s).getPadding(), hash, mfg) } - class OaepPaddingHashAlgorithmInstance extends OaepPaddingAlgorithmInstance, + class OAEPPaddingHashAlgorithmInstance extends OAEPPaddingAlgorithmInstance, Crypto::HashAlgorithmInstance instanceof CipherStringLiteral { string hashName; - OaepPaddingHashAlgorithmInstance() { + OAEPPaddingHashAlgorithmInstance() { oaep_padding_string_components(super.getPadding(), hashName, _) } @@ -390,12 +389,12 @@ module JCAModel { override int getFixedDigestLength() { exists(hash_name_to_type_known(hashName, result)) } } - class OaepPaddingAlgorithmInstance extends Crypto::OaepPaddingAlgorithmInstance, + class OAEPPaddingAlgorithmInstance extends Crypto::OAEPPaddingAlgorithmInstance, CipherStringLiteralPaddingAlgorithmInstance { - override Crypto::HashAlgorithmInstance getOaepEncodingHashAlgorithm() { result = this } + override Crypto::HashAlgorithmInstance getOAEPEncodingHashAlgorithm() { result = this } - override Crypto::HashAlgorithmInstance getMgf1HashAlgorithm() { none() } // TODO + override Crypto::HashAlgorithmInstance getMGF1HashAlgorithm() { none() } // TODO } /** @@ -1031,7 +1030,7 @@ module JCAModel { KeyGeneratorGetInstanceCall getInstantiationCall() { result = instantiationCall } } - //TODO: Link getAlgorithm from KeyPairGenerator to algorithm instances or AVCs? High priority. + // TODO: Link getAlgorithm from KeyPairGenerator to algorithm instances or AVCs? High priority. class KeyGeneratorGetInstanceCall extends MethodCall { KeyGeneratorGetInstanceCall() { this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", "getInstance") @@ -1106,10 +1105,6 @@ module JCAModel { } override int getKeySizeFixed() { none() } - - override Crypto::ConsumerInputDataFlowNode getKeyValueConsumer() { none() } - - override predicate hasKeyValueConsumer() { none() } } class KeyGeneratorCipherAlgorithm extends CipherStringLiteralAlgorithmInstance { @@ -1161,7 +1156,9 @@ module JCAModel { } module KeySpecInstantiationToGenerateSecretFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { src.asExpr() instanceof KeySpecInstantiation } + predicate isSource(DataFlow::Node src) { + exists(KeySpecInstantiation call | src.asExpr() = call) + } predicate isSink(DataFlow::Node sink) { exists(SecretKeyFactoryGenerateSecretCall call | sink.asExpr() = call.getKeySpecArg()) @@ -1210,29 +1207,29 @@ module JCAModel { predicate isIntermediate() { none() } } - class KdfAlgorithmStringLiteral extends Crypto::KeyDerivationAlgorithmInstance instanceof StringLiteral + class KDFAlgorithmStringLiteral extends Crypto::KeyDerivationAlgorithmInstance instanceof StringLiteral { SecretKeyFactoryKDFAlgorithmValueConsumer consumer; - KdfAlgorithmStringLiteral() { + KDFAlgorithmStringLiteral() { kdf_names(this.getValue()) and KDFAlgorithmStringToGetInstanceFlow::flow(DataFlow::exprNode(this), consumer.getInputNode()) } - override string getRawKdfAlgorithmName() { result = super.getValue() } + override string getRawKDFAlgorithmName() { result = super.getValue() } - override Crypto::TKeyDerivationType getKdfType() { + override Crypto::TKeyDerivationType getKDFType() { result = kdf_name_to_kdf_type(super.getValue(), _) } SecretKeyFactoryKDFAlgorithmValueConsumer getConsumer() { result = consumer } } - class Pbkdf2AlgorithmStringLiteral extends KdfAlgorithmStringLiteral, - Crypto::Pbkdf2AlgorithmInstance, Crypto::HmacAlgorithmInstance, Crypto::HashAlgorithmInstance, + class PBKDF2AlgorithmStringLiteral extends KDFAlgorithmStringLiteral, + Crypto::PBKDF2AlgorithmInstance, Crypto::HMACAlgorithmInstance, Crypto::HashAlgorithmInstance, Crypto::AlgorithmValueConsumer { - Pbkdf2AlgorithmStringLiteral() { super.getKdfType() instanceof Crypto::PBKDF2 } + PBKDF2AlgorithmStringLiteral() { super.getKDFType() instanceof Crypto::PBKDF2 } override Crypto::ConsumerInputDataFlowNode getInputNode() { none() } @@ -1247,16 +1244,16 @@ module JCAModel { } override string getRawMacAlgorithmName() { - result = super.getRawKdfAlgorithmName().splitAt("PBKDF2With", 1) + result = super.getRawKDFAlgorithmName().splitAt("PBKDF2With", 1) } override string getRawHashAlgorithmName() { - result = super.getRawKdfAlgorithmName().splitAt("WithHmac", 1) + result = super.getRawKDFAlgorithmName().splitAt("WithHmac", 1) } - override Crypto::MacType getMacType() { result = Crypto::HMAC() } + override Crypto::TMACType getMacType() { result instanceof Crypto::THMAC } - override Crypto::AlgorithmValueConsumer getHmacAlgorithmValueConsumer() { result = this } + override Crypto::AlgorithmValueConsumer getHMACAlgorithmValueConsumer() { result = this } override Crypto::AlgorithmValueConsumer getHashAlgorithmValueConsumer() { result = this } } @@ -1270,7 +1267,7 @@ module JCAModel { override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { - exists(KdfAlgorithmStringLiteral l | l.getConsumer() = this and result = l) + exists(KDFAlgorithmStringLiteral l | l.getConsumer() = this and result = l) } SecretKeyFactoryGetInstanceCall getInstantiation() { result = call } @@ -1445,103 +1442,105 @@ module JCAModel { * MACs */ - module MacKnownAlgorithmToConsumerConfig implements DataFlow::ConfigSig { + module MACKnownAlgorithmToConsumerConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node src) { mac_names(src.asExpr().(StringLiteral).getValue()) } predicate isSink(DataFlow::Node sink) { - exists(MacGetInstanceCall call | sink.asExpr() = call.getAlgorithmArg()) + exists(MACGetInstanceCall call | sink.asExpr() = call.getAlgorithmArg()) } } - module MacKnownAlgorithmToConsumerFlow = DataFlow::Global; + module MACKnownAlgorithmToConsumerFlow = DataFlow::Global; - module MacGetInstanceToMacOperationFlowConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node src) { src.asExpr() instanceof MacGetInstanceCall } + module MACGetInstanceToMACOperationFlowConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node src) { src.asExpr() instanceof MACGetInstanceCall } predicate isSink(DataFlow::Node sink) { - exists(MacOperationCall call | sink.asExpr() = call.(MethodCall).getQualifier()) or - exists(MacInitCall call | sink.asExpr() = call.(MethodCall).getQualifier()) + exists(MACOperationCall call | sink.asExpr() = call.(MethodCall).getQualifier()) or + exists(MACInitCall call | sink.asExpr() = call.(MethodCall).getQualifier()) } } - module MacGetInstanceToMacOperationFlow = - DataFlow::Global; + module MACGetInstanceToMACOperationFlow = + DataFlow::Global; - module MacInitCallToMacOperationFlowConfig implements DataFlow::ConfigSig { + module MACInitCallToMACOperationFlowConfig implements DataFlow::ConfigSig { // TODO: use flow state with one config predicate isSource(DataFlow::Node src) { - exists(MacInitCall init | src.asExpr() = init.getQualifier()) + exists(MACInitCall init | src.asExpr() = init.getQualifier()) } predicate isSink(DataFlow::Node sink) { - exists(MacOperationCall call | sink.asExpr() = call.(MethodCall).getQualifier()) + exists(MACOperationCall call | sink.asExpr() = call.(MethodCall).getQualifier()) } } - module MacInitCallToMacOperationFlow = DataFlow::Global; + module MACInitCallToMACOperationFlow = DataFlow::Global; - class KnownMacAlgorithm extends Crypto::MacAlgorithmInstance instanceof StringLiteral { - MacGetInstanceAlgorithmValueConsumer consumer; + class KnownMACAlgorithm extends Crypto::MACAlgorithmInstance instanceof StringLiteral { + MACGetInstanceAlgorithmValueConsumer consumer; - KnownMacAlgorithm() { + KnownMACAlgorithm() { mac_names(this.getValue()) and - MacKnownAlgorithmToConsumerFlow::flow(DataFlow::exprNode(this), consumer.getInputNode()) + MACKnownAlgorithmToConsumerFlow::flow(DataFlow::exprNode(this), consumer.getInputNode()) } - MacGetInstanceAlgorithmValueConsumer getConsumer() { result = consumer } + MACGetInstanceAlgorithmValueConsumer getConsumer() { result = consumer } override string getRawMacAlgorithmName() { result = super.getValue() } - override Crypto::MacType getMacType() { + override Crypto::TMACType getMacType() { if mac_name_to_mac_type_known(_, super.getValue()) then mac_name_to_mac_type_known(result, super.getValue()) - else result = Crypto::OtherMacType() + else result instanceof Crypto::TOtherMACType } } - class MacGetInstanceCall extends MethodCall { - MacGetInstanceCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "getInstance") } + class MACGetInstanceCall extends MethodCall { + MACGetInstanceCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "getInstance") } Expr getAlgorithmArg() { result = this.getArgument(0) } - MacOperationCall getOperation() { - MacGetInstanceToMacOperationFlow::flow(DataFlow::exprNode(this), + MACOperationCall getOperation() { + MACGetInstanceToMACOperationFlow::flow(DataFlow::exprNode(this), DataFlow::exprNode(result.(MethodCall).getQualifier())) } - MacInitCall getInitCall() { - MacGetInstanceToMacOperationFlow::flow(DataFlow::exprNode(this), + MACInitCall getInitCall() { + MACGetInstanceToMACOperationFlow::flow(DataFlow::exprNode(this), DataFlow::exprNode(result.getQualifier())) } } - class MacInitCall extends MethodCall { - MacInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "init") } + class MACInitCall extends MethodCall { + MACInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "init") } Expr getKeyArg() { result = this.getArgument(0) and this.getMethod().getParameterType(0).hasName("Key") } - MacOperationCall getOperation() { - MacInitCallToMacOperationFlow::flow(DataFlow::exprNode(this.getQualifier()), + MACOperationCall getOperation() { + MACInitCallToMACOperationFlow::flow(DataFlow::exprNode(this.getQualifier()), DataFlow::exprNode(result.(MethodCall).getQualifier())) } } - class MacGetInstanceAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { - MacGetInstanceAlgorithmValueConsumer() { this = any(MacGetInstanceCall c).getAlgorithmArg() } + class MACGetInstanceAlgorithmValueConsumer extends Crypto::AlgorithmValueConsumer { + MACGetInstanceCall call; + + MACGetInstanceAlgorithmValueConsumer() { this = call.getAlgorithmArg() } override Crypto::ConsumerInputDataFlowNode getInputNode() { result.asExpr() = this } override Crypto::AlgorithmInstance getAKnownAlgorithmSource() { - exists(KnownMacAlgorithm l | l.getConsumer() = this and result = l) + exists(KnownMACAlgorithm l | l.getConsumer() = this and result = l) } } - class MacOperationCall extends Crypto::MacOperationInstance instanceof MethodCall { + class MACOperationCall extends Crypto::MACOperationInstance instanceof MethodCall { Expr output; - MacOperationCall() { + MACOperationCall() { super.getMethod().getDeclaringType().hasQualifiedName("javax.crypto", "Mac") and ( super.getMethod().hasStringSignature(["doFinal()", "doFinal(byte[])"]) and this = output @@ -1552,13 +1551,13 @@ module JCAModel { } override Crypto::AlgorithmValueConsumer getAnAlgorithmValueConsumer() { - exists(MacGetInstanceCall instantiation | + exists(MACGetInstanceCall instantiation | instantiation.getOperation() = this and result = instantiation.getAlgorithmArg() ) } override Crypto::ConsumerInputDataFlowNode getKeyConsumer() { - exists(MacGetInstanceCall instantiation, MacInitCall initCall | + exists(MACGetInstanceCall instantiation, MACInitCall initCall | instantiation.getOperation() = this and initCall.getOperation() = this and instantiation.getInitCall() = initCall and @@ -1600,18 +1599,15 @@ module JCAModel { override string getRawEllipticCurveName() { result = super.getValue() } - override Crypto::EllipticCurveFamilyType getEllipticCurveFamilyType() { - if - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), _, _) + override Crypto::TEllipticCurveType getEllipticCurveType() { + if Crypto::ellipticCurveNameToKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), _, _) then - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), _, - result) + Crypto::ellipticCurveNameToKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), _, result) else result = Crypto::OtherEllipticCurveType() } override int getKeySize() { - Crypto::ellipticCurveNameToKnownKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), - result, _) + Crypto::ellipticCurveNameToKeySizeAndFamilyMapping(this.getRawEllipticCurveName(), result, _) } EllipticCurveAlgorithmValueConsumer getConsumer() { result = consumer } diff --git a/java/ql/lib/experimental/quantum/Language.qll b/java/ql/lib/experimental/quantum/Language.qll index 975a8ad8e1fe..59164901c10c 100644 --- a/java/ql/lib/experimental/quantum/Language.qll +++ b/java/ql/lib/experimental/quantum/Language.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java as Language private import semmle.code.java.security.InsecureRandomnessQuery private import semmle.code.java.security.RandomQuery diff --git a/java/ql/lib/external/ExternalArtifact.qll b/java/ql/lib/external/ExternalArtifact.qll index cdba653062ad..2e782a6a4da1 100644 --- a/java/ql/lib/external/ExternalArtifact.qll +++ b/java/ql/lib/external/ExternalArtifact.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java class ExternalData extends @externalDataElement { diff --git a/java/ql/lib/java.qll b/java/ql/lib/java.qll index 9644343e93b6..ce0905184f40 100644 --- a/java/ql/lib/java.qll +++ b/java/ql/lib/java.qll @@ -1,6 +1,4 @@ /** Provides all default Java QL imports. */ -overlay[local?] -module; import Customizations import semmle.code.FileSystem diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index aec6dd194a4e..25c777b7cd00 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.3.3-dev +version: 7.3.2 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/FileSystem.qll b/java/ql/lib/semmle/code/FileSystem.qll index 92c888304ff6..a7c38b41ca54 100644 --- a/java/ql/lib/semmle/code/FileSystem.qll +++ b/java/ql/lib/semmle/code/FileSystem.qll @@ -1,6 +1,4 @@ /** Provides classes for working with files and folders. */ -overlay[local?] -module; import Location private import codeql.util.FileSystem diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 7265164e8e15..abc1d19d0f89 100644 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -3,12 +3,9 @@ * * Locations represent parts of files and are used to map elements to their source location. */ -overlay[local?] -module; import FileSystem import semmle.code.java.Element -private import semmle.code.java.Overlay private import semmle.code.SMAP /** Holds if element `e` has name `name`. */ @@ -222,16 +219,3 @@ private predicate fixedHasLocation(Top l, Location loc, File f) { not hasSourceLocation(l, _, _) and locations_default(loc, f, _, _, _, _) } - -overlay[local] -private predicate discardableLocation(string file, @location l) { - not isOverlay() and - file = getRawFileForLoc(l) and - not exists(@file f | hasLocation(f, l)) -} - -/** Discard base locations in files fully extracted in the overlay. */ -overlay[discard_entity] -private predicate discardLocation(@location l) { - exists(string file | discardableLocation(file, l) and extractedInOverlay(file)) -} diff --git a/java/ql/lib/semmle/code/SMAP.qll b/java/ql/lib/semmle/code/SMAP.qll index 96243a78d7b4..575d54f92de1 100644 --- a/java/ql/lib/semmle/code/SMAP.qll +++ b/java/ql/lib/semmle/code/SMAP.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with SMAP files (see JSR-045). */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/Unit.qll b/java/ql/lib/semmle/code/Unit.qll index e31457eae1aa..83a4a03321d9 100644 --- a/java/ql/lib/semmle/code/Unit.qll +++ b/java/ql/lib/semmle/code/Unit.qll @@ -1,5 +1,3 @@ /** Provides the `Unit` class. */ -overlay[local?] -module; import codeql.util.Unit diff --git a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll index 0c69f45c56fa..282f1c1228a3 100644 --- a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll +++ b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with configuration files, such * as Java `.properties` or `.ini` files. */ -overlay[local?] -module; import semmle.code.Location diff --git a/java/ql/lib/semmle/code/java/Annotation.qll b/java/ql/lib/semmle/code/java/Annotation.qll index ba5ce65daac8..f39b1f3420a5 100644 --- a/java/ql/lib/semmle/code/java/Annotation.qll +++ b/java/ql/lib/semmle/code/java/Annotation.qll @@ -8,8 +8,6 @@ * Each annotation type has zero or more annotation elements that contain a * name and possibly a value. */ -overlay[local?] -module; import Element import Expr diff --git a/java/ql/lib/semmle/code/java/Collections.qll b/java/ql/lib/semmle/code/java/Collections.qll index d121512c3196..9fd64dc60ee3 100644 --- a/java/ql/lib/semmle/code/java/Collections.qll +++ b/java/ql/lib/semmle/code/java/Collections.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for reasoning about instances of * `java.util.Collection` and their methods. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/Compilation.qll b/java/ql/lib/semmle/code/java/Compilation.qll index 835505390468..c52f308e8e33 100644 --- a/java/ql/lib/semmle/code/java/Compilation.qll +++ b/java/ql/lib/semmle/code/java/Compilation.qll @@ -1,8 +1,6 @@ /** * Provides a class representing individual compiler invocations that occurred during the build. */ -overlay[local?] -module; import semmle.code.FileSystem diff --git a/java/ql/lib/semmle/code/java/CompilationUnit.qll b/java/ql/lib/semmle/code/java/CompilationUnit.qll index 546c3d26ea39..9b4b58e9a9bd 100644 --- a/java/ql/lib/semmle/code/java/CompilationUnit.qll +++ b/java/ql/lib/semmle/code/java/CompilationUnit.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java compilation units. */ -overlay[local?] -module; import Element import Package diff --git a/java/ql/lib/semmle/code/java/Completion.qll b/java/ql/lib/semmle/code/java/Completion.qll index 35d3c83e2ee9..6ccdb16df725 100644 --- a/java/ql/lib/semmle/code/java/Completion.qll +++ b/java/ql/lib/semmle/code/java/Completion.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for representing completions. */ -overlay[local?] -module; /* * A completion represents how a statement or expression terminates. diff --git a/java/ql/lib/semmle/code/java/Concurrency.qll b/java/ql/lib/semmle/code/java/Concurrency.qll index 0e510db3443b..61e76525ec87 100644 --- a/java/ql/lib/semmle/code/java/Concurrency.qll +++ b/java/ql/lib/semmle/code/java/Concurrency.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/Constants.qll b/java/ql/lib/semmle/code/java/Constants.qll index 0cad92b7fc6d..9e35a925be33 100644 --- a/java/ql/lib/semmle/code/java/Constants.qll +++ b/java/ql/lib/semmle/code/java/Constants.qll @@ -1,8 +1,6 @@ /** * Provdides a module to calculate constant integer and boolean values. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 33b7a6c0a9fc..0d9d685cc716 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -7,8 +7,6 @@ * statement, an expression, or an exit node for a callable, indicating that * execution of the callable terminates. */ -overlay[local?] -module; /* * The implementation is centered around the concept of a _completion_, which @@ -102,8 +100,7 @@ module ControlFlow { private newtype TNode = TExprNode(Expr e) { hasControlFlow(e) } or TStmtNode(Stmt s) or - TExitNode(Callable c) { exists(c.getBody()) } or - TAssertThrowNode(AssertStmt s) + TExitNode(Callable c) { exists(c.getBody()) } /** A node in the expression-level control-flow graph. */ class Node extends TNode { @@ -207,25 +204,6 @@ module ControlFlow { /** Gets the source location for this element. */ override Location getLocation() { result = c.getLocation() } } - - /** A control flow node indicating a failing assertion. */ - class AssertThrowNode extends Node, TAssertThrowNode { - AssertStmt s; - - AssertThrowNode() { this = TAssertThrowNode(s) } - - override Stmt getEnclosingStmt() { result = s } - - override Callable getEnclosingCallable() { result = s.getEnclosingCallable() } - - override ExprParent getAstNode() { result = s } - - /** Gets a textual representation of this element. */ - override string toString() { result = "Assert Throw" } - - /** Gets the source location for this element. */ - override Location getLocation() { result = s.getLocation() } - } } class ControlFlowNode = ControlFlow::Node; @@ -349,17 +327,7 @@ private module ControlFlowGraphImpl { ) } - private ThrowableType actualAssertionError() { - result.hasQualifiedName("java.lang", "AssertionError") - } - - private ThrowableType assertionError() { - result = actualAssertionError() - or - // In case `AssertionError` is not extracted, we use `Error` as a fallback. - not exists(actualAssertionError()) and - result.hasQualifiedName("java.lang", "Error") - } + private ThrowableType assertionError() { result.hasQualifiedName("java.lang", "AssertionError") } /** * Gets an exception type that may be thrown during execution of the @@ -1155,7 +1123,12 @@ private module ControlFlowGraphImpl { or // `assert` statements may throw completion = ThrowCompletion(assertionError()) and - last.(AssertThrowNode).getAstNode() = assertstmt + ( + last(assertstmt.getMessage(), last, NormalCompletion()) + or + not exists(assertstmt.getMessage()) and + last(assertstmt.getExpr(), last, BooleanCompletion(false, _)) + ) ) or // `throw` statements or throwing calls give rise to `Throw` completion @@ -1574,15 +1547,7 @@ private module ControlFlowGraphImpl { or last(assertstmt.getExpr(), n, completion) and completion = BooleanCompletion(false, _) and - ( - result = first(assertstmt.getMessage()) - or - not exists(assertstmt.getMessage()) and - result.(AssertThrowNode).getAstNode() = assertstmt - ) - or - last(assertstmt.getMessage(), n, NormalCompletion()) and - result.(AssertThrowNode).getAstNode() = assertstmt + result = first(assertstmt.getMessage()) ) or // When expressions: diff --git a/java/ql/lib/semmle/code/java/Conversions.qll b/java/ql/lib/semmle/code/java/Conversions.qll index 76b74fd1eb7c..f3deb311a3df 100644 --- a/java/ql/lib/semmle/code/java/Conversions.qll +++ b/java/ql/lib/semmle/code/java/Conversions.qll @@ -4,8 +4,6 @@ * * See the Java Language Specification, Section 5, for details. */ -overlay[local?] -module; import java import semmle.code.java.arithmetic.Overflow diff --git a/java/ql/lib/semmle/code/java/Dependency.qll b/java/ql/lib/semmle/code/java/Dependency.qll index 138ab7523a4d..8514bcb466a1 100644 --- a/java/ql/lib/semmle/code/java/Dependency.qll +++ b/java/ql/lib/semmle/code/java/Dependency.qll @@ -1,8 +1,6 @@ /** * Provides utility predicates for representing dependencies between types. */ -overlay[local?] -module; import Type import Generics diff --git a/java/ql/lib/semmle/code/java/DependencyCounts.qll b/java/ql/lib/semmle/code/java/DependencyCounts.qll index 13709ebaf291..4cb958373a93 100644 --- a/java/ql/lib/semmle/code/java/DependencyCounts.qll +++ b/java/ql/lib/semmle/code/java/DependencyCounts.qll @@ -1,8 +1,6 @@ /** * This library provides utility predicates for representing the number of dependencies between types. */ -overlay[local?] -module; import Type import Generics diff --git a/java/ql/lib/semmle/code/java/Diagnostics.qll b/java/ql/lib/semmle/code/java/Diagnostics.qll index c93e6850b3de..0134b32c5c0e 100644 --- a/java/ql/lib/semmle/code/java/Diagnostics.qll +++ b/java/ql/lib/semmle/code/java/Diagnostics.qll @@ -1,8 +1,6 @@ /** * Provides classes representing warnings generated during compilation. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index dca3c8d91eb6..2032d72ee5f9 100644 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -1,8 +1,6 @@ /** * Provides a class that represents named elements in Java programs. */ -overlay[local?] -module; import CompilationUnit import semmle.code.Location diff --git a/java/ql/lib/semmle/code/java/Exception.qll b/java/ql/lib/semmle/code/java/Exception.qll index abd934994626..0b92975a580d 100644 --- a/java/ql/lib/semmle/code/java/Exception.qll +++ b/java/ql/lib/semmle/code/java/Exception.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java exceptions. */ -overlay[local?] -module; import Element import Type diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 282d90eaeee0..e7dd817cecd9 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1,13 +1,10 @@ /** * Provides classes for working with Java expressions. */ -overlay[local?] -module; import java private import semmle.code.java.frameworks.android.Compose private import semmle.code.java.Constants -private import semmle.code.java.Overlay /** A common super-class that represents all kinds of expressions. */ class Expr extends ExprParent, @expr { @@ -2702,6 +2699,3 @@ class RecordPatternExpr extends Expr, @recordpatternexpr { ) } } - -overlay[local] -private class DiscardableExpr extends DiscardableLocatable, @expr { } diff --git a/java/ql/lib/semmle/code/java/GeneratedFiles.qll b/java/ql/lib/semmle/code/java/GeneratedFiles.qll index 7c4a6d4cbb5a..31a229f507f2 100644 --- a/java/ql/lib/semmle/code/java/GeneratedFiles.qll +++ b/java/ql/lib/semmle/code/java/GeneratedFiles.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the most common types of generated files. */ -overlay[local?] -module; import Type private import semmle.code.java.frameworks.JavaxAnnotations diff --git a/java/ql/lib/semmle/code/java/Generics.qll b/java/ql/lib/semmle/code/java/Generics.qll index e0204b1beace..a50dcabe2245 100644 --- a/java/ql/lib/semmle/code/java/Generics.qll +++ b/java/ql/lib/semmle/code/java/Generics.qll @@ -30,8 +30,6 @@ * * The terminology for generic methods is analogous. */ -overlay[local?] -module; import Type diff --git a/java/ql/lib/semmle/code/java/Import.qll b/java/ql/lib/semmle/code/java/Import.qll index aed041155555..cef66c34ae15 100644 --- a/java/ql/lib/semmle/code/java/Import.qll +++ b/java/ql/lib/semmle/code/java/Import.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java imports. */ -overlay[local?] -module; import semmle.code.Location import CompilationUnit diff --git a/java/ql/lib/semmle/code/java/J2EE.qll b/java/ql/lib/semmle/code/java/J2EE.qll index 4412b3715e34..70c207a35794 100644 --- a/java/ql/lib/semmle/code/java/J2EE.qll +++ b/java/ql/lib/semmle/code/java/J2EE.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with J2EE bean types. */ -overlay[local?] -module; import Type diff --git a/java/ql/lib/semmle/code/java/JDK.qll b/java/ql/lib/semmle/code/java/JDK.qll index 897e857ba108..27a8b2a9ca73 100644 --- a/java/ql/lib/semmle/code/java/JDK.qll +++ b/java/ql/lib/semmle/code/java/JDK.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with standard classes and methods from the JDK. */ -overlay[local?] -module; import Member import semmle.code.java.security.ExternalProcess diff --git a/java/ql/lib/semmle/code/java/JDKAnnotations.qll b/java/ql/lib/semmle/code/java/JDKAnnotations.qll index aac7242ad4f1..5f3e70688558 100644 --- a/java/ql/lib/semmle/code/java/JDKAnnotations.qll +++ b/java/ql/lib/semmle/code/java/JDKAnnotations.qll @@ -1,8 +1,6 @@ /** * Provides classes that represent standard annotations from the JDK. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/JMX.qll b/java/ql/lib/semmle/code/java/JMX.qll index 3f18e0ecf3d3..11849be0beee 100644 --- a/java/ql/lib/semmle/code/java/JMX.qll +++ b/java/ql/lib/semmle/code/java/JMX.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with JMX bean types. */ -overlay[local?] -module; import Type diff --git a/java/ql/lib/semmle/code/java/Javadoc.qll b/java/ql/lib/semmle/code/java/Javadoc.qll index ac7a3c2cd6a5..f14d8776ddc4 100644 --- a/java/ql/lib/semmle/code/java/Javadoc.qll +++ b/java/ql/lib/semmle/code/java/Javadoc.qll @@ -1,11 +1,8 @@ /** * Provides classes and predicates for working with Javadoc documentation. */ -overlay[local?] -module; import semmle.code.Location -private import semmle.code.java.Overlay /** A Javadoc parent is an element whose child can be some Javadoc documentation. */ class JavadocParent extends @javadocParent, Top { @@ -197,6 +194,3 @@ class KtCommentSection extends @ktcommentsection { /** Gets the string representation of this section. */ string toString() { result = this.getContent() } } - -overlay[local] -private class DiscardableJavadoc extends DiscardableLocatable, @javadoc { } diff --git a/java/ql/lib/semmle/code/java/KotlinType.qll b/java/ql/lib/semmle/code/java/KotlinType.qll index 9d29f3b441ef..3e5597c5579d 100644 --- a/java/ql/lib/semmle/code/java/KotlinType.qll +++ b/java/ql/lib/semmle/code/java/KotlinType.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Kotlin types. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/Maps.qll b/java/ql/lib/semmle/code/java/Maps.qll index 25c8659f2c9e..1089e8924156 100644 --- a/java/ql/lib/semmle/code/java/Maps.qll +++ b/java/ql/lib/semmle/code/java/Maps.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for reasoning about instances of * `java.util.Map` and their methods. */ -overlay[local?] -module; import java import Collections diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 1e814117e9ee..f6f4ca56f92d 100644 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with members of Java classes and interfaces, * that is, methods, constructors, fields and nested types. */ -overlay[local?] -module; import Element import Type @@ -11,7 +9,6 @@ import Annotation import Exception import metrics.MetricField private import dispatch.VirtualDispatch -private import semmle.code.java.Overlay /** * A common abstraction for type member declarations, @@ -624,13 +621,7 @@ class SrcMethod extends Method { then implementsInterfaceMethod(result, this) else result.getASourceOverriddenMethod*() = this ) and - ( - // We allow empty method bodies for the local overlay variant to allow - // calls to methods only fully extracted in base. - isOverlay() or - exists(result.getBody()) or - result.hasModifier("native") - ) + (exists(result.getBody()) or result.hasModifier("native")) } } @@ -904,13 +895,3 @@ class ExtensionMethod extends Method { else result = 0 } } - -overlay[local] -private class DiscardableAnonymousMethod extends DiscardableLocatable, @method { - DiscardableAnonymousMethod() { - exists(@classorinterface c | methods(this, _, _, _, c, _) and isAnonymClass(c, _)) - } -} - -overlay[local] -private class DiscardableMethod extends DiscardableReferableLocatable, @method { } diff --git a/java/ql/lib/semmle/code/java/Modifier.qll b/java/ql/lib/semmle/code/java/Modifier.qll index 864691bf835b..150b65be6716 100644 --- a/java/ql/lib/semmle/code/java/Modifier.qll +++ b/java/ql/lib/semmle/code/java/Modifier.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java modifiers. */ -overlay[local?] -module; import Element diff --git a/java/ql/lib/semmle/code/java/Modules.qll b/java/ql/lib/semmle/code/java/Modules.qll index a1bceb72e0bb..c8aed33a0fc3 100644 --- a/java/ql/lib/semmle/code/java/Modules.qll +++ b/java/ql/lib/semmle/code/java/Modules.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with Java modules. */ -overlay[local?] -module; import CompilationUnit diff --git a/java/ql/lib/semmle/code/java/NumberFormatException.qll b/java/ql/lib/semmle/code/java/NumberFormatException.qll index 83f66d1a709d..841d64b0098d 100644 --- a/java/ql/lib/semmle/code/java/NumberFormatException.qll +++ b/java/ql/lib/semmle/code/java/NumberFormatException.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for reasoning about `java.lang.NumberFormatException`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll deleted file mode 100644 index f1cfc5c434f2..000000000000 --- a/java/ql/lib/semmle/code/java/Overlay.qll +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Defines entity discard predicates for Java overlay analysis. - */ -overlay[local?] -module; - -import java - -/** - * A local predicate that always holds for the overlay variant and - * never holds for the base variant. This is used to define local - * predicates that behave differently for the base and overlay variant. - */ -overlay[local] -predicate isOverlay() { databaseMetadata("isOverlay", "true") } - -/** Gets the raw file for a locatable. */ -overlay[local] -string getRawFile(@locatable el) { - exists(@location loc, @file file | - hasLocation(el, loc) and - locations_default(loc, file, _, _, _, _) and - files(file, result) - ) -} - -/** Gets the raw file for a location. */ -overlay[local] -string getRawFileForLoc(@location l) { - exists(@file f | locations_default(l, f, _, _, _, _) and files(f, result)) -} - -/** Holds for files fully extracted in the overlay. */ -overlay[local] -predicate extractedInOverlay(string file) { - isOverlay() and - // numlines is used to restrict attention to fully extracted files and - // ignore skeleton extracted files in the overlay - exists(@locatable l | numlines(l, _, _, _) and file = getRawFile(l)) -} - -/** - * A `@locatable` that should be discarded in the base variant if its file is - * extracted in the overlay variant. - */ -overlay[local] -abstract class DiscardableLocatable extends @locatable { - /** Gets the raw file for a locatable in base. */ - string getRawFileInBase() { not isOverlay() and result = getRawFile(this) } - - /** Gets a textual representation of this discardable locatable. */ - string toString() { none() } -} - -overlay[discard_entity] -private predicate discardLocatable(@locatable el) { - extractedInOverlay(el.(DiscardableLocatable).getRawFileInBase()) -} - -/** - * A `@locatable` that should be discarded in the base variant if its file is - * extracted in the overlay variant and it is itself not extracted in the - * overlay, that is, it is deleted in the overlay. - */ -overlay[local] -abstract class DiscardableReferableLocatable extends @locatable { - /** Gets the raw file for a locatable in base. */ - string getRawFileInBase() { not isOverlay() and result = getRawFile(this) } - - /** Holds if the locatable exists in the overlay. */ - predicate existsInOverlay() { isOverlay() and exists(this) } - - /** Gets a textual representation of this discardable locatable. */ - string toString() { none() } -} - -overlay[discard_entity] -private predicate discardReferableLocatable(@locatable el) { - exists(DiscardableReferableLocatable drl | drl = el | - extractedInOverlay(drl.getRawFileInBase()) and - not drl.existsInOverlay() - ) -} diff --git a/java/ql/lib/semmle/code/java/Package.qll b/java/ql/lib/semmle/code/java/Package.qll index e0621f4de541..466c97e561d6 100644 --- a/java/ql/lib/semmle/code/java/Package.qll +++ b/java/ql/lib/semmle/code/java/Package.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java packages. */ -overlay[local?] -module; import Element import Type diff --git a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll index 3d907a5a0991..de1bf3100a37 100644 --- a/java/ql/lib/semmle/code/java/PrettyPrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrettyPrintAst.qll @@ -2,8 +2,6 @@ * Provides pretty-printed representations of the AST, in particular top-level * classes and interfaces. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 52d344401d70..0af012234bb2 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -5,8 +5,6 @@ * extend `PrintAstConfiguration` and override `shouldPrint` to hold for only the elements * you wish to view the AST for. */ -overlay[local?] -module; import java import semmle.code.java.regex.RegexTreeView as RegexTreeView diff --git a/java/ql/lib/semmle/code/java/Reflection.qll b/java/ql/lib/semmle/code/java/Reflection.qll index e37187231b93..da287387e173 100644 --- a/java/ql/lib/semmle/code/java/Reflection.qll +++ b/java/ql/lib/semmle/code/java/Reflection.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java Reflection. */ -overlay[local?] -module; import java import JDKAnnotations diff --git a/java/ql/lib/semmle/code/java/Serializability.qll b/java/ql/lib/semmle/code/java/Serializability.qll index 639cc0c18eba..479d1d8cdb01 100644 --- a/java/ql/lib/semmle/code/java/Serializability.qll +++ b/java/ql/lib/semmle/code/java/Serializability.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Java Serialization. */ -overlay[local?] -module; import java private import frameworks.jackson.JacksonSerializability diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index a4872a32c914..da9621f9ce3a 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -1,12 +1,9 @@ /** * Provides classes and predicates for working with Java statements. */ -overlay[local?] -module; import Expr import metrics.MetricStmt -private import semmle.code.java.Overlay /** A common super-class of all statements. */ class Stmt extends StmtParent, ExprParent, @stmt { @@ -988,6 +985,3 @@ class SuperConstructorInvocationStmt extends Stmt, ConstructorCall, @superconstr override string getAPrimaryQlClass() { result = "SuperConstructorInvocationStmt" } } - -overlay[local] -private class DiscardableStmt extends DiscardableLocatable, @stmt { } diff --git a/java/ql/lib/semmle/code/java/StringFormat.qll b/java/ql/lib/semmle/code/java/StringFormat.qll index da69a5b9b8ff..4ed39c02a841 100644 --- a/java/ql/lib/semmle/code/java/StringFormat.qll +++ b/java/ql/lib/semmle/code/java/StringFormat.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for reasoning about string formatting. */ -overlay[local?] -module; import java import dataflow.DefUse diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index c30dd7012bfb..5036bbea6224 100644 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -9,8 +9,6 @@ * Classes and interfaces can also be local (`LocalClassOrInterface`, `LocalClass`) or anonymous (`AnonymousClass`). * Enumerated types (`EnumType`) and records (`Record`) are special kinds of classes. */ -overlay[local?] -module; import Member import Modifier @@ -670,7 +668,6 @@ class RefType extends Type, Annotatable, Modifiable, @reftype { * * For the definition of the notion of *erasure* see JLS v8, section 4.6 (Type Erasure). */ - overlay[caller?] pragma[inline] RefType commonSubtype(RefType other) { result.getASourceSupertype*() = erase(this) and @@ -1260,7 +1257,6 @@ private Type erase(Type t) { * * For the definition of the notion of *erasure* see JLS v8, section 4.6 (Type Erasure). */ -overlay[caller?] pragma[inline] predicate haveIntersection(RefType t1, RefType t2) { exists(RefType e1, RefType e2 | e1 = erase(t1) and e2 = erase(t2) | diff --git a/java/ql/lib/semmle/code/java/UnitTests.qll b/java/ql/lib/semmle/code/java/UnitTests.qll index 6c05fecab01c..f229440e4eed 100644 --- a/java/ql/lib/semmle/code/java/UnitTests.qll +++ b/java/ql/lib/semmle/code/java/UnitTests.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with test classes and methods. */ -overlay[local?] -module; import Type import Member diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index cb76fe3a9c9a..a4cf09df055d 100644 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -1,11 +1,8 @@ /** * Provides classes and predicates for working with Java variables and their declarations. */ -overlay[local?] -module; import Element -private import semmle.code.java.Overlay /** A variable is a field, a local variable or a parameter. */ class Variable extends @variable, Annotatable, Element, Modifiable { @@ -134,6 +131,3 @@ class Parameter extends Element, @param, LocalScopeVariable { /** Holds if this is an anonymous parameter, `_` */ predicate isAnonymous() { this.getName() = "" } } - -overlay[local] -private class DiscardableLocalScopeVariable extends DiscardableLocatable, @localscopevariable { } diff --git a/java/ql/lib/semmle/code/java/arithmetic/Overflow.qll b/java/ql/lib/semmle/code/java/arithmetic/Overflow.qll index 471f271eb866..e92d8352fe9b 100644 --- a/java/ql/lib/semmle/code/java/arithmetic/Overflow.qll +++ b/java/ql/lib/semmle/code/java/arithmetic/Overflow.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** A subclass of `PrimitiveType` with width-based ordering methods. */ diff --git a/java/ql/lib/semmle/code/java/comparison/Comparison.qll b/java/ql/lib/semmle/code/java/comparison/Comparison.qll index 7aea0f6fb258..27ed9271e999 100644 --- a/java/ql/lib/semmle/code/java/comparison/Comparison.qll +++ b/java/ql/lib/semmle/code/java/comparison/Comparison.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index 844371da36b8..284ee1dad0ce 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with basic blocks in Java. */ -overlay[local?] -module; import java import Dominance @@ -87,17 +85,6 @@ class BasicBlock extends BbImpl::BasicBlock { */ predicate dominates(BasicBlock bb) { super.dominates(bb) } - /** - * Holds if this basic block strictly dominates basic block `bb`. - * - * That is, all paths reaching `bb` from the entry point basic block must - * go through this basic block and this basic block is different from `bb`. - */ - predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } - - /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(Input::SuccessorType t) { result = super.getASuccessor(t) } - /** * DEPRECATED: Use `getASuccessor` instead. * diff --git a/java/ql/lib/semmle/code/java/controlflow/Dominance.qll b/java/ql/lib/semmle/code/java/controlflow/Dominance.qll index e2a50ba06df6..6f0cb3d255c5 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Dominance.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Dominance.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for control-flow graph dominance. */ -overlay[local?] -module; import java @@ -95,7 +93,6 @@ predicate iDominates(ControlFlowNode dominator, ControlFlowNode node) { } /** Holds if `dom` strictly dominates `node`. */ -overlay[caller?] pragma[inline] predicate strictlyDominates(ControlFlowNode dom, ControlFlowNode node) { // This predicate is gigantic, so it must be inlined. @@ -105,7 +102,6 @@ predicate strictlyDominates(ControlFlowNode dom, ControlFlowNode node) { } /** Holds if `dom` dominates `node`. (This is reflexive.) */ -overlay[caller?] pragma[inline] predicate dominates(ControlFlowNode dom, ControlFlowNode node) { // This predicate is gigantic, so it must be inlined. @@ -115,7 +111,6 @@ predicate dominates(ControlFlowNode dom, ControlFlowNode node) { } /** Holds if `dom` strictly post-dominates `node`. */ -overlay[caller?] pragma[inline] predicate strictlyPostDominates(ControlFlowNode dom, ControlFlowNode node) { // This predicate is gigantic, so it must be inlined. @@ -125,7 +120,6 @@ predicate strictlyPostDominates(ControlFlowNode dom, ControlFlowNode node) { } /** Holds if `dom` post-dominates `node`. (This is reflexive.) */ -overlay[caller?] pragma[inline] predicate postDominates(ControlFlowNode dom, ControlFlowNode node) { // This predicate is gigantic, so it must be inlined. diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 8cead5b666bb..4042e7b29624 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -2,14 +2,12 @@ * Provides classes and predicates for reasoning about guards and the control * flow elements controlled by those guards. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Dominance +private import semmle.code.java.controlflow.internal.GuardsLogic private import semmle.code.java.controlflow.internal.Preconditions private import semmle.code.java.controlflow.internal.SwitchCases -private import codeql.controlflow.Guards as SharedGuards /** * A basic block that terminates in a condition, splitting the subsequent control flow. @@ -139,377 +137,66 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre ) } -private module GuardsInput implements SharedGuards::InputSig { - private import java as J - private import semmle.code.java.dataflow.NullGuards as NullGuards - import SuccessorType - - class ControlFlowNode = J::ControlFlowNode; - - class BasicBlock = J::BasicBlock; - - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { J::dominatingEdge(bb1, bb2) } - - class AstNode = ExprParent; - - class Expr = J::Expr; - - private newtype TConstantValue = - TCharValue(string c) { any(CharacterLiteral lit).getValue() = c } or - TStringValue(string value) { any(CompileTimeConstantExpr c).getStringValue() = value } or - TEnumValue(EnumConstant c) - - class ConstantValue extends TConstantValue { - string toString() { - this = TCharValue(result) - or - this = TStringValue(result) - or - exists(EnumConstant c | this = TEnumValue(c) and result = c.toString()) - } - } - - abstract class ConstantExpr extends Expr { - predicate isNull() { none() } - - boolean asBooleanValue() { none() } - - int asIntegerValue() { none() } - - ConstantValue asConstantValue() { none() } - } - - private class NullConstant extends ConstantExpr instanceof J::NullLiteral { - override predicate isNull() { any() } - } - - private class BooleanConstant extends ConstantExpr instanceof J::BooleanLiteral { - override boolean asBooleanValue() { result = super.getBooleanValue() } - } - - private class IntegerConstant extends ConstantExpr instanceof J::CompileTimeConstantExpr { - override int asIntegerValue() { result = super.getIntValue() } - } - - private class CharConstant extends ConstantExpr instanceof J::CharacterLiteral { - override ConstantValue asConstantValue() { result = TCharValue(super.getValue()) } - } - - private class StringConstant extends ConstantExpr instanceof J::CompileTimeConstantExpr { - override ConstantValue asConstantValue() { result = TStringValue(super.getStringValue()) } - } - - private class EnumConstantExpr extends ConstantExpr instanceof J::VarAccess { - override ConstantValue asConstantValue() { - exists(EnumConstant c | this = c.getAnAccess() and result = TEnumValue(c)) - } - } - - class NonNullExpr extends Expr { - NonNullExpr() { - this = NullGuards::baseNotNullExpr() - or - exists(Field f | - this = f.getAnAccess() and - f.isFinal() and - f.getInitializer() = NullGuards::baseNotNullExpr() - ) - } - } - - class Case extends ExprParent instanceof J::SwitchCase { - Expr getSwitchExpr() { result = super.getSelectorExpr() } - - predicate isDefaultCase() { this instanceof DefaultCase } - - ConstantExpr asConstantCase() { - exists(ConstCase cc | this = cc | - cc.getValue() = result and - strictcount(cc.getValue(_)) = 1 - ) - } - - private predicate hasPatternCaseMatchEdge(BasicBlock bb1, BasicBlock bb2, boolean isMatch) { - exists(ConditionNode patterncase | - this instanceof PatternCase and - patterncase = super.getControlFlowNode() and - bb1.getLastNode() = patterncase and - bb2.getFirstNode() = patterncase.getABranchSuccessor(isMatch) - ) - } - - predicate matchEdge(BasicBlock bb1, BasicBlock bb2) { - exists(ControlFlowNode pred | - // Pattern cases are handled as ConditionBlocks. - not this instanceof PatternCase and - bb2.getFirstNode() = super.getControlFlowNode() and - isNonFallThroughPredecessor(this, pred) and - bb1 = pred.getBasicBlock() - ) - or - this.hasPatternCaseMatchEdge(bb1, bb2, true) - } - - predicate nonMatchEdge(BasicBlock bb1, BasicBlock bb2) { - this.hasPatternCaseMatchEdge(bb1, bb2, false) - } - } - - abstract private class BinExpr extends Expr { - Expr getAnOperand() { - result = this.(BinaryExpr).getAnOperand() or result = this.(AssignOp).getSource() - } - } - - class AndExpr extends BinExpr { - AndExpr() { - this instanceof AndBitwiseExpr or - this instanceof AndLogicalExpr or - this instanceof AssignAndExpr - } - } - - class OrExpr extends BinExpr { - OrExpr() { - this instanceof OrBitwiseExpr or - this instanceof OrLogicalExpr or - this instanceof AssignOrExpr - } - } - - class NotExpr extends Expr instanceof J::LogNotExpr { - Expr getOperand() { result = this.(J::LogNotExpr).getExpr() } - } - - class IdExpr extends Expr { - IdExpr() { this instanceof AssignExpr or this instanceof CastExpr } - - Expr getEqualChildExpr() { - result = this.(AssignExpr).getSource() - or - result = this.(CastExpr).getExpr() - } - } - - private predicate objectsEquals(Method equals) { - equals.hasQualifiedName("java.util", "Objects", "equals") and - equals.getNumberOfParameters() = 2 - } - - pragma[nomagic] - predicate equalityTest(Expr eqtest, Expr left, Expr right, boolean polarity) { - exists(EqualityTest eq | eq = eqtest | - eq.getLeftOperand() = left and - eq.getRightOperand() = right and - eq.polarity() = polarity - ) +/** + * A condition that can be evaluated to either true or false. This can either + * be an `Expr` of boolean type that isn't a boolean literal, or a case of a + * switch statement, or a method access that acts as a precondition check. + * + * Evaluating a switch case to true corresponds to taking that switch case, and + * evaluating it to false corresponds to taking some other branch. + */ +final class Guard extends ExprParent { + Guard() { + this.(Expr).getType() instanceof BooleanType and not this instanceof BooleanLiteral or - exists(MethodCall call | call = eqtest and polarity = true | - call.getMethod() instanceof EqualsMethod and - call.getQualifier() = left and - call.getAnArgument() = right - or - objectsEquals(call.getMethod()) and - call.getArgument(0) = left and - call.getArgument(1) = right - ) - } - - class ConditionalExpr extends Expr instanceof J::ConditionalExpr { - Expr getCondition() { result = super.getCondition() } - - Expr getThen() { result = super.getTrueExpr() } - - Expr getElse() { result = super.getFalseExpr() } - } -} - -private module GuardsImpl = SharedGuards::Make; - -private module LogicInputCommon { - private import semmle.code.java.dataflow.NullGuards as NullGuards - - predicate additionalNullCheck( - GuardsImpl::PreGuard guard, GuardValue val, GuardsInput::Expr e, boolean isNull - ) { - guard.(InstanceOfExpr).getExpr() = e and val.asBooleanValue() = true and isNull = false + this instanceof SwitchCase or - exists(MethodCall call | - call = guard and - call.getAnArgument() = e and - NullGuards::nullCheckMethod(call.getMethod(), val.asBooleanValue(), isNull) - ) - } -} - -private module LogicInput_v1 implements GuardsImpl::LogicInputSig { - private import semmle.code.java.dataflow.internal.BaseSSA - - final private class FinalBaseSsaVariable = BaseSsaVariable; - - class SsaDefinition extends FinalBaseSsaVariable { - GuardsInput::Expr getARead() { result = this.getAUse() } - } - - class SsaWriteDefinition extends SsaDefinition instanceof BaseSsaUpdate { - GuardsInput::Expr getDefinition() { - super.getDefiningExpr().(VariableAssign).getSource() = result or - super.getDefiningExpr().(AssignOp) = result - } + conditionCheckArgument(this, _, _) } - class SsaPhiNode extends SsaDefinition instanceof BaseSsaPhiNode { - predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { - super.hasInputFromBlock(inp, bb) - } - } - - predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - - predicate additionalImpliesStep( - GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 - ) { - exists(MethodCall check, int argIndex | - g1 = check and - v1.getDualValue().isThrowsException() and - conditionCheckArgument(check, argIndex, v2.asBooleanValue()) and - g2 = check.getArgument(argIndex) - ) - } -} - -private module LogicInput_v2 implements GuardsImpl::LogicInputSig { - private import semmle.code.java.dataflow.SSA as SSA - - final private class FinalSsaVariable = SSA::SsaVariable; - - class SsaDefinition extends FinalSsaVariable { - GuardsInput::Expr getARead() { result = this.getAUse() } - } - - class SsaWriteDefinition extends SsaDefinition instanceof SSA::SsaExplicitUpdate { - GuardsInput::Expr getDefinition() { - super.getDefiningExpr().(VariableAssign).getSource() = result or - super.getDefiningExpr().(AssignOp) = result - } + /** Gets the immediately enclosing callable whose body contains this guard. */ + Callable getEnclosingCallable() { + result = this.(Expr).getEnclosingCallable() or + result = this.(SwitchCase).getEnclosingCallable() } - class SsaPhiNode extends SsaDefinition instanceof SSA::SsaPhiNode { - predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb) { - super.hasInputFromBlock(inp, bb) - } + /** Gets the statement containing this guard. */ + Stmt getEnclosingStmt() { + result = this.(Expr).getEnclosingStmt() or + result = this.(SwitchCase).getSwitch() or + result = this.(SwitchCase).getSwitchExpr().getEnclosingStmt() } - predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - - predicate additionalImpliesStep( - GuardsImpl::PreGuard g1, GuardValue v1, GuardsImpl::PreGuard g2, GuardValue v2 - ) { - LogicInput_v1::additionalImpliesStep(g1, v1, g2, v2) + /** + * Gets the basic block containing this guard or the basic block that tests the + * applicability of this switch case -- for a pattern case this is the case statement + * itself; for a non-pattern case this is the most recent pattern case or the top of + * the switch block if there is none. + */ + BasicBlock getBasicBlock() { + // Not a switch case + result = this.(Expr).getBasicBlock() or - CustomGuard::additionalImpliesStep(g1, v1, g2, v2) - } -} - -private module LogicInput_v3 implements GuardsImpl::LogicInputSig { - private import semmle.code.java.dataflow.IntegerGuards as IntegerGuards - import LogicInput_v2 - - predicate rangeGuard(GuardsImpl::PreGuard guard, GuardValue val, Expr e, int k, boolean upper) { - IntegerGuards::rangeGuard(guard, val.asBooleanValue(), e, k, upper) - } - - predicate additionalNullCheck = LogicInputCommon::additionalNullCheck/4; - - predicate additionalImpliesStep = LogicInput_v2::additionalImpliesStep/4; -} - -private module CustomGuardInput implements Guards_v2::CustomGuardInputSig { - private import semmle.code.java.dataflow.SSA - - private int parameterPosition() { result in [-1, any(Parameter p).getPosition()] } - - /** A parameter position represented by an integer. */ - class ParameterPosition extends int { - ParameterPosition() { this = parameterPosition() } - } - - /** An argument position represented by an integer. */ - class ArgumentPosition extends int { - ArgumentPosition() { this = parameterPosition() } - } - - /** Holds if arguments at position `apos` match parameters at position `ppos`. */ - overlay[caller?] - pragma[inline] - predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } - - final private class FinalMethod = Method; - - class BooleanMethod extends FinalMethod { - BooleanMethod() { - super.getReturnType().(PrimitiveType).hasName("boolean") and - not super.isOverridable() - } - - LogicInput_v2::SsaDefinition getParameter(ParameterPosition ppos) { - exists(Parameter p | - super.getParameter(ppos) = p and - not p.isVarargs() and - result.(SsaImplicitInit).isParameterDefinition(p) - ) - } - - GuardsInput::Expr getAReturnExpr() { - exists(ReturnStmt ret | - this = ret.getEnclosingCallable() and - ret.getResult() = result - ) - } - } - - private predicate booleanMethodCall(MethodCall call, BooleanMethod m) { - call.getMethod().getSourceDeclaration() = m - } - - class BooleanMethodCall extends GuardsInput::Expr instanceof MethodCall { - BooleanMethodCall() { booleanMethodCall(this, _) } - - BooleanMethod getMethod() { booleanMethodCall(this, result) } - - GuardsInput::Expr getArgument(ArgumentPosition apos) { result = super.getArgument(apos) } + // Return the closest pattern case statement before this one, including this one. + result = getClosestPrecedingPatternCase(this).getBasicBlock() + or + // Not a pattern case and no preceding pattern case -- return the top of the switch block. + not exists(getClosestPrecedingPatternCase(this)) and + result = this.(SwitchCase).getSelectorExpr().getBasicBlock() } -} - -class GuardValue = GuardsImpl::GuardValue; - -private module CustomGuard = Guards_v2::CustomGuard; - -/** INTERNAL: Don't use. */ -module Guards_v1 = GuardsImpl::Logic; - -/** INTERNAL: Don't use. */ -module Guards_v2 = GuardsImpl::Logic; -/** INTERNAL: Don't use. */ -module Guards_v3 = GuardsImpl::Logic; - -/** INTERNAL: Don't use. */ -predicate implies_v3(Guard g1, boolean b1, Guard g2, boolean b2) { - Guards_v3::boolImplies(g1, any(GuardValue v | v.asBooleanValue() = b1), g2, - any(GuardValue v | v.asBooleanValue() = b2)) -} - -/** - * A guard. This may be any expression whose value determines subsequent - * control flow. It may also be a switch case, which as a guard is considered - * to evaluate to either true or false depending on whether the case matches. - */ -final class Guard extends Guards_v3::Guard { - /** Gets the immediately enclosing callable whose body contains this guard. */ - Callable getEnclosingCallable() { - result = this.(Expr).getEnclosingCallable() or - result = this.(SwitchCase).getEnclosingCallable() + /** + * Holds if this guard is an equality test between `e1` and `e2`. The test + * can be either `==`, `!=`, `.equals`, or a switch case. If the test is + * negated, that is `!=`, then `polarity` is false, otherwise `polarity` is + * true. + */ + predicate isEquality(Expr e1, Expr e2, boolean polarity) { + exists(Expr exp1, Expr exp2 | equalityGuard(this, exp1, exp2, polarity) | + e1 = exp1 and e2 = exp2 + or + e2 = exp1 and e1 = exp2 + ) } /** @@ -544,14 +231,211 @@ final class Guard extends Guards_v3::Guard { else restricted = false ) } + + /** + * Holds if the evaluation of this guard to `branch` corresponds to the edge + * from `bb1` to `bb2`. + */ + predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { + exists(ConditionBlock cb | + cb = bb1 and + cb.getCondition() = this and + bb2 = cb.getTestSuccessor(branch) + ) + or + exists(SwitchCase sc, ControlFlowNode pred | + sc = this and + // Pattern cases are handled as ConditionBlocks above. + not sc instanceof PatternCase and + branch = true and + bb2.getFirstNode() = sc.getControlFlowNode() and + isNonFallThroughPredecessor(sc, pred) and + bb1 = pred.getBasicBlock() + ) + or + preconditionBranchEdge(this, bb1, bb2, branch) + } + + /** + * Holds if this guard evaluating to `branch` directly controls the block + * `controlled`. That is, the `true`- or `false`-successor of this guard (as + * given by `branch`) dominates `controlled`. + */ + predicate directlyControls(BasicBlock controlled, boolean branch) { + exists(ConditionBlock cb | + cb.getCondition() = this and + cb.controls(controlled, branch) + ) + or + switchCaseControls(this, controlled) and branch = true + or + preconditionControls(this, controlled, branch) + } + + /** + * Holds if this guard evaluating to `branch` controls the control-flow + * branch edge from `bb1` to `bb2`. That is, following the edge from + * `bb1` to `bb2` implies that this guard evaluated to `branch`. + */ + predicate controlsBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { + guardControlsBranchEdge_v3(this, bb1, bb2, branch) + } + + /** + * Holds if this guard evaluating to `branch` directly or indirectly controls + * the block `controlled`. That is, the evaluation of `controlled` is + * dominated by this guard evaluating to `branch`. + */ + predicate controls(BasicBlock controlled, boolean branch) { + guardControls_v3(this, controlled, branch) + } +} + +private predicate switchCaseControls(SwitchCase sc, BasicBlock bb) { + exists(BasicBlock caseblock | + // Pattern cases are handled as condition blocks + not sc instanceof PatternCase and + caseblock.getFirstNode() = sc.getControlFlowNode() and + caseblock.dominates(bb) and + // Check we can't fall through from a previous block: + forall(ControlFlowNode pred | pred = sc.getControlFlowNode().getAPredecessor() | + isNonFallThroughPredecessor(sc, pred) + ) + ) +} + +private predicate preconditionBranchEdge( + MethodCall ma, BasicBlock bb1, BasicBlock bb2, boolean branch +) { + conditionCheckArgument(ma, _, branch) and + bb1.getLastNode() = ma.getControlFlowNode() and + bb2.getFirstNode() = bb1.getLastNode().getANormalSuccessor() +} + +private predicate preconditionControls(MethodCall ma, BasicBlock controlled, boolean branch) { + exists(BasicBlock check, BasicBlock succ | + preconditionBranchEdge(ma, check, succ, branch) and + dominatingEdge(check, succ) and + succ.dominates(controlled) + ) } /** - * INTERNAL: Use `Guard.controls` instead. + * INTERNAL: Use `Guards.controls` instead. * * Holds if `guard.controls(controlled, branch)`, except this only relies on * BaseSSA-based reasoning. */ -predicate guardControls_v1(Guards_v1::Guard guard, BasicBlock controlled, boolean branch) { - guard.controls(controlled, branch) +predicate guardControls_v1(Guard guard, BasicBlock controlled, boolean branch) { + guard.directlyControls(controlled, branch) + or + exists(Guard g, boolean b | + guardControls_v1(g, controlled, b) and + implies_v1(g, b, guard, branch) + ) +} + +/** + * INTERNAL: Use `Guards.controls` instead. + * + * Holds if `guard.controls(controlled, branch)`, except this doesn't rely on + * RangeAnalysis. + */ +predicate guardControls_v2(Guard guard, BasicBlock controlled, boolean branch) { + guard.directlyControls(controlled, branch) + or + exists(Guard g, boolean b | + guardControls_v2(g, controlled, b) and + implies_v2(g, b, guard, branch) + ) +} + +pragma[nomagic] +private predicate guardControls_v3(Guard guard, BasicBlock controlled, boolean branch) { + guard.directlyControls(controlled, branch) + or + exists(Guard g, boolean b | + guardControls_v3(g, controlled, b) and + implies_v3(g, b, guard, branch) + ) +} + +pragma[nomagic] +private predicate guardControlsBranchEdge_v2( + Guard guard, BasicBlock bb1, BasicBlock bb2, boolean branch +) { + guard.hasBranchEdge(bb1, bb2, branch) + or + exists(Guard g, boolean b | + guardControlsBranchEdge_v2(g, bb1, bb2, b) and + implies_v2(g, b, guard, branch) + ) +} + +pragma[nomagic] +private predicate guardControlsBranchEdge_v3( + Guard guard, BasicBlock bb1, BasicBlock bb2, boolean branch +) { + guard.hasBranchEdge(bb1, bb2, branch) + or + exists(Guard g, boolean b | + guardControlsBranchEdge_v3(g, bb1, bb2, b) and + implies_v3(g, b, guard, branch) + ) +} + +/** INTERNAL: Use `Guard` instead. */ +final class Guard_v2 extends Guard { + /** + * Holds if this guard evaluating to `branch` controls the control-flow + * branch edge from `bb1` to `bb2`. That is, following the edge from + * `bb1` to `bb2` implies that this guard evaluated to `branch`. + */ + predicate controlsBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { + guardControlsBranchEdge_v2(this, bb1, bb2, branch) + } + + /** + * Holds if this guard evaluating to `branch` directly or indirectly controls + * the block `controlled`. That is, the evaluation of `controlled` is + * dominated by this guard evaluating to `branch`. + */ + predicate controls(BasicBlock controlled, boolean branch) { + guardControls_v2(this, controlled, branch) + } +} + +private predicate equalityGuard(Guard g, Expr e1, Expr e2, boolean polarity) { + exists(EqualityTest eqtest | + eqtest = g and + polarity = eqtest.polarity() and + eqtest.hasOperands(e1, e2) + ) + or + exists(MethodCall ma | + ma = g and + ma.getMethod() instanceof EqualsMethod and + polarity = true and + ma.getAnArgument() = e1 and + ma.getQualifier() = e2 + ) + or + exists(MethodCall ma, Method equals | + ma = g and + ma.getMethod() = equals and + polarity = true and + equals.hasName("equals") and + equals.getNumberOfParameters() = 2 and + equals.getDeclaringType().hasQualifiedName("java.util", "Objects") and + ma.getArgument(0) = e1 and + ma.getArgument(1) = e2 + ) + or + exists(ConstCase cc | + cc = g and + polarity = true and + cc.getSelectorExpr() = e1 and + cc.getValue() = e2 and + strictcount(cc.getValue(_)) = 1 + ) } diff --git a/java/ql/lib/semmle/code/java/controlflow/Paths.qll b/java/ql/lib/semmle/code/java/controlflow/Paths.qll index fb14c226484d..8f87e19404a6 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Paths.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Paths.qll @@ -2,8 +2,6 @@ * This library provides predicates for reasoning about the set of all paths * through a callable. */ -overlay[local?] -module; import java import semmle.code.java.dispatch.VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll b/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll index feabc47552f3..f03e4690a95a 100644 --- a/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll +++ b/java/ql/lib/semmle/code/java/controlflow/SuccessorType.qll @@ -1,8 +1,6 @@ /** * Provides different types of control flow successor types. */ -overlay[local?] -module; import java private import codeql.util.Boolean diff --git a/java/ql/lib/semmle/code/java/controlflow/UnreachableBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/UnreachableBlocks.qll index 0247417c6bb6..0ade780bc00c 100644 --- a/java/ql/lib/semmle/code/java/controlflow/UnreachableBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/UnreachableBlocks.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for identifying unreachable blocks under a "closed-world" assumption. */ -overlay[local?] -module; import java import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll b/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll new file mode 100644 index 000000000000..4cb3bc74f97f --- /dev/null +++ b/java/ql/lib/semmle/code/java/controlflow/internal/GuardsLogic.qll @@ -0,0 +1,396 @@ +/** + * Provides predicates for working with the internal logic of the `Guards` + * library. + */ + +import java +import semmle.code.java.controlflow.Guards +private import Preconditions +private import semmle.code.java.dataflow.SSA +private import semmle.code.java.dataflow.internal.BaseSSA +private import semmle.code.java.dataflow.NullGuards +private import semmle.code.java.dataflow.IntegerGuards + +/** + * Holds if the assumption that `g1` has been evaluated to `b1` implies that + * `g2` has been evaluated to `b2`, that is, the evaluation of `g2` to `b2` + * dominates the evaluation of `g1` to `b1`. + * + * Restricted to BaseSSA-based reasoning. + */ +predicate implies_v1(Guard g1, boolean b1, Guard g2, boolean b2) { + g1.(AndBitwiseExpr).getAnOperand() = g2 and b1 = true and b2 = true + or + g1.(OrBitwiseExpr).getAnOperand() = g2 and b1 = false and b2 = false + or + g1.(AssignAndExpr).getSource() = g2 and b1 = true and b2 = true + or + g1.(AssignOrExpr).getSource() = g2 and b1 = false and b2 = false + or + g1.(AndLogicalExpr).getAnOperand() = g2 and b1 = true and b2 = true + or + g1.(OrLogicalExpr).getAnOperand() = g2 and b1 = false and b2 = false + or + g1.(LogNotExpr).getExpr() = g2 and + b1 = b2.booleanNot() and + b1 = [true, false] + or + exists(EqualityTest eqtest, boolean polarity, BooleanLiteral boollit | + eqtest = g1 and + eqtest.hasOperands(g2, boollit) and + eqtest.polarity() = polarity and + b1 = [true, false] and + b2 = b1.booleanXor(polarity).booleanXor(boollit.getBooleanValue()) + ) + or + exists(ConditionalExpr cond, boolean branch, BooleanLiteral boollit, boolean boolval | + cond.getBranchExpr(branch) = boollit and + cond = g1 and + boolval = boollit.getBooleanValue() and + b1 = boolval.booleanNot() and + ( + g2 = cond.getCondition() and b2 = branch.booleanNot() + or + g2 = cond.getABranchExpr() and b2 = b1 + ) + ) + or + g1.(DefaultCase).getSwitch().getAConstCase() = g2 and b1 = true and b2 = false + or + g1.(DefaultCase).getSwitchExpr().getAConstCase() = g2 and b1 = true and b2 = false + or + exists(MethodCall check, int argIndex | check = g1 | + conditionCheckArgument(check, argIndex, _) and + g2 = check.getArgument(argIndex) and + b1 = [true, false] and + b2 = b1 + ) + or + exists(BaseSsaUpdate vbool | + vbool.getDefiningExpr().(VariableAssign).getSource() = g2 or + vbool.getDefiningExpr().(AssignOp) = g2 + | + vbool.getAUse() = g1 and + b1 = [true, false] and + b2 = b1 + ) + or + g1.(AssignExpr).getSource() = g2 and b2 = b1 and b1 = [true, false] +} + +/** + * Holds if the assumption that `g1` has been evaluated to `b1` implies that + * `g2` has been evaluated to `b2`, that is, the evaluation of `g2` to `b2` + * dominates the evaluation of `g1` to `b1`. + * + * Allows full use of SSA but is restricted to pre-RangeAnalysis reasoning. + */ +predicate implies_v2(Guard g1, boolean b1, Guard g2, boolean b2) { + implies_v1(g1, b1, g2, b2) + or + exists(SsaExplicitUpdate vbool | + vbool.getDefiningExpr().(VariableAssign).getSource() = g2 or + vbool.getDefiningExpr().(AssignOp) = g2 + | + vbool.getAUse() = g1 and + b1 = [true, false] and + b2 = b1 + ) + or + exists(SsaVariable v, AbstractValue k | + // If `v = g2 ? k : ...` or `v = g2 ? ... : k` then a guard + // proving `v != k` ensures that `g2` evaluates to `b2`. + conditionalAssignVal(v, g2, b2.booleanNot(), k) and + guardImpliesNotEqual1(g1, b1, v, k) + ) + or + exists(SsaVariable v, Expr e, AbstractValue k | + // If `v = g2 ? k : ...` and all other assignments to `v` are different from + // `k` then a guard proving `v == k` ensures that `g2` evaluates to `b2`. + uniqueValue(v, e, k) and + guardImpliesEqual(g1, b1, v, k) and + g2.directlyControls(e.getBasicBlock(), b2) and + not g2.directlyControls(g1.getBasicBlock(), b2) + ) +} + +/** + * Holds if the assumption that `g1` has been evaluated to `b1` implies that + * `g2` has been evaluated to `b2`, that is, the evaluation of `g2` to `b2` + * dominates the evaluation of `g1` to `b1`. + */ +cached +predicate implies_v3(Guard g1, boolean b1, Guard g2, boolean b2) { + implies_v2(g1, b1, g2, b2) + or + exists(SsaVariable v, AbstractValue k | + // If `v = g2 ? k : ...` or `v = g2 ? ... : k` then a guard + // proving `v != k` ensures that `g2` evaluates to `b2`. + conditionalAssignVal(v, g2, b2.booleanNot(), k) and + guardImpliesNotEqual2(g1, b1, v, k) + ) + or + exists(SsaVariable v | + conditionalAssign(v, g2, b2.booleanNot(), clearlyNotNullExpr()) and + guardImpliesEqual(g1, b1, v, TAbsValNull()) + ) +} + +private newtype TAbstractValue = + TAbsValNull() or + TAbsValInt(int i) { exists(CompileTimeConstantExpr c | c.getIntValue() = i) } or + TAbsValChar(string c) { exists(CharacterLiteral lit | lit.getValue() = c) } or + TAbsValString(string s) { exists(StringLiteral lit | lit.getValue() = s) } or + TAbsValEnum(EnumConstant c) + +/** The value of a constant expression. */ +abstract private class AbstractValue extends TAbstractValue { + abstract string toString(); + + /** Gets an expression whose value is this abstract value. */ + abstract Expr getExpr(); +} + +private class AbsValNull extends AbstractValue, TAbsValNull { + override string toString() { result = "null" } + + override Expr getExpr() { result = alwaysNullExpr() } +} + +private class AbsValInt extends AbstractValue, TAbsValInt { + int i; + + AbsValInt() { this = TAbsValInt(i) } + + override string toString() { result = i.toString() } + + override Expr getExpr() { result.(CompileTimeConstantExpr).getIntValue() = i } +} + +private class AbsValChar extends AbstractValue, TAbsValChar { + string c; + + AbsValChar() { this = TAbsValChar(c) } + + override string toString() { result = c } + + override Expr getExpr() { result.(CharacterLiteral).getValue() = c } +} + +private class AbsValString extends AbstractValue, TAbsValString { + string s; + + AbsValString() { this = TAbsValString(s) } + + override string toString() { result = s } + + override Expr getExpr() { result.(CompileTimeConstantExpr).getStringValue() = s } +} + +private class AbsValEnum extends AbstractValue, TAbsValEnum { + EnumConstant c; + + AbsValEnum() { this = TAbsValEnum(c) } + + override string toString() { result = c.toString() } + + override Expr getExpr() { result = c.getAnAccess() } +} + +/** + * Holds if `v` can have a value that is not representable as an `AbstractValue`. + */ +private predicate hasPossibleUnknownValue(SsaVariable v) { + exists(SsaVariable def | v.getAnUltimateDefinition() = def | + def instanceof SsaImplicitUpdate + or + def instanceof SsaImplicitInit + or + exists(VariableUpdate upd | upd = def.(SsaExplicitUpdate).getDefiningExpr() | + not exists(upd.(VariableAssign).getSource()) + ) + or + exists(VariableAssign a, Expr e | + a = def.(SsaExplicitUpdate).getDefiningExpr() and + e = possibleValue(a.getSource()) and + not exists(AbstractValue val | val.getExpr() = e) + ) + ) +} + +/** + * Gets a sub-expression of `e` whose value can flow to `e` through + * `ConditionalExpr`s. + */ +private Expr possibleValue(Expr e) { + result = possibleValue(e.(ConditionalExpr).getABranchExpr()) + or + result = e and not e instanceof ConditionalExpr +} + +/** + * Gets an ultimate definition of `v` that is not itself a phi node. The + * boolean `fromBackEdge` indicates whether the flow from `result` to `v` goes + * through a back edge. + */ +SsaVariable getADefinition(SsaVariable v, boolean fromBackEdge) { + result = v and not v instanceof SsaPhiNode and fromBackEdge = false + or + exists(SsaVariable inp, BasicBlock bb, boolean fbe | + v.(SsaPhiNode).hasInputFromBlock(inp, bb) and + result = getADefinition(inp, fbe) and + (if v.getBasicBlock().dominates(bb) then fromBackEdge = true else fromBackEdge = fbe) + ) +} + +/** + * Holds if `e` equals `k` and may be assigned to `v`. The boolean + * `fromBackEdge` indicates whether the flow from `e` to `v` goes through a + * back edge. + */ +private predicate possibleValue(SsaVariable v, boolean fromBackEdge, Expr e, AbstractValue k) { + not hasPossibleUnknownValue(v) and + exists(SsaExplicitUpdate def | + def = getADefinition(v, fromBackEdge) and + e = possibleValue(def.getDefiningExpr().(VariableAssign).getSource()) and + k.getExpr() = e + ) +} + +/** + * Holds if `e` equals `k` and may be assigned to `v` without going through + * back edges, and all other possible ultimate definitions of `v` are different + * from `k`. The trivial case where `v` is an `SsaExplicitUpdate` with `e` as + * the only possible value is excluded. + */ +private predicate uniqueValue(SsaVariable v, Expr e, AbstractValue k) { + possibleValue(v, false, e, k) and + forex(Expr other, AbstractValue otherval | possibleValue(v, _, other, otherval) and other != e | + otherval != k + ) +} + +/** + * Holds if `v1` and `v2` have the same value in `bb`. + */ +private predicate equalVarsInBlock(BasicBlock bb, SsaVariable v1, SsaVariable v2) { + exists(Guard guard, boolean branch | + guard.isEquality(v1.getAUse(), v2.getAUse(), branch) and + guardControls_v1(guard, bb, branch) + ) +} + +/** + * Holds if `guard` evaluating to `branch` implies that `v` equals `k`. + */ +private predicate guardImpliesEqual(Guard guard, boolean branch, SsaVariable v, AbstractValue k) { + exists(SsaVariable v0 | + guard.isEquality(v0.getAUse(), k.getExpr(), branch) and + (v = v0 or equalVarsInBlock(guard.getBasicBlock(), v0, v)) + ) +} + +private BasicBlock getAGuardBranchSuccessor(Guard g, boolean branch) { + result.getFirstNode() = g.(Expr).getControlFlowNode().(ConditionNode).getABranchSuccessor(branch) + or + result.getFirstNode() = g.(SwitchCase).getControlFlowNode() and branch = true +} + +/** + * Holds if `guard` dominates `phi` and `guard` evaluating to `branch` controls the definition + * `upd = e` where `upd` is a possible input to `phi`. + */ +private predicate guardControlsPhiBranch( + SsaExplicitUpdate upd, SsaPhiNode phi, Guard guard, boolean branch, Expr e +) { + guard.directlyControls(upd.getBasicBlock(), branch) and + upd.getDefiningExpr().(VariableAssign).getSource() = e and + upd = phi.getAPhiInput() and + guard.getBasicBlock().strictlyDominates(phi.getBasicBlock()) +} + +/** + * Holds if `v` is conditionally assigned `e` under the condition that `guard` evaluates to `branch`. + * + * The evaluation of `guard` dominates the definition of `v` and `guard` evaluating to `branch` + * implies that `e` is assigned to `v`. In particular, this allows us to conclude that if `v` has + * a value different from `e` then `guard` must have evaluated to `branch.booleanNot()`. + */ +private predicate conditionalAssign(SsaVariable v, Guard guard, boolean branch, Expr e) { + exists(ConditionalExpr c | + v.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = c and + guard = c.getCondition() + | + e = c.getBranchExpr(branch) + ) + or + exists(SsaExplicitUpdate upd, SsaPhiNode phi | + phi = v and + guardControlsPhiBranch(upd, phi, guard, branch, e) and + not guard.directlyControls(phi.getBasicBlock(), branch) and + forall(SsaVariable other | other != upd and other = phi.getAPhiInput() | + guard.directlyControls(other.getBasicBlock(), branch.booleanNot()) + or + other.getBasicBlock().dominates(guard.getBasicBlock()) and + not other.isLiveAtEndOfBlock(getAGuardBranchSuccessor(guard, branch)) + ) + ) +} + +/** + * Holds if `v` is conditionally assigned `val` under the condition that `guard` evaluates to `branch`. + */ +private predicate conditionalAssignVal(SsaVariable v, Guard guard, boolean branch, AbstractValue val) { + conditionalAssign(v, guard, branch, val.getExpr()) +} + +private predicate relevantEq(SsaVariable v, AbstractValue val) { + conditionalAssignVal(v, _, _, val) + or + exists(SsaVariable v0 | + conditionalAssignVal(v0, _, _, val) and + equalVarsInBlock(_, v0, v) + ) +} + +/** + * Holds if the evaluation of `guard` to `branch` implies that `v` does not have the value `val`. + */ +private predicate guardImpliesNotEqual1( + Guard guard, boolean branch, SsaVariable v, AbstractValue val +) { + exists(SsaVariable v0 | + relevantEq(v0, val) and + ( + guard.isEquality(v0.getAUse(), val.getExpr(), branch.booleanNot()) + or + exists(AbstractValue val2 | + guard.isEquality(v0.getAUse(), val2.getExpr(), branch) and + val != val2 + ) + or + guard.(InstanceOfExpr).getExpr() = sameValue(v0, _) and branch = true and val = TAbsValNull() + ) and + (v = v0 or equalVarsInBlock(guard.getBasicBlock(), v0, v)) + ) +} + +/** + * Holds if the evaluation of `guard` to `branch` implies that `v` does not have the value `val`. + */ +private predicate guardImpliesNotEqual2( + Guard guard, boolean branch, SsaVariable v, AbstractValue val +) { + exists(SsaVariable v0 | + relevantEq(v0, val) and + ( + guard = directNullGuard(v0, branch, false) and val = TAbsValNull() + or + exists(int k | + guard = integerGuard(v0.getAUse(), branch, k, false) and + val = TAbsValInt(k) + ) + ) and + (v = v0 or equalVarsInBlock(guard.getBasicBlock(), v0, v)) + ) +} diff --git a/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll b/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll index a0d2e4ef03ec..6e6c5ec47f9c 100644 --- a/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll +++ b/java/ql/lib/semmle/code/java/controlflow/internal/Preconditions.qll @@ -3,8 +3,6 @@ * `com.google.common.base.Preconditions` and * `org.apache.commons.lang3.Validate`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/controlflow/internal/SwitchCases.qll b/java/ql/lib/semmle/code/java/controlflow/internal/SwitchCases.qll index 5366fa78a539..1d94f075abbe 100644 --- a/java/ql/lib/semmle/code/java/controlflow/internal/SwitchCases.qll +++ b/java/ql/lib/semmle/code/java/controlflow/internal/SwitchCases.qll @@ -1,6 +1,4 @@ /** Provides utility predicates relating to switch cases. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/controlflow/unreachableblocks/ExcludeDebuggingProfilingLogging.qll b/java/ql/lib/semmle/code/java/controlflow/unreachableblocks/ExcludeDebuggingProfilingLogging.qll index bda7f9bee740..7b7a5943f6c6 100644 --- a/java/ql/lib/semmle/code/java/controlflow/unreachableblocks/ExcludeDebuggingProfilingLogging.qll +++ b/java/ql/lib/semmle/code/java/controlflow/unreachableblocks/ExcludeDebuggingProfilingLogging.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.controlflow.UnreachableBlocks diff --git a/java/ql/lib/semmle/code/java/dataflow/ApiSinks.qll b/java/ql/lib/semmle/code/java/dataflow/ApiSinks.qll index 56027a4507c8..c600bb1672d8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ApiSinks.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ApiSinks.qll @@ -1,6 +1,4 @@ /** Provides classes representing various flow sinks for data flow / taint tracking. */ -overlay[local?] -module; private import semmle.code.java.dataflow.FlowSinks as FlowSinks diff --git a/java/ql/lib/semmle/code/java/dataflow/ApiSources.qll b/java/ql/lib/semmle/code/java/dataflow/ApiSources.qll index add0ec0d9a5b..8649b5cf830d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ApiSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ApiSources.qll @@ -1,6 +1,4 @@ /** Provides classes representing various flow sources for data flow / taint tracking. */ -overlay[local?] -module; private import semmle.code.java.dataflow.FlowSources as FlowSources diff --git a/java/ql/lib/semmle/code/java/dataflow/Bound.qll b/java/ql/lib/semmle/code/java/dataflow/Bound.qll index 65af6fb13a81..08826b7ae8f1 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Bound.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Bound.qll @@ -1,8 +1,6 @@ /** * Provides classes for representing abstract bounds for use in, for example, range analysis. */ -overlay[local?] -module; private import internal.rangeanalysis.BoundSpecific diff --git a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll index 54eb809c7b97..ab48577c02e7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DataFlow.qll @@ -2,8 +2,6 @@ * Provides classes for performing local (intra-procedural) and * global (inter-procedural) data flow analyses. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/dataflow/DataFlowStack.qll b/java/ql/lib/semmle/code/java/dataflow/DataFlowStack.qll index 260531af95a6..120c548a8a8a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DataFlowStack.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DataFlowStack.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.internal.DataFlowImplSpecific diff --git a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll index a93f2e30b462..9fa08d62c27f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/DefUse.qll +++ b/java/ql/lib/semmle/code/java/dataflow/DefUse.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for def-use and use-use pairs. Built on top of the SSA library for * maximal precision. */ -overlay[local?] -module; import java private import SSA diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index d1849df0f3ec..a38e54f05134 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -86,8 +86,6 @@ * This information is used in a heuristic for dataflow analysis to determine, if a * model or source code should be used for determining flow. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow::DataFlow diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSinks.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSinks.qll index 61066774e52b..72cd96f6745c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSinks.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSinks.qll @@ -1,6 +1,4 @@ /** Provides classes representing various flow sinks for data flow / taint tracking. */ -overlay[local?] -module; private import java private import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll index 8c6ac60eb24f..f63eae183c49 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSources.qll @@ -1,8 +1,6 @@ /** * Provides classes representing various flow sources for taint tracking. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll index 6dd8de89e213..d081a6289ecd 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSteps.qll @@ -1,8 +1,6 @@ /** * Provides classes representing various flow steps for taint tracking. */ -overlay[local?] -module; private import java private import semmle.code.java.dataflow.DataFlow @@ -162,7 +160,7 @@ private class NumberTaintPreservingCallable extends TaintPreservingCallable { int argument; NumberTaintPreservingCallable() { - this.getDeclaringType().getASourceSupertype*().hasQualifiedName("java.lang", "Number") and + this.getDeclaringType().getAnAncestor().hasQualifiedName("java.lang", "Number") and ( this instanceof Constructor and argument = 0 diff --git a/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll b/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll index d038851d8374..acea2a10784f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll +++ b/java/ql/lib/semmle/code/java/dataflow/FlowSummary.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for defining flow summaries. */ -overlay[local?] -module; import java private import internal.FlowSummaryImpl as Impl diff --git a/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll b/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll index feeb0d100c64..0bae1b5e9c10 100644 --- a/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll +++ b/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for reasoning about explicit and implicit * instance accesses. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll b/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll index 042fd5194f23..58d77b649788 100644 --- a/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/IntegerGuards.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for integer guards. */ -overlay[local?] -module; import java private import SSA @@ -34,58 +32,6 @@ class IntComparableExpr extends Expr { } } -/** - * Holds if `comp` evaluating to `branch` ensures that `e1` is less than `e2`. - * When `strict` is true, `e1` is strictly less than `e2`, otherwise it is less - * than or equal to `e2`. - */ -private predicate comparison(ComparisonExpr comp, boolean branch, Expr e1, Expr e2, boolean strict) { - branch = true and - e1 = comp.getLesserOperand() and - e2 = comp.getGreaterOperand() and - (if comp.isStrict() then strict = true else strict = false) - or - branch = false and - e1 = comp.getGreaterOperand() and - e2 = comp.getLesserOperand() and - (if comp.isStrict() then strict = false else strict = true) -} - -/** - * Holds if `guard` evaluating to `branch` ensures that: - * `e <= k` when `upper = true` - * `e >= k` when `upper = false` - */ -pragma[nomagic] -predicate rangeGuard(Expr guard, boolean branch, Expr e, int k, boolean upper) { - exists(EqualityTest eqtest, Expr c | - eqtest = guard and - eqtest.hasOperands(e, c) and - bounded(c, any(ZeroBound zb), k, upper, _) and - branch = eqtest.polarity() - ) - or - exists(Expr c, int val, boolean strict, int d | - bounded(c, any(ZeroBound zb), val, upper, _) and - ( - upper = true and - comparison(guard, branch, e, c, strict) and - d = -1 - or - upper = false and - comparison(guard, branch, c, e, strict) and - d = 1 - ) and - ( - strict = false and k = val - or - // e < c <= val ==> e <= c - 1 <= val - 1 - // e > c >= val ==> e >= c + 1 >= val + 1 - strict = true and k = val + d - ) - ) -} - /** * An expression that directly tests whether a given expression is equal to `k` or not. * The set of `k`s is restricted to those that are relevant for the expression or @@ -107,14 +53,75 @@ Expr integerGuard(IntComparableExpr e, boolean branch, int k, boolean is_k) { ) ) or - exists(int val, boolean upper | - rangeGuard(result, branch, e, val, upper) and + exists(EqualityTest eqtest, int val, Expr c, boolean upper | + k = e.relevantInt() and + eqtest = result and + eqtest.hasOperands(e, c) and + bounded(c, any(ZeroBound zb), val, upper, _) and + is_k = false and + ( + upper = true and val < k + or + upper = false and val > k + ) and + branch = eqtest.polarity() + ) + or + exists(ComparisonExpr comp, Expr c, int val, boolean upper | k = e.relevantInt() and + comp = result and + comp.hasOperands(e, c) and + bounded(c, any(ZeroBound zb), val, upper, _) and is_k = false | - upper = true and val < k // e <= val < k ==> e != k + // k <= val <= c < e, so e != k + comp.getLesserOperand() = c and + comp.isStrict() and + branch = true and + val >= k and + upper = false + or + comp.getLesserOperand() = c and + comp.isStrict() and + branch = false and + val < k and + upper = true + or + comp.getLesserOperand() = c and + not comp.isStrict() and + branch = true and + val > k and + upper = false or - upper = false and val > k // e >= val > k ==> e != k + comp.getLesserOperand() = c and + not comp.isStrict() and + branch = false and + val <= k and + upper = true + or + comp.getGreaterOperand() = c and + comp.isStrict() and + branch = true and + val <= k and + upper = true + or + comp.getGreaterOperand() = c and + comp.isStrict() and + branch = false and + val > k and + upper = false + or + comp.getGreaterOperand() = c and + not comp.isStrict() and + branch = true and + val < k and + upper = true + or + comp.getGreaterOperand() = c and + not comp.isStrict() and + branch = false and + val >= k and + upper = false ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll index 1451a605cdb0..3e5a45da247d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ModulusAnalysis.qll @@ -3,8 +3,6 @@ * an expression, `b` is a `Bound` (typically zero or the value of an SSA * variable), and `v` is an integer in the range `[0 .. m-1]`. */ -overlay[local?] -module; private import internal.rangeanalysis.ModulusAnalysisSpecific::Private private import Bound diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index bf9a166e0489..2dd72d78a2ea 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -1,12 +1,10 @@ /** * Provides classes and predicates for null guards. */ -overlay[local?] -module; import java import SSA -private import semmle.code.java.controlflow.Guards +private import semmle.code.java.controlflow.internal.GuardsLogic private import semmle.code.java.frameworks.apache.Collections private import IntegerGuards @@ -43,45 +41,34 @@ EqualityTest varEqualityTestExpr(SsaVariable v1, SsaVariable v2, boolean isEqual } /** Gets an expression that is provably not `null`. */ -Expr baseNotNullExpr() { - result instanceof ClassInstanceExpr +Expr clearlyNotNullExpr(Expr reason) { + result instanceof ClassInstanceExpr and reason = result or - result instanceof ArrayCreationExpr + result instanceof ArrayCreationExpr and reason = result or - result instanceof TypeLiteral + result instanceof TypeLiteral and reason = result or - result instanceof ThisAccess + result instanceof ThisAccess and reason = result or - result instanceof StringLiteral + result instanceof StringLiteral and reason = result or - result instanceof AddExpr and result.getType() instanceof TypeString + result instanceof AddExpr and result.getType() instanceof TypeString and reason = result or exists(Field f | result = f.getAnAccess() and (f.hasName("TRUE") or f.hasName("FALSE")) and - f.getDeclaringType().hasQualifiedName("java.lang", "Boolean") + f.getDeclaringType().hasQualifiedName("java.lang", "Boolean") and + reason = result ) or - result = any(EnumConstant c).getAnAccess() - or - result instanceof ImplicitNotNullExpr - or - result instanceof ImplicitCoercionToUnitExpr - or - result - .(MethodCall) - .getMethod() - .hasQualifiedName("com.google.common.base", "Strings", "nullToEmpty") -} - -/** Gets an expression that is provably not `null`. */ -Expr clearlyNotNullExpr(Expr reason) { - result = baseNotNullExpr() and reason = result - or result.(CastExpr).getExpr() = clearlyNotNullExpr(reason) or result.(ImplicitCastExpr).getExpr() = clearlyNotNullExpr(reason) or + result instanceof ImplicitNotNullExpr and reason = result + or + result instanceof ImplicitCoercionToUnitExpr and reason = result + or result.(AssignExpr).getSource() = clearlyNotNullExpr(reason) or exists(ConditionalExpr c, Expr r1, Expr r2 | @@ -96,14 +83,14 @@ Expr clearlyNotNullExpr(Expr reason) { guard.controls(rval.getBasicBlock(), branch) and reason = guard and rval = v.getAUse() and - result = rval and - not result = baseNotNullExpr() + result = rval ) or - exists(SsaVariable v | - clearlyNotNull(v, reason) and - result = v.getAUse() and - not result = baseNotNullExpr() + exists(SsaVariable v | clearlyNotNull(v, reason) and result = v.getAUse()) + or + exists(Method m | m = result.(MethodCall).getMethod() and reason = result | + m.getDeclaringType().hasQualifiedName("com.google.common.base", "Strings") and + m.hasName("nullToEmpty") ) } @@ -186,19 +173,50 @@ predicate nullCheckMethod(Method m, boolean branch, boolean isnull) { * is true, and non-null if `isnull` is false. */ Expr basicNullGuard(Expr e, boolean branch, boolean isnull) { - Guards_v3::nullGuard(result, any(GuardValue v | v.asBooleanValue() = branch), e, isnull) + exists(EqualityTest eqtest, boolean polarity | + eqtest = result and + eqtest.hasOperands(e, any(NullLiteral n)) and + polarity = eqtest.polarity() and + ( + branch = true and isnull = polarity + or + branch = false and isnull = polarity.booleanNot() + ) + ) + or + result.(InstanceOfExpr).getExpr() = e and branch = true and isnull = false + or + exists(MethodCall call | + call = result and + call.getAnArgument() = e and + nullCheckMethod(call.getMethod(), branch, isnull) + ) + or + exists(EqualityTest eqtest | + eqtest = result and + eqtest.hasOperands(e, clearlyNotNullExpr()) and + isnull = false and + branch = eqtest.polarity() + ) + or + result = enumConstEquality(e, branch, _) and isnull = false } /** - * DEPRECATED: Use `basicNullGuard` instead. - * * Gets an expression that directly tests whether a given expression, `e`, is null or not. * * If `result` evaluates to `branch`, then `e` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ -deprecated Expr basicOrCustomNullGuard(Expr e, boolean branch, boolean isnull) { +Expr basicOrCustomNullGuard(Expr e, boolean branch, boolean isnull) { result = basicNullGuard(e, branch, isnull) + or + exists(MethodCall call, Method m, int ix | + call = result and + call.getArgument(ix) = e and + call.getMethod().getSourceDeclaration() = m and + m = customNullGuard(ix, branch, isnull) + ) } /** @@ -208,61 +226,80 @@ deprecated Expr basicOrCustomNullGuard(Expr e, boolean branch, boolean isnull) { * is true, and non-null if `isnull` is false. */ Expr directNullGuard(SsaVariable v, boolean branch, boolean isnull) { - result = basicNullGuard(sameValue(v, _), branch, isnull) + result = basicOrCustomNullGuard(sameValue(v, _), branch, isnull) } /** - * DEPRECATED: Use `nullGuardControls`/`nullGuardControlsBranchEdge` instead. - * * Gets a `Guard` that tests (possibly indirectly) whether a given SSA variable is null or not. * * If `result` evaluates to `branch`, then `v` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ -deprecated Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { - result = directNullGuard(v, branch, isnull) +Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { + result = directNullGuard(v, branch, isnull) or + exists(boolean branch0 | implies_v3(result, branch, nullGuard(v, branch0, isnull), branch0)) } /** - * Holds if there exists a null check on `v`, such that taking the branch edge - * from `bb1` to `bb2` implies that `v` is guaranteed to be null if `isnull` is - * true, and non-null if `isnull` is false. + * A return statement in a non-overridable method that on a return value of + * `retval` allows the conclusion that the parameter `p` either is null or + * non-null as specified by `isnull`. */ -predicate nullGuardControlsBranchEdge(SsaVariable v, boolean isnull, BasicBlock bb1, BasicBlock bb2) { - exists(GuardValue gv | - Guards_v3::ssaControlsBranchEdge(v, bb1, bb2, gv) and - gv.isNullness(isnull) +private predicate validReturnInCustomNullGuard( + ReturnStmt ret, Parameter p, boolean retval, boolean isnull +) { + exists(Method m | + ret.getEnclosingCallable() = m and + p.getCallable() = m and + m.getReturnType().(PrimitiveType).hasName("boolean") and + not p.isVarargs() and + p.getType() instanceof RefType and + not m.isOverridable() + ) and + exists(SsaImplicitInit ssa | ssa.isParameterDefinition(p) | + nullGuardedReturn(ret, ssa, isnull) and + (retval = true or retval = false) + or + exists(Expr res | res = ret.getResult() | res = nullGuard(ssa, retval, isnull)) ) } -/** - * Holds if there exists a null check on `v` that controls `bb`, such that in - * `bb` `v` is guaranteed to be null if `isnull` is true, and non-null if - * `isnull` is false. - */ -predicate nullGuardControls(SsaVariable v, boolean isnull, BasicBlock bb) { - exists(GuardValue gv | - Guards_v3::ssaControls(v, bb, gv) and - gv.isNullness(isnull) +private predicate nullGuardedReturn(ReturnStmt ret, SsaImplicitInit ssa, boolean isnull) { + exists(boolean branch | + nullGuard(ssa, branch, isnull).directlyControls(ret.getBasicBlock(), branch) ) } +pragma[nomagic] +private Method returnStmtGetEnclosingCallable(ReturnStmt ret) { + ret.getEnclosingCallable() = result +} + /** - * Holds if `guard` is a guard expression that suggests that `e` might be null. + * Gets a non-overridable method with a boolean return value that performs a null-check + * on the `index`th parameter. A return value equal to `retval` allows us to conclude + * that the argument either is null or non-null as specified by `isnull`. */ -predicate guardSuggestsExprMaybeNull(Expr guard, Expr e) { - guard.(EqualityTest).hasOperands(e, any(NullLiteral n)) - or - exists(MethodCall call | - call = guard and - call.getAnArgument() = e and - nullCheckMethod(call.getMethod(), _, true) +private Method customNullGuard(int index, boolean retval, boolean isnull) { + exists(Parameter p | + p.getCallable() = result and + p.getPosition() = index and + forex(ReturnStmt ret | + returnStmtGetEnclosingCallable(ret) = result and + exists(Expr res | res = ret.getResult() | + not res.(BooleanLiteral).getBooleanValue() = retval.booleanNot() + ) + | + validReturnInCustomNullGuard(ret, p, retval, isnull) + ) ) } /** - * Holds if `guard` is a guard expression that suggests that `v` might be null. + * `guard` is a guard expression that suggests that `v` might be null. + * + * This is equivalent to `guard = basicNullGuard(sameValue(v, _), _, true)`. */ predicate guardSuggestsVarMaybeNull(Expr guard, SsaVariable v) { - guardSuggestsExprMaybeNull(guard, sameValue(v, _)) + guard = basicNullGuard(sameValue(v, _), _, true) } diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index 02f228d17dbe..36ad96c497f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -6,8 +6,6 @@ * hold, so results guarded by, for example, `assert x != null;` or * `if (x == null) { assert false; }` are excluded. */ -overlay[local?] -module; /* * Implementation details: @@ -143,9 +141,9 @@ private ControlFlowNode varDereference(SsaVariable v, VarAccess va) { private ControlFlowNode ensureNotNull(SsaVariable v) { result = varDereference(v, _) or - exists(AssertTrueMethod m | result.asCall() = m.getACheck(directNullGuard(v, true, false))) + exists(AssertTrueMethod m | result.asCall() = m.getACheck(nullGuard(v, true, false))) or - exists(AssertFalseMethod m | result.asCall() = m.getACheck(directNullGuard(v, false, false))) + exists(AssertFalseMethod m | result.asCall() = m.getACheck(nullGuard(v, false, false))) or exists(AssertNotNullMethod m | result.asCall() = m.getACheck(v.getAUse())) or @@ -341,7 +339,7 @@ private predicate nullVarStep( not assertFail(mid, _) and bb = mid.getASuccessor() and not impossibleEdge(mid, bb) and - not nullGuardControlsBranchEdge(midssa, false, mid, bb) and + not exists(boolean branch | nullGuard(midssa, branch, false).hasBranchEdge(mid, bb, branch)) and not (leavingFinally(mid, bb, true) and midstoredcompletion = true) and if bb.getFirstNode().asStmt() = any(TryStmt try | | try.getFinally()) then @@ -478,11 +476,6 @@ private ConditionBlock ssaEnumConstEquality(SsaVariable v, boolean polarity, Enu result.getCondition() = enumConstEquality(v.getAUse(), polarity, c) } -private predicate conditionChecksNull(ConditionBlock cond, SsaVariable v, boolean branchIsNull) { - nullGuardControlsBranchEdge(v, true, cond, cond.getTestSuccessor(branchIsNull)) and - nullGuardControlsBranchEdge(v, false, cond, cond.getTestSuccessor(branchIsNull.booleanNot())) -} - /** A pair of correlated conditions for a given NPE candidate. */ private predicate correlatedConditions( SsaSourceVariable npecand, ConditionBlock cond1, ConditionBlock cond2, boolean inverted @@ -498,8 +491,10 @@ private predicate correlatedConditions( ) or exists(SsaVariable v, boolean branch1, boolean branch2 | - conditionChecksNull(cond1, v, branch1) and - conditionChecksNull(cond2, v, branch2) and + cond1.getCondition() = nullGuard(v, branch1, true) and + cond1.getCondition() = nullGuard(v, branch1.booleanNot(), false) and + cond2.getCondition() = nullGuard(v, branch2, true) and + cond2.getCondition() = nullGuard(v, branch2.booleanNot(), false) and inverted = branch1.booleanXor(branch2) ) or @@ -625,7 +620,7 @@ private Expr trackingVarGuard( SsaVariable trackssa, SsaSourceVariable trackvar, TrackVarKind kind, boolean branch, boolean isA ) { exists(Expr init | trackingVar(_, trackssa, trackvar, kind, init) | - result = basicNullGuard(trackvar.getAnAccess(), branch, isA) and + result = basicOrCustomNullGuard(trackvar.getAnAccess(), branch, isA) and kind = TrackVarKindNull() or result = trackvar.getAnAccess() and @@ -836,13 +831,15 @@ predicate alwaysNullDeref(SsaSourceVariable v, VarAccess va) { def.(SsaExplicitUpdate).getDefiningExpr().(VariableAssign).getSource() = alwaysNullExpr() ) or - nullGuardControls(ssa, true, bb) and - not clearlyNotNull(ssa) + exists(boolean branch | + nullGuard(ssa, branch, true).directlyControls(bb, branch) and + not clearlyNotNull(ssa) + ) | // Exclude fields as they might not have an accurate ssa representation. not v.getVariable() instanceof Field and firstVarDereferenceInBlock(bb, ssa, va) and ssa.getSourceVariable() = v and - not nullGuardControls(ssa, false, bb) + not exists(boolean branch | nullGuard(ssa, branch, false).directlyControls(bb, branch)) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index f65e15d1c61b..64f68b9c075a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -8,8 +8,6 @@ * If an inferred bound relies directly on a condition, then this condition is * reported as the reason for the bound. */ -overlay[local?] -module; /* * This library tackles range analysis as a flow problem. Consider e.g.: @@ -68,6 +66,7 @@ module; import java private import SSA private import RangeUtils +private import semmle.code.java.controlflow.internal.GuardsLogic private import semmle.code.java.security.RandomDataSource private import SignAnalysis private import semmle.code.java.Reflection @@ -80,7 +79,7 @@ module Sem implements Semantic { private import java as J private import SSA as SSA private import RangeUtils as RU - private import semmle.code.java.controlflow.Guards as G + private import semmle.code.java.controlflow.internal.GuardsLogic as GL class Expr = J::Expr; @@ -220,7 +219,7 @@ module Sem implements Semantic { int getBlockId1(BasicBlock bb) { idOf(bb, result) } - class Guard extends G::Guards_v2::Guard { + class Guard extends GL::Guard_v2 { Expr asExpr() { result = this } } diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll index efd7bcd80889..444fec8f8659 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeUtils.qll @@ -1,12 +1,10 @@ /** * Provides utility predicates for range analysis. */ -overlay[local?] -module; import java private import SSA -private import semmle.code.java.controlflow.Guards +private import semmle.code.java.controlflow.internal.GuardsLogic private import semmle.code.java.Constants private import semmle.code.java.dataflow.RangeAnalysis private import codeql.rangeanalysis.internal.RangeUtils diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index dd902b70e35a..680088b7c554 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -10,8 +10,6 @@ * of the field in case the field is not amenable to a non-trivial SSA * representation. */ -overlay[local?] -module; import java private import internal.SsaImpl diff --git a/java/ql/lib/semmle/code/java/dataflow/SignAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/SignAnalysis.qll index 568bc8b6d580..9cd629f4ef97 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SignAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SignAnalysis.qll @@ -5,7 +5,5 @@ * The analysis is implemented as an abstract interpretation over the * three-valued domain `{negative, zero, positive}`. */ -overlay[local?] -module; import semmle.code.java.dataflow.internal.rangeanalysis.SignAnalysisCommon diff --git a/java/ql/lib/semmle/code/java/dataflow/StringPrefixes.qll b/java/ql/lib/semmle/code/java/dataflow/StringPrefixes.qll index 4b1bd0131bd4..ed10d8aa4bb8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/StringPrefixes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/StringPrefixes.qll @@ -25,8 +25,6 @@ * String.format("%sfoo:%s", notSuffix, suffix4); * ``` */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll index 159604a95bd6..e62850fbc389 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TaintTracking.qll @@ -2,8 +2,6 @@ * Provides classes for performing local (intra-procedural) and * global (inter-procedural) taint-tracking analyses. */ -overlay[local?] -module; import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.internal.TaintTrackingUtil::StringBuilderVarModule diff --git a/java/ql/lib/semmle/code/java/dataflow/TaintTrackingStack.qll b/java/ql/lib/semmle/code/java/dataflow/TaintTrackingStack.qll index 711b8dd5dbbe..3fdb962291a4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TaintTrackingStack.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TaintTrackingStack.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index 8ce9b1b91202..f2fcbc5951d4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -7,8 +7,6 @@ * type has a subtype or if an inferred upper bound passed through at least one * explicit or implicit cast that lost type information. */ -overlay[local?] -module; import java as J private import semmle.code.java.dispatch.VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 5c0fbb88d664..874aca871832 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -10,8 +10,6 @@ * This is a restricted version of SSA.qll that only handles `LocalScopeVariable`s * in order to not depend on virtual dispatch. */ -overlay[local?] -module; import java private import codeql.ssa.Ssa as SsaImplCommon @@ -374,10 +372,5 @@ class BaseSsaImplicitInit extends BaseSsaVariable instanceof Impl::WriteDefiniti /** An SSA phi node. */ class BaseSsaPhiNode extends BaseSsaVariable instanceof Impl::PhiNode { /** Gets an input to the phi node defining the SSA variable. */ - BaseSsaVariable getAPhiInput() { this.hasInputFromBlock(result, _) } - - /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ - predicate hasInputFromBlock(BaseSsaVariable inp, BasicBlock bb) { - phiHasInputFromBlock(this, inp, bb) - } + BaseSsaVariable getAPhiInput() { phiHasInputFromBlock(this, result, _) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll index f93139592269..e007ecd85ae5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContainerFlow.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.Collections import semmle.code.java.Maps diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll index ec14f494dd95..2c9b12170440 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ContentDataFlow.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java private import DataFlowImplSpecific private import codeql.dataflow.internal.ContentDataFlowImpl diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll index dc58529ed263..f63df6ad09ec 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowDispatch.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java private import DataFlowPrivate private import DataFlowUtil @@ -213,7 +210,6 @@ private module DispatchImpl { } /** Holds if arguments at position `apos` match parameters at position `ppos`. */ - overlay[caller?] pragma[inline] predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 1917c2007fe1..689e58daab89 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import DataFlowImplSpecific private import codeql.dataflow.internal.DataFlowImpl private import semmle.code.Location diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index d9a6a98b4598..00f388dfdf3a 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import DataFlowImplSpecific private import semmle.code.Location private import codeql.dataflow.internal.DataFlowImplCommon diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll index 164bc9abbbdb..0272af417ace 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplConsistency.qll @@ -2,8 +2,6 @@ * Provides consistency queries for checking invariants in the language-specific * data-flow classes and predicates. */ -overlay[local?] -module; private import java private import DataFlowImplSpecific diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll index 65034ee08b93..95b2baeab1ce 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplSpecific.qll @@ -1,8 +1,6 @@ /** * Provides Java-specific definitions for use in the data flow library. */ -overlay[local?] -module; private import semmle.code.Location private import codeql.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 674c2380a5f5..7778f6ebc353 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java private import semmle.code.java.dataflow.InstanceAccess private import semmle.code.java.dataflow.ExternalFlow @@ -63,6 +60,8 @@ module SsaFlow { cached private module Cached { + private import semmle.code.java.controlflow.internal.GuardsLogic as GuardsLogic + cached newtype TNode = TExprNode(Expr e) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 164e2d8aa262..9e924df12780 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java private import DataFlowUtil private import DataFlowImplCommon diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index ab2f7f89cb46..6000c37c6cdd 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -1,8 +1,6 @@ /** * Basic definitions for use in the data flow library. */ -overlay[local?] -module; private import java private import DataFlowPrivate @@ -79,7 +77,6 @@ private module ThisFlow { * Holds if data can flow from `node1` to `node2` in zero or more * local (intra-procedural) steps. */ -overlay[caller?] pragma[inline] predicate localFlow(Node node1, Node node2) { node1 = node2 or localFlowStepPlus(node1, node2) } @@ -89,7 +86,6 @@ private predicate localFlowStepPlus(Node node1, Node node2) = fastTC(localFlowSt * Holds if data can flow from `e1` to `e2` in zero or more * local (intra-procedural) steps. */ -overlay[caller?] pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll index 32b5d289e28c..ff931cbc5cee 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ExternalFlowExtensions.qll @@ -1,8 +1,6 @@ /** * This module provides extensible predicates for defining MaD models. */ -overlay[local?] -module; /** * Holds if a source model exists for the given parameters. diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index a2d25cadd883..bbb40785d6b4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for defining flow summaries. */ -overlay[local?] -module; private import java private import codeql.dataflow.internal.FlowSummaryImpl diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll b/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll index 9635592476fa..cc95a2b5c1ff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/ModelExclusions.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for exclusions related to MaD models. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 45ad9d0a73b7..2a1ea8b0e068 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java private import codeql.ssa.Ssa as SsaImplCommon private import semmle.code.java.dataflow.SSA diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll index 1ac2c7c60fe8..0f756200abeb 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingImplSpecific.qll @@ -1,8 +1,6 @@ /** * Provides Java-specific definitions for use in the taint tracking library. */ -overlay[local?] -module; private import codeql.dataflow.TaintTracking private import DataFlowImplSpecific diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index 40e361ed1588..d4890b96f8e8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.Collections @@ -23,7 +20,6 @@ private import semmle.code.java.frameworks.JaxWS * Holds if taint can flow from `src` to `sink` in zero or more * local (intra-procedural) steps. */ -overlay[caller?] pragma[inline] predicate localTaint(DataFlow::Node src, DataFlow::Node sink) { localTaintStep*(src, sink) } @@ -31,7 +27,6 @@ predicate localTaint(DataFlow::Node src, DataFlow::Node sink) { localTaintStep*( * Holds if taint can flow from `src` to `sink` in zero or more * local (intra-procedural) steps. */ -overlay[caller?] pragma[inline] predicate localExprTaint(Expr src, Expr sink) { localTaint(DataFlow::exprNode(src), DataFlow::exprNode(sink)) @@ -74,7 +69,6 @@ module LocalTaintFlow { * (intra-procedural) steps that are restricted to be part of a path between * `source` and `sink`. */ - overlay[caller?] pragma[inline] predicate hasFlow(DataFlow::Node n1, DataFlow::Node n2) { step*(n1, n2) } @@ -83,7 +77,6 @@ module LocalTaintFlow { * (intra-procedural) steps that are restricted to be part of a path between * `source` and `sink`. */ - overlay[caller?] pragma[inline] predicate hasExprFlow(Expr n1, Expr n2) { hasFlow(DataFlow::exprNode(n1), DataFlow::exprNode(n2)) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll index a1c690b7df4c..0af549f1f7ee 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/BoundSpecific.qll @@ -1,8 +1,6 @@ /** * Provides Java-specific definitions for bounds. */ -overlay[local?] -module; private import java as J private import semmle.code.java.dataflow.SSA as Ssa diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll index e124b8f71378..b639947793b5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/ModulusAnalysisSpecific.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - module Private { private import java as J private import semmle.code.java.dataflow.SSA as Ssa @@ -17,7 +14,7 @@ module Private { class Expr = J::Expr; - class Guard = G::Guards_v2::Guard; + class Guard = G::Guard_v2; class ConstantIntegerExpr = RU::ConstantIntegerExpr; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll index a8b715648321..30cc089f30bb 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/Sign.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - newtype TSign = TNeg() or TZero() or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll index 8f8d884c9566..6f0067517f90 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisCommon.qll @@ -5,8 +5,6 @@ * The analysis is implemented as an abstract interpretation over the * three-valued domain `{negative, zero, positive}`. */ -overlay[local?] -module; private import SignAnalysisSpecific::Private private import SsaReadPositionCommon diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll index 8789661af7d2..04e896b26011 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - /** * Provides Java-specific definitions for use in sign analysis. */ @@ -15,7 +12,7 @@ module Private { class ConstantIntegerExpr = RU::ConstantIntegerExpr; - class Guard = G::Guards_v2::Guard; + class Guard = G::Guard_v2; class SsaVariable = Ssa::SsaVariable; diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll index 1e3c4db95bed..08335f6680dd 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionCommon.qll @@ -1,8 +1,6 @@ /** * Provides classes for representing a position at which an SSA variable is read. */ -overlay[local?] -module; private import SsaReadPositionSpecific import SsaReadPositionSpecific::Public diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll index dbd7736acde4..9b081150e893 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll @@ -1,8 +1,6 @@ /** * Provides Java-specific definitions for use in the `SsaReadPosition`. */ -overlay[local?] -module; private import semmle.code.java.dataflow.SSA as Ssa private import semmle.code.java.controlflow.BasicBlocks as BB diff --git a/java/ql/lib/semmle/code/java/deadcode/DeadCode.qll b/java/ql/lib/semmle/code/java/deadcode/DeadCode.qll index 140d5e9e2c81..cab159b18043 100644 --- a/java/ql/lib/semmle/code/java/deadcode/DeadCode.qll +++ b/java/ql/lib/semmle/code/java/deadcode/DeadCode.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadEnumConstant import semmle.code.java.deadcode.DeadCodeCustomizations diff --git a/java/ql/lib/semmle/code/java/deadcode/DeadEnumConstant.qll b/java/ql/lib/semmle/code/java/deadcode/DeadEnumConstant.qll index 3a8491b8428e..e87671dba714 100644 --- a/java/ql/lib/semmle/code/java/deadcode/DeadEnumConstant.qll +++ b/java/ql/lib/semmle/code/java/deadcode/DeadEnumConstant.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll index 016350f23ec2..2dcbb96f3b59 100644 --- a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll +++ b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.javaee.Persistence diff --git a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll index ec8ad6e2d4ff..7c0a2fdc2d37 100644 --- a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.deadcode.frameworks.CamelEntryPoints diff --git a/java/ql/lib/semmle/code/java/deadcode/SpringEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/SpringEntryPoints.qll index 7ee7416cecc4..f280d9bf8285 100644 --- a/java/ql/lib/semmle/code/java/deadcode/SpringEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/SpringEntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.spring.Spring diff --git a/java/ql/lib/semmle/code/java/deadcode/StrutsEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/StrutsEntryPoints.qll index a40417debcb5..86910a921f8a 100644 --- a/java/ql/lib/semmle/code/java/deadcode/StrutsEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/StrutsEntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.struts.StrutsActions diff --git a/java/ql/lib/semmle/code/java/deadcode/TestEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/TestEntryPoints.qll index d8674817b17c..b8013d2947a8 100644 --- a/java/ql/lib/semmle/code/java/deadcode/TestEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/TestEntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.Cucumber diff --git a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll index df9ef0a7b7c5..fc2d5f69df9a 100644 --- a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.gwt.GWT diff --git a/java/ql/lib/semmle/code/java/deadcode/frameworks/CamelEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/frameworks/CamelEntryPoints.qll index 453d75e179b5..a96565c606e4 100644 --- a/java/ql/lib/semmle/code/java/deadcode/frameworks/CamelEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/frameworks/CamelEntryPoints.qll @@ -1,8 +1,6 @@ /** * Apache Camel is a messaging framework, which can integrate with Spring. */ -overlay[local?] -module; import java import semmle.code.java.deadcode.DeadCode diff --git a/java/ql/lib/semmle/code/java/deadcode/frameworks/FitNesseEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/frameworks/FitNesseEntryPoints.qll index c817a9b7dac9..a829ccef7d27 100644 --- a/java/ql/lib/semmle/code/java/deadcode/frameworks/FitNesseEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/frameworks/FitNesseEntryPoints.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import default import semmle.code.java.deadcode.DeadCode import external.ExternalArtifact diff --git a/java/ql/lib/semmle/code/java/deadcode/frameworks/GigaSpacesXAPEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/frameworks/GigaSpacesXAPEntryPoints.qll index 3e231e23fc31..39cb18db80a7 100644 --- a/java/ql/lib/semmle/code/java/deadcode/frameworks/GigaSpacesXAPEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/frameworks/GigaSpacesXAPEntryPoints.qll @@ -1,8 +1,6 @@ /** * GigaSpaces XAP (eXtreme Application Platform) is a distributed in-memory "datagrid". */ -overlay[local?] -module; import java import semmle.code.java.deadcode.DeadCode diff --git a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll index a9988e920c62..bd293eed6b3a 100644 --- a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll @@ -5,8 +5,6 @@ * data flow check for lambdas, anonymous classes, and other sufficiently * private classes where all object instantiations are accounted for. */ -overlay[local?] -module; import java private import VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index 12fe1cba5e99..293ba894fdfb 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -6,8 +6,6 @@ * The set of dispatch targets for `Object.toString()` calls are reduced based * on possible data flow from objects of more specific types to the qualifier. */ -overlay[local?] -module; import java private import VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll index 877a62fb9455..78bf1ad0bdc1 100644 --- a/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll +++ b/java/ql/lib/semmle/code/java/dispatch/VirtualDispatch.qll @@ -2,8 +2,6 @@ * Provides predicates for reasoning about runtime call targets through virtual * dispatch. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.TypeFlow diff --git a/java/ql/lib/semmle/code/java/dispatch/WrappedInvocation.qll b/java/ql/lib/semmle/code/java/dispatch/WrappedInvocation.qll index e76c252662a3..f7840f197853 100644 --- a/java/ql/lib/semmle/code/java/dispatch/WrappedInvocation.qll +++ b/java/ql/lib/semmle/code/java/dispatch/WrappedInvocation.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for reasoning about calls that may invoke one * of their arguments. */ -overlay[local?] -module; import java import VirtualDispatch diff --git a/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll b/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll index cd585de58e4e..6c92f7298d92 100644 --- a/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll +++ b/java/ql/lib/semmle/code/java/dispatch/internal/Unification.qll @@ -1,8 +1,6 @@ /** * Provides a module to check whether two `ParameterizedType`s are unifiable. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/environment/SystemProperty.qll b/java/ql/lib/semmle/code/java/environment/SystemProperty.qll index add93ee56c39..bee91d7c6b7f 100644 --- a/java/ql/lib/semmle/code/java/environment/SystemProperty.qll +++ b/java/ql/lib/semmle/code/java/environment/SystemProperty.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with java system properties. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/ApacheHttp.qll b/java/ql/lib/semmle/code/java/frameworks/ApacheHttp.qll index 73078c1da83c..61f6aa9a34ea 100644 --- a/java/ql/lib/semmle/code/java/frameworks/ApacheHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/ApacheHttp.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates related to `org.apache.http.*` and `org.apache.hc.*`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/ApacheLdap.qll b/java/ql/lib/semmle/code/java/frameworks/ApacheLdap.qll index 6d76caf36d55..8bcba2f044eb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/ApacheLdap.qll +++ b/java/ql/lib/semmle/code/java/frameworks/ApacheLdap.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Apache LDAP API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Assertions.qll b/java/ql/lib/semmle/code/java/frameworks/Assertions.qll index 9849be5f3603..e1601c854e4e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Assertions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Assertions.qll @@ -5,8 +5,6 @@ * `org.junit.jupiter.api.Assertions`, `com.google.common.base.Preconditions`, * and `java.util.Objects`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Camel.qll b/java/ql/lib/semmle/code/java/frameworks/Camel.qll index 137855b5fa1a..381ee3cb28e2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Camel.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Camel.qll @@ -1,8 +1,6 @@ /** * Apache Camel messaging framework. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.spring.SpringCamel diff --git a/java/ql/lib/semmle/code/java/frameworks/Castor.qll b/java/ql/lib/semmle/code/java/frameworks/Castor.qll index 2becb2fbf178..f1e1b8257252 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Castor.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Castor.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Castor framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Cucumber.qll b/java/ql/lib/semmle/code/java/frameworks/Cucumber.qll index 15e71a25f890..9bcfb24bae5a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Cucumber.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Cucumber.qll @@ -1,8 +1,6 @@ /** * Cucumber is an open-source project for writing executable acceptance tests in human-readable `.feature` files. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/FastJson.qll b/java/ql/lib/semmle/code/java/frameworks/FastJson.qll index 305f795017a6..c9f7d9e8b89d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/FastJson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/FastJson.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the FastJson framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Flexjson.qll b/java/ql/lib/semmle/code/java/frameworks/Flexjson.qll index 2e5cb2ce9593..55a8e2624386 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Flexjson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Flexjson.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with the Flexjson framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Guice.qll b/java/ql/lib/semmle/code/java/frameworks/Guice.qll index bf6a3d5467cc..8dfb63983982 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Guice.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Guice.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Guice framework. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/HessianBurlap.qll b/java/ql/lib/semmle/code/java/frameworks/HessianBurlap.qll index 3a10b75a2a69..e3c5269e5b20 100644 --- a/java/ql/lib/semmle/code/java/frameworks/HessianBurlap.qll +++ b/java/ql/lib/semmle/code/java/frameworks/HessianBurlap.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the HessianBurlap framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Hibernate.qll b/java/ql/lib/semmle/code/java/frameworks/Hibernate.qll index 4e5050b412ca..28b281014547 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Hibernate.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Hibernate.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Hibernate framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll index f6097e8c4492..8f37ecc24ea0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/InputStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/InputStream.qll @@ -1,6 +1,4 @@ /** Provides definitions related to `java.io.InputStream`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/IoJsonWebToken.qll b/java/ql/lib/semmle/code/java/frameworks/IoJsonWebToken.qll index b4573013295b..3da90bb7e67a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/IoJsonWebToken.qll +++ b/java/ql/lib/semmle/code/java/frameworks/IoJsonWebToken.qll @@ -1,6 +1,4 @@ /** Predicates and classes to reason about the `io.jsonwebtoken` library. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll index 96075bbccf3c..e25add17ccb1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll @@ -1,6 +1,4 @@ /** Definitions related to JAXB. */ -overlay[local?] -module; import semmle.code.java.Type diff --git a/java/ql/lib/semmle/code/java/frameworks/JUnitAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/JUnitAnnotations.qll index ad58cd486e16..d74fe683f063 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JUnitAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JUnitAnnotations.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with annotations from the `JUnit` framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/JYaml.qll b/java/ql/lib/semmle/code/java/frameworks/JYaml.qll index cd9414521c4e..9d77b86f6c1d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JYaml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JYaml.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the JYaml framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Jabsorb.qll b/java/ql/lib/semmle/code/java/frameworks/Jabsorb.qll index e8bb82f156fe..eede97b411cb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jabsorb.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jabsorb.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with the Jabsorb JSON-RPC ORB framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Jackson.qll b/java/ql/lib/semmle/code/java/frameworks/Jackson.qll index 5c1d02759231..605370ec594f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jackson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jackson.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Jackson serialization framework. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll index 22f33d346df0..0f5da6c39eac 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with annotations in the `javax` package. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 62289f737c02..a0f891fd36ea 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -2,8 +2,6 @@ * Definitions relating to JAX-WS (Java/Jakarta API for XML Web Services) and JAX-RS * (Java/Jakarta API for RESTful Web Services). */ -overlay[local?] -module; import java private import semmle.code.java.frameworks.Networking diff --git a/java/ql/lib/semmle/code/java/frameworks/Jdbc.qll b/java/ql/lib/semmle/code/java/frameworks/Jdbc.qll index c7172527d1fe..37be7dcf09a7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jdbc.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jdbc.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Java JDBC API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Jms.qll b/java/ql/lib/semmle/code/java/frameworks/Jms.qll index 3cc76771a776..653582100bdb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jms.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jms.qll @@ -1,6 +1,4 @@ /** Provides definitions for working with the JMS library. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll index 0d7d481dc1d0..267cdcd59dc8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Java JNDI API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/JoddJson.qll b/java/ql/lib/semmle/code/java/frameworks/JoddJson.qll index 3f28b2e8c7e4..d92b80ca32b5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JoddJson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JoddJson.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Jodd JSON framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll b/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll index 433277a64728..85f3a5ef06bb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JsonIo.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Json-io framework. */ -overlay[local?] -module; import java import semmle.code.java.Maps diff --git a/java/ql/lib/semmle/code/java/frameworks/Kryo.qll b/java/ql/lib/semmle/code/java/frameworks/Kryo.qll index 77a423a8a9ef..7dde62c4ba4b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Kryo.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Kryo.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Kryo serialization framework. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/Lombok.qll b/java/ql/lib/semmle/code/java/frameworks/Lombok.qll index 84a890c498f8..39ee7c5393d5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Lombok.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Lombok.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for identifying use of the Lombok framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Mail.qll b/java/ql/lib/semmle/code/java/frameworks/Mail.qll index c61e5ae34f99..eeb9665dc2ed 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mail.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to work with email */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll index 1a8d987a38e4..0f5971a68ace 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mockito.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mockito.qll @@ -3,8 +3,6 @@ * * QL classes are provided for detecting uses of Mockito annotations on fields. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index e3f89186821b..c7fc09a33b4d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the MyBatis framework. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/Netty.qll b/java/ql/lib/semmle/code/java/frameworks/Netty.qll index caaa429d69ec..9a72c7f64043 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Netty.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Netty.qll @@ -1,6 +1,4 @@ /** Provides definitions related to the Netty framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index 6eeb5aa90241..1139d0d00621 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -1,8 +1,6 @@ /** * Definitions related to `java.net.*`. */ -overlay[local?] -module; import semmle.code.java.Type private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/OpenSaml.qll b/java/ql/lib/semmle/code/java/frameworks/OpenSaml.qll index 5327db3af865..c8b9a320ec1b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/OpenSaml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/OpenSaml.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the OpenSAML libraries. */ -overlay[local?] -module; import java private import semmle.code.java.security.InsecureRandomnessQuery diff --git a/java/ql/lib/semmle/code/java/frameworks/Properties.qll b/java/ql/lib/semmle/code/java/frameworks/Properties.qll index 50a13c236744..15e7b6878858 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Properties.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Properties.qll @@ -1,6 +1,4 @@ /** Definitions related to `java.util.Properties`. */ -overlay[local?] -module; import semmle.code.java.Type private import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/Protobuf.qll b/java/ql/lib/semmle/code/java/frameworks/Protobuf.qll index bbaa56f46119..14224bc148de 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Protobuf.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Protobuf.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Protobuf framework. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/Regex.qll b/java/ql/lib/semmle/code/java/frameworks/Regex.qll index f63f46c38780..780dec48b923 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Regex.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Regex.qll @@ -1,6 +1,4 @@ /** Definitions related to `java.util.regex`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll index 03ea238982d6..922f90bccb62 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll @@ -1,6 +1,4 @@ /** Remote Method Invocation. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/Selenium.qll b/java/ql/lib/semmle/code/java/frameworks/Selenium.qll index 6a85d5b09159..0ea61ae0ecfe 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Selenium.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Selenium.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for identifying classes reflectively constructed by Selenium using the * `PageFactory.initElements(...)` method. */ -overlay[local?] -module; import default import semmle.code.java.Reflection diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index 7d7beb74fc30..80e80c019b0a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Java Servlet API. */ -overlay[local?] -module; import semmle.code.java.Type diff --git a/java/ql/lib/semmle/code/java/frameworks/SnakeYaml.qll b/java/ql/lib/semmle/code/java/frameworks/SnakeYaml.qll index 0edbad2196e1..3bde32912180 100644 --- a/java/ql/lib/semmle/code/java/frameworks/SnakeYaml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/SnakeYaml.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the SnakeYaml serialization framework. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/SpringJdbc.qll b/java/ql/lib/semmle/code/java/frameworks/SpringJdbc.qll index 192e579a4f6b..82eedca44e88 100644 --- a/java/ql/lib/semmle/code/java/frameworks/SpringJdbc.qll +++ b/java/ql/lib/semmle/code/java/frameworks/SpringJdbc.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Spring JDBC framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/SpringLdap.qll b/java/ql/lib/semmle/code/java/frameworks/SpringLdap.qll index 79c3739dde4f..da40caf37445 100644 --- a/java/ql/lib/semmle/code/java/frameworks/SpringLdap.qll +++ b/java/ql/lib/semmle/code/java/frameworks/SpringLdap.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Spring LDAP API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/SpringWeb.qll b/java/ql/lib/semmle/code/java/frameworks/SpringWeb.qll index 9bb856e22604..a011af98cd5c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/SpringWeb.qll +++ b/java/ql/lib/semmle/code/java/frameworks/SpringWeb.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import spring.SpringController import spring.SpringWeb diff --git a/java/ql/lib/semmle/code/java/frameworks/Stream.qll b/java/ql/lib/semmle/code/java/frameworks/Stream.qll index 8927355d6377..a449f8bd99a6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Stream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Stream.qll @@ -1,6 +1,4 @@ /** Definitions related to `java.util.stream`. */ -overlay[local?] -module; private import semmle.code.java.dataflow.FlowSummary diff --git a/java/ql/lib/semmle/code/java/frameworks/ThreadLocal.qll b/java/ql/lib/semmle/code/java/frameworks/ThreadLocal.qll index c813c0383eb6..826eed8dffcc 100644 --- a/java/ql/lib/semmle/code/java/frameworks/ThreadLocal.qll +++ b/java/ql/lib/semmle/code/java/frameworks/ThreadLocal.qll @@ -1,6 +1,4 @@ /** Definitions related to `java.lang.ThreadLocal`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/Thrift.qll b/java/ql/lib/semmle/code/java/frameworks/Thrift.qll index 5272745b4e97..4e07a2730dc2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Thrift.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Thrift.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Apache Thrift framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/UnboundId.qll b/java/ql/lib/semmle/code/java/frameworks/UnboundId.qll index 6359fbf2afbc..bfb7a6604246 100644 --- a/java/ql/lib/semmle/code/java/frameworks/UnboundId.qll +++ b/java/ql/lib/semmle/code/java/frameworks/UnboundId.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the UnboundID API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/XStream.qll b/java/ql/lib/semmle/code/java/frameworks/XStream.qll index aca6117023ee..0e62459e13d8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/XStream.qll +++ b/java/ql/lib/semmle/code/java/frameworks/XStream.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the XStream XML serialization framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/YamlBeans.qll b/java/ql/lib/semmle/code/java/frameworks/YamlBeans.qll index 040ae60fc710..b5db59926be4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/YamlBeans.qll +++ b/java/ql/lib/semmle/code/java/frameworks/YamlBeans.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the YamlBeans framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll index 85df4366ec27..befcc036205e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Android.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Android.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Android components. */ -overlay[local?] -module; import java private import semmle.code.xml.AndroidManifest diff --git a/java/ql/lib/semmle/code/java/frameworks/android/AsyncTask.qll b/java/ql/lib/semmle/code/java/frameworks/android/AsyncTask.qll index 1aba64a4c7e0..226a80709456 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/AsyncTask.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/AsyncTask.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about `AsyncTask`s in Android. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Compose.qll b/java/ql/lib/semmle/code/java/frameworks/android/Compose.qll index 9123600d4e48..0e6399cba1f0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Compose.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Compose.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with components generated by the Android's Jetpack Compose compiler. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll b/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll index f344377b9cd8..7bcd4baa3e50 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/ContentProviders.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Content Providers. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll b/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll index c07ddea6dbab..7eb088a9514f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/ExternalStorage.qll @@ -1,6 +1,4 @@ /** Provides definitions for working with uses of Android external storage */ -overlay[local?] -module; import java private import semmle.code.java.security.FileReadWrite diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Fragment.qll b/java/ql/lib/semmle/code/java/frameworks/android/Fragment.qll index 64c92955ee7b..debdd69e1944 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Fragment.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Fragment.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to track Android fragments. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index c3b58873d1f0..6e321b0ad900 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java private import semmle.code.java.frameworks.android.Android private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll b/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll index 0f6f5d845b86..ee430b62d577 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Layout.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with Android layouts and UI elements. */ -overlay[local?] -module; import java import semmle.code.xml.AndroidManifest diff --git a/java/ql/lib/semmle/code/java/frameworks/android/OnActivityResultSource.qll b/java/ql/lib/semmle/code/java/frameworks/android/OnActivityResultSource.qll index 5a1a9bf8c7a0..5253526f0fd1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/OnActivityResultSource.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/OnActivityResultSource.qll @@ -1,6 +1,4 @@ /** Provides a remote flow source for Android's `Activity.onActivityResult` method. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/android/PendingIntent.qll b/java/ql/lib/semmle/code/java/frameworks/android/PendingIntent.qll index 720be6dce03a..1c17d3c9b8df 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/PendingIntent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/PendingIntent.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to the class `PendingIntent`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll b/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll index f46f4e0e51d6..2898b6aee54f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/SQLite.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with SQLite databases. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/android/SharedPreferences.qll b/java/ql/lib/semmle/code/java/frameworks/android/SharedPreferences.qll index a11857e9f1f4..a3298fd70d87 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/SharedPreferences.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/SharedPreferences.qll @@ -1,6 +1,4 @@ /** Provides classes related to `android.content.SharedPreferences`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Slice.qll b/java/ql/lib/semmle/code/java/frameworks/android/Slice.qll index 60811d9bc2d6..96ccb2a4401e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Slice.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Slice.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to `androidx.slice`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 8fa804f52797..78eeae4bdf22 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** The class `android.webkit.WebView`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll index 7b277a797f90..9a2729f5b794 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with Android widgets. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/android/XmlParsing.qll b/java/ql/lib/semmle/code/java/frameworks/android/XmlParsing.qll index 2235bc5eaecc..4e6c39f25757 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/XmlParsing.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/XmlParsing.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java class XmlPullParser extends Interface { diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll index 97d51fc2cbc4..24030e35045d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Collections.qll @@ -1,6 +1,4 @@ /** Definitions related to the Apache Commons Collections library. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/CommonsXml.qll b/java/ql/lib/semmle/code/java/frameworks/apache/CommonsXml.qll index 163bd773dad0..5e72b26e009b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/CommonsXml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/CommonsXml.qll @@ -1,6 +1,4 @@ /** Provides XML definitions related to the `org.apache.commons` package. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.RangeUtils diff --git a/java/ql/lib/semmle/code/java/frameworks/apache/Lang.qll b/java/ql/lib/semmle/code/java/frameworks/apache/Lang.qll index 27c7f9530ad1..9ea2400b8718 100644 --- a/java/ql/lib/semmle/code/java/frameworks/apache/Lang.qll +++ b/java/ql/lib/semmle/code/java/frameworks/apache/Lang.qll @@ -1,6 +1,4 @@ /** Definitions related to the Apache Commons Lang library. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSteps diff --git a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaAnnotations.qll index b1637038b99a..1d42bd4c94b4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaAnnotations.qll @@ -14,8 +14,6 @@ * * This creates a route to the `ConsumeMdb` class for messages sent to "activemq:queue:sayhello". */ -overlay[local?] -module; import java import semmle.code.java.Reflection diff --git a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll index df8903266592..ed09baf8ead2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll +++ b/java/ql/lib/semmle/code/java/frameworks/camel/CamelJavaDSL.qll @@ -13,8 +13,6 @@ * * This creates a route to the `TargetBean` class for messages sent to "direct.start". */ -overlay[local?] -module; import java import semmle.code.java.Reflection diff --git a/java/ql/lib/semmle/code/java/frameworks/gigaspaces/GigaSpaces.qll b/java/ql/lib/semmle/code/java/frameworks/gigaspaces/GigaSpaces.qll index a03ed1c5266e..2b99e0fcff0b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/gigaspaces/GigaSpaces.qll +++ b/java/ql/lib/semmle/code/java/frameworks/gigaspaces/GigaSpaces.qll @@ -1,8 +1,6 @@ /** * GigaSpaces XAP (eXtreme Application Platform) is a distributed in-memory "datagrid". */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll b/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll index 5e0304ca7b2a..db8bc2574c13 100644 --- a/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/google/GoogleHttpClientApi.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.Serializability import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/google/Gson.qll b/java/ql/lib/semmle/code/java/frameworks/google/Gson.qll index 7185c87b09f2..9dc38a529415 100644 --- a/java/ql/lib/semmle/code/java/frameworks/google/Gson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/google/Gson.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with the Gson framework. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll index bd8973b0adb8..6abaee8ff720 100644 --- a/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/google/GsonSerializability.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with Java Serialization in the context of * the `com.google.gson` JSON processing framework. */ -overlay[local?] -module; import java private import semmle.code.java.Serializability diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll index aebdb22f42ac..94dd356f62d7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Collections.qll @@ -1,6 +1,4 @@ /** Definitions of flow steps through the collection types in the Guava framework */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/guava/Guava.qll b/java/ql/lib/semmle/code/java/frameworks/guava/Guava.qll index 545aae763d55..5dd8aaa18eeb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/guava/Guava.qll +++ b/java/ql/lib/semmle/code/java/frameworks/guava/Guava.qll @@ -1,8 +1,6 @@ /** * Definitions for tracking taint steps through the Guava framework. */ -overlay[local?] -module; import java import Collections diff --git a/java/ql/lib/semmle/code/java/frameworks/gwt/GWT.qll b/java/ql/lib/semmle/code/java/frameworks/gwt/GWT.qll index a58e49aa76f0..6780a9261b9b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/gwt/GWT.qll +++ b/java/ql/lib/semmle/code/java/frameworks/gwt/GWT.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with the GWT framework. */ -overlay[local?] -module; import java import GwtXml diff --git a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinder.qll b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinder.qll index d692740f40e6..8532cc81bb30 100644 --- a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinder.qll +++ b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinder.qll @@ -4,8 +4,6 @@ * The UiBinder framework allows the specification of user interfaces in XML template files. These * can then be interacted with programmatically by writing an associated owner class. */ -overlay[local?] -module; import java import GwtUiBinderXml diff --git a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinderXml.qll b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinderXml.qll index fef34f1bc44d..0fb8ed3cd70d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinderXml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtUiBinderXml.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for identifying GWT UiBinder framework XML templates. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtXml.qll b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtXml.qll index b36824543005..e143d06cccbc 100644 --- a/java/ql/lib/semmle/code/java/frameworks/gwt/GwtXml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/gwt/GwtXml.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with `*.gwt.xml` files. */ -overlay[local?] -module; import semmle.code.xml.XML diff --git a/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll index 44752f94576b..ae316cf649e5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll +++ b/java/ql/lib/semmle/code/java/frameworks/hudson/Hudson.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to the Hudson framework. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSources diff --git a/java/ql/lib/semmle/code/java/frameworks/j2objc/J2ObjC.qll b/java/ql/lib/semmle/code/java/frameworks/j2objc/J2ObjC.qll index abb24b909e97..2e9b04d6a8ce 100644 --- a/java/ql/lib/semmle/code/java/frameworks/j2objc/J2ObjC.qll +++ b/java/ql/lib/semmle/code/java/frameworks/j2objc/J2ObjC.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with OCNI (Objective-C Native Interface). */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/jOOQ.qll b/java/ql/lib/semmle/code/java/frameworks/jOOQ.qll index e5bad7435d58..2aa78e9425da 100644 --- a/java/ql/lib/semmle/code/java/frameworks/jOOQ.qll +++ b/java/ql/lib/semmle/code/java/frameworks/jOOQ.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the jOOQ framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll index aa7da753f434..8e1077d8bc01 100644 --- a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with Java Serialization in the context of * the `com.fasterxml.jackson` JSON processing framework. */ -overlay[local?] -module; import java import semmle.code.java.Serializability diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll index 2f749962e94d..b4ae1b1c19cb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with Java Server Faces. */ -overlay[local?] -module; import default import semmle.code.java.frameworks.javaee.jsf.JSFAnnotations diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index b5031d7dff08..b38cba889e00 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the JavaEE Persistence API. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/PersistenceXML.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/PersistenceXML.qll index e6ada894fc6f..7564dafa37e0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/PersistenceXML.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/PersistenceXML.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with JavaEE * persistence configuration XML files (`persistence.xml`). */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll index 222b778ba588..c1a0b08d8e7c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll @@ -1,6 +1,4 @@ /** Provides definitions related to the `javax.xml` package. */ -overlay[local?] -module; import java private import semmle.code.java.security.XmlParsers diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll index 2b003b3c94e7..d165370d1391 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with Enterprise Java Beans. */ -overlay[local?] -module; import java import EJBJarXML diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBJarXML.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBJarXML.qll index dc465ddc4c62..f44d77d89bd3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBJarXML.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBJarXML.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with * EJB deployment descriptor XML files (`ejb-jar.xml`). */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll index 2f5a88ba5c81..f5a52490768c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for modeling * EJB Programming Restrictions (see EJB 3.0 specification, section 21.1.2). */ -overlay[local?] -module; import java import EJB diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll index 3338fa840ab0..1db82875ad94 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with Java Server Faces annotations. */ -overlay[local?] -module; import default diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFFacesContextXML.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFFacesContextXML.qll index 060398f648c1..13ed765638d9 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFFacesContextXML.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFFacesContextXML.qll @@ -1,8 +1,6 @@ /** * Provides classes for JSF "Application Configuration Resources File", usually called `faces-config.xml`. */ -overlay[local?] -module; import default diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index df646e8a9a2c..546d3be69833 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with JavaServer Faces renderer. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/javase/Beans.qll b/java/ql/lib/semmle/code/java/frameworks/javase/Beans.qll index 1aa39c638286..dbdaf6960f31 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javase/Beans.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javase/Beans.qll @@ -1,6 +1,4 @@ /** Provides definitions related to the `java.beans` package. */ -overlay[local?] -module; import java private import semmle.code.java.security.XmlParsers diff --git a/java/ql/lib/semmle/code/java/frameworks/javase/Http.qll b/java/ql/lib/semmle/code/java/frameworks/javase/Http.qll index addc4a576bdc..5f03c0b190fd 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javase/Http.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javase/Http.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates related to `java.net.http.*`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/javase/WebSocket.qll b/java/ql/lib/semmle/code/java/frameworks/javase/WebSocket.qll index 2ea26630619b..17d3d4579d2a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javase/WebSocket.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javase/WebSocket.qll @@ -1,8 +1,6 @@ /** * Provides classes for identifying methods called by the Java SE WebSocket package. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/kotlin/IO.qll b/java/ql/lib/semmle/code/java/frameworks/kotlin/IO.qll index 1c8181206f54..38af34bc6900 100644 --- a/java/ql/lib/semmle/code/java/frameworks/kotlin/IO.qll +++ b/java/ql/lib/semmle/code/java/frameworks/kotlin/IO.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to `kotlin.io`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/kotlin/Kotlin.qll b/java/ql/lib/semmle/code/java/frameworks/kotlin/Kotlin.qll index 3f4d0e04c691..206996af321d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/kotlin/Kotlin.qll +++ b/java/ql/lib/semmle/code/java/frameworks/kotlin/Kotlin.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to `kotlin`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/kotlin/Serialization.qll b/java/ql/lib/semmle/code/java/frameworks/kotlin/Serialization.qll index 1dc22be1a8b9..c0269266a59e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/kotlin/Serialization.qll +++ b/java/ql/lib/semmle/code/java/frameworks/kotlin/Serialization.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the `kotlinx.serialization` plugin. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/kotlin/Text.qll b/java/ql/lib/semmle/code/java/frameworks/kotlin/Text.qll index 1b576251f873..8521b2847848 100644 --- a/java/ql/lib/semmle/code/java/frameworks/kotlin/Text.qll +++ b/java/ql/lib/semmle/code/java/frameworks/kotlin/Text.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to `kotlin.text`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/mdht/MdhtXml.qll b/java/ql/lib/semmle/code/java/frameworks/mdht/MdhtXml.qll index dc5ea6809948..b762fbcc8639 100644 --- a/java/ql/lib/semmle/code/java/frameworks/mdht/MdhtXml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/mdht/MdhtXml.qll @@ -1,6 +1,4 @@ /** Provides definitions related to XML parsing in Model-Driven Health Tools. */ -overlay[local?] -module; import java private import semmle.code.java.security.XmlParsers diff --git a/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll b/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll index fe95cd0d39d3..19cabda7073f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/owasp/Esapi.qll @@ -1,6 +1,4 @@ /** Classes and predicates for reasoning about the `owasp.easpi` package. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/play/Play.qll b/java/ql/lib/semmle/code/java/frameworks/play/Play.qll index bbf6385fc0ad..7b99b23704e3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/play/Play.qll +++ b/java/ql/lib/semmle/code/java/frameworks/play/Play.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with the Play framework. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/ratpack/RatpackExec.qll b/java/ql/lib/semmle/code/java/frameworks/ratpack/RatpackExec.qll index f8259e95a2ee..7efa72c3164a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/ratpack/RatpackExec.qll +++ b/java/ql/lib/semmle/code/java/frameworks/ratpack/RatpackExec.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates related to `ratpack.exec.*`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/rundeck/RundeckXml.qll b/java/ql/lib/semmle/code/java/frameworks/rundeck/RundeckXml.qll index 78e7fbf30a9b..0f271e073e6e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/rundeck/RundeckXml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/rundeck/RundeckXml.qll @@ -1,6 +1,4 @@ /** Provides definitions related to XML parsing in Rundeck. */ -overlay[local?] -module; import java private import semmle.code.java.security.XmlParsers diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/Spring.qll b/java/ql/lib/semmle/code/java/frameworks/spring/Spring.qll index 1c9c67838d48..2b09288610e4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/Spring.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/Spring.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringAbstractRef import semmle.code.java.frameworks.spring.SpringAlias diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAbstractRef.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAbstractRef.qll index 23ea64bd898e..4dd4b0ab9478 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAbstractRef.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAbstractRef.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAlias.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAlias.qll index aab0bba6be2b..cbc4f025dacd 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAlias.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAlias.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringArgType.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringArgType.qll index 37a162cc8901..bddf5f01f9ea 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringArgType.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringArgType.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAttribute.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAttribute.qll index d99a28c56181..a20eef4d0d75 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAttribute.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAttribute.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll index e758811b368e..966db95afce6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for identifying methods and constructors called by Spring injection. */ -overlay[local?] -module; import java import SpringComponentScan diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll index ec06e9f28905..a53cbf67090f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBean.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBeanRefType diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanFile.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanFile.qll index 810182d8f1f0..d96f264b91f5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanFile.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanFile.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanRefType.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanRefType.qll index 490fe3e05610..4d85a56ab2bf 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanRefType.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBeanRefType.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBoot.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBoot.qll index 155afd41ba5e..d77e4549e4e7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringBoot.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringBoot.qll @@ -2,8 +2,6 @@ * Provides classes for working with Spring classes and interfaces from * `org.springframework.boot.*`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll index 28108865af41..6fec620ccd55 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringCamel.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for identifying Spring integration for the Apache Camel messaging framework. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringComponentScan.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringComponentScan.qll index b5b3e9834c05..d285e9d0e6a5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringComponentScan.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringComponentScan.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringAutowire import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringConstructorArg.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringConstructorArg.qll index 3f0cc6a25af2..e434e53ca3dd 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringConstructorArg.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringConstructorArg.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll index ee00433da129..c93993336d95 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.Maps import SpringWeb diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringDescription.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringDescription.qll index 5bcc2e896eb1..34cf13a95716 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringDescription.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringDescription.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll index a568a6ee8c77..e2ce38ea44e0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll index aa02643d698e..49ec6e1fd8a5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringExpression.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with the Spring Expression Language (SpEL). */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringFlex.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringFlex.qll index a7b1b655693b..af0afa91f4c3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringFlex.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringFlex.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for the Spring BlazeDS integration. BlazeDS allows Java applications to integrate with * Apache Flex applications, which are ultimately deployed as Adobe Flash applications. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll index 5f9271c01490..e12e2b2643a0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringHttp.qll @@ -2,8 +2,6 @@ * Provides classes for working with Spring classes and interfaces from * `org.springframework.http`. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringIdRef.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringIdRef.qll index 6dc2b313841a..0b8b3e3a87b4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringIdRef.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringIdRef.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringAbstractRef diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringImport.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringImport.qll index 1081b157d224..688a14da32e2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringImport.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringImport.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringInitializingBean.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringInitializingBean.qll index 2766df0b8bc9..216333da38ae 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringInitializingBean.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringInitializingBean.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringKey.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringKey.qll index b48834dc738e..5f07b2277067 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringKey.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringKey.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringList.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringList.qll index 7e9b3423f888..455fb956eb19 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringList.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringList.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringListOrSet diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringListOrSet.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringListOrSet.qll index 075cf7b7d8b4..521795d8b221 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringListOrSet.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringListOrSet.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringMergable diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringLookupMethod.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringLookupMethod.qll index 7371991cdaa6..4b17c23612a6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringLookupMethod.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringLookupMethod.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMap.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMap.qll index a5766d7c7111..19b2cfffdac7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMap.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMap.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringMergable diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMergable.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMergable.qll index 94402918b8ee..baef7d3b91af 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMergable.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMergable.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMeta.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMeta.qll index d4a524c3502f..640305b313a2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringMeta.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringMeta.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringNull.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringNull.qll index f08746dae5a3..c3f2c00a2b72 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringNull.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringNull.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProfile.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProfile.qll index 2d8a4577e567..48a2b3679901 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProfile.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProfile.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringComponentScan diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProp.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProp.qll index 96da7fa271c5..771370a3e7a1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProp.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll index aec85de58d4e..a83eeed13fab 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProperty.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProps.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProps.qll index 00e7e8e52536..59a094f67612 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringProps.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringProps.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringMergable diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringQualifier.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringQualifier.qll index ad927f48cbbc..eb57b37efe0a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringQualifier.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringQualifier.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringRef.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringRef.qll index 8b799d632c23..89d58ff47fcd 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringRef.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringRef.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringAbstractRef diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringReplacedMethod.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringReplacedMethod.qll index cf32c940f864..47e8d182898a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringReplacedMethod.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringReplacedMethod.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringSecurity.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringSecurity.qll index 694dae05773a..835b679d50a6 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringSecurity.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringSecurity.qll @@ -2,8 +2,6 @@ * Provides classes for working with Spring classes and interfaces from * `org.springframework.security.*`. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringSet.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringSet.qll index 4f75d08401b7..21aca5ff54eb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringSet.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringSet.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringListOrSet diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringValue.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringValue.qll index 68cdfa7efcc2..55854d60f9c7 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringValue.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringValue.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringXMLElement diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWeb.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWeb.qll index 362d4b323648..88db87e7e21e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWeb.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWeb.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with Spring web requests. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll index 0580415a3448..e84108394704 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringWebClient.qll @@ -1,8 +1,6 @@ /** * Provides classes for working with Spring web clients. */ -overlay[local?] -module; import java import SpringHttp diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringXMLElement.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringXMLElement.qll index 21bea51cd223..312cd659b398 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringXMLElement.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringXMLElement.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.spring.SpringBeanFile import semmle.code.java.frameworks.spring.SpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBean.qll b/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBean.qll index 7624d4665719..ffbc5c9e5ecc 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBean.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBean.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import semmle.code.java.frameworks.spring.SpringBean import semmle.code.java.frameworks.spring.SpringBeanFile import semmle.code.java.frameworks.spring.SpringEntry diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBeanFile.qll b/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBeanFile.qll index 45d432848838..999e34d1cea3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBeanFile.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/metrics/MetricSpringBeanFile.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import semmle.code.java.frameworks.spring.SpringBean import semmle.code.java.frameworks.spring.SpringBeanFile import semmle.code.java.frameworks.spring.metrics.MetricSpringBean diff --git a/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll b/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll index 28ca95b55413..599a08094dd4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll +++ b/java/ql/lib/semmle/code/java/frameworks/stapler/Stapler.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to the Stapler framework. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/Struts2Serializability.qll b/java/ql/lib/semmle/code/java/frameworks/struts/Struts2Serializability.qll index f9981a30393e..cb8b876be7ad 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/Struts2Serializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/Struts2Serializability.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with objects bound from Http requests in the context of * the Struts2 web framework. */ -overlay[local?] -module; import java private import semmle.code.java.Serializability diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsActions.qll b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsActions.qll index 641fb0c6e6f4..4200e83d4db2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsActions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsActions.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.struts.StrutsConventions import semmle.code.java.frameworks.struts.StrutsXML @@ -133,7 +130,7 @@ class Struts2PrepareMethod extends Method { */ class Struts2ActionSupportClass extends Class { Struts2ActionSupportClass() { - this.getASourceSupertype+().hasQualifiedName("com.opensymphony.xwork2", "ActionSupport") + this.getAStrictAncestor().hasQualifiedName("com.opensymphony.xwork2", "ActionSupport") } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll index 823951b1d3c5..d97415354b35 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsAnnotations.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsConventions.qll b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsConventions.qll index 3e2fd5c0b974..17ff35371945 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsConventions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsConventions.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java import semmle.code.java.frameworks.struts.StrutsAnnotations import semmle.code.java.frameworks.struts.StrutsXML diff --git a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsXML.qll b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsXML.qll index 33131a1641da..273034978d17 100644 --- a/java/ql/lib/semmle/code/java/frameworks/struts/StrutsXML.qll +++ b/java/ql/lib/semmle/code/java/frameworks/struts/StrutsXML.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll b/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll index e6fa5d9e5c26..d3dca781e54b 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java methods and constructors. */ -overlay[local?] -module; import semmle.code.java.Member diff --git a/java/ql/lib/semmle/code/java/metrics/MetricElement.qll b/java/ql/lib/semmle/code/java/metrics/MetricElement.qll index f9d57df7f800..086389e143cd 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricElement.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricElement.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java elements. */ -overlay[local?] -module; import semmle.code.java.Element import semmle.code.java.Type diff --git a/java/ql/lib/semmle/code/java/metrics/MetricField.qll b/java/ql/lib/semmle/code/java/metrics/MetricField.qll index 32e3b263c282..ef8e692ba5f8 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricField.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricField.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java fields. */ -overlay[local?] -module; import semmle.code.java.Member diff --git a/java/ql/lib/semmle/code/java/metrics/MetricPackage.qll b/java/ql/lib/semmle/code/java/metrics/MetricPackage.qll index fa7556316429..eafdd57dd8ac 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricPackage.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricPackage.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java packages. */ -overlay[local?] -module; import semmle.code.java.Package import MetricElement diff --git a/java/ql/lib/semmle/code/java/metrics/MetricRefType.qll b/java/ql/lib/semmle/code/java/metrics/MetricRefType.qll index 1652a1200708..17271394b2e6 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricRefType.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricRefType.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java classes and interfaces. */ -overlay[local?] -module; import semmle.code.java.Type import MetricElement diff --git a/java/ql/lib/semmle/code/java/metrics/MetricStmt.qll b/java/ql/lib/semmle/code/java/metrics/MetricStmt.qll index bc2cf5ae1072..b818c30edf6f 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricStmt.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricStmt.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for computing metrics on Java statements. */ -overlay[local?] -module; import semmle.code.java.Statement diff --git a/java/ql/lib/semmle/code/java/os/OSCheck.qll b/java/ql/lib/semmle/code/java/os/OSCheck.qll index 97ad27c83dfb..e3b3e56f72ce 100644 --- a/java/ql/lib/semmle/code/java/os/OSCheck.qll +++ b/java/ql/lib/semmle/code/java/os/OSCheck.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for guards that check for the current OS. */ -overlay[local?] -module; import java import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 6a934bdd5785..763b96f5a02d 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -1,8 +1,6 @@ /** * Defines configurations and steps for handling regexes */ -overlay[local?] -module; import java import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 0fe4b47ec485..a07d7c741faa 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -1,6 +1,4 @@ /** Provides a class hierarchy corresponding to a parse tree of regular expressions. */ -overlay[local?] -module; private import semmle.code.java.regex.regex as RE // importing under a namescape to avoid naming conflict for `Top`. private import codeql.regex.nfa.NfaUtils as NfaUtils diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 13f398699663..f0336c2d0235 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -1,8 +1,6 @@ /** * Definitions for parsing regular expressions. */ -overlay[local?] -module; import java private import RegexFlowConfigs diff --git a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll index 08a86092afbb..56c45611b142 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about Android Intent redirect vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll index aaa7dbc562b8..4a31dc2568d1 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidLocalAuthQuery.qll @@ -1,6 +1,4 @@ /** Definitions for the insecure local authentication query. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/AndroidWebViewCertificateValidationQuery.qll b/java/ql/lib/semmle/code/java/security/AndroidWebViewCertificateValidationQuery.qll index 728eca0eaf10..8d53766e0080 100644 --- a/java/ql/lib/semmle/code/java/security/AndroidWebViewCertificateValidationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/AndroidWebViewCertificateValidationQuery.qll @@ -1,6 +1,4 @@ /** Definitions for the web view certificate validation query */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallation.qll b/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallation.qll index 8600ecda7ad1..0402aca69872 100644 --- a/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallation.qll +++ b/java/ql/lib/semmle/code/java/security/ArbitraryApkInstallation.qll @@ -1,6 +1,4 @@ /** Provide classes to reason about Android Intents that can install APKs. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.android.Intent diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll index e0d6ff305c30..785dce3da7ed 100644 --- a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll +++ b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll @@ -1,6 +1,4 @@ /** Provides guards and predicates to reason about arithmetic. */ -overlay[local?] -module; import semmle.code.java.arithmetic.Overflow import semmle.code.java.controlflow.Guards @@ -9,6 +7,7 @@ private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.RangeAnalysis private import semmle.code.java.dataflow.RangeUtils private import semmle.code.java.dataflow.SignAnalysis +private import semmle.code.java.controlflow.internal.GuardsLogic /** * Holds if the type of `exp` is narrower than or equal to `numType`, diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll index 1c99821386da..1f262ad57d61 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll @@ -7,17 +7,7 @@ private import semmle.code.java.dataflow.FlowSinks private import semmle.code.java.dataflow.FlowSources private class CookieCleartextStorageSink extends CleartextStorageSink { - Cookie cookie; - - CookieCleartextStorageSink() { this.asExpr() = cookieInput(cookie) } - - override Location getASelectedLocation() { - result = this.getLocation() - or - result = cookie.getLocation() - or - result = cookie.getAStore().getLocation() - } + CookieCleartextStorageSink() { this.asExpr() = cookieInput(_) } } /** The instantiation of a cookie, which can act as storage. */ diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll index 21d82bef657e..a607fd8c8d2b 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -5,14 +5,7 @@ private import semmle.code.java.dataflow.TaintTracking private import semmle.code.java.security.SensitiveActions /** A sink representing persistent storage that saves data in clear text. */ -abstract class CleartextStorageSink extends DataFlow::Node { - /** - * Gets a location that will be selected in the diff-informed query where - * this sink is found. If this has no results for any sink, that's taken to - * mean the query is not diff-informed. - */ - Location getASelectedLocation() { none() } -} +abstract class CleartextStorageSink extends DataFlow::Node { } /** A sanitizer for flows tracking sensitive data being stored in persistent storage. */ abstract class CleartextStorageSanitizer extends DataFlow::Node { } @@ -53,17 +46,6 @@ private module SensitiveSourceFlowConfig implements DataFlow::ConfigSig { predicate isAdditionalFlowStep(DataFlow::Node n1, DataFlow::Node n2) { any(CleartextStorageAdditionalTaintStep c).step(n1, n2) } - - predicate observeDiffInformedIncrementalMode() { - // This configuration is used by several queries. A query can opt in to - // diff-informed mode by implementing `getASelectedLocation` on its sinks, - // indicating that it has considered which sinks are selected. - exists(CleartextStorageSink sink | exists(sink.getASelectedLocation())) - } - - Location getASelectedSinkLocation(DataFlow::Node sink) { - result = sink.(CleartextStorageSink).getASelectedLocation() - } } private module SensitiveSourceFlow = TaintTracking::Global; diff --git a/java/ql/lib/semmle/code/java/security/CommandArguments.qll b/java/ql/lib/semmle/code/java/security/CommandArguments.qll index f161a83d17b0..eb4f589ac7f7 100644 --- a/java/ql/lib/semmle/code/java/security/CommandArguments.qll +++ b/java/ql/lib/semmle/code/java/security/CommandArguments.qll @@ -1,8 +1,6 @@ /** * Definitions for reasoning about lists and arrays that are to be used as arguments to an external process. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.SSA diff --git a/java/ql/lib/semmle/code/java/security/ControlledString.qll b/java/ql/lib/semmle/code/java/security/ControlledString.qll index fa201b2e8b6f..c760bf14e855 100644 --- a/java/ql/lib/semmle/code/java/security/ControlledString.qll +++ b/java/ql/lib/semmle/code/java/security/ControlledString.qll @@ -3,8 +3,6 @@ * There is positive evidence that they are fully controlled by * the program source code. */ -overlay[local?] -module; import semmle.code.java.Expr import semmle.code.java.security.Validation diff --git a/java/ql/lib/semmle/code/java/security/Cookies.qll b/java/ql/lib/semmle/code/java/security/Cookies.qll index b4db1b8fe467..202f18921ca6 100644 --- a/java/ql/lib/semmle/code/java/security/Cookies.qll +++ b/java/ql/lib/semmle/code/java/security/Cookies.qll @@ -1,6 +1,4 @@ /** Provides definitions to reason about HTTP cookies. */ -overlay[local?] -module; import java private import semmle.code.java.frameworks.Netty diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index b948a94962c7..ee8c1f5fbedc 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -1,8 +1,6 @@ /** * Provides predicates and classes relating to encryption in Java. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll b/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll index 809f45aa45a3..360493e26356 100644 --- a/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll +++ b/java/ql/lib/semmle/code/java/security/ExternalAPIs.qll @@ -2,8 +2,6 @@ * Definitions for reasoning about untrusted data used in APIs defined outside the * database. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.FlowSources diff --git a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll index 600a45e509a0..58f7457e9e30 100644 --- a/java/ql/lib/semmle/code/java/security/ExternalProcess.qll +++ b/java/ql/lib/semmle/code/java/security/ExternalProcess.qll @@ -1,6 +1,4 @@ /** Definitions related to external processes. */ -overlay[local?] -module; import semmle.code.java.Member private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/FileReadWrite.qll b/java/ql/lib/semmle/code/java/security/FileReadWrite.qll index ae1b3f025a1a..34d7ca1f2014 100644 --- a/java/ql/lib/semmle/code/java/security/FileReadWrite.qll +++ b/java/ql/lib/semmle/code/java/security/FileReadWrite.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/security/FileWritable.qll b/java/ql/lib/semmle/code/java/security/FileWritable.qll index d1833bf64d4d..bb5d952802d1 100644 --- a/java/ql/lib/semmle/code/java/security/FileWritable.qll +++ b/java/ql/lib/semmle/code/java/security/FileWritable.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/java/security/FragmentInjection.qll b/java/ql/lib/semmle/code/java/security/FragmentInjection.qll index 8cd5e32a5ecd..a22fad4d85e7 100644 --- a/java/ql/lib/semmle/code/java/security/FragmentInjection.qll +++ b/java/ql/lib/semmle/code/java/security/FragmentInjection.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about Android Fragment injection vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/security/GroovyInjection.qll b/java/ql/lib/semmle/code/java/security/GroovyInjection.qll index 45d664897775..ea688a26f6ec 100644 --- a/java/ql/lib/semmle/code/java/security/GroovyInjection.qll +++ b/java/ql/lib/semmle/code/java/security/GroovyInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about Groovy code injection attacks. */ -overlay[local?] -module; private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/security/HardcodedCredentials.qll b/java/ql/lib/semmle/code/java/security/HardcodedCredentials.qll index a0e68c3552c2..c8a12c72dadd 100644 --- a/java/ql/lib/semmle/code/java/security/HardcodedCredentials.qll +++ b/java/ql/lib/semmle/code/java/security/HardcodedCredentials.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates relating to hardcoded credentials. */ -overlay[local?] -module; import java import SensitiveApi diff --git a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsComparison.qll b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsComparison.qll index c6ad9458ba91..d15d9d05d301 100644 --- a/java/ql/lib/semmle/code/java/security/HardcodedCredentialsComparison.qll +++ b/java/ql/lib/semmle/code/java/security/HardcodedCredentialsComparison.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates to detect comparing a parameter to a hard-coded credential. */ -overlay[local?] -module; import java import HardcodedCredentials diff --git a/java/ql/lib/semmle/code/java/security/HardcodedPasswordField.qll b/java/ql/lib/semmle/code/java/security/HardcodedPasswordField.qll index 03b3f7500809..995428b8e94f 100644 --- a/java/ql/lib/semmle/code/java/security/HardcodedPasswordField.qll +++ b/java/ql/lib/semmle/code/java/security/HardcodedPasswordField.qll @@ -1,8 +1,6 @@ /** * Provides a predicate identifying assignments of harcoded values to password fields. */ -overlay[local?] -module; import java import HardcodedCredentials diff --git a/java/ql/lib/semmle/code/java/security/HttpsUrls.qll b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll index 071f95b49902..b56b8ba9c9f5 100644 --- a/java/ql/lib/semmle/code/java/security/HttpsUrls.qll +++ b/java/ql/lib/semmle/code/java/security/HttpsUrls.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about plaintext HTTP vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntents.qll b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntents.qll index 94951c10c532..650527e88e45 100644 --- a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntents.qll +++ b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntents.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for working with implicit `PendingIntent`s. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll index f66309c97bec..a57f643d8176 100644 --- a/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll +++ b/java/ql/lib/semmle/code/java/security/ImplicitPendingIntentsQuery.qll @@ -1,6 +1,4 @@ /** Provides taint tracking configurations to be used in queries related to implicit `PendingIntent`s. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/security/ImplicitlyExportedAndroidComponent.qll b/java/ql/lib/semmle/code/java/security/ImplicitlyExportedAndroidComponent.qll index 11cfcb1c6e57..4aa21c4a260b 100644 --- a/java/ql/lib/semmle/code/java/security/ImplicitlyExportedAndroidComponent.qll +++ b/java/ql/lib/semmle/code/java/security/ImplicitlyExportedAndroidComponent.qll @@ -1,6 +1,4 @@ /** Provides a class to identify implicitly exported Android components. */ -overlay[local?] -module; private import semmle.code.xml.AndroidManifest diff --git a/java/ql/lib/semmle/code/java/security/InformationLeak.qll b/java/ql/lib/semmle/code/java/security/InformationLeak.qll index ba7a7a52a707..8fe7d2151650 100644 --- a/java/ql/lib/semmle/code/java/security/InformationLeak.qll +++ b/java/ql/lib/semmle/code/java/security/InformationLeak.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about System Information Leak vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll b/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll index 9d26077396bf..b21492406adf 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureBasicAuth.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about Insecure Basic Authentication vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/InsecureLdapAuth.qll b/java/ql/lib/semmle/code/java/security/InsecureLdapAuth.qll index 117484b0241e..52d58afc9e76 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureLdapAuth.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureLdapAuth.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about insecure LDAP authentication. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/InsecureTrustManager.qll b/java/ql/lib/semmle/code/java/security/InsecureTrustManager.qll index 54e2b00b8f4b..41d8f28573ca 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureTrustManager.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureTrustManager.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about insecure `TrustManager`s. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/InsufficientKeySize.qll b/java/ql/lib/semmle/code/java/security/InsufficientKeySize.qll index 6d28a124b854..1f80136fdf19 100644 --- a/java/ql/lib/semmle/code/java/security/InsufficientKeySize.qll +++ b/java/ql/lib/semmle/code/java/security/InsufficientKeySize.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to insufficient key sizes in Java. */ -overlay[local?] -module; private import semmle.code.java.security.Encryption private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll b/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll index d105db336101..876b2efd8409 100644 --- a/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsufficientKeySizeQuery.qll @@ -1,6 +1,4 @@ /** Provides data flow configurations to be used in queries related to insufficient key sizes. */ -overlay[local?] -module; import semmle.code.java.dataflow.DataFlow import semmle.code.java.security.InsufficientKeySize diff --git a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll index 5ba3a6723467..2f9470f2bb9a 100644 --- a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll +++ b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll @@ -2,8 +2,6 @@ * Provides classes and predicates to reason about Intent URI permission manipulation * vulnerabilities on Android. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/JWT.qll b/java/ql/lib/semmle/code/java/security/JWT.qll index 3f546d4edc05..c282d32ea099 100644 --- a/java/ql/lib/semmle/code/java/security/JWT.qll +++ b/java/ql/lib/semmle/code/java/security/JWT.qll @@ -1,6 +1,4 @@ /** Provides classes for working with JSON Web Token (JWT) libraries. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSinks diff --git a/java/ql/lib/semmle/code/java/security/JndiInjection.qll b/java/ql/lib/semmle/code/java/security/JndiInjection.qll index 0e61a53c0ab0..3df8d6df378e 100644 --- a/java/ql/lib/semmle/code/java/security/JndiInjection.qll +++ b/java/ql/lib/semmle/code/java/security/JndiInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about JNDI injection vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/LdapInjection.qll b/java/ql/lib/semmle/code/java/security/LdapInjection.qll index ff92d40cf556..54c8e28ba63d 100644 --- a/java/ql/lib/semmle/code/java/security/LdapInjection.qll +++ b/java/ql/lib/semmle/code/java/security/LdapInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about LDAP injection attacks. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll b/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll index 4294ac84f687..cc57fbce648d 100644 --- a/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/ListOfConstantsSanitizer.qll @@ -2,8 +2,6 @@ * Provides a default taint sanitizer identifying comparisons against lists of * compile-time constants. */ -overlay[local?] -module; import java private import codeql.typeflow.UniversalFlow as UniversalFlow diff --git a/java/ql/lib/semmle/code/java/security/LogInjection.qll b/java/ql/lib/semmle/code/java/security/LogInjection.qll index da5a1dc73a0c..554aa8e4ebc9 100644 --- a/java/ql/lib/semmle/code/java/security/LogInjection.qll +++ b/java/ql/lib/semmle/code/java/security/LogInjection.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to Log Injection vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/Mail.qll b/java/ql/lib/semmle/code/java/security/Mail.qll index 5c68355ec3ee..64bc22e4622f 100644 --- a/java/ql/lib/semmle/code/java/security/Mail.qll +++ b/java/ql/lib/semmle/code/java/security/Mail.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about email vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.Mail diff --git a/java/ql/lib/semmle/code/java/security/MvelInjection.qll b/java/ql/lib/semmle/code/java/security/MvelInjection.qll index dc804d4a1854..a9773ffe1860 100644 --- a/java/ql/lib/semmle/code/java/security/MvelInjection.qll +++ b/java/ql/lib/semmle/code/java/security/MvelInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about MVEL injection attacks. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll index e3f93b39ece1..37f31618fc32 100644 --- a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll +++ b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about OGNL injection vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/PartialPathTraversal.qll b/java/ql/lib/semmle/code/java/security/PartialPathTraversal.qll index 63ffb62ef63b..aaf578a6225f 100644 --- a/java/ql/lib/semmle/code/java/security/PartialPathTraversal.qll +++ b/java/ql/lib/semmle/code/java/security/PartialPathTraversal.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about partial path traversal vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll index ed0761f6869e..f3385c94646b 100644 --- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll +++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about sanitization of path injection vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/QueryInjection.qll b/java/ql/lib/semmle/code/java/security/QueryInjection.qll index 583a41ce9335..df316155ba1a 100644 --- a/java/ql/lib/semmle/code/java/security/QueryInjection.qll +++ b/java/ql/lib/semmle/code/java/security/QueryInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about database query language injection vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/RandomDataSource.qll b/java/ql/lib/semmle/code/java/security/RandomDataSource.qll index f040c858d9ce..b44bcc07efe2 100644 --- a/java/ql/lib/semmle/code/java/security/RandomDataSource.qll +++ b/java/ql/lib/semmle/code/java/security/RandomDataSource.qll @@ -1,8 +1,6 @@ /** * Defines classes representing random data sources. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.TypeFlow diff --git a/java/ql/lib/semmle/code/java/security/RelativePaths.qll b/java/ql/lib/semmle/code/java/security/RelativePaths.qll index 0c9e145268b6..458bb7aea5d4 100644 --- a/java/ql/lib/semmle/code/java/security/RelativePaths.qll +++ b/java/ql/lib/semmle/code/java/security/RelativePaths.qll @@ -1,6 +1,4 @@ /** Detection of strings and arrays of strings containing relative paths. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/RequestForgery.qll b/java/ql/lib/semmle/code/java/security/RequestForgery.qll index 5eb35c05cd47..1f3ce61406f7 100644 --- a/java/ql/lib/semmle/code/java/security/RequestForgery.qll +++ b/java/ql/lib/semmle/code/java/security/RequestForgery.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about server-side request forgery (SSRF) attacks. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.Networking diff --git a/java/ql/lib/semmle/code/java/security/ResponseSplitting.qll b/java/ql/lib/semmle/code/java/security/ResponseSplitting.qll index 1238793ffd70..340f696db622 100644 --- a/java/ql/lib/semmle/code/java/security/ResponseSplitting.qll +++ b/java/ql/lib/semmle/code/java/security/ResponseSplitting.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about header splitting attacks. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/Sanitizers.qll b/java/ql/lib/semmle/code/java/security/Sanitizers.qll index 21e7ccf264f9..5340ba344823 100644 --- a/java/ql/lib/semmle/code/java/security/Sanitizers.qll +++ b/java/ql/lib/semmle/code/java/security/Sanitizers.qll @@ -1,6 +1,4 @@ /** Classes to represent sanitizers commonly used in dataflow and taint tracking configurations. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/SecurityFlag.qll b/java/ql/lib/semmle/code/java/security/SecurityFlag.qll index 30718e3300fb..dab5d52bcb20 100644 --- a/java/ql/lib/semmle/code/java/security/SecurityFlag.qll +++ b/java/ql/lib/semmle/code/java/security/SecurityFlag.qll @@ -1,8 +1,6 @@ /** * Provides utility predicates to spot variable names, parameter names, and string literals that suggest deliberately insecure settings. */ -overlay[local?] -module; import java import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/SecurityTests.qll b/java/ql/lib/semmle/code/java/security/SecurityTests.qll index d8b714c18a1e..d2260de22a19 100644 --- a/java/ql/lib/semmle/code/java/security/SecurityTests.qll +++ b/java/ql/lib/semmle/code/java/security/SecurityTests.qll @@ -1,6 +1,4 @@ /** Test detection for the security pack. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll index 6733219a8d5f..2320afb8eef0 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveActions.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveActions.qll @@ -10,8 +10,6 @@ * in a fashion that the user can control. This includes authorization * methods such as logins, and sending of data, etc. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/SensitiveApi.qll b/java/ql/lib/semmle/code/java/security/SensitiveApi.qll index 408fe73f904b..559919f792ec 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveApi.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveApi.qll @@ -1,8 +1,6 @@ /** * Provides predicates defining methods that consume sensitive data, such as usernames and passwords. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/SpelInjection.qll b/java/ql/lib/semmle/code/java/security/SpelInjection.qll index 3c36b207ac03..13eb195eae46 100644 --- a/java/ql/lib/semmle/code/java/security/SpelInjection.qll +++ b/java/ql/lib/semmle/code/java/security/SpelInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about SpEL injection attacks. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/SpringBootActuatorsQuery.qll b/java/ql/lib/semmle/code/java/security/SpringBootActuatorsQuery.qll index 9fb4e753aab5..68c20adabdd1 100644 --- a/java/ql/lib/semmle/code/java/security/SpringBootActuatorsQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SpringBootActuatorsQuery.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about exposed actuators in Spring Boot. */ -overlay[local?] -module; import java private import semmle.code.java.frameworks.spring.SpringSecurity diff --git a/java/ql/lib/semmle/code/java/security/SpringCsrfProtection.qll b/java/ql/lib/semmle/code/java/security/SpringCsrfProtection.qll index 88a53ef13e75..c4259ee5b9de 100644 --- a/java/ql/lib/semmle/code/java/security/SpringCsrfProtection.qll +++ b/java/ql/lib/semmle/code/java/security/SpringCsrfProtection.qll @@ -1,6 +1,4 @@ /** Provides predicates to reason about disabling CSRF protection in Spring. */ -overlay[local?] -module; import java diff --git a/java/ql/lib/semmle/code/java/security/SqlConcatenatedLib.qll b/java/ql/lib/semmle/code/java/security/SqlConcatenatedLib.qll index 2d59b18fa90e..5d3b1c803d22 100644 --- a/java/ql/lib/semmle/code/java/security/SqlConcatenatedLib.qll +++ b/java/ql/lib/semmle/code/java/security/SqlConcatenatedLib.qll @@ -1,6 +1,4 @@ /** Definitions used by `SqlConcatenated.ql`. */ -overlay[local?] -module; import semmle.code.java.security.ControlledString import semmle.code.java.dataflow.TaintTracking diff --git a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll index 3d1623fa334c..33b6c46b916c 100644 --- a/java/ql/lib/semmle/code/java/security/TempDirUtils.qll +++ b/java/ql/lib/semmle/code/java/security/TempDirUtils.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for reasoning about temporary file/directory creations. */ -overlay[local?] -module; import java private import semmle.code.java.environment.SystemProperty diff --git a/java/ql/lib/semmle/code/java/security/TemplateInjection.qll b/java/ql/lib/semmle/code/java/security/TemplateInjection.qll index 58c48bb7f224..0b703780a035 100644 --- a/java/ql/lib/semmle/code/java/security/TemplateInjection.qll +++ b/java/ql/lib/semmle/code/java/security/TemplateInjection.qll @@ -1,6 +1,4 @@ /** Definitions related to the server-side template injection (SST) query. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSources diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index 3137ad423e0e..afd3af221bed 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -1,8 +1,6 @@ /** * Provides classes to reason about Unsafe Resource Fetching vulnerabilities in Android. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/UnsafeCertTrust.qll b/java/ql/lib/semmle/code/java/security/UnsafeCertTrust.qll index 61a76afecc8d..60f0cef83847 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeCertTrust.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeCertTrust.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates to reason about unsafe certificate trust vulnerablities. */ -overlay[local?] -module; import java private import semmle.code.java.frameworks.Networking diff --git a/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolution.qll b/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolution.qll index 7cd10142a1e5..b19d06bbf88c 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolution.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeContentUriResolution.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about vulnerabilites related to content URIs. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.FlowSinks diff --git a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll index e10c6cebaf63..b16770c222b8 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeDeserializationQuery.qll @@ -323,10 +323,6 @@ private module UnsafeDeserializationConfig implements DataFlow::ConfigSig { predicate isBarrier(DataFlow::Node node) { isUnsafeDeserializationSanitizer(node) } predicate observeDiffInformedIncrementalMode() { any() } - - Location getASelectedSinkLocation(DataFlow::Node sink) { - result = sink.(UnsafeDeserializationSink).getMethodCall().getLocation() - } } module UnsafeDeserializationFlow = TaintTracking::Global; diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll index be6addfa2529..02f66e3f0e95 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about URL redirect attacks. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/Validation.qll b/java/ql/lib/semmle/code/java/security/Validation.qll index 69f57474317f..664c55e70d82 100644 --- a/java/ql/lib/semmle/code/java/security/Validation.qll +++ b/java/ql/lib/semmle/code/java/security/Validation.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import semmle.code.java.Expr import semmle.code.java.dataflow.SSA import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/XPath.qll b/java/ql/lib/semmle/code/java/security/XPath.qll index cc3fde30091b..c2992fdc272a 100644 --- a/java/ql/lib/semmle/code/java/security/XPath.qll +++ b/java/ql/lib/semmle/code/java/security/XPath.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about XPath vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 990371cc8cfe..9aafcd15f683 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about Cross-site scripting (XSS) vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.frameworks.Servlets diff --git a/java/ql/lib/semmle/code/java/security/XmlParsers.qll b/java/ql/lib/semmle/code/java/security/XmlParsers.qll index 8bb2a015a14d..5ca1dd95f99e 100644 --- a/java/ql/lib/semmle/code/java/security/XmlParsers.qll +++ b/java/ql/lib/semmle/code/java/security/XmlParsers.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates for modeling XML parsers in Java. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/XsltInjection.qll b/java/ql/lib/semmle/code/java/security/XsltInjection.qll index d54e92066443..56affafa2029 100644 --- a/java/ql/lib/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/lib/semmle/code/java/security/XsltInjection.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about XSLT injection vulnerabilities. */ -overlay[local?] -module; import java import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/Xxe.qll b/java/ql/lib/semmle/code/java/security/Xxe.qll index 5c3d075bfb1c..cf30b3c19c0d 100644 --- a/java/ql/lib/semmle/code/java/security/Xxe.qll +++ b/java/ql/lib/semmle/code/java/security/Xxe.qll @@ -1,6 +1,4 @@ /** Provides classes to reason about XML eXternal Entity (XXE) vulnerabilities. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/internal/ArraySizing.qll b/java/ql/lib/semmle/code/java/security/internal/ArraySizing.qll index 185b1b8a46e2..29c4d0e5e3df 100644 --- a/java/ql/lib/semmle/code/java/security/internal/ArraySizing.qll +++ b/java/ql/lib/semmle/code/java/security/internal/ArraySizing.qll @@ -1,6 +1,4 @@ /** Provides predicates and classes to reason about the sizing and indexing of arrays. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/java/security/internal/BoundingChecks.qll b/java/ql/lib/semmle/code/java/security/internal/BoundingChecks.qll index 81bf8727e4fd..88dec6c2bb78 100644 --- a/java/ql/lib/semmle/code/java/security/internal/BoundingChecks.qll +++ b/java/ql/lib/semmle/code/java/security/internal/BoundingChecks.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for determining upper and lower bounds on a value determined by bounding checks that * have been made on dominant paths. */ -overlay[local?] -module; import java private import semmle.code.java.controlflow.Guards diff --git a/java/ql/lib/semmle/code/java/security/internal/EncryptionKeySizes.qll b/java/ql/lib/semmle/code/java/security/internal/EncryptionKeySizes.qll index f42e31b2d7e5..46df3a3ca7bb 100644 --- a/java/ql/lib/semmle/code/java/security/internal/EncryptionKeySizes.qll +++ b/java/ql/lib/semmle/code/java/security/internal/EncryptionKeySizes.qll @@ -4,8 +4,6 @@ * Provides predicates for recommended encryption key sizes. * Such that we can share this logic across our CodeQL analysis of different languages. */ -overlay[local?] -module; /** Returns the minimum recommended key size for RSA. */ int minSecureKeySizeRsa() { result = 2048 } diff --git a/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll b/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll index ba65e13dd611..767ebc97437b 100644 --- a/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll +++ b/java/ql/lib/semmle/code/java/security/regexp/PolynomialReDoSQuery.qll @@ -47,6 +47,18 @@ module PolynomialRedosConfig implements DataFlow::ConfigSig { node instanceof SimpleTypeSanitizer or node.asExpr().(MethodCall).getMethod() instanceof LengthRestrictedMethod } + + predicate observeDiffInformedIncrementalMode() { any() } + + Location getASelectedSinkLocation(DataFlow::Node sink) { + exists(SuperlinearBackTracking::PolynomialBackTrackingTerm regexp | + regexp.getRootTerm() = sink.(PolynomialRedosSink).getRegExp() + | + result = sink.getLocation() + or + result = regexp.getLocation() + ) + } } module PolynomialRedosFlow = TaintTracking::Global; diff --git a/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll b/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll index eb27ec873752..92d5dab5289a 100644 --- a/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll +++ b/java/ql/lib/semmle/code/java/security/regexp/RegexInjection.qll @@ -1,6 +1,4 @@ /** Provides classes and predicates related to regex injection in Java. */ -overlay[local?] -module; import java private import semmle.code.java.dataflow.DataFlow diff --git a/java/ql/lib/semmle/code/xml/AndroidManifest.qll b/java/ql/lib/semmle/code/xml/AndroidManifest.qll index d20165a031ff..ad69546a4140 100644 --- a/java/ql/lib/semmle/code/xml/AndroidManifest.qll +++ b/java/ql/lib/semmle/code/xml/AndroidManifest.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Android manifest files. */ -overlay[local?] -module; import XML diff --git a/java/ql/lib/semmle/code/xml/Ant.qll b/java/ql/lib/semmle/code/xml/Ant.qll index 84d6ea927f72..59cd2889096a 100644 --- a/java/ql/lib/semmle/code/xml/Ant.qll +++ b/java/ql/lib/semmle/code/xml/Ant.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with targets in Apache Ant build files. */ -overlay[local?] -module; import XML diff --git a/java/ql/lib/semmle/code/xml/MavenPom.qll b/java/ql/lib/semmle/code/xml/MavenPom.qll index 68c81c4ab905..313a0e08bd83 100644 --- a/java/ql/lib/semmle/code/xml/MavenPom.qll +++ b/java/ql/lib/semmle/code/xml/MavenPom.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with Maven POM files and their content. */ -overlay[local?] -module; import XML diff --git a/java/ql/lib/semmle/code/xml/WebXML.qll b/java/ql/lib/semmle/code/xml/WebXML.qll index c741ce7c66b0..c356081c95f6 100644 --- a/java/ql/lib/semmle/code/xml/WebXML.qll +++ b/java/ql/lib/semmle/code/xml/WebXML.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - import java /** diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll index e4073362fc6f..54157809260b 100644 --- a/java/ql/lib/semmle/code/xml/XML.qll +++ b/java/ql/lib/semmle/code/xml/XML.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with XML files and their content. */ -overlay[local?] -module; import semmle.files.FileSystem private import codeql.xml.Xml diff --git a/java/ql/lib/semmle/files/FileSystem.qll b/java/ql/lib/semmle/files/FileSystem.qll index bb55214dcd3b..f56d54866140 100644 --- a/java/ql/lib/semmle/files/FileSystem.qll +++ b/java/ql/lib/semmle/files/FileSystem.qll @@ -1,5 +1,3 @@ /** Provides classes for working with files and folders. */ -overlay[local?] -module; import semmle.code.FileSystem diff --git a/java/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll b/java/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll index 446b6a544c34..cd62fdb757e0 100644 --- a/java/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll +++ b/java/ql/lib/utils/test/internal/InlineExpectationsTestImpl.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import java as J private import codeql.util.test.InlineExpectationsTest diff --git a/java/ql/src/Language Abuse/UselessNullCheck.ql b/java/ql/src/Language Abuse/UselessNullCheck.ql index 92041ca9e4a2..1ad1c4c8e1e2 100644 --- a/java/ql/src/Language Abuse/UselessNullCheck.ql +++ b/java/ql/src/Language Abuse/UselessNullCheck.ql @@ -18,10 +18,10 @@ import semmle.code.java.controlflow.Guards from Expr guard, Expr e, Expr reason, string msg where - guardSuggestsExprMaybeNull(guard, e) and + guard = basicNullGuard(e, _, true) and e = clearlyNotNullExpr(reason) and ( - if reason = directNullGuard(_, _, _) + if reason instanceof Guard then msg = "This check is useless. $@ cannot be null at this check, since it is guarded by $@." else if reason != e diff --git a/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.qhelp b/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.qhelp index a97c17c13188..b6cb3a730876 100644 --- a/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.qhelp +++ b/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.qhelp @@ -49,15 +49,6 @@ continue while the child thread is waiting, so that "Main thread activity" is pr
  • The Java Tutorials: Defining and Starting a Thread.
  • -
  • - SEI CERT Oracle Coding Standard for Java: THI00-J. Do not invoke Thread.run(). -
  • -
  • - Java API Specification: Thread. -
  • -
  • - Java API Specification: Runnable. -
  • diff --git a/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql b/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql index 9e4e1dd47143..a6ff029557c1 100644 --- a/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql +++ b/java/ql/src/Likely Bugs/Concurrency/CallsToRunnableRun.ql @@ -6,7 +6,6 @@ * @problem.severity recommendation * @precision high * @id java/call-to-thread-run - * @previous-id java/run-method-called-on-java-lang-thread-directly * @tags quality * reliability * concurrency diff --git a/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.md b/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.md deleted file mode 100644 index 424407f5cc64..000000000000 --- a/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.md +++ /dev/null @@ -1,24 +0,0 @@ -## Overview - -According to the Java documentation on `ScheduledThreadPoolExecutor`, it is not a good idea to set `corePoolSize` to zero, since doing so indicates the executor to keep 0 threads in its pool and the executor will serve no purpose. - -## Recommendation - -Set the `ScheduledThreadPoolExecutor` to have 1 or more threads in its thread pool and use the class's other methods to create a thread execution schedule. - -## Example - -```java -public class Test { - void f() { - int i = 0; - ScheduledThreadPoolExecutor s = new ScheduledThreadPoolExecutor(1); // COMPLIANT - ScheduledThreadPoolExecutor s1 = new ScheduledThreadPoolExecutor(0); // NON_COMPLIANT - s.setCorePoolSize(0); // NON_COMPLIANT - s.setCorePoolSize(i); // NON_COMPLIANT - } -} -``` - -## References -- [ScheduledThreadPoolExecutor](https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html) diff --git a/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql b/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql deleted file mode 100644 index 0b8acb5a0888..000000000000 --- a/java/ql/src/Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql +++ /dev/null @@ -1,36 +0,0 @@ -/** - * @id java/java-util-concurrent-scheduledthreadpoolexecutor - * @name Zero threads set for `java.util.concurrent.ScheduledThreadPoolExecutor` - * @description Setting `java.util.concurrent.ScheduledThreadPoolExecutor` to have 0 threads serves - * no purpose and may indicate programmer error. - * @kind problem - * @precision very-high - * @problem.severity recommendation - * @previous-id java/javautilconcurrentscheduledthreadpoolexecutor - * @tags quality - * reliability - * correctness - * concurrency - */ - -import java -import semmle.code.java.dataflow.DataFlow - -/** - * A `Call` that has the ability to set or modify the `corePoolSize` of the `java.util.concurrent.ScheduledThreadPoolExecutor` type. - */ -class Sink extends Call { - Sink() { - this.getCallee() - .hasQualifiedName("java.util.concurrent", "ThreadPoolExecutor", "setCorePoolSize") or - this.getCallee() - .hasQualifiedName("java.util.concurrent", "ScheduledThreadPoolExecutor", - "ScheduledThreadPoolExecutor") - } -} - -from IntegerLiteral zero, Sink set -where - DataFlow::localFlow(DataFlow::exprNode(zero), DataFlow::exprNode(set.getArgument(0))) and - zero.getIntValue() = 0 -select set, "ScheduledThreadPoolExecutor.corePoolSize is set to have 0 threads." diff --git a/java/ql/src/Performance/StringReplaceAllWithNonRegex.md b/java/ql/src/Performance/StringReplaceAllWithNonRegex.md index 7a16a8553fb1..c7bb609b2c02 100644 --- a/java/ql/src/Performance/StringReplaceAllWithNonRegex.md +++ b/java/ql/src/Performance/StringReplaceAllWithNonRegex.md @@ -1,3 +1,7 @@ +# Use of `String#replaceAll` with a first argument which is not a regular expression + +Using `String#replaceAll` is less performant than `String#replace` when the first argument is not a regular expression. + ## Overview The `String#replaceAll` method is designed to work with regular expressions as its first parameter. When you use a simple string without any regex patterns (like special characters or syntax), it's more efficient to use `String#replace` instead. This is because `replaceAll` has to compile the input as a regular expression first, which adds unnecessary overhead when you are just replacing literal text. diff --git a/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.md b/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.md index fa336a8c8229..385cbfb5cfe2 100644 --- a/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.md +++ b/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.md @@ -8,8 +8,6 @@ Avoid calling `finalize()` in application code. Allow the JVM to determine a gar ## Example -### Incorrect Usage - ```java class LocalCache { private Collection cacheFiles = ...; @@ -21,9 +19,8 @@ void main() { // ... cache.finalize(); // NON_COMPLIANT } -``` -### Correct Usage +``` ```java import java.lang.AutoCloseable; @@ -46,9 +43,10 @@ void main() { // ... } } + ``` -## Implementation Notes +# Implementation Notes This rule ignores `super.finalize()` calls that occur within `finalize()` overrides since calling the superclass finalizer is required when overriding `finalize()`. Also, although overriding `finalize()` is not recommended, this rule only alerts on direct calls to `finalize()` and does not alert on method declarations overriding `finalize()`. diff --git a/java/ql/src/change-notes/2025-06-17-improved-guards.md b/java/ql/src/change-notes/2025-06-17-improved-guards.md deleted file mode 100644 index b49710460f1f..000000000000 --- a/java/ql/src/change-notes/2025-06-17-improved-guards.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java analysis of guards has been switched to use the new and improved shared guards library. This improves precision of a number of queries, in particular `java/dereferenced-value-may-be-null`, which now has fewer false positives, and `java/useless-null-check` and `java/constant-comparison`, which gain additional true positives. diff --git a/java/ql/src/codeql-suites/java-security-and-quality.qls b/java/ql/src/codeql-suites/java-security-and-quality.qls index 011206a105c2..91751e6da1ba 100644 --- a/java/ql/src/codeql-suites/java-security-and-quality.qls +++ b/java/ql/src/codeql-suites/java-security-and-quality.qls @@ -1,7 +1,24 @@ - description: Security-and-quality queries for Java - queries: . -- apply: security-and-frozen-quality-selectors.yml - from: codeql/suite-helpers +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high + tags contain: + - security +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning + tags contain: + - security - include: id: - java/abs-of-random @@ -126,3 +143,22 @@ - java/wrong-object-serialization-signature - java/wrong-readresolve-signature - java/wrong-swing-event-adapter-signature +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: + - /^experimental\/.*/ + - Metrics/Summaries/FrameworkCoverage.ql + - /Diagnostics/Internal/.*/ +- exclude: + tags contain: + - modeleditor + - modelgenerator diff --git a/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql index 3abaa7bdcfa3..84c4bb01c126 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql @@ -22,7 +22,6 @@ import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.security.Sanitizers import Log4jInjectionFlow::PathGraph -overlay[local?] deprecated private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "log4j-injection" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql b/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql index 0929ca3eb805..c84037719da9 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql @@ -17,7 +17,6 @@ import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.ExternalFlow import RemoteUrlToOpenStreamFlow::PathGraph -overlay[local?] deprecated private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "openstream-called-on-tainted-url" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql index 11bb600ffe85..c87097458520 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql @@ -22,7 +22,6 @@ import semmle.code.java.security.PathSanitizer private import semmle.code.java.security.Sanitizers import InjectFilePathFlow::PathGraph -overlay[local?] deprecated private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "file-path-injection" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql b/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql index c13bc3bb245c..08f7631af828 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-078/ExecTainted.ql @@ -18,7 +18,6 @@ import semmle.code.java.security.CommandLineQuery import InputToArgumentToExecFlow::PathGraph private import semmle.code.java.dataflow.ExternalFlow -overlay[local?] deprecated private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "jsch-os-injection" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll index b988398e4c26..bd898df205a8 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidWebResourceResponse.qll @@ -7,7 +7,6 @@ private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSteps private import semmle.code.java.frameworks.android.WebView -overlay[local?] private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "android-web-resource-response" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll b/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll index 12ba6769f742..ce6de1a06798 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll @@ -8,7 +8,6 @@ import semmle.code.java.arithmetic.Overflow import semmle.code.java.dataflow.FlowSteps import semmle.code.java.controlflow.Guards -overlay[local?] private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "thread-resource-abuse" } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-625/PermissiveDotRegexQuery.qll b/java/ql/src/experimental/Security/CWE/CWE-625/PermissiveDotRegexQuery.qll index f8e328902504..8fe997793f4a 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-625/PermissiveDotRegexQuery.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-625/PermissiveDotRegexQuery.qll @@ -9,7 +9,6 @@ import semmle.code.java.controlflow.Guards import semmle.code.java.security.UrlRedirect import Regex -overlay[local?] private class ActivateModels extends ActiveExperimentalModels { ActivateModels() { this = "permissive-dot-regex-query" } } diff --git a/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql b/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql index 4c25f5d7beb8..096cfa822161 100644 --- a/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql +++ b/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql @@ -7,7 +7,7 @@ import experimental.quantum.Language class AESGCMAlgorithmNode extends Crypto::KeyOperationAlgorithmNode { AESGCMAlgorithmNode() { this.getAlgorithmType() = Crypto::KeyOpAlg::TSymmetricCipher(Crypto::KeyOpAlg::AES()) and - this.getModeOfOperation().getModeType() = Crypto::KeyOpAlg::GCM() + this.getModeOfOperation().getModeType() = Crypto::GCM() } } diff --git a/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricCipherAlgorithm.ql b/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricCipherAlgorithm.ql index ab4a2e72e5ac..69643d92cd24 100644 --- a/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricCipherAlgorithm.ql +++ b/java/ql/src/experimental/quantum/InventorySlices/KnownAsymmetricCipherAlgorithm.ql @@ -11,5 +11,5 @@ import java import experimental.quantum.Language from Crypto::KeyOperationAlgorithmNode a -where a.getAlgorithmType() instanceof Crypto::KeyOpAlg::AsymmetricCipherAlgorithmType +where a.getAlgorithmType() instanceof Crypto::KeyOpAlg::AsymmetricCipherAlgorithm select a, a.getAlgorithmName() diff --git a/java/ql/src/experimental/quantum/InventorySlices/KnownCipherAlgorithm.ql b/java/ql/src/experimental/quantum/InventorySlices/KnownCipherAlgorithm.ql index e8c839126177..da3371a59b34 100644 --- a/java/ql/src/experimental/quantum/InventorySlices/KnownCipherAlgorithm.ql +++ b/java/ql/src/experimental/quantum/InventorySlices/KnownCipherAlgorithm.ql @@ -13,6 +13,6 @@ import experimental.quantum.Language // TODO: should there be a cipher algorithm node? from Crypto::KeyOperationAlgorithmNode a where - a.getAlgorithmType() instanceof Crypto::KeyOpAlg::AsymmetricCipherAlgorithmType or - a.getAlgorithmType() instanceof Crypto::KeyOpAlg::SymmetricCipherAlgorithmType + a.getAlgorithmType() instanceof Crypto::KeyOpAlg::AsymmetricCipherAlgorithm or + a.getAlgorithmType() instanceof Crypto::KeyOpAlg::SymmetricCipherAlgorithm select a, a.getAlgorithmName() diff --git a/java/ql/src/experimental/quantum/InventorySlices/KnownSymmetricCipherAlgorithm.ql b/java/ql/src/experimental/quantum/InventorySlices/KnownSymmetricCipherAlgorithm.ql index 7f2d550da74c..e4a8d3ff8679 100644 --- a/java/ql/src/experimental/quantum/InventorySlices/KnownSymmetricCipherAlgorithm.ql +++ b/java/ql/src/experimental/quantum/InventorySlices/KnownSymmetricCipherAlgorithm.ql @@ -11,5 +11,5 @@ import java import experimental.quantum.Language from Crypto::KeyOperationAlgorithmNode a -where a.getAlgorithmType() instanceof Crypto::KeyOpAlg::SymmetricCipherAlgorithmType +where a.getAlgorithmType() instanceof Crypto::KeyOpAlg::SymmetricCipherAlgorithm select a, a.getAlgorithmName() diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index aaeb2c86ac1f..dc34cd46a863 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.6.1-dev +version: 1.6.0 groups: - java - queries diff --git a/java/ql/test/library-tests/guards/Guards.java b/java/ql/test/library-tests/guards/Guards.java deleted file mode 100644 index b75e549d1669..000000000000 --- a/java/ql/test/library-tests/guards/Guards.java +++ /dev/null @@ -1,146 +0,0 @@ -public class Guards { - static void chk() { } - - static boolean g(Object lbl) { return lbl.hashCode() > 10; } - - static void checkTrue(boolean b, String msg) { - if (!b) throw new Error(msg); - } - - static void checkFalse(boolean b, String msg) { - checkTrue(!b, msg); - } - - void t1(int[] a, String s) { - if (g("A")) { - chk(); // $ guarded=g(A):true - } else { - chk(); // $ guarded=g(A):false - } - - boolean b = g(1) ? g(2) : true; - if (b != false) { - chk(); // $ guarded=...?...:...:true guarded='b != false:true' guarded=b:true - } else { - chk(); // $ guarded=...?...:...:false guarded='b != false:false' guarded=b:false guarded=g(1):true guarded=g(2):false - } - int sz = a != null ? a.length : 0; - for (int i = 0; i < sz; i++) { - chk(); // $ guarded='a != null:true' guarded='i < sz:true' guarded='sz:not 0' guarded='...?...:...:not 0' guarded='a.length:not 0' guarded='a:not null' - int e = a[i]; - if (e > 2) break; - } - chk(); // nothing guards here - - if (g(3)) - s = "bar"; - switch (s) { - case "bar": - chk(); // $ guarded='s:match "bar"' guarded='s:bar' - break; - case "foo": - chk(); // $ guarded='s:match "foo"' guarded='s:foo' guarded=g(3):false - break; - default: - chk(); // $ guarded='s:non-match "bar"' guarded='s:non-match "foo"' guarded='s:not bar' guarded='s:not foo' guarded='s:match default' guarded=g(3):false - break; - } - - Object o = g(4) ? null : s; - if (o instanceof String) { - chk(); // $ guarded=...instanceof...:true guarded='o:not null' guarded='...?...:...:not null' guarded=g(4):false guarded='s:not null' - } - } - - void t2() { - checkTrue(g(1), "A"); - checkFalse(g(2), "B"); - chk(); // $ guarded='checkTrue(...):no exception' guarded=g(1):true guarded='checkFalse(...):no exception' guarded=g(2):false - } - - void t3() { - boolean b = g(1) && (g(2) || g(3)); - if (b) { - chk(); // $ guarded=b:true guarded='g(...) && ... \|\| ...:true' guarded=g(1):true guarded='g(...) \|\| g(...):true' - } else { - chk(); // $ guarded=b:false guarded='g(...) && ... \|\| ...:false' - } - b = g(4) || !g(5); - if (b) { - chk(); // $ guarded=b:true guarded='g(...) \|\| !...:true' - } else { - chk(); // $ guarded=b:false guarded='g(...) \|\| !...:false' guarded=g(4):false guarded=!...:false guarded=g(5):true - } - } - - enum Val { - E1, - E2, - E3 - } - - void t4() { - Val x = null; // unique value - if (g(1)) x = Val.E1; // unique value - if (g(2)) x = Val.E2; - if (g("Alt2")) x = Val.E2; - if (g(3)) x = Val.E3; // unique value - if (x == null) - chk(); // $ guarded='x == null:true' guarded='x:null' guarded=g(1):false guarded=g(2):false guarded=g(Alt2):false guarded=g(3):false - switch (x) { - case E1: - chk(); // $ guarded='x:match E1' guarded='x:E1' guarded=g(1):true guarded=g(2):false guarded=g(Alt2):false guarded=g(3):false - break; - case E2: - chk(); // $ guarded='x:match E2' guarded='x:E2' guarded=g(3):false - break; - case E3: - chk(); // $ guarded='x:match E3' guarded='x:E3' guarded=g(3):true - break; - } - Object o = g(4) ? new Object() : null; - if (o == null) { - chk(); // $ guarded='o == null:true' guarded='o:null' guarded='...?...:...:null' guarded=g(4):false - } else { - chk(); // $ guarded='o == null:false' guarded='o:not null' guarded='...?...:...:not null' guarded=g(4):true - } - } - - void t5(String foo) { - String base = foo; - if (base == null) { - base = "/user"; - } - if (base.equals("/")) - chk(); // $ guarded=equals(/):true guarded='base:/' guarded='base:not null' guarded='base == null:false' guarded='foo:/' guarded='foo:not null' - } - - void t6() { - Object o = null; - if (g(1)) { - o = new Object(); - if (g(2)) { } - } - if (o != null) { - chk(); // $ guarded='o != null:true' guarded='o:not null' guarded=g(1):true - } else { - chk(); // $ guarded='o != null:false' guarded='o:null' guarded=g(1):false - } - } - - void t7(int[] a) { - boolean found = false; - for (int i = 0; i < a.length; i++) { - boolean answer = a[i] == 42; - if (answer) { - found = true; - } - if (found) { - chk(); // $ guarded=found:true guarded='i < a.length:true' - } - } - if (found) { - chk(); // $ guarded=found:true guarded='i < a.length:false' - } - } -} diff --git a/java/ql/test/library-tests/guards/GuardsInline.expected b/java/ql/test/library-tests/guards/GuardsInline.expected deleted file mode 100644 index c45d536b7e9a..000000000000 --- a/java/ql/test/library-tests/guards/GuardsInline.expected +++ /dev/null @@ -1,91 +0,0 @@ -| Guards.java:16:7:16:11 | chk(...) | g(A):true | -| Guards.java:18:7:18:11 | chk(...) | g(A):false | -| Guards.java:23:7:23:11 | chk(...) | 'b != false:true' | -| Guards.java:23:7:23:11 | chk(...) | ...?...:...:true | -| Guards.java:23:7:23:11 | chk(...) | b:true | -| Guards.java:25:7:25:11 | chk(...) | 'b != false:false' | -| Guards.java:25:7:25:11 | chk(...) | ...?...:...:false | -| Guards.java:25:7:25:11 | chk(...) | b:false | -| Guards.java:25:7:25:11 | chk(...) | g(1):true | -| Guards.java:25:7:25:11 | chk(...) | g(2):false | -| Guards.java:29:7:29:11 | chk(...) | '...?...:...:not 0' | -| Guards.java:29:7:29:11 | chk(...) | 'a != null:true' | -| Guards.java:29:7:29:11 | chk(...) | 'a.length:not 0' | -| Guards.java:29:7:29:11 | chk(...) | 'a:not null' | -| Guards.java:29:7:29:11 | chk(...) | 'i < sz:true' | -| Guards.java:29:7:29:11 | chk(...) | 'sz:not 0' | -| Guards.java:39:9:39:13 | chk(...) | 's:bar' | -| Guards.java:39:9:39:13 | chk(...) | 's:match "bar"' | -| Guards.java:42:9:42:13 | chk(...) | 's:foo' | -| Guards.java:42:9:42:13 | chk(...) | 's:match "foo"' | -| Guards.java:42:9:42:13 | chk(...) | g(3):false | -| Guards.java:45:9:45:13 | chk(...) | 's:match default' | -| Guards.java:45:9:45:13 | chk(...) | 's:non-match "bar"' | -| Guards.java:45:9:45:13 | chk(...) | 's:non-match "foo"' | -| Guards.java:45:9:45:13 | chk(...) | 's:not bar' | -| Guards.java:45:9:45:13 | chk(...) | 's:not foo' | -| Guards.java:45:9:45:13 | chk(...) | g(3):false | -| Guards.java:51:7:51:11 | chk(...) | '...?...:...:not null' | -| Guards.java:51:7:51:11 | chk(...) | 'o:not null' | -| Guards.java:51:7:51:11 | chk(...) | 's:not null' | -| Guards.java:51:7:51:11 | chk(...) | ...instanceof...:true | -| Guards.java:51:7:51:11 | chk(...) | g(4):false | -| Guards.java:58:5:58:9 | chk(...) | 'checkFalse(...):no exception' | -| Guards.java:58:5:58:9 | chk(...) | 'checkTrue(...):no exception' | -| Guards.java:58:5:58:9 | chk(...) | g(1):true | -| Guards.java:58:5:58:9 | chk(...) | g(2):false | -| Guards.java:64:7:64:11 | chk(...) | 'g(...) && ... \|\| ...:true' | -| Guards.java:64:7:64:11 | chk(...) | 'g(...) \|\| g(...):true' | -| Guards.java:64:7:64:11 | chk(...) | b:true | -| Guards.java:64:7:64:11 | chk(...) | g(1):true | -| Guards.java:66:7:66:11 | chk(...) | 'g(...) && ... \|\| ...:false' | -| Guards.java:66:7:66:11 | chk(...) | b:false | -| Guards.java:70:7:70:11 | chk(...) | 'g(...) \|\| !...:true' | -| Guards.java:70:7:70:11 | chk(...) | b:true | -| Guards.java:72:7:72:11 | chk(...) | !...:false | -| Guards.java:72:7:72:11 | chk(...) | 'g(...) \|\| !...:false' | -| Guards.java:72:7:72:11 | chk(...) | b:false | -| Guards.java:72:7:72:11 | chk(...) | g(4):false | -| Guards.java:72:7:72:11 | chk(...) | g(5):true | -| Guards.java:89:7:89:11 | chk(...) | 'x == null:true' | -| Guards.java:89:7:89:11 | chk(...) | 'x:null' | -| Guards.java:89:7:89:11 | chk(...) | g(1):false | -| Guards.java:89:7:89:11 | chk(...) | g(2):false | -| Guards.java:89:7:89:11 | chk(...) | g(3):false | -| Guards.java:89:7:89:11 | chk(...) | g(Alt2):false | -| Guards.java:92:9:92:13 | chk(...) | 'x:E1' | -| Guards.java:92:9:92:13 | chk(...) | 'x:match E1' | -| Guards.java:92:9:92:13 | chk(...) | g(1):true | -| Guards.java:92:9:92:13 | chk(...) | g(2):false | -| Guards.java:92:9:92:13 | chk(...) | g(3):false | -| Guards.java:92:9:92:13 | chk(...) | g(Alt2):false | -| Guards.java:95:9:95:13 | chk(...) | 'x:E2' | -| Guards.java:95:9:95:13 | chk(...) | 'x:match E2' | -| Guards.java:95:9:95:13 | chk(...) | g(3):false | -| Guards.java:98:9:98:13 | chk(...) | 'x:E3' | -| Guards.java:98:9:98:13 | chk(...) | 'x:match E3' | -| Guards.java:98:9:98:13 | chk(...) | g(3):true | -| Guards.java:103:7:103:11 | chk(...) | '...?...:...:null' | -| Guards.java:103:7:103:11 | chk(...) | 'o == null:true' | -| Guards.java:103:7:103:11 | chk(...) | 'o:null' | -| Guards.java:103:7:103:11 | chk(...) | g(4):false | -| Guards.java:105:7:105:11 | chk(...) | '...?...:...:not null' | -| Guards.java:105:7:105:11 | chk(...) | 'o == null:false' | -| Guards.java:105:7:105:11 | chk(...) | 'o:not null' | -| Guards.java:105:7:105:11 | chk(...) | g(4):true | -| Guards.java:115:7:115:11 | chk(...) | 'base == null:false' | -| Guards.java:115:7:115:11 | chk(...) | 'base:/' | -| Guards.java:115:7:115:11 | chk(...) | 'base:not null' | -| Guards.java:115:7:115:11 | chk(...) | 'foo:/' | -| Guards.java:115:7:115:11 | chk(...) | 'foo:not null' | -| Guards.java:115:7:115:11 | chk(...) | equals(/):true | -| Guards.java:125:7:125:11 | chk(...) | 'o != null:true' | -| Guards.java:125:7:125:11 | chk(...) | 'o:not null' | -| Guards.java:125:7:125:11 | chk(...) | g(1):true | -| Guards.java:127:7:127:11 | chk(...) | 'o != null:false' | -| Guards.java:127:7:127:11 | chk(...) | 'o:null' | -| Guards.java:127:7:127:11 | chk(...) | g(1):false | -| Guards.java:139:9:139:13 | chk(...) | 'i < a.length:true' | -| Guards.java:139:9:139:13 | chk(...) | found:true | -| Guards.java:143:7:143:11 | chk(...) | 'i < a.length:false' | -| Guards.java:143:7:143:11 | chk(...) | found:true | diff --git a/java/ql/test/library-tests/guards/GuardsInline.ql b/java/ql/test/library-tests/guards/GuardsInline.ql deleted file mode 100644 index 1b854659d87b..000000000000 --- a/java/ql/test/library-tests/guards/GuardsInline.ql +++ /dev/null @@ -1,51 +0,0 @@ -import java -import semmle.code.java.controlflow.Guards -import codeql.util.Boolean - -string ppGuard(Guard g, Boolean branch) { - exists(MethodCall mc, Literal s | - mc = g and - mc.getAnArgument() = s and - result = mc.getMethod().getName() + "(" + s.getValue() + ")" + ":" + branch - ) - or - exists(BinaryExpr bin | - bin = g and - result = "'" + bin.getLeftOperand() + bin.getOp() + bin.getRightOperand() + ":" + branch + "'" - ) - or - exists(SwitchCase cc, Expr s, string match, string value | - cc = g and - cc.getSelectorExpr() = s and - ( - cc.(ConstCase).getValue().toString() = value - or - cc instanceof DefaultCase and value = "default" - ) and - if branch = true then match = ":match " else match = ":non-match " - | - result = "'" + s.toString() + match + value + "'" - ) -} - -query predicate guarded(MethodCall mc, string guard) { - mc.getMethod().hasName("chk") and - exists(Guard g, BasicBlock bb, boolean branch | - g.controls(bb, branch) and - mc.getBasicBlock() = bb - | - guard = ppGuard(g, branch) - or - not exists(ppGuard(g, branch)) and - guard = g.toString() + ":" + branch - ) - or - mc.getMethod().hasName("chk") and - exists(Guard g, BasicBlock bb, GuardValue val | - g.valueControls(bb, val) and - not exists(val.asBooleanValue()) and - mc.getBasicBlock() = bb - | - guard = "'" + g.toString() + ":" + val + "'" - ) -} diff --git a/java/ql/test/library-tests/guards/GuardsInline.qlref b/java/ql/test/library-tests/guards/GuardsInline.qlref deleted file mode 100644 index a9492ac8f238..000000000000 --- a/java/ql/test/library-tests/guards/GuardsInline.qlref +++ /dev/null @@ -1,2 +0,0 @@ -query: GuardsInline.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/library-tests/guards/guardslogic.expected b/java/ql/test/library-tests/guards/guardslogic.expected index 29c11ccd153d..6536ad3b69fa 100644 --- a/java/ql/test/library-tests/guards/guardslogic.expected +++ b/java/ql/test/library-tests/guards/guardslogic.expected @@ -30,33 +30,33 @@ | Logic.java:29:16:29:19 | g(...) | false | Logic.java:30:30:31:5 | { ... } | | Logic.java:29:16:29:19 | g(...) | true | Logic.java:29:23:29:26 | null | | Logic.java:30:9:30:27 | ...instanceof... | true | Logic.java:30:30:31:5 | { ... } | -| Logic.java:35:5:35:29 | checkTrue(...) | no exception | Logic.java:36:5:36:28 | ; | -| Logic.java:35:5:35:29 | checkTrue(...) | no exception | Logic.java:37:5:37:15 | if (...) | -| Logic.java:35:5:35:29 | checkTrue(...) | no exception | Logic.java:37:17:39:5 | { ... } | -| Logic.java:35:5:35:29 | checkTrue(...) | no exception | Logic.java:40:5:40:18 | var ...; | +| Logic.java:35:5:35:29 | checkTrue(...) | true | Logic.java:36:5:36:28 | ; | +| Logic.java:35:5:35:29 | checkTrue(...) | true | Logic.java:37:5:37:15 | if (...) | +| Logic.java:35:5:35:29 | checkTrue(...) | true | Logic.java:37:17:39:5 | { ... } | +| Logic.java:35:5:35:29 | checkTrue(...) | true | Logic.java:40:5:40:18 | var ...; | | Logic.java:35:15:35:19 | ... > ... | true | Logic.java:36:5:36:28 | ; | | Logic.java:35:15:35:19 | ... > ... | true | Logic.java:37:5:37:15 | if (...) | | Logic.java:35:15:35:19 | ... > ... | true | Logic.java:37:17:39:5 | { ... } | | Logic.java:35:15:35:19 | ... > ... | true | Logic.java:40:5:40:18 | var ...; | -| Logic.java:36:5:36:27 | checkFalse(...) | no exception | Logic.java:37:5:37:15 | if (...) | -| Logic.java:36:5:36:27 | checkFalse(...) | no exception | Logic.java:37:17:39:5 | { ... } | -| Logic.java:36:5:36:27 | checkFalse(...) | no exception | Logic.java:40:5:40:18 | var ...; | +| Logic.java:36:5:36:27 | checkFalse(...) | false | Logic.java:37:5:37:15 | if (...) | +| Logic.java:36:5:36:27 | checkFalse(...) | false | Logic.java:37:17:39:5 | { ... } | +| Logic.java:36:5:36:27 | checkFalse(...) | false | Logic.java:40:5:40:18 | var ...; | | Logic.java:36:16:36:21 | g(...) | false | Logic.java:37:5:37:15 | if (...) | | Logic.java:36:16:36:21 | g(...) | false | Logic.java:37:17:39:5 | { ... } | | Logic.java:36:16:36:21 | g(...) | false | Logic.java:40:5:40:18 | var ...; | | Logic.java:37:9:37:14 | ... > ... | true | Logic.java:37:17:39:5 | { ... } | | Logic.java:44:10:44:10 | b | false | Logic.java:44:33:44:35 | msg | -| Logic.java:52:5:52:29 | checkTrue(...) | no exception | Logic.java:53:5:53:28 | ; | -| Logic.java:52:5:52:29 | checkTrue(...) | no exception | Logic.java:54:5:54:15 | if (...) | -| Logic.java:52:5:52:29 | checkTrue(...) | no exception | Logic.java:54:17:56:5 | { ... } | -| Logic.java:52:5:52:29 | checkTrue(...) | no exception | Logic.java:57:5:57:18 | var ...; | +| Logic.java:52:5:52:29 | checkTrue(...) | true | Logic.java:53:5:53:28 | ; | +| Logic.java:52:5:52:29 | checkTrue(...) | true | Logic.java:54:5:54:15 | if (...) | +| Logic.java:52:5:52:29 | checkTrue(...) | true | Logic.java:54:17:56:5 | { ... } | +| Logic.java:52:5:52:29 | checkTrue(...) | true | Logic.java:57:5:57:18 | var ...; | | Logic.java:52:24:52:28 | ... > ... | true | Logic.java:53:5:53:28 | ; | | Logic.java:52:24:52:28 | ... > ... | true | Logic.java:54:5:54:15 | if (...) | | Logic.java:52:24:52:28 | ... > ... | true | Logic.java:54:17:56:5 | { ... } | | Logic.java:52:24:52:28 | ... > ... | true | Logic.java:57:5:57:18 | var ...; | -| Logic.java:53:5:53:27 | checkFalse(...) | no exception | Logic.java:54:5:54:15 | if (...) | -| Logic.java:53:5:53:27 | checkFalse(...) | no exception | Logic.java:54:17:56:5 | { ... } | -| Logic.java:53:5:53:27 | checkFalse(...) | no exception | Logic.java:57:5:57:18 | var ...; | +| Logic.java:53:5:53:27 | checkFalse(...) | false | Logic.java:54:5:54:15 | if (...) | +| Logic.java:53:5:53:27 | checkFalse(...) | false | Logic.java:54:17:56:5 | { ... } | +| Logic.java:53:5:53:27 | checkFalse(...) | false | Logic.java:57:5:57:18 | var ...; | | Logic.java:53:21:53:26 | g(...) | false | Logic.java:54:5:54:15 | if (...) | | Logic.java:53:21:53:26 | g(...) | false | Logic.java:54:17:56:5 | { ... } | | Logic.java:53:21:53:26 | g(...) | false | Logic.java:57:5:57:18 | var ...; | diff --git a/java/ql/test/library-tests/guards/guardslogic.ql b/java/ql/test/library-tests/guards/guardslogic.ql index f2ce9fdaa365..afbb313d6645 100644 --- a/java/ql/test/library-tests/guards/guardslogic.ql +++ b/java/ql/test/library-tests/guards/guardslogic.ql @@ -1,9 +1,8 @@ import java import semmle.code.java.controlflow.Guards -from Guard g, BasicBlock bb, GuardValue gv +from Guard g, BasicBlock bb, boolean branch where - g.valueControls(bb, gv) and - g.getEnclosingCallable().getDeclaringType().hasName("Logic") and - (exists(gv.asBooleanValue()) or gv.isThrowsException() or gv.getDualValue().isThrowsException()) -select g, gv, bb + g.controls(bb, branch) and + g.getEnclosingCallable().getDeclaringType().hasName("Logic") +select g, branch, bb diff --git a/java/ql/test/library-tests/guards/guardspreconditions.expected b/java/ql/test/library-tests/guards/guardspreconditions.expected index 41080a5dab6e..9c0136c8e6e9 100644 --- a/java/ql/test/library-tests/guards/guardspreconditions.expected +++ b/java/ql/test/library-tests/guards/guardspreconditions.expected @@ -1,20 +1,20 @@ -| Preconditions.java:8:9:8:31 | assertTrue(...) | no exception | Preconditions.java:9:9:9:18 | ; | -| Preconditions.java:13:9:13:32 | assertTrue(...) | no exception | Preconditions.java:14:9:14:18 | ; | -| Preconditions.java:18:9:18:33 | assertFalse(...) | no exception | Preconditions.java:19:9:19:18 | ; | -| Preconditions.java:23:9:23:32 | assertFalse(...) | no exception | Preconditions.java:24:9:24:18 | ; | -| Preconditions.java:28:9:28:41 | assertTrue(...) | no exception | Preconditions.java:29:9:29:18 | ; | -| Preconditions.java:33:9:33:42 | assertTrue(...) | no exception | Preconditions.java:34:9:34:18 | ; | -| Preconditions.java:38:9:38:43 | assertFalse(...) | no exception | Preconditions.java:39:9:39:18 | ; | -| Preconditions.java:43:9:43:42 | assertFalse(...) | no exception | Preconditions.java:44:9:44:18 | ; | -| Preconditions.java:48:9:48:35 | assertTrue(...) | no exception | Preconditions.java:49:9:49:18 | ; | -| Preconditions.java:53:9:53:36 | assertTrue(...) | no exception | Preconditions.java:54:9:54:18 | ; | -| Preconditions.java:58:9:58:37 | assertFalse(...) | no exception | Preconditions.java:59:9:59:18 | ; | -| Preconditions.java:63:9:63:36 | assertFalse(...) | no exception | Preconditions.java:64:9:64:18 | ; | -| Preconditions.java:68:9:68:45 | assertTrue(...) | no exception | Preconditions.java:69:9:69:18 | ; | -| Preconditions.java:73:9:73:46 | assertTrue(...) | no exception | Preconditions.java:74:9:74:18 | ; | -| Preconditions.java:78:9:78:47 | assertFalse(...) | no exception | Preconditions.java:79:9:79:18 | ; | -| Preconditions.java:83:9:83:46 | assertFalse(...) | no exception | Preconditions.java:84:9:84:18 | ; | -| Preconditions.java:88:9:88:15 | t(...) | no exception | Preconditions.java:89:9:89:18 | ; | -| Preconditions.java:93:9:93:16 | t(...) | no exception | Preconditions.java:94:9:94:18 | ; | -| Preconditions.java:98:9:98:16 | f(...) | no exception | Preconditions.java:99:9:99:18 | ; | -| Preconditions.java:103:9:103:15 | f(...) | no exception | Preconditions.java:104:9:104:18 | ; | +| Preconditions.java:8:9:8:31 | assertTrue(...) | true | Preconditions.java:9:9:9:18 | ; | +| Preconditions.java:13:9:13:32 | assertTrue(...) | true | Preconditions.java:14:9:14:18 | ; | +| Preconditions.java:18:9:18:33 | assertFalse(...) | false | Preconditions.java:19:9:19:18 | ; | +| Preconditions.java:23:9:23:32 | assertFalse(...) | false | Preconditions.java:24:9:24:18 | ; | +| Preconditions.java:28:9:28:41 | assertTrue(...) | true | Preconditions.java:29:9:29:18 | ; | +| Preconditions.java:33:9:33:42 | assertTrue(...) | true | Preconditions.java:34:9:34:18 | ; | +| Preconditions.java:38:9:38:43 | assertFalse(...) | false | Preconditions.java:39:9:39:18 | ; | +| Preconditions.java:43:9:43:42 | assertFalse(...) | false | Preconditions.java:44:9:44:18 | ; | +| Preconditions.java:48:9:48:35 | assertTrue(...) | true | Preconditions.java:49:9:49:18 | ; | +| Preconditions.java:53:9:53:36 | assertTrue(...) | true | Preconditions.java:54:9:54:18 | ; | +| Preconditions.java:58:9:58:37 | assertFalse(...) | false | Preconditions.java:59:9:59:18 | ; | +| Preconditions.java:63:9:63:36 | assertFalse(...) | false | Preconditions.java:64:9:64:18 | ; | +| Preconditions.java:68:9:68:45 | assertTrue(...) | true | Preconditions.java:69:9:69:18 | ; | +| Preconditions.java:73:9:73:46 | assertTrue(...) | true | Preconditions.java:74:9:74:18 | ; | +| Preconditions.java:78:9:78:47 | assertFalse(...) | false | Preconditions.java:79:9:79:18 | ; | +| Preconditions.java:83:9:83:46 | assertFalse(...) | false | Preconditions.java:84:9:84:18 | ; | +| Preconditions.java:88:9:88:15 | t(...) | true | Preconditions.java:89:9:89:18 | ; | +| Preconditions.java:93:9:93:16 | t(...) | true | Preconditions.java:94:9:94:18 | ; | +| Preconditions.java:98:9:98:16 | f(...) | false | Preconditions.java:99:9:99:18 | ; | +| Preconditions.java:103:9:103:15 | f(...) | false | Preconditions.java:104:9:104:18 | ; | diff --git a/java/ql/test/library-tests/guards/guardspreconditions.ql b/java/ql/test/library-tests/guards/guardspreconditions.ql index 77e4a4e48c08..12c823e9638c 100644 --- a/java/ql/test/library-tests/guards/guardspreconditions.ql +++ b/java/ql/test/library-tests/guards/guardspreconditions.ql @@ -1,9 +1,8 @@ import java import semmle.code.java.controlflow.Guards -from Guard g, BasicBlock bb, GuardValue gv +from Guard g, BasicBlock bb, boolean branch where - g.valueControls(bb, gv) and - g.getEnclosingCallable().getDeclaringType().hasName("Preconditions") and - (gv.isThrowsException() or gv.getDualValue().isThrowsException()) -select g, gv, bb + g.controls(bb, branch) and + g.getEnclosingCallable().getDeclaringType().hasName("Preconditions") +select g, branch, bb diff --git a/java/ql/test/library-tests/guards12/guard.expected b/java/ql/test/library-tests/guards12/guard.expected index fade9fd4e8fc..0980e891d84a 100644 --- a/java/ql/test/library-tests/guards12/guard.expected +++ b/java/ql/test/library-tests/guards12/guard.expected @@ -51,5 +51,13 @@ hasBranchEdge | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | false | Test.java:13:7:13:16 | default | | Test.java:12:7:12:17 | case ... | Test.java:9:13:9:13 | s | Test.java:12:12:12:14 | "d" | true | true | Test.java:12:7:12:17 | case ... | | Test.java:17:26:17:33 | ... == ... | Test.java:17:26:17:28 | len | Test.java:17:33:17:33 | 4 | true | true | Test.java:17:38:17:40 | { ... } | +| Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | false | Test.java:19:7:19:16 | default | +| Test.java:18:7:18:17 | case ... | Test.java:16:13:16:13 | s | Test.java:18:12:18:14 | "e" | true | true | Test.java:18:7:18:17 | case ... | +| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | false | Test.java:25:7:25:16 | default | +| Test.java:22:7:22:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:22:12:22:14 | "f" | true | true | Test.java:22:7:22:17 | case ... | | Test.java:23:27:23:34 | ... == ... | Test.java:23:27:23:29 | len | Test.java:23:34:23:34 | 4 | true | true | Test.java:23:39:23:41 | { ... } | +| Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | false | Test.java:25:7:25:16 | default | +| Test.java:24:7:24:17 | case ... | Test.java:21:13:21:41 | ...?...:... | Test.java:24:12:24:14 | "g" | true | true | Test.java:24:7:24:17 | case ... | +| Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | false | Test.java:33:7:33:14 | default | | Test.java:28:7:28:15 | case ... | Test.java:27:13:27:13 | s | Test.java:28:12:28:14 | "h" | true | true | Test.java:28:7:28:15 | case ... | +| Test.java:30:7:30:15 | case ... | Test.java:27:13:27:13 | s | Test.java:30:12:30:14 | "i" | true | false | Test.java:33:7:33:14 | default | diff --git a/java/ql/test/library-tests/guards12/guard.ql b/java/ql/test/library-tests/guards12/guard.ql index d53dfdbc7135..cff2845ad9f8 100644 --- a/java/ql/test/library-tests/guards12/guard.ql +++ b/java/ql/test/library-tests/guards12/guard.ql @@ -1,8 +1,8 @@ import java import semmle.code.java.controlflow.Guards -query predicate hasBranchEdge(Guard g, BasicBlock bb1, BasicBlock bb2, GuardValue branch) { - g.hasValueBranchEdge(bb1, bb2, branch) +query predicate hasBranchEdge(Guard g, BasicBlock bb1, BasicBlock bb2, boolean branch) { + g.hasBranchEdge(bb1, bb2, branch) } from Guard g, BasicBlock bb, boolean branch, Expr e1, Expr e2, boolean pol diff --git a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.expected b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.expected index 7b8e175162ca..0be8b917e026 100644 --- a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.expected +++ b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.expected @@ -1,5 +1 @@ -| CallsToRunnableRun.java:67:5:67:16 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | -| CallsToRunnableRun.java:71:5:71:24 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | -| CallsToRunnableRun.java:75:5:75:24 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | -| CallsToRunnableRun.java:79:5:79:27 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | -| CallsToRunnableRun.java:83:5:83:27 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | +| CallsToRunnableRun.java:15:3:15:15 | run(...) | Calling 'Thread.run()' rather than 'Thread.start()' will not spawn a new thread. | diff --git a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.java b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.java index 21ed4276458c..814c9d516bbf 100644 --- a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.java +++ b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.java @@ -1,95 +1,18 @@ -class Job implements Runnable { - public void run() { - /* ... */ - } -} - -/** - * A class that subclasses `java.lang.Thread` and inherits its `.run()` method. - */ -class AnotherThread1 extends Thread { - AnotherThread1(Runnable runnable) { - super(runnable); - } -} - -/** - * A class that directly subclasses `java.lang.Thread` and overrides its - * `.run()` method. - */ -class AnotherThread2 extends Thread { - AnotherThread2(Runnable runnable) { - super(runnable); - } - - /** - * An overriding definition of `Thread.run`. - */ - @Override - public void run() { - super.run(); // COMPLIANT: called within a `run` method - } -} - -/** - * A class that indirectly subclasses `java.lang.Thread` by subclassing - * `AnotherThread1` and inherits its `.run()` - * method. - */ -class YetAnotherThread1 extends AnotherThread1 { - YetAnotherThread1(Runnable runnable) { - super(runnable); - } -} - -/** - * A class that indirectly subclasses `java.lang.Thread` by subclassing - * `AnotherThread2` and overrides its `.run()` - * method. - */ -class YetAnotherThread2 extends AnotherThread2 { - YetAnotherThread2(Runnable runnable) { - super(runnable); - } - - /** - * An overriding definition of `AnotherThread.run`. - */ - @Override - public void run() { - super.run(); // COMPLIANT: called within a `run` method - } -} - -class ThreadExample { - public void f() { - Thread thread = new Thread(new Job()); - thread.run(); // $ Alert - `Thread.run()` called directly. - thread.start(); // COMPLIANT: Thread started with `.start()`. - - AnotherThread1 anotherThread1 = new AnotherThread1(new Job()); - anotherThread1.run(); // $ Alert - Inherited `Thread.run()` called on its instance. - anotherThread1.start(); // COMPLIANT: Inherited `Thread.start()` used to start the thread. - - AnotherThread2 anotherThread2 = new AnotherThread2(new Job()); - anotherThread2.run(); // $ Alert - Overriden `Thread.run()` called on its instance. - anotherThread2.start(); // COMPLIANT: Overriden `Thread.start()` used to start the thread. - - YetAnotherThread1 yetAnotherThread1 = new YetAnotherThread1(new Job()); - yetAnotherThread1.run(); // $ Alert - Inherited `AnotherThread1.run()` called on its instance. - yetAnotherThread1.start(); // COMPLIANT: Inherited `AnotherThread.start()` used to start the thread. - - YetAnotherThread2 yetAnotherThread2 = new YetAnotherThread2(new Job()); - yetAnotherThread2.run(); // $ Alert - Overriden `AnotherThread2.run()` called on its instance. - yetAnotherThread2.start(); // COMPLIANT: Overriden `AnotherThread2.start()` used to start the thread. - - Runnable runnable = new Runnable() { - public void run() { - /* ... */ } - }; - runnable.run(); // COMPLIANT: called on `Runnable` object. - - Job job = new Job(); - job.run(); // COMPLIANT: called on `Runnable` object. - } +import java.lang.Runnable; + +public class CallsToRunnableRun extends Thread implements Runnable{ + + private Thread wrapped; + private Runnable callback; + + @Override + public void run() { + wrapped.run(); + callback.run(); + } + + public void bad() { + wrapped.run(); + callback.run(); + } } diff --git a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.qlref b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.qlref index 4061770874fe..fff4a4f5770c 100644 --- a/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.qlref +++ b/java/ql/test/query-tests/CallsToRunnableRun/CallsToRunnableRun.qlref @@ -1,2 +1 @@ -query: Likely Bugs/Concurrency/CallsToRunnableRun.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql +Likely Bugs/Concurrency/CallsToRunnableRun.ql \ No newline at end of file diff --git a/java/ql/test/query-tests/Nullness/C.java b/java/ql/test/query-tests/Nullness/C.java index d195eea6acb3..ac6a5f291da2 100644 --- a/java/ql/test/query-tests/Nullness/C.java +++ b/java/ql/test/query-tests/Nullness/C.java @@ -60,7 +60,7 @@ public void ex5(boolean hasArr, int[] arr) { arrLen = arr == null ? 0 : arr.length; } if (arrLen > 0) { - arr[0] = 0; // OK + arr[0] = 0; // NPE - false positive } } @@ -244,14 +244,4 @@ public void ex17() { } xs[0]++; // OK } - - public void ex18(boolean b, int[] xs, Object related) { - assert (!b && xs == null && related == null) || - (b && xs != null && related != null) || - (b && xs == null && related == null); - if (b) { - if (related == null) { return; } - xs[0] = 42; // OK - } - } } diff --git a/java/ql/test/query-tests/Nullness/NullMaybe.expected b/java/ql/test/query-tests/Nullness/NullMaybe.expected index a19fae57e74e..80cf8f00f8d5 100644 --- a/java/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/java/ql/test/query-tests/Nullness/NullMaybe.expected @@ -24,6 +24,7 @@ | C.java:10:17:10:18 | a3 | Variable $@ may be null at this access because of $@ assignment. | C.java:8:5:8:21 | long[] a3 | a3 | C.java:8:12:8:20 | a3 | this | | C.java:21:7:21:8 | s1 | Variable $@ may be null at this access because of $@ assignment. | C.java:14:5:14:30 | String s1 | s1 | C.java:17:7:17:24 | ...=... | this | | C.java:51:7:51:11 | slice | Variable $@ may be null at this access because of $@ assignment. | C.java:43:5:43:30 | List slice | slice | C.java:43:18:43:29 | slice | this | +| C.java:63:7:63:9 | arr | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:57:35:57:43 | arr | arr | C.java:60:16:60:26 | ... == ... | this | | C.java:100:7:100:10 | arr2 | Variable $@ may be null at this access because of $@ assignment. | C.java:95:5:95:22 | int[] arr2 | arr2 | C.java:95:11:95:21 | arr2 | this | | C.java:110:25:110:27 | obj | Variable $@ may be null at this access because of $@ assignment. | C.java:106:5:106:30 | Object obj | obj | C.java:118:13:118:22 | ...=... | this | | C.java:137:7:137:10 | obj2 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:131:5:131:23 | Object obj2 | obj2 | C.java:132:9:132:20 | ... != ... | this | diff --git a/java/ql/test/query-tests/RangeAnalysis/A.java b/java/ql/test/query-tests/RangeAnalysis/A.java index b68de9beaa7c..4fd1b87bb708 100644 --- a/java/ql/test/query-tests/RangeAnalysis/A.java +++ b/java/ql/test/query-tests/RangeAnalysis/A.java @@ -64,7 +64,7 @@ void m4(int[] a, int[] b) { int sum = 0; for (int i = 0; i < a.length; ) { sum += a[i++]; // OK - sum += a[i++]; // OK + sum += a[i++]; // OK - FP } int len = b.length; if ((len & 1) != 0) diff --git a/java/ql/test/query-tests/RangeAnalysis/ArrayIndexOutOfBounds.expected b/java/ql/test/query-tests/RangeAnalysis/ArrayIndexOutOfBounds.expected index 92099db01cbd..dc0b87d68b25 100644 --- a/java/ql/test/query-tests/RangeAnalysis/ArrayIndexOutOfBounds.expected +++ b/java/ql/test/query-tests/RangeAnalysis/ArrayIndexOutOfBounds.expected @@ -3,6 +3,7 @@ | A.java:45:14:45:22 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | | A.java:49:14:49:22 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | | A.java:58:14:58:19 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | +| A.java:67:14:67:19 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | | A.java:89:12:89:16 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | | A.java:100:18:100:31 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length + 8. | | A.java:113:14:113:21 | ...[...] | This array access might be out of bounds, as the index might be equal to the array length. | diff --git a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.expected b/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.expected deleted file mode 100644 index 038f2d1d9988..000000000000 --- a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.expected +++ /dev/null @@ -1,3 +0,0 @@ -| Test.java:7:42:7:75 | new ScheduledThreadPoolExecutor(...) | ScheduledThreadPoolExecutor.corePoolSize is set to have 0 threads. | -| Test.java:8:9:8:28 | setCorePoolSize(...) | ScheduledThreadPoolExecutor.corePoolSize is set to have 0 threads. | -| Test.java:9:9:9:28 | setCorePoolSize(...) | ScheduledThreadPoolExecutor.corePoolSize is set to have 0 threads. | diff --git a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.qlref b/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.qlref deleted file mode 100644 index e0089e4cf029..000000000000 --- a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/ScheduledThreadPoolExecutorZeroThread.qlref +++ /dev/null @@ -1,2 +0,0 @@ -query: Likely Bugs/Concurrency/ScheduledThreadPoolExecutorZeroThread.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/Test.java b/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/Test.java deleted file mode 100644 index d02e6a3403eb..000000000000 --- a/java/ql/test/query-tests/ScheduledThreadPoolExecutorZeroThread/Test.java +++ /dev/null @@ -1,11 +0,0 @@ -import java.util.concurrent.ScheduledThreadPoolExecutor; - -public class Test { - void f() { - int i = 0; - ScheduledThreadPoolExecutor s = new ScheduledThreadPoolExecutor(1); // Compliant - ScheduledThreadPoolExecutor s1 = new ScheduledThreadPoolExecutor(0); // $ Alert - s.setCorePoolSize(0); // $ Alert - s.setCorePoolSize(i); // $ Alert - } -} diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected index aee29733bca4..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.expected @@ -1,474 +0,0 @@ -#select -| TaintedPath.java:16:71:16:78 | filename | TaintedPath.java:13:58:13:78 | getInputStream(...) : InputStream | TaintedPath.java:16:71:16:78 | filename | This path depends on a $@. | TaintedPath.java:13:58:13:78 | getInputStream(...) | user-provided value | -| Test.java:37:52:37:68 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:37:52:37:68 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:39:32:39:48 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:39:32:39:48 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:41:47:41:63 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:41:47:41:63 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:43:10:43:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:43:10:43:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:45:10:45:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:45:10:45:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:47:10:47:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:47:10:47:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:49:10:49:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:49:10:49:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:51:39:51:53 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:51:39:51:53 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:53:10:53:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:53:10:53:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:55:10:55:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:55:10:55:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:57:10:57:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:57:10:57:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:59:10:59:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:59:10:59:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:61:10:61:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:61:10:61:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:63:10:63:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:63:10:63:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:65:10:65:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:65:10:65:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:67:10:67:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:67:10:67:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:69:31:69:45 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:69:31:69:45 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:71:10:71:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:71:10:71:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:73:10:73:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:73:10:73:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:75:10:75:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:75:10:75:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:77:10:77:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:77:10:77:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:79:10:79:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:79:10:79:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:81:10:81:24 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:81:10:81:24 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:83:31:83:45 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:83:31:83:45 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:85:29:85:43 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:85:29:85:43 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:87:29:87:53 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:87:29:87:53 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:89:29:89:45 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:89:29:89:45 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:91:24:91:38 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:91:24:91:38 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:93:24:93:48 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:93:24:93:48 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:95:24:95:38 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:95:24:95:38 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:97:24:97:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:97:24:97:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:99:24:99:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:99:24:99:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:101:20:101:34 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:101:20:101:34 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:102:20:102:34 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:102:20:102:34 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:104:33:104:47 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:104:33:104:47 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:105:40:105:54 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:105:40:105:54 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:107:33:107:47 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:107:33:107:47 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:109:31:109:45 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:109:31:109:45 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:111:26:111:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:111:26:111:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:113:26:113:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:113:26:113:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:115:34:115:48 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:115:34:115:48 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:117:35:117:49 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:117:35:117:49 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:119:30:119:44 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:119:30:119:44 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:121:22:121:36 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:121:22:121:36 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:123:30:123:44 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:123:30:123:44 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:125:21:125:35 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:125:21:125:35 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:127:26:127:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:127:26:127:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:129:33:129:47 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:129:33:129:47 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:131:33:131:47 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:131:33:131:47 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:132:33:132:47 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:132:33:132:47 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:134:31:134:45 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:134:31:134:45 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:136:21:136:35 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:136:21:136:35 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:137:21:137:35 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:137:21:137:35 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:138:21:138:35 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:138:21:138:35 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:140:27:140:41 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:140:27:140:41 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:141:27:141:41 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:141:27:141:41 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:143:26:143:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:143:26:143:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:145:35:145:49 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:145:35:145:49 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:147:41:147:57 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:147:41:147:57 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:149:45:149:61 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:149:45:149:61 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:151:43:151:57 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:151:43:151:57 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:153:28:153:42 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:153:28:153:42 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:155:41:155:55 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:155:41:155:55 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:160:30:160:44 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:160:30:160:44 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:162:40:162:81 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:162:40:162:81 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:164:34:164:75 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:164:34:164:75 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:166:34:166:75 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:166:34:166:75 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:168:23:168:37 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:168:23:168:37 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:181:23:181:37 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:181:23:181:37 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:186:23:186:40 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:186:23:186:40 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:188:20:188:34 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:188:20:188:34 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:190:21:190:35 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:190:21:190:35 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:192:22:192:36 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:192:22:192:36 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:197:20:197:34 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:197:20:197:34 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:199:19:199:33 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:199:19:199:33 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -| Test.java:204:20:204:36 | (...)... | Test.java:32:16:32:45 | getParameter(...) : String | Test.java:204:20:204:36 | (...)... | This path depends on a $@. | Test.java:32:16:32:45 | getParameter(...) | user-provided value | -edges -| TaintedPath.java:13:17:13:89 | new BufferedReader(...) : BufferedReader | TaintedPath.java:14:27:14:40 | filenameReader : BufferedReader | provenance | | -| TaintedPath.java:13:36:13:88 | new InputStreamReader(...) : InputStreamReader | TaintedPath.java:13:17:13:89 | new BufferedReader(...) : BufferedReader | provenance | MaD:74 | -| TaintedPath.java:13:58:13:78 | getInputStream(...) : InputStream | TaintedPath.java:13:36:13:88 | new InputStreamReader(...) : InputStreamReader | provenance | Src:MaD:72 MaD:76 | -| TaintedPath.java:14:27:14:40 | filenameReader : BufferedReader | TaintedPath.java:14:27:14:51 | readLine(...) : String | provenance | MaD:75 | -| TaintedPath.java:14:27:14:51 | readLine(...) : String | TaintedPath.java:16:71:16:78 | filename | provenance | Sink:MaD:27 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:37:61:37:68 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:39:41:39:48 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:41:56:41:63 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:43:17:43:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:45:17:45:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:47:17:47:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:49:17:49:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:51:46:51:53 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:53:17:53:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:55:17:55:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:57:17:57:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:59:17:59:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:61:17:61:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:63:17:63:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:65:17:65:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:67:17:67:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:69:38:69:45 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:71:17:71:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:73:17:73:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:75:17:75:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:77:17:77:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:79:17:79:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:81:17:81:24 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:83:38:83:45 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:85:36:85:43 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:87:46:87:53 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:89:38:89:45 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:91:31:91:38 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:93:41:93:48 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:95:31:95:38 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:97:33:97:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:99:33:99:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:101:27:101:34 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:102:27:102:34 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:104:40:104:47 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:105:47:105:54 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:107:40:107:47 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:109:38:109:45 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:111:33:111:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:113:33:113:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:115:41:115:48 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:117:42:117:49 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:119:37:119:44 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:121:29:121:36 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:123:37:123:44 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:125:28:125:35 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:127:33:127:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:129:40:129:47 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:131:40:131:47 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:132:40:132:47 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:134:38:134:45 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:136:28:136:35 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:137:28:137:35 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:138:28:138:35 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:140:34:140:41 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:141:34:141:41 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:143:33:143:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:145:42:145:49 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:147:50:147:57 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:149:54:149:61 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:151:50:151:57 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:153:35:153:42 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:155:48:155:55 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:160:37:160:44 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:162:74:162:81 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:164:68:164:75 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:166:68:166:75 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:168:30:168:37 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:181:30:181:37 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:186:33:186:40 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:188:27:188:34 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:190:28:190:35 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:192:29:192:36 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:197:27:197:34 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:199:26:199:33 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:32:16:32:45 | getParameter(...) : String | Test.java:204:29:204:36 | source(...) : String | provenance | Src:MaD:73 | -| Test.java:37:61:37:68 | source(...) : String | Test.java:37:52:37:68 | (...)... | provenance | Sink:MaD:31 | -| Test.java:39:41:39:48 | source(...) : String | Test.java:39:32:39:48 | (...)... | provenance | Sink:MaD:29 | -| Test.java:41:56:41:63 | source(...) : String | Test.java:41:47:41:63 | (...)... | provenance | Sink:MaD:30 | -| Test.java:43:17:43:24 | source(...) : String | Test.java:43:10:43:24 | (...)... | provenance | Sink:MaD:1 | -| Test.java:45:17:45:24 | source(...) : String | Test.java:45:10:45:24 | (...)... | provenance | Sink:MaD:2 | -| Test.java:47:17:47:24 | source(...) : String | Test.java:47:10:47:24 | (...)... | provenance | Sink:MaD:3 | -| Test.java:49:17:49:24 | source(...) : String | Test.java:49:10:49:24 | (...)... | provenance | Sink:MaD:4 | -| Test.java:51:46:51:53 | source(...) : String | Test.java:51:39:51:53 | (...)... | provenance | Sink:MaD:5 | -| Test.java:53:17:53:24 | source(...) : String | Test.java:53:10:53:24 | (...)... | provenance | Sink:MaD:6 | -| Test.java:55:17:55:24 | source(...) : String | Test.java:55:10:55:24 | (...)... | provenance | Sink:MaD:7 | -| Test.java:57:17:57:24 | source(...) : String | Test.java:57:10:57:24 | (...)... | provenance | Sink:MaD:8 | -| Test.java:59:17:59:24 | source(...) : String | Test.java:59:10:59:24 | (...)... | provenance | Sink:MaD:9 | -| Test.java:61:17:61:24 | source(...) : String | Test.java:61:10:61:24 | (...)... | provenance | Sink:MaD:10 | -| Test.java:63:17:63:24 | source(...) : String | Test.java:63:10:63:24 | (...)... | provenance | Sink:MaD:11 | -| Test.java:65:17:65:24 | source(...) : String | Test.java:65:10:65:24 | (...)... | provenance | Sink:MaD:12 | -| Test.java:67:17:67:24 | source(...) : String | Test.java:67:10:67:24 | (...)... | provenance | Sink:MaD:13 | -| Test.java:69:38:69:45 | source(...) : String | Test.java:69:31:69:45 | (...)... | provenance | Sink:MaD:14 | -| Test.java:71:17:71:24 | source(...) : String | Test.java:71:10:71:24 | (...)... | provenance | Sink:MaD:15 | -| Test.java:73:17:73:24 | source(...) : String | Test.java:73:10:73:24 | (...)... | provenance | Sink:MaD:16 | -| Test.java:75:17:75:24 | source(...) : String | Test.java:75:10:75:24 | (...)... | provenance | Sink:MaD:17 | -| Test.java:77:17:77:24 | source(...) : String | Test.java:77:10:77:24 | (...)... | provenance | Sink:MaD:19 | -| Test.java:79:17:79:24 | source(...) : String | Test.java:79:10:79:24 | (...)... | provenance | Sink:MaD:18 | -| Test.java:81:17:81:24 | source(...) : String | Test.java:81:10:81:24 | (...)... | provenance | Sink:MaD:20 | -| Test.java:83:38:83:45 | source(...) : String | Test.java:83:31:83:45 | (...)... | provenance | Sink:MaD:14 | -| Test.java:85:36:85:43 | source(...) : String | Test.java:85:29:85:43 | (...)... | provenance | Sink:MaD:21 | -| Test.java:87:46:87:53 | source(...) : String | Test.java:87:29:87:53 | (...)... | provenance | Sink:MaD:22 | -| Test.java:89:38:89:45 | source(...) : String | Test.java:89:29:89:45 | (...)... | provenance | Sink:MaD:23 | -| Test.java:91:31:91:38 | source(...) : String | Test.java:91:24:91:38 | (...)... | provenance | Sink:MaD:24 | -| Test.java:93:41:93:48 | source(...) : String | Test.java:93:24:93:48 | (...)... | provenance | Sink:MaD:26 | -| Test.java:95:31:95:38 | source(...) : String | Test.java:95:24:95:38 | (...)... | provenance | Sink:MaD:25 | -| Test.java:97:33:97:40 | source(...) : String | Test.java:97:24:97:40 | (...)... | provenance | Sink:MaD:27 | -| Test.java:99:33:99:40 | source(...) : String | Test.java:99:24:99:40 | (...)... | provenance | Sink:MaD:28 | -| Test.java:101:27:101:34 | source(...) : String | Test.java:101:20:101:34 | (...)... | provenance | Sink:MaD:34 | -| Test.java:102:27:102:34 | source(...) : String | Test.java:102:20:102:34 | (...)... | provenance | Sink:MaD:33 | -| Test.java:104:40:104:47 | source(...) : String | Test.java:104:33:104:47 | (...)... | provenance | Sink:MaD:35 | -| Test.java:105:47:105:54 | source(...) : String | Test.java:105:40:105:54 | (...)... | provenance | Sink:MaD:32 | -| Test.java:107:40:107:47 | source(...) : String | Test.java:107:33:107:47 | (...)... | provenance | Sink:MaD:36 | -| Test.java:109:38:109:45 | source(...) : String | Test.java:109:31:109:45 | (...)... | provenance | Sink:MaD:37 | -| Test.java:111:33:111:40 | source(...) : String | Test.java:111:26:111:40 | (...)... | provenance | Sink:MaD:38 | -| Test.java:113:33:113:40 | source(...) : String | Test.java:113:26:113:40 | (...)... | provenance | Sink:MaD:39 | -| Test.java:115:41:115:48 | source(...) : String | Test.java:115:34:115:48 | (...)... | provenance | Sink:MaD:40 | -| Test.java:117:42:117:49 | source(...) : String | Test.java:117:35:117:49 | (...)... | provenance | Sink:MaD:41 | -| Test.java:119:37:119:44 | source(...) : String | Test.java:119:30:119:44 | (...)... | provenance | Sink:MaD:42 | -| Test.java:121:29:121:36 | source(...) : String | Test.java:121:22:121:36 | (...)... | provenance | Sink:MaD:43 | -| Test.java:123:37:123:44 | source(...) : String | Test.java:123:30:123:44 | (...)... | provenance | Sink:MaD:44 | -| Test.java:125:28:125:35 | source(...) : String | Test.java:125:21:125:35 | (...)... | provenance | Sink:MaD:45 | -| Test.java:127:33:127:40 | source(...) : String | Test.java:127:26:127:40 | (...)... | provenance | Sink:MaD:46 | -| Test.java:129:40:129:47 | source(...) : String | Test.java:129:33:129:47 | (...)... | provenance | Sink:MaD:47 | -| Test.java:131:40:131:47 | source(...) : String | Test.java:131:33:131:47 | (...)... | provenance | Sink:MaD:48 | -| Test.java:132:40:132:47 | source(...) : String | Test.java:132:33:132:47 | (...)... | provenance | Sink:MaD:48 | -| Test.java:134:38:134:45 | source(...) : String | Test.java:134:31:134:45 | (...)... | provenance | Sink:MaD:49 | -| Test.java:136:28:136:35 | source(...) : String | Test.java:136:21:136:35 | (...)... | provenance | Sink:MaD:50 | -| Test.java:137:28:137:35 | source(...) : String | Test.java:137:21:137:35 | (...)... | provenance | Sink:MaD:50 | -| Test.java:138:28:138:35 | source(...) : String | Test.java:138:21:138:35 | (...)... | provenance | Sink:MaD:50 | -| Test.java:140:34:140:41 | source(...) : String | Test.java:140:27:140:41 | (...)... | provenance | Sink:MaD:51 | -| Test.java:141:34:141:41 | source(...) : String | Test.java:141:27:141:41 | (...)... | provenance | Sink:MaD:51 | -| Test.java:143:33:143:40 | source(...) : String | Test.java:143:26:143:40 | (...)... | provenance | Sink:MaD:52 | -| Test.java:145:42:145:49 | source(...) : String | Test.java:145:35:145:49 | (...)... | provenance | Sink:MaD:53 | -| Test.java:147:50:147:57 | source(...) : String | Test.java:147:41:147:57 | (...)... | provenance | Sink:MaD:65 | -| Test.java:149:54:149:61 | source(...) : String | Test.java:149:45:149:61 | (...)... | provenance | Sink:MaD:66 | -| Test.java:151:50:151:57 | source(...) : String | Test.java:151:43:151:57 | (...)... | provenance | Sink:MaD:71 | -| Test.java:153:35:153:42 | source(...) : String | Test.java:153:28:153:42 | (...)... | provenance | Sink:MaD:69 | -| Test.java:155:48:155:55 | source(...) : String | Test.java:155:41:155:55 | (...)... | provenance | Sink:MaD:70 | -| Test.java:160:37:160:44 | source(...) : String | Test.java:160:30:160:44 | (...)... | provenance | Sink:MaD:63 | -| Test.java:162:74:162:81 | source(...) : String | Test.java:162:40:162:81 | (...)... | provenance | Sink:MaD:60 | -| Test.java:164:68:164:75 | source(...) : String | Test.java:164:34:164:75 | (...)... | provenance | Sink:MaD:62 | -| Test.java:166:68:166:75 | source(...) : String | Test.java:166:34:166:75 | (...)... | provenance | Sink:MaD:61 | -| Test.java:168:30:168:37 | source(...) : String | Test.java:168:23:168:37 | (...)... | provenance | Sink:MaD:67 | -| Test.java:181:30:181:37 | source(...) : String | Test.java:181:23:181:37 | (...)... | provenance | Sink:MaD:64 | -| Test.java:186:33:186:40 | source(...) : String | Test.java:186:23:186:40 | (...)... | provenance | Sink:MaD:54 | -| Test.java:188:27:188:34 | source(...) : String | Test.java:188:20:188:34 | (...)... | provenance | Sink:MaD:55 | -| Test.java:190:28:190:35 | source(...) : String | Test.java:190:21:190:35 | (...)... | provenance | Sink:MaD:56 | -| Test.java:192:29:192:36 | source(...) : String | Test.java:192:22:192:36 | (...)... | provenance | Sink:MaD:57 | -| Test.java:197:27:197:34 | source(...) : String | Test.java:197:20:197:34 | (...)... | provenance | Sink:MaD:58 | -| Test.java:199:26:199:33 | source(...) : String | Test.java:199:19:199:33 | (...)... | provenance | Sink:MaD:59 | -| Test.java:204:29:204:36 | source(...) : String | Test.java:204:20:204:36 | (...)... | provenance | Sink:MaD:68 | -models -| 1 | Sink: java.io; File; true; canExecute; (); ; Argument[this]; path-injection; manual | -| 2 | Sink: java.io; File; true; canRead; (); ; Argument[this]; path-injection; manual | -| 3 | Sink: java.io; File; true; canWrite; (); ; Argument[this]; path-injection; manual | -| 4 | Sink: java.io; File; true; createNewFile; (); ; Argument[this]; path-injection; ai-manual | -| 5 | Sink: java.io; File; true; createTempFile; (String,String,File); ; Argument[2]; path-injection; ai-manual | -| 6 | Sink: java.io; File; true; delete; (); ; Argument[this]; path-injection; manual | -| 7 | Sink: java.io; File; true; deleteOnExit; (); ; Argument[this]; path-injection; manual | -| 8 | Sink: java.io; File; true; exists; (); ; Argument[this]; path-injection; manual | -| 9 | Sink: java.io; File; true; isDirectory; (); ; Argument[this]; path-injection; manual | -| 10 | Sink: java.io; File; true; isFile; (); ; Argument[this]; path-injection; manual | -| 11 | Sink: java.io; File; true; isHidden; (); ; Argument[this]; path-injection; manual | -| 12 | Sink: java.io; File; true; mkdir; (); ; Argument[this]; path-injection; manual | -| 13 | Sink: java.io; File; true; mkdirs; (); ; Argument[this]; path-injection; manual | -| 14 | Sink: java.io; File; true; renameTo; (File); ; Argument[0]; path-injection; ai-manual | -| 15 | Sink: java.io; File; true; renameTo; (File); ; Argument[this]; path-injection; ai-manual | -| 16 | Sink: java.io; File; true; setExecutable; ; ; Argument[this]; path-injection; manual | -| 17 | Sink: java.io; File; true; setLastModified; ; ; Argument[this]; path-injection; manual | -| 18 | Sink: java.io; File; true; setReadOnly; ; ; Argument[this]; path-injection; manual | -| 19 | Sink: java.io; File; true; setReadable; ; ; Argument[this]; path-injection; manual | -| 20 | Sink: java.io; File; true; setWritable; ; ; Argument[this]; path-injection; manual | -| 21 | Sink: java.io; FileInputStream; true; FileInputStream; (File); ; Argument[0]; path-injection; ai-manual | -| 22 | Sink: java.io; FileInputStream; true; FileInputStream; (FileDescriptor); ; Argument[0]; path-injection; manual | -| 23 | Sink: java.io; FileInputStream; true; FileInputStream; (String); ; Argument[0]; path-injection; ai-manual | -| 24 | Sink: java.io; FileReader; true; FileReader; (File); ; Argument[0]; path-injection; ai-manual | -| 25 | Sink: java.io; FileReader; true; FileReader; (File,Charset); ; Argument[0]; path-injection; manual | -| 26 | Sink: java.io; FileReader; true; FileReader; (FileDescriptor); ; Argument[0]; path-injection; manual | -| 27 | Sink: java.io; FileReader; true; FileReader; (String); ; Argument[0]; path-injection; ai-manual | -| 28 | Sink: java.io; FileReader; true; FileReader; (String,Charset); ; Argument[0]; path-injection; manual | -| 29 | Sink: java.lang; Class; false; getResource; (String); ; Argument[0]; path-injection; ai-manual | -| 30 | Sink: java.lang; ClassLoader; true; getSystemResourceAsStream; (String); ; Argument[0]; path-injection; ai-manual | -| 31 | Sink: java.lang; Module; true; getResourceAsStream; (String); ; Argument[0]; path-injection; ai-manual | -| 32 | Sink: java.nio.file; Files; false; copy; (InputStream,Path,CopyOption[]); ; Argument[1]; path-injection; manual | -| 33 | Sink: java.nio.file; Files; false; copy; (Path,OutputStream); ; Argument[0]; path-injection; manual | -| 34 | Sink: java.nio.file; Files; false; copy; (Path,Path,CopyOption[]); ; Argument[0]; path-injection; manual | -| 35 | Sink: java.nio.file; Files; false; copy; (Path,Path,CopyOption[]); ; Argument[1]; path-injection; manual | -| 36 | Sink: java.nio.file; Files; false; createDirectories; ; ; Argument[0]; path-injection; manual | -| 37 | Sink: java.nio.file; Files; false; createDirectory; ; ; Argument[0]; path-injection; manual | -| 38 | Sink: java.nio.file; Files; false; createFile; ; ; Argument[0]; path-injection; manual | -| 39 | Sink: java.nio.file; Files; false; createLink; ; ; Argument[0]; path-injection; manual | -| 40 | Sink: java.nio.file; Files; false; createSymbolicLink; ; ; Argument[0]; path-injection; manual | -| 41 | Sink: java.nio.file; Files; false; createTempDirectory; (Path,String,FileAttribute[]); ; Argument[0]; path-injection; manual | -| 42 | Sink: java.nio.file; Files; false; createTempFile; (Path,String,String,FileAttribute[]); ; Argument[0]; path-injection; manual | -| 43 | Sink: java.nio.file; Files; false; delete; (Path); ; Argument[0]; path-injection; ai-manual | -| 44 | Sink: java.nio.file; Files; false; deleteIfExists; (Path); ; Argument[0]; path-injection; ai-manual | -| 45 | Sink: java.nio.file; Files; false; lines; (Path,Charset); ; Argument[0]; path-injection; ai-manual | -| 46 | Sink: java.nio.file; Files; false; move; ; ; Argument[1]; path-injection; manual | -| 47 | Sink: java.nio.file; Files; false; newBufferedReader; (Path,Charset); ; Argument[0]; path-injection; ai-manual | -| 48 | Sink: java.nio.file; Files; false; newBufferedWriter; ; ; Argument[0]; path-injection; manual | -| 49 | Sink: java.nio.file; Files; false; newOutputStream; ; ; Argument[0]; path-injection; manual | -| 50 | Sink: java.nio.file; Files; false; write; ; ; Argument[0]; path-injection; manual | -| 51 | Sink: java.nio.file; Files; false; writeString; ; ; Argument[0]; path-injection; manual | -| 52 | Sink: javax.xml.transform.stream; StreamResult; true; StreamResult; (File); ; Argument[0]; path-injection; ai-manual | -| 53 | Sink: org.apache.commons.io; FileUtils; true; openInputStream; (File); ; Argument[0]; path-injection; ai-manual | -| 54 | Sink: org.apache.tools.ant.taskdefs; Copy; true; addFileset; (FileSet); ; Argument[0]; path-injection; ai-manual | -| 55 | Sink: org.apache.tools.ant.taskdefs; Copy; true; setFile; (File); ; Argument[0]; path-injection; ai-manual | -| 56 | Sink: org.apache.tools.ant.taskdefs; Copy; true; setTodir; (File); ; Argument[0]; path-injection; ai-manual | -| 57 | Sink: org.apache.tools.ant.taskdefs; Copy; true; setTofile; (File); ; Argument[0]; path-injection; ai-manual | -| 58 | Sink: org.apache.tools.ant.taskdefs; Expand; true; setDest; (File); ; Argument[0]; path-injection; ai-manual | -| 59 | Sink: org.apache.tools.ant.taskdefs; Expand; true; setSrc; (File); ; Argument[0]; path-injection; ai-manual | -| 60 | Sink: org.apache.tools.ant; AntClassLoader; true; AntClassLoader; (ClassLoader,Project,Path,boolean); ; Argument[2]; path-injection; ai-manual | -| 61 | Sink: org.apache.tools.ant; AntClassLoader; true; AntClassLoader; (Project,Path); ; Argument[1]; path-injection; ai-manual | -| 62 | Sink: org.apache.tools.ant; AntClassLoader; true; AntClassLoader; (Project,Path,boolean); ; Argument[1]; path-injection; ai-manual | -| 63 | Sink: org.apache.tools.ant; AntClassLoader; true; addPathComponent; (File); ; Argument[0]; path-injection; ai-manual | -| 64 | Sink: org.apache.tools.ant; DirectoryScanner; true; setBasedir; (File); ; Argument[0]; path-injection; ai-manual | -| 65 | Sink: org.codehaus.cargo.container.installer; ZipURLInstaller; true; ZipURLInstaller; (URL,String,String); ; Argument[1]; path-injection; ai-manual | -| 66 | Sink: org.codehaus.cargo.container.installer; ZipURLInstaller; true; ZipURLInstaller; (URL,String,String); ; Argument[2]; path-injection; ai-manual | -| 67 | Sink: org.kohsuke.stapler.framework.io; LargeText; true; LargeText; (File,Charset,boolean,boolean); ; Argument[0]; path-injection; ai-manual | -| 68 | Sink: org.openjdk.jmh.runner.options; ChainedOptionsBuilder; true; result; (String); ; Argument[0]; path-injection; ai-manual | -| 69 | Sink: org.springframework.util; FileCopyUtils; false; copy; (File,File); ; Argument[0]; path-injection; manual | -| 70 | Sink: org.springframework.util; FileCopyUtils; false; copy; (File,File); ; Argument[1]; path-injection; manual | -| 71 | Sink: org.springframework.util; FileCopyUtils; false; copy; (byte[],File); ; Argument[1]; path-injection; manual | -| 72 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 73 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 74 | Summary: java.io; BufferedReader; false; BufferedReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 75 | Summary: java.io; BufferedReader; true; readLine; ; ; Argument[this]; ReturnValue; taint; manual | -| 76 | Summary: java.io; InputStreamReader; false; InputStreamReader; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| TaintedPath.java:13:17:13:89 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | -| TaintedPath.java:13:36:13:88 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| TaintedPath.java:13:58:13:78 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TaintedPath.java:14:27:14:40 | filenameReader : BufferedReader | semmle.label | filenameReader : BufferedReader | -| TaintedPath.java:14:27:14:51 | readLine(...) : String | semmle.label | readLine(...) : String | -| TaintedPath.java:16:71:16:78 | filename | semmle.label | filename | -| Test.java:32:16:32:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| Test.java:37:52:37:68 | (...)... | semmle.label | (...)... | -| Test.java:37:61:37:68 | source(...) : String | semmle.label | source(...) : String | -| Test.java:39:32:39:48 | (...)... | semmle.label | (...)... | -| Test.java:39:41:39:48 | source(...) : String | semmle.label | source(...) : String | -| Test.java:41:47:41:63 | (...)... | semmle.label | (...)... | -| Test.java:41:56:41:63 | source(...) : String | semmle.label | source(...) : String | -| Test.java:43:10:43:24 | (...)... | semmle.label | (...)... | -| Test.java:43:17:43:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:45:10:45:24 | (...)... | semmle.label | (...)... | -| Test.java:45:17:45:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:47:10:47:24 | (...)... | semmle.label | (...)... | -| Test.java:47:17:47:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:49:10:49:24 | (...)... | semmle.label | (...)... | -| Test.java:49:17:49:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:51:39:51:53 | (...)... | semmle.label | (...)... | -| Test.java:51:46:51:53 | source(...) : String | semmle.label | source(...) : String | -| Test.java:53:10:53:24 | (...)... | semmle.label | (...)... | -| Test.java:53:17:53:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:55:10:55:24 | (...)... | semmle.label | (...)... | -| Test.java:55:17:55:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:57:10:57:24 | (...)... | semmle.label | (...)... | -| Test.java:57:17:57:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:59:10:59:24 | (...)... | semmle.label | (...)... | -| Test.java:59:17:59:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:61:10:61:24 | (...)... | semmle.label | (...)... | -| Test.java:61:17:61:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:63:10:63:24 | (...)... | semmle.label | (...)... | -| Test.java:63:17:63:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:65:10:65:24 | (...)... | semmle.label | (...)... | -| Test.java:65:17:65:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:67:10:67:24 | (...)... | semmle.label | (...)... | -| Test.java:67:17:67:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:69:31:69:45 | (...)... | semmle.label | (...)... | -| Test.java:69:38:69:45 | source(...) : String | semmle.label | source(...) : String | -| Test.java:71:10:71:24 | (...)... | semmle.label | (...)... | -| Test.java:71:17:71:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:73:10:73:24 | (...)... | semmle.label | (...)... | -| Test.java:73:17:73:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:75:10:75:24 | (...)... | semmle.label | (...)... | -| Test.java:75:17:75:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:77:10:77:24 | (...)... | semmle.label | (...)... | -| Test.java:77:17:77:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:79:10:79:24 | (...)... | semmle.label | (...)... | -| Test.java:79:17:79:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:81:10:81:24 | (...)... | semmle.label | (...)... | -| Test.java:81:17:81:24 | source(...) : String | semmle.label | source(...) : String | -| Test.java:83:31:83:45 | (...)... | semmle.label | (...)... | -| Test.java:83:38:83:45 | source(...) : String | semmle.label | source(...) : String | -| Test.java:85:29:85:43 | (...)... | semmle.label | (...)... | -| Test.java:85:36:85:43 | source(...) : String | semmle.label | source(...) : String | -| Test.java:87:29:87:53 | (...)... | semmle.label | (...)... | -| Test.java:87:46:87:53 | source(...) : String | semmle.label | source(...) : String | -| Test.java:89:29:89:45 | (...)... | semmle.label | (...)... | -| Test.java:89:38:89:45 | source(...) : String | semmle.label | source(...) : String | -| Test.java:91:24:91:38 | (...)... | semmle.label | (...)... | -| Test.java:91:31:91:38 | source(...) : String | semmle.label | source(...) : String | -| Test.java:93:24:93:48 | (...)... | semmle.label | (...)... | -| Test.java:93:41:93:48 | source(...) : String | semmle.label | source(...) : String | -| Test.java:95:24:95:38 | (...)... | semmle.label | (...)... | -| Test.java:95:31:95:38 | source(...) : String | semmle.label | source(...) : String | -| Test.java:97:24:97:40 | (...)... | semmle.label | (...)... | -| Test.java:97:33:97:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:99:24:99:40 | (...)... | semmle.label | (...)... | -| Test.java:99:33:99:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:101:20:101:34 | (...)... | semmle.label | (...)... | -| Test.java:101:27:101:34 | source(...) : String | semmle.label | source(...) : String | -| Test.java:102:20:102:34 | (...)... | semmle.label | (...)... | -| Test.java:102:27:102:34 | source(...) : String | semmle.label | source(...) : String | -| Test.java:104:33:104:47 | (...)... | semmle.label | (...)... | -| Test.java:104:40:104:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:105:40:105:54 | (...)... | semmle.label | (...)... | -| Test.java:105:47:105:54 | source(...) : String | semmle.label | source(...) : String | -| Test.java:107:33:107:47 | (...)... | semmle.label | (...)... | -| Test.java:107:40:107:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:109:31:109:45 | (...)... | semmle.label | (...)... | -| Test.java:109:38:109:45 | source(...) : String | semmle.label | source(...) : String | -| Test.java:111:26:111:40 | (...)... | semmle.label | (...)... | -| Test.java:111:33:111:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:113:26:113:40 | (...)... | semmle.label | (...)... | -| Test.java:113:33:113:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:115:34:115:48 | (...)... | semmle.label | (...)... | -| Test.java:115:41:115:48 | source(...) : String | semmle.label | source(...) : String | -| Test.java:117:35:117:49 | (...)... | semmle.label | (...)... | -| Test.java:117:42:117:49 | source(...) : String | semmle.label | source(...) : String | -| Test.java:119:30:119:44 | (...)... | semmle.label | (...)... | -| Test.java:119:37:119:44 | source(...) : String | semmle.label | source(...) : String | -| Test.java:121:22:121:36 | (...)... | semmle.label | (...)... | -| Test.java:121:29:121:36 | source(...) : String | semmle.label | source(...) : String | -| Test.java:123:30:123:44 | (...)... | semmle.label | (...)... | -| Test.java:123:37:123:44 | source(...) : String | semmle.label | source(...) : String | -| Test.java:125:21:125:35 | (...)... | semmle.label | (...)... | -| Test.java:125:28:125:35 | source(...) : String | semmle.label | source(...) : String | -| Test.java:127:26:127:40 | (...)... | semmle.label | (...)... | -| Test.java:127:33:127:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:129:33:129:47 | (...)... | semmle.label | (...)... | -| Test.java:129:40:129:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:131:33:131:47 | (...)... | semmle.label | (...)... | -| Test.java:131:40:131:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:132:33:132:47 | (...)... | semmle.label | (...)... | -| Test.java:132:40:132:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:134:31:134:45 | (...)... | semmle.label | (...)... | -| Test.java:134:38:134:45 | source(...) : String | semmle.label | source(...) : String | -| Test.java:136:21:136:35 | (...)... | semmle.label | (...)... | -| Test.java:136:28:136:35 | source(...) : String | semmle.label | source(...) : String | -| Test.java:137:21:137:35 | (...)... | semmle.label | (...)... | -| Test.java:137:28:137:35 | source(...) : String | semmle.label | source(...) : String | -| Test.java:138:21:138:35 | (...)... | semmle.label | (...)... | -| Test.java:138:28:138:35 | source(...) : String | semmle.label | source(...) : String | -| Test.java:140:27:140:41 | (...)... | semmle.label | (...)... | -| Test.java:140:34:140:41 | source(...) : String | semmle.label | source(...) : String | -| Test.java:141:27:141:41 | (...)... | semmle.label | (...)... | -| Test.java:141:34:141:41 | source(...) : String | semmle.label | source(...) : String | -| Test.java:143:26:143:40 | (...)... | semmle.label | (...)... | -| Test.java:143:33:143:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:145:35:145:49 | (...)... | semmle.label | (...)... | -| Test.java:145:42:145:49 | source(...) : String | semmle.label | source(...) : String | -| Test.java:147:41:147:57 | (...)... | semmle.label | (...)... | -| Test.java:147:50:147:57 | source(...) : String | semmle.label | source(...) : String | -| Test.java:149:45:149:61 | (...)... | semmle.label | (...)... | -| Test.java:149:54:149:61 | source(...) : String | semmle.label | source(...) : String | -| Test.java:151:43:151:57 | (...)... | semmle.label | (...)... | -| Test.java:151:50:151:57 | source(...) : String | semmle.label | source(...) : String | -| Test.java:153:28:153:42 | (...)... | semmle.label | (...)... | -| Test.java:153:35:153:42 | source(...) : String | semmle.label | source(...) : String | -| Test.java:155:41:155:55 | (...)... | semmle.label | (...)... | -| Test.java:155:48:155:55 | source(...) : String | semmle.label | source(...) : String | -| Test.java:160:30:160:44 | (...)... | semmle.label | (...)... | -| Test.java:160:37:160:44 | source(...) : String | semmle.label | source(...) : String | -| Test.java:162:40:162:81 | (...)... | semmle.label | (...)... | -| Test.java:162:74:162:81 | source(...) : String | semmle.label | source(...) : String | -| Test.java:164:34:164:75 | (...)... | semmle.label | (...)... | -| Test.java:164:68:164:75 | source(...) : String | semmle.label | source(...) : String | -| Test.java:166:34:166:75 | (...)... | semmle.label | (...)... | -| Test.java:166:68:166:75 | source(...) : String | semmle.label | source(...) : String | -| Test.java:168:23:168:37 | (...)... | semmle.label | (...)... | -| Test.java:168:30:168:37 | source(...) : String | semmle.label | source(...) : String | -| Test.java:181:23:181:37 | (...)... | semmle.label | (...)... | -| Test.java:181:30:181:37 | source(...) : String | semmle.label | source(...) : String | -| Test.java:186:23:186:40 | (...)... | semmle.label | (...)... | -| Test.java:186:33:186:40 | source(...) : String | semmle.label | source(...) : String | -| Test.java:188:20:188:34 | (...)... | semmle.label | (...)... | -| Test.java:188:27:188:34 | source(...) : String | semmle.label | source(...) : String | -| Test.java:190:21:190:35 | (...)... | semmle.label | (...)... | -| Test.java:190:28:190:35 | source(...) : String | semmle.label | source(...) : String | -| Test.java:192:22:192:36 | (...)... | semmle.label | (...)... | -| Test.java:192:29:192:36 | source(...) : String | semmle.label | source(...) : String | -| Test.java:197:20:197:34 | (...)... | semmle.label | (...)... | -| Test.java:197:27:197:34 | source(...) : String | semmle.label | source(...) : String | -| Test.java:199:19:199:33 | (...)... | semmle.label | (...)... | -| Test.java:199:26:199:33 | source(...) : String | semmle.label | source(...) : String | -| Test.java:204:20:204:36 | (...)... | semmle.label | (...)... | -| Test.java:204:29:204:36 | source(...) : String | semmle.label | source(...) : String | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java index 442873b54a44..00447364bb38 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java @@ -10,10 +10,10 @@ public class TaintedPath { public void sendUserFile(Socket sock, String user) throws IOException { BufferedReader filenameReader = - new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); // $ Source + new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); String filename = filenameReader.readLine(); // BAD: read from a file without checking its path - BufferedReader fileReader = new BufferedReader(new FileReader(filename)); // $ Alert + BufferedReader fileReader = new BufferedReader(new FileReader(filename)); // $ hasTaintFlow String fileLine = fileReader.readLine(); while (fileLine != null) { sock.getOutputStream().write(fileLine.getBytes()); diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql new file mode 100644 index 000000000000..3e7fbdb31312 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.TaintedPathQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref b/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref deleted file mode 100644 index 574c839511c0..000000000000 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-022/TaintedPath.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java index 362c84f4b167..d8cd210b70cf 100644 --- a/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java +++ b/java/ql/test/query-tests/security/CWE-022/semmle/tests/Test.java @@ -29,143 +29,143 @@ public class Test { private HttpServletRequest request; public Object source() { - return request.getParameter("source"); // $ Source + return request.getParameter("source"); } void test() throws IOException { // "java.lang;Module;true;getResourceAsStream;(String);;Argument[0];read-file;ai-generated" - getClass().getModule().getResourceAsStream((String) source()); // $ Alert + getClass().getModule().getResourceAsStream((String) source()); // $ hasTaintFlow // "java.lang;Class;false;getResource;(String);;Argument[0];read-file;ai-generated" - getClass().getResource((String) source()); // $ Alert + getClass().getResource((String) source()); // $ hasTaintFlow // "java.lang;ClassLoader;true;getSystemResourceAsStream;(String);;Argument[0];read-file;ai-generated" - ClassLoader.getSystemResourceAsStream((String) source()); // $ Alert + ClassLoader.getSystemResourceAsStream((String) source()); // $ hasTaintFlow // "java.io;File;True;canExecute;();;Argument[this];path-injection;manual" - ((File) source()).canExecute(); // $ Alert + ((File) source()).canExecute(); // $ hasTaintFlow // "java.io;File;True;canRead;();;Argument[this];path-injection;manual" - ((File) source()).canRead(); // $ Alert + ((File) source()).canRead(); // $ hasTaintFlow // "java.io;File;True;canWrite;();;Argument[this];path-injection;manual" - ((File) source()).canWrite(); // $ Alert + ((File) source()).canWrite(); // $ hasTaintFlow // "java.io;File;True;createNewFile;();;Argument[this];path-injection;ai-manual" - ((File) source()).createNewFile(); // $ Alert + ((File) source()).createNewFile(); // $ hasTaintFlow // "java.io;File;true;createTempFile;(String,String,File);;Argument[2];create-file;ai-generated" - File.createTempFile(";", ";", (File) source()); // $ Alert + File.createTempFile(";", ";", (File) source()); // $ hasTaintFlow // "java.io;File;True;delete;();;Argument[this];path-injection;manual" - ((File) source()).delete(); // $ Alert + ((File) source()).delete(); // $ hasTaintFlow // "java.io;File;True;deleteOnExit;();;Argument[this];path-injection;manual" - ((File) source()).deleteOnExit(); // $ Alert + ((File) source()).deleteOnExit(); // $ hasTaintFlow // "java.io;File;True;exists;();;Argument[this];path-injection;manual" - ((File) source()).exists(); // $ Alert + ((File) source()).exists(); // $ hasTaintFlow // "java.io:File;True;isDirectory;();;Argument[this];path-injection;manual" - ((File) source()).isDirectory(); // $ Alert + ((File) source()).isDirectory(); // $ hasTaintFlow // "java.io:File;True;isFile;();;Argument[this];path-injection;manual" - ((File) source()).isFile(); // $ Alert + ((File) source()).isFile(); // $ hasTaintFlow // "java.io:File;True;isHidden;();;Argument[this];path-injection;manual" - ((File) source()).isHidden(); // $ Alert + ((File) source()).isHidden(); // $ hasTaintFlow // "java.io;File;True;mkdir;();;Argument[this];path-injection;manual" - ((File) source()).mkdir(); // $ Alert + ((File) source()).mkdir(); // $ hasTaintFlow // "java.io;File;True;mkdirs;();;Argument[this];path-injection;manual" - ((File) source()).mkdirs(); // $ Alert + ((File) source()).mkdirs(); // $ hasTaintFlow // "java.io;File;True;renameTo;(File);;Argument[0];path-injection;ai-manual" - new File("").renameTo((File) source()); // $ Alert + new File("").renameTo((File) source()); // $ hasTaintFlow // "java.io;File;True;renameTo;(File);;Argument[this];path-injection;ai-manual" - ((File) source()).renameTo(null); // $ Alert + ((File) source()).renameTo(null); // $ hasTaintFlow // "java.io;File;True;setExecutable;;;Argument[this];path-injection;manual" - ((File) source()).setExecutable(true); // $ Alert + ((File) source()).setExecutable(true); // $ hasTaintFlow // "java.io;File;True;setLastModified;;;Argument[this];path-injection;manual" - ((File) source()).setLastModified(0); // $ Alert + ((File) source()).setLastModified(0); // $ hasTaintFlow // "java.io;File;True;setReadable;;;Argument[this];path-injection;manual" - ((File) source()).setReadable(true); // $ Alert + ((File) source()).setReadable(true); // $ hasTaintFlow // "java.io;File;True;setReadOnly;;;Argument[this];path-injection;manual" - ((File) source()).setReadOnly(); // $ Alert + ((File) source()).setReadOnly(); // $ hasTaintFlow // "java.io;File;True;setWritable;;;Argument[this];path-injection;manual" - ((File) source()).setWritable(true); // $ Alert + ((File) source()).setWritable(true); // $ hasTaintFlow // "java.io;File;true;renameTo;(File);;Argument[0];create-file;ai-generated" - new File("").renameTo((File) source()); // $ Alert + new File("").renameTo((File) source()); // $ hasTaintFlow // "java.io;FileInputStream;true;FileInputStream;(File);;Argument[0];read-file;ai-generated" - new FileInputStream((File) source()); // $ Alert + new FileInputStream((File) source()); // $ hasTaintFlow // "java.io;FileInputStream;true;FileInputStream;(FileDescriptor);;Argument[0];read-file;manual" - new FileInputStream((FileDescriptor) source()); // $ Alert - // "java.io;FileInputStream;true;FileInputStream;(String);;Argument[0];read-file;manual" - new FileInputStream((String) source()); // $ Alert + new FileInputStream((FileDescriptor) source()); // $ hasTaintFlow + // "java.io;FileInputStream;true;FileInputStream;(Strrirng);;Argument[0];read-file;manual" + new FileInputStream((String) source()); // $ hasTaintFlow // "java.io;FileReader;true;FileReader;(File);;Argument[0];read-file;ai-generated" - new FileReader((File) source()); // $ Alert + new FileReader((File) source()); // $ hasTaintFlow // "java.io;FileReader;true;FileReader;(FileDescriptor);;Argument[0];read-file;manual" - new FileReader((FileDescriptor) source()); // $ Alert + new FileReader((FileDescriptor) source()); // $ hasTaintFlow // "java.io;FileReader;true;FileReader;(File,Charset);;Argument[0];read-file;manual" - new FileReader((File) source(), null); // $ Alert + new FileReader((File) source(), null); // $ hasTaintFlow // "java.io;FileReader;true;FileReader;(String);;Argument[0];read-file;ai-generated" - new FileReader((String) source()); // $ Alert + new FileReader((String) source()); // $ hasTaintFlow // "java.io;FileReader;true;FileReader;(String,Charset);;Argument[0];read-file;manual" - new FileReader((String) source(), null); // $ Alert + new FileReader((String) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;copy;;;Argument[0];read-file;manual" - Files.copy((Path) source(), (Path) null); // $ Alert - Files.copy((Path) source(), (OutputStream) null); // $ Alert + Files.copy((Path) source(), (Path) null); // $ hasTaintFlow + Files.copy((Path) source(), (OutputStream) null); // $ hasTaintFlow // "java.nio.file;Files;false;copy;;;Argument[1];create-file;manual" - Files.copy((Path) null, (Path) source()); // $ Alert - Files.copy((InputStream) null, (Path) source()); // $ Alert + Files.copy((Path) null, (Path) source()); // $ hasTaintFlow + Files.copy((InputStream) null, (Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;createDirectories;;;Argument[0];create-file;manual" - Files.createDirectories((Path) source()); // $ Alert + Files.createDirectories((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;createDirectory;;;Argument[0];create-file;manual" - Files.createDirectory((Path) source()); // $ Alert + Files.createDirectory((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;createFile;;;Argument[0];create-file;manual" - Files.createFile((Path) source()); // $ Alert + Files.createFile((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;createLink;;;Argument[0];create-file;manual" - Files.createLink((Path) source(), null); // $ Alert + Files.createLink((Path) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;createSymbolicLink;;;Argument[0];create-file;manual" - Files.createSymbolicLink((Path) source(), null); // $ Alert + Files.createSymbolicLink((Path) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;createTempDirectory;(Path,String,FileAttribute[]);;Argument[0];create-file;manual" - Files.createTempDirectory((Path) source(), null); // $ Alert + Files.createTempDirectory((Path) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;createTempFile;(Path,String,String,FileAttribute[]);;Argument[0];create-file;manual" - Files.createTempFile((Path) source(), null, null); // $ Alert + Files.createTempFile((Path) source(), null, null); // $ hasTaintFlow // "java.nio.file;Files;false;delete;(Path);;Argument[0];delete-file;ai-generated" - Files.delete((Path) source()); // $ Alert + Files.delete((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;deleteIfExists;(Path);;Argument[0];delete-file;ai-generated" - Files.deleteIfExists((Path) source()); // $ Alert + Files.deleteIfExists((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;lines;(Path,Charset);;Argument[0];read-file;ai-generated" - Files.lines((Path) source(), null); // $ Alert + Files.lines((Path) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;move;;;Argument[1];create-file;manual" - Files.move(null, (Path) source()); // $ Alert + Files.move(null, (Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;newBufferedReader;(Path,Charset);;Argument[0];read-file;ai-generated" - Files.newBufferedReader((Path) source(), null); // $ Alert + Files.newBufferedReader((Path) source(), null); // $ hasTaintFlow // "java.nio.file;Files;false;newBufferedWriter;;;Argument[0];create-file;manual" - Files.newBufferedWriter((Path) source()); // $ Alert - Files.newBufferedWriter((Path) source(), (Charset) null); // $ Alert + Files.newBufferedWriter((Path) source()); // $ hasTaintFlow + Files.newBufferedWriter((Path) source(), (Charset) null); // $ hasTaintFlow // "java.nio.file;Files;false;newOutputStream;;;Argument[0];create-file;manual" - Files.newOutputStream((Path) source()); // $ Alert + Files.newOutputStream((Path) source()); // $ hasTaintFlow // "java.nio.file;Files;false;write;;;Argument[0];create-file;manual" - Files.write((Path) source(), (byte[]) null); // $ Alert - Files.write((Path) source(), (Iterable) null); // $ Alert - Files.write((Path) source(), (Iterable) null, (Charset) null); // $ Alert + Files.write((Path) source(), (byte[]) null); // $ hasTaintFlow + Files.write((Path) source(), (Iterable) null); // $ hasTaintFlow + Files.write((Path) source(), (Iterable) null, (Charset) null); // $ hasTaintFlow // "java.nio.file;Files;false;writeString;;;Argument[0];create-file;manual" - Files.writeString((Path) source(), (CharSequence) null); // $ Alert - Files.writeString((Path) source(), (CharSequence) null, (Charset) null); // $ Alert + Files.writeString((Path) source(), (CharSequence) null); // $ hasTaintFlow + Files.writeString((Path) source(), (CharSequence) null, (Charset) null); // $ hasTaintFlow // "javax.xml.transform.stream;StreamResult";true;"StreamResult;(File);;Argument[0];create-file;ai-generated" - new StreamResult((File) source()); // $ Alert + new StreamResult((File) source()); // $ hasTaintFlow // "org.apache.commons.io;FileUtils;true;openInputStream;(File);;Argument[0];read-file;ai-generated" - FileUtils.openInputStream((File) source()); // $ Alert + FileUtils.openInputStream((File) source()); // $ hasTaintFlow // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[1];create-file;ai-generated" - new ZipURLInstaller((URL) null, (String) source(), ""); // $ Alert + new ZipURLInstaller((URL) null, (String) source(), ""); // $ hasTaintFlow // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[2];create-file;ai-generated" - new ZipURLInstaller((URL) null, "", (String) source()); // $ Alert + new ZipURLInstaller((URL) null, "", (String) source()); // $ hasTaintFlow // "org.springframework.util;FileCopyUtils;false;copy;(byte[],File);;Argument[1];create-file;manual" - FileCopyUtils.copy((byte[]) null, (File) source()); // $ Alert + FileCopyUtils.copy((byte[]) null, (File) source()); // $ hasTaintFlow // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[0];create-file;manual" - FileCopyUtils.copy((File) source(), null); // $ Alert + FileCopyUtils.copy((File) source(), null); // $ hasTaintFlow // "org.springframework.util;FileCopyUtils;false;copy;(File,File);;Argument[1];create-file;manual" - FileCopyUtils.copy((File) null, (File) source()); // $ Alert + FileCopyUtils.copy((File) null, (File) source()); // $ hasTaintFlow } void test(AntClassLoader acl) { // "org.apache.tools.ant;AntClassLoader;true;addPathComponent;(File);;Argument[0];read-file;ai-generated" - acl.addPathComponent((File) source()); // $ Alert + acl.addPathComponent((File) source()); // $ hasTaintFlow // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(ClassLoader,Project,Path,boolean);;Argument[2];read-file;ai-generated" - new AntClassLoader(null, null, (org.apache.tools.ant.types.Path) source(), false); // $ Alert + new AntClassLoader(null, null, (org.apache.tools.ant.types.Path) source(), false); // $ hasTaintFlow // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path,boolean);;Argument[1];read-file;ai-generated" - new AntClassLoader(null, (org.apache.tools.ant.types.Path) source(), false); // $ Alert + new AntClassLoader(null, (org.apache.tools.ant.types.Path) source(), false); // $ hasTaintFlow // "org.apache.tools.ant;AntClassLoader;true;AntClassLoader;(Project,Path);;Argument[1];read-file;ai-generated" - new AntClassLoader(null, (org.apache.tools.ant.types.Path) source()); // $ Alert + new AntClassLoader(null, (org.apache.tools.ant.types.Path) source()); // $ hasTaintFlow // "org.kohsuke.stapler.framework.io;LargeText;true;LargeText;(File,Charset,boolean,boolean);;Argument[0];read-file;ai-generated" - new LargeText((File) source(), null, false, false); // $ Alert + new LargeText((File) source(), null, false, false); // $ hasTaintFlow } void doGet6(String root, HttpServletRequest request) throws IOException { @@ -178,29 +178,29 @@ void doGet6(String root, HttpServletRequest request) throws IOException { void test(DirectoryScanner ds) { // "org.apache.tools.ant;DirectoryScanner;true;setBasedir;(File);;Argument[0];read-file;ai-generated" - ds.setBasedir((File) source()); // $ Alert + ds.setBasedir((File) source()); // $ hasTaintFlow } void test(Copy cp) { // "org.apache.tools.ant.taskdefs;Copy;true;addFileset;(FileSet);;Argument[0];read-file;ai-generated" - cp.addFileset((FileSet) source()); // $ Alert + cp.addFileset((FileSet) source()); // $ hasTaintFlow // "org.apache.tools.ant.taskdefs;Copy;true;setFile;(File);;Argument[0];read-file;ai-generated" - cp.setFile((File) source()); // $ Alert + cp.setFile((File) source()); // $ hasTaintFlow // "org.apache.tools.ant.taskdefs;Copy;true;setTodir;(File);;Argument[0];create-file;ai-generated" - cp.setTodir((File) source()); // $ Alert + cp.setTodir((File) source()); // $ hasTaintFlow // "org.apache.tools.ant.taskdefs;Copy;true;setTofile;(File);;Argument[0];create-file;ai-generated" - cp.setTofile((File) source()); // $ Alert + cp.setTofile((File) source()); // $ hasTaintFlow } void test(Expand ex) { // "org.apache.tools.ant.taskdefs;Expand;true;setDest;(File);;Argument[0];create-file;ai-generated" - ex.setDest((File) source()); // $ Alert + ex.setDest((File) source()); // $ hasTaintFlow // "org.apache.tools.ant.taskdefs;Expand;true;setSrc;(File);;Argument[0];read-file;ai-generated" - ex.setSrc((File) source()); // $ Alert + ex.setSrc((File) source()); // $ hasTaintFlow } void test(ChainedOptionsBuilder cob) { // "org.openjdk.jmh.runner.options;ChainedOptionsBuilder;true;result;(String);;Argument[0];create-file;ai-generated" - cob.result((String) source()); // $ Alert + cob.result((String) source()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversal.expected b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversal.expected index 5379de2403b4..b876fd2367da 100644 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversal.expected +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversal.expected @@ -1,16 +1,16 @@ -| PartialPathTraversalTest.java:13:14:13:75 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:20:9:20:74 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:32:14:32:60 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:38:14:38:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:45:14:45:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:52:14:52:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:56:14:56:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:64:14:64:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:67:14:67:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:78:14:78:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:97:14:97:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:105:14:105:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:108:14:108:66 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:176:14:176:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:194:18:194:87 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | -| PartialPathTraversalTest.java:212:14:212:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:10:14:10:73 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:17:9:17:72 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:29:14:29:58 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:35:14:35:63 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:42:14:42:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:49:14:49:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:53:14:53:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:61:14:61:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:64:14:64:65 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:75:14:75:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:94:14:94:63 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:102:14:102:63 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:105:14:105:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:173:14:173:63 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:191:18:191:87 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | +| PartialPathTraversalTest.java:209:14:209:64 | startsWith(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal. | diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected index f2af01542ee9..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.expected @@ -1,135 +0,0 @@ -#select -| PartialPathTraversalTest.java:13:14:13:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:13:14:13:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:20:10:20:33 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:20:10:20:33 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:32:14:32:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:32:14:32:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:38:14:38:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:38:14:38:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:45:14:45:26 | canonicalPath | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:45:14:45:26 | canonicalPath | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:52:14:52:26 | canonicalPath | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:52:14:52:26 | canonicalPath | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:56:14:56:27 | canonicalPath2 | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:56:14:56:27 | canonicalPath2 | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:64:14:64:26 | canonicalPath | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:64:14:64:26 | canonicalPath | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:67:14:67:27 | canonicalPath2 | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:67:14:67:27 | canonicalPath2 | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:97:14:97:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:97:14:97:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:105:14:105:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:105:14:105:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:108:14:108:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:108:14:108:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:176:14:176:37 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:176:14:176:37 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:194:18:194:47 | getCanonicalPath(...) | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:194:18:194:47 | getCanonicalPath(...) | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -| PartialPathTraversalTest.java:212:14:212:26 | canonicalPath | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:212:14:212:26 | canonicalPath | Partial Path Traversal Vulnerability due to insufficient guard against path traversal from $@. | PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | user-supplied data | -edges -| PartialPathTraversalTest.java:13:14:13:18 | dir(...) : File | PartialPathTraversalTest.java:13:14:13:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:20:10:20:14 | dir(...) : File | PartialPathTraversalTest.java:20:10:20:33 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:32:14:32:18 | dir(...) : File | PartialPathTraversalTest.java:32:14:32:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:38:14:38:18 | dir(...) : File | PartialPathTraversalTest.java:38:14:38:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:44:32:44:36 | dir(...) : File | PartialPathTraversalTest.java:44:32:44:55 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:44:32:44:55 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:45:14:45:26 | canonicalPath | provenance | | -| PartialPathTraversalTest.java:51:32:51:36 | dir(...) : File | PartialPathTraversalTest.java:51:32:51:55 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:51:32:51:55 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:52:14:52:26 | canonicalPath | provenance | | -| PartialPathTraversalTest.java:55:33:55:37 | dir(...) : File | PartialPathTraversalTest.java:55:33:55:56 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:55:33:55:56 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:56:14:56:27 | canonicalPath2 | provenance | | -| PartialPathTraversalTest.java:62:32:62:36 | dir(...) : File | PartialPathTraversalTest.java:62:32:62:55 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:62:32:62:55 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:64:14:64:26 | canonicalPath | provenance | | -| PartialPathTraversalTest.java:63:33:63:37 | dir(...) : File | PartialPathTraversalTest.java:63:33:63:56 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:63:33:63:56 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:67:14:67:27 | canonicalPath2 | provenance | | -| PartialPathTraversalTest.java:97:14:97:18 | dir(...) : File | PartialPathTraversalTest.java:97:14:97:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:105:14:105:18 | dir(...) : File | PartialPathTraversalTest.java:105:14:105:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:108:14:108:18 | dir(...) : File | PartialPathTraversalTest.java:108:14:108:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:176:14:176:18 | dir(...) : File | PartialPathTraversalTest.java:176:14:176:37 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:186:25:186:30 | path(...) : String[] | PartialPathTraversalTest.java:188:23:188:23 | p : String | provenance | | -| PartialPathTraversalTest.java:188:13:188:14 | sb [post update] : StringBuilder | PartialPathTraversalTest.java:191:27:191:28 | sb : StringBuilder | provenance | | -| PartialPathTraversalTest.java:188:23:188:23 | p : String | PartialPathTraversalTest.java:188:13:188:14 | sb [post update] : StringBuilder | provenance | MaD:8 | -| PartialPathTraversalTest.java:191:27:191:28 | sb : StringBuilder | PartialPathTraversalTest.java:191:27:191:39 | toString(...) : String | provenance | MaD:9 | -| PartialPathTraversalTest.java:191:27:191:39 | toString(...) : String | PartialPathTraversalTest.java:192:37:192:44 | filePath : String | provenance | | -| PartialPathTraversalTest.java:192:28:192:45 | new File(...) : File | PartialPathTraversalTest.java:194:18:194:28 | encodedFile : File | provenance | | -| PartialPathTraversalTest.java:192:37:192:44 | filePath : String | PartialPathTraversalTest.java:192:28:192:45 | new File(...) : File | provenance | MaD:4 | -| PartialPathTraversalTest.java:194:18:194:28 | encodedFile : File | PartialPathTraversalTest.java:194:18:194:47 | getCanonicalPath(...) | provenance | MaD:6 | -| PartialPathTraversalTest.java:211:46:211:50 | dir(...) : File | PartialPathTraversalTest.java:211:46:211:69 | getCanonicalPath(...) : String | provenance | MaD:6 | -| PartialPathTraversalTest.java:211:46:211:69 | getCanonicalPath(...) : String | PartialPathTraversalTest.java:212:14:212:26 | canonicalPath | provenance | | -| PartialPathTraversalTest.java:252:45:252:117 | new BufferedReader(...) : BufferedReader | PartialPathTraversalTest.java:253:31:253:44 | filenameReader : BufferedReader | provenance | | -| PartialPathTraversalTest.java:252:64:252:116 | new InputStreamReader(...) : InputStreamReader | PartialPathTraversalTest.java:252:45:252:117 | new BufferedReader(...) : BufferedReader | provenance | MaD:2 | -| PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | PartialPathTraversalTest.java:252:64:252:116 | new InputStreamReader(...) : InputStreamReader | provenance | Src:MaD:1 MaD:7 | -| PartialPathTraversalTest.java:253:31:253:44 | filenameReader : BufferedReader | PartialPathTraversalTest.java:253:31:253:55 | readLine(...) : String | provenance | MaD:3 | -| PartialPathTraversalTest.java:253:31:253:55 | readLine(...) : String | PartialPathTraversalTest.java:254:29:254:36 | filename : String | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:13:14:13:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:20:10:20:14 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:32:14:32:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:38:14:38:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:44:32:44:36 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:51:32:51:36 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:55:33:55:37 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:62:32:62:36 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:63:33:63:37 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:97:14:97:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:105:14:105:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:108:14:108:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:176:14:176:18 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:211:46:211:50 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | PartialPathTraversalTest.java:261:16:261:20 | dir(...) : File | provenance | | -| PartialPathTraversalTest.java:254:29:254:36 | filename : String | PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | provenance | MaD:4 | -| PartialPathTraversalTest.java:261:16:261:20 | dir(...) : File | PartialPathTraversalTest.java:261:16:261:38 | getAbsolutePath(...) : String | provenance | MaD:5 | -| PartialPathTraversalTest.java:261:16:261:38 | getAbsolutePath(...) : String | PartialPathTraversalTest.java:261:16:261:60 | split(...) : String[] | provenance | MaD:10 | -| PartialPathTraversalTest.java:261:16:261:60 | split(...) : String[] | PartialPathTraversalTest.java:186:25:186:30 | path(...) : String[] | provenance | | -models -| 1 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 2 | Summary: java.io; BufferedReader; false; BufferedReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 3 | Summary: java.io; BufferedReader; true; readLine; ; ; Argument[this]; ReturnValue; taint; manual | -| 4 | Summary: java.io; File; false; File; ; ; Argument[0]; Argument[this]; taint; manual | -| 5 | Summary: java.io; File; true; getAbsolutePath; ; ; Argument[this]; ReturnValue; taint; manual | -| 6 | Summary: java.io; File; true; getCanonicalPath; ; ; Argument[this]; ReturnValue; taint; manual | -| 7 | Summary: java.io; InputStreamReader; false; InputStreamReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 8 | Summary: java.lang; AbstractStringBuilder; true; append; ; ; Argument[0]; Argument[this]; taint; manual | -| 9 | Summary: java.lang; CharSequence; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | -| 10 | Summary: java.lang; String; false; split; ; ; Argument[this]; ReturnValue; taint; manual | -nodes -| PartialPathTraversalTest.java:13:14:13:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:13:14:13:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:20:10:20:14 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:20:10:20:33 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:32:14:32:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:32:14:32:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:38:14:38:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:38:14:38:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:44:32:44:36 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:44:32:44:55 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:45:14:45:26 | canonicalPath | semmle.label | canonicalPath | -| PartialPathTraversalTest.java:51:32:51:36 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:51:32:51:55 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:52:14:52:26 | canonicalPath | semmle.label | canonicalPath | -| PartialPathTraversalTest.java:55:33:55:37 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:55:33:55:56 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:56:14:56:27 | canonicalPath2 | semmle.label | canonicalPath2 | -| PartialPathTraversalTest.java:62:32:62:36 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:62:32:62:55 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:63:33:63:37 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:63:33:63:56 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:64:14:64:26 | canonicalPath | semmle.label | canonicalPath | -| PartialPathTraversalTest.java:67:14:67:27 | canonicalPath2 | semmle.label | canonicalPath2 | -| PartialPathTraversalTest.java:97:14:97:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:97:14:97:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:105:14:105:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:105:14:105:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:108:14:108:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:108:14:108:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:176:14:176:18 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:176:14:176:37 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:186:25:186:30 | path(...) : String[] | semmle.label | path(...) : String[] | -| PartialPathTraversalTest.java:188:13:188:14 | sb [post update] : StringBuilder | semmle.label | sb [post update] : StringBuilder | -| PartialPathTraversalTest.java:188:23:188:23 | p : String | semmle.label | p : String | -| PartialPathTraversalTest.java:191:27:191:28 | sb : StringBuilder | semmle.label | sb : StringBuilder | -| PartialPathTraversalTest.java:191:27:191:39 | toString(...) : String | semmle.label | toString(...) : String | -| PartialPathTraversalTest.java:192:28:192:45 | new File(...) : File | semmle.label | new File(...) : File | -| PartialPathTraversalTest.java:192:37:192:44 | filePath : String | semmle.label | filePath : String | -| PartialPathTraversalTest.java:194:18:194:28 | encodedFile : File | semmle.label | encodedFile : File | -| PartialPathTraversalTest.java:194:18:194:47 | getCanonicalPath(...) | semmle.label | getCanonicalPath(...) | -| PartialPathTraversalTest.java:211:46:211:50 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:211:46:211:69 | getCanonicalPath(...) : String | semmle.label | getCanonicalPath(...) : String | -| PartialPathTraversalTest.java:212:14:212:26 | canonicalPath | semmle.label | canonicalPath | -| PartialPathTraversalTest.java:252:45:252:117 | new BufferedReader(...) : BufferedReader | semmle.label | new BufferedReader(...) : BufferedReader | -| PartialPathTraversalTest.java:252:64:252:116 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| PartialPathTraversalTest.java:252:86:252:106 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| PartialPathTraversalTest.java:253:31:253:44 | filenameReader : BufferedReader | semmle.label | filenameReader : BufferedReader | -| PartialPathTraversalTest.java:253:31:253:55 | readLine(...) : String | semmle.label | readLine(...) : String | -| PartialPathTraversalTest.java:254:20:254:37 | new File(...) : File | semmle.label | new File(...) : File | -| PartialPathTraversalTest.java:254:29:254:36 | filename : String | semmle.label | filename : String | -| PartialPathTraversalTest.java:261:16:261:20 | dir(...) : File | semmle.label | dir(...) : File | -| PartialPathTraversalTest.java:261:16:261:38 | getAbsolutePath(...) : String | semmle.label | getAbsolutePath(...) : String | -| PartialPathTraversalTest.java:261:16:261:60 | split(...) : String[] | semmle.label | split(...) : String[] | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql new file mode 100644 index 000000000000..45dab6606fa1 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.ql @@ -0,0 +1,24 @@ +import java +import utils.test.InlineExpectationsTest +import semmle.code.java.security.PartialPathTraversalQuery + +class TestRemoteSource extends RemoteFlowSource { + TestRemoteSource() { this.asParameter().hasName(["dir", "path"]) } + + override string getSourceType() { result = "TestSource" } +} + +module Test implements TestSig { + string getARelevantTag() { result = "hasTaintFlow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasTaintFlow" and + exists(DataFlow::Node sink | PartialPathTraversalFromRemoteFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.qlref b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.qlref deleted file mode 100644 index 0c2ceb8cd731..000000000000 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalFromRemoteTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-023/PartialPathTraversalFromRemote.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalTest.java b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalTest.java index b1986c1b6694..af0fd776de15 100644 --- a/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalTest.java +++ b/java/ql/test/query-tests/security/CWE-023/semmle/tests/PartialPathTraversalTest.java @@ -1,71 +1,68 @@ import java.io.IOException; import java.io.File; import java.io.InputStream; -import java.io.BufferedReader; -import java.io.InputStreamReader; import static java.io.File.separatorChar; import java.nio.file.Files; -import java.net.Socket; public class PartialPathTraversalTest { - public void esapiExample(File parent) throws IOException { - if (!dir().getCanonicalPath().startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + public void esapiExample(File dir, File parent) throws IOException { + if (!dir.getCanonicalPath().startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } @SuppressWarnings("ResultOfMethodCallIgnored") - void foo1(File parent) throws IOException { - (dir().getCanonicalPath()).startsWith((parent.getCanonicalPath())); // $ Alert + void foo1(File dir, File parent) throws IOException { + (dir.getCanonicalPath()).startsWith((parent.getCanonicalPath())); // $hasTaintFlow } - void foo2(File parent) throws IOException { - dir().getCanonicalPath(); + void foo2(File dir, File parent) throws IOException { + dir.getCanonicalPath(); if ("potato".startsWith(parent.getCanonicalPath())) { System.out.println("Hello!"); } } - void foo3(File parent) throws IOException { + void foo3(File dir, File parent) throws IOException { String parentPath = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentPath)) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentPath)) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo4() throws IOException { - if (!dir().getCanonicalPath().startsWith("/usr" + "/dir")) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo4(File dir) throws IOException { + if (!dir.getCanonicalPath().startsWith("/usr" + "/dir")) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo5(File parent) throws IOException { - String canonicalPath = dir().getCanonicalPath(); - if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo5(File dir, File parent) throws IOException { + String canonicalPath = dir.getCanonicalPath(); + if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo6(File parent) throws IOException { - String canonicalPath = dir().getCanonicalPath(); - if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo6(File dir, File parent) throws IOException { + String canonicalPath = dir.getCanonicalPath(); + if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } - String canonicalPath2 = dir().getCanonicalPath(); - if (!canonicalPath2.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + String canonicalPath2 = dir.getCanonicalPath(); + if (!canonicalPath2.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } void foo7(File dir, File parent) throws IOException { - String canonicalPath = dir().getCanonicalPath(); - String canonicalPath2 = dir().getCanonicalPath(); - if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + String canonicalPath = dir.getCanonicalPath(); + String canonicalPath2 = dir.getCanonicalPath(); + if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } - if (!canonicalPath2.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!canonicalPath2.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } @@ -75,70 +72,70 @@ File getChild() { void foo8(File parent) throws IOException { String canonicalPath = getChild().getCanonicalPath(); - if (!canonicalPath.startsWith(parent.getCanonicalPath())) { + if (!canonicalPath.startsWith(parent.getCanonicalPath())) { throw new IOException("Invalid directory: " + getChild().getCanonicalPath()); } } - void foo9(File parent) throws IOException { - if (!dir().getCanonicalPath().startsWith(parent.getCanonicalPath() + File.separator)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo9(File dir, File parent) throws IOException { + if (!dir.getCanonicalPath().startsWith(parent.getCanonicalPath() + File.separator)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo10(File parent) throws IOException { - if (!dir().getCanonicalPath().startsWith(parent.getCanonicalPath() + File.separatorChar)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo10(File dir, File parent) throws IOException { + if (!dir.getCanonicalPath().startsWith(parent.getCanonicalPath() + File.separatorChar)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo11(File parent) throws IOException { + void foo11(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo12(File parent) throws IOException { + void foo12(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath(); String parentCanonical2 = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } - if (!dir().getCanonicalPath().startsWith(parentCanonical2)) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical2)) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo13(File parent) throws IOException { + void foo13(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath() + File.separatorChar; - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo14(File parent) throws IOException { + void foo14(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath() + separatorChar; - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } void foo15(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath() + File.separatorChar; String parentCanonical2 = parent.getCanonicalPath() + File.separatorChar; - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } - if (!dir().getCanonicalPath().startsWith(parentCanonical2)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical2)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo16(File parent) throws IOException { + void foo16(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath() + File.separator; - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } @@ -148,7 +145,7 @@ void foo16(File parent) throws IOException { "UnusedAssignment", "ResultOfMethodCallIgnored" }) - void foo17(File parent, boolean branch) throws IOException { + void foo17(File dir, File parent, boolean branch) throws IOException { String parentCanonical = null; "test ".startsWith("somethingElse"); if (branch) { @@ -156,8 +153,8 @@ void foo17(File parent, boolean branch) throws IOException { } else { parentCanonical = parent.getCanonicalPath() + File.separatorChar; } - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } @@ -166,24 +163,24 @@ void foo18(File dir, File parent, boolean branch) throws IOException { if (branch) { parentCanonical = parent.getCanonicalPath() + File.separatorChar; } - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo19(File parent) throws IOException { + void foo19(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath() + "/potato"; - if (!dir().getCanonicalPath().startsWith(parentCanonical)) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical)) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } private File cacheDir; - InputStream foo20() { + InputStream foo20(String... path) { StringBuilder sb = new StringBuilder(); sb.append(cacheDir.getAbsolutePath()); - for (String p : path()) { + for (String p : path) { sb.append(File.separatorChar); sb.append(p); } @@ -191,7 +188,7 @@ InputStream foo20() { String filePath = sb.toString(); File encodedFile = new File(filePath); try { - if (!encodedFile.getCanonicalPath().startsWith(cacheDir.getCanonicalPath())) { // $ Alert + if (!encodedFile.getCanonicalPath().startsWith(cacheDir.getCanonicalPath())) { // $hasTaintFlow return null; } return Files.newInputStream(encodedFile.toPath()); @@ -200,37 +197,37 @@ InputStream foo20() { } } - void foo21(File parent) throws IOException { + void foo21(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentCanonical + File.separator)) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical + File.separator)) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo22(File dir2, File parent, boolean conditional) throws IOException { - String canonicalPath = conditional ? dir().getCanonicalPath() : dir2.getCanonicalPath(); - if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $ Alert - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + void foo22(File dir, File dir2, File parent, boolean conditional) throws IOException { + String canonicalPath = conditional ? dir.getCanonicalPath() : dir2.getCanonicalPath(); + if (!canonicalPath.startsWith(parent.getCanonicalPath())) { // $hasTaintFlow + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo23(File parent) throws IOException { + void foo23(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentCanonical + "/")) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical + "/")) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - void foo24(File parent) throws IOException { + void foo24(File dir, File parent) throws IOException { String parentCanonical = parent.getCanonicalPath(); - if (!dir().getCanonicalPath().startsWith(parentCanonical + '/')) { - throw new IOException("Invalid directory: " + dir().getCanonicalPath()); + if (!dir.getCanonicalPath().startsWith(parentCanonical + '/')) { + throw new IOException("Invalid directory: " + dir.getCanonicalPath()); } } - public void doesNotFlagOptimalSafeVersion(File parent) throws IOException { - if (!dir().toPath().normalize().startsWith(parent.toPath())) { // Safe - throw new IOException("Path traversal attempt: " + dir().getCanonicalPath()); + public void doesNotFlagOptimalSafeVersion(File dir, File parent) throws IOException { + if (!dir.toPath().normalize().startsWith(parent.toPath())) { // Safe + throw new IOException("Path traversal attempt: " + dir.getCanonicalPath()); } } @@ -245,19 +242,4 @@ public void doesNotFlagBackslash(File file) throws IOException { } } - Socket sock; - - File dir() { - try { - BufferedReader filenameReader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8")); // $ Source - String filename = filenameReader.readLine(); - return new File(filename); - } catch (IOException e) { - throw new RuntimeException("Failed to read from socket", e); - } - } - - String[] path() { - return dir().getAbsolutePath().split(File.separator); - } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.expected deleted file mode 100644 index 6855ccb21040..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.expected +++ /dev/null @@ -1,308 +0,0 @@ -#select -| JndiInjectionTest.java:36:16:36:22 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:36:16:36:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:37:20:37:26 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:37:20:37:26 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:38:29:38:35 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:38:29:38:35 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:39:16:39:22 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:39:16:39:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:40:14:40:20 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:40:14:40:20 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:41:22:41:28 | nameStr | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:41:22:41:28 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:43:16:43:19 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:43:16:43:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:44:20:44:23 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:44:20:44:23 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:45:29:45:32 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:45:29:45:32 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:46:16:46:19 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:46:16:46:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:47:14:47:17 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:47:14:47:17 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:48:22:48:25 | name | JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:48:22:48:25 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:32:38:32:65 | nameStr | this user input | -| JndiInjectionTest.java:56:16:56:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:56:16:56:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:57:20:57:26 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:57:20:57:26 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:58:16:58:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:58:16:58:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:59:14:59:20 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:59:14:59:20 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:60:22:60:28 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:60:22:60:28 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:62:16:62:19 | name | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:62:16:62:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:63:20:63:23 | name | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:63:20:63:23 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:64:16:64:19 | name | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:64:16:64:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:65:14:65:17 | name | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:65:14:65:17 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:66:22:66:25 | name | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:66:22:66:25 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:70:16:70:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:70:16:70:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:71:16:71:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:71:16:71:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:74:16:74:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:74:16:74:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:75:16:75:22 | nameStr | JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:75:16:75:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:52:34:52:61 | nameStr | this user input | -| JndiInjectionTest.java:87:16:87:22 | nameStr | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:87:16:87:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:88:20:88:26 | nameStr | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:88:20:88:26 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:89:16:89:22 | nameStr | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:89:16:89:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:90:14:90:20 | nameStr | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:90:14:90:20 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:91:22:91:28 | nameStr | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:91:22:91:28 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:93:16:93:19 | name | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:93:16:93:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:94:20:94:23 | name | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:94:20:94:23 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:95:16:95:19 | name | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:95:16:95:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:96:14:96:17 | name | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:96:14:96:17 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:97:22:97:25 | name | JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:97:22:97:25 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:83:42:83:69 | nameStr | this user input | -| JndiInjectionTest.java:104:16:104:22 | nameStr | JndiInjectionTest.java:101:42:101:69 | nameStr : String | JndiInjectionTest.java:104:16:104:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:101:42:101:69 | nameStr | this user input | -| JndiInjectionTest.java:105:16:105:22 | nameStr | JndiInjectionTest.java:101:42:101:69 | nameStr : String | JndiInjectionTest.java:105:16:105:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:101:42:101:69 | nameStr | this user input | -| JndiInjectionTest.java:113:16:113:19 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:113:16:113:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:115:16:115:19 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:115:16:115:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:117:16:117:19 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:117:16:117:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:118:16:118:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:118:16:118:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:120:16:120:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:120:16:120:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:122:16:122:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:122:16:122:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:123:23:123:26 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:123:23:123:26 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:124:23:124:29 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:124:23:124:29 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:125:18:125:21 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:125:18:125:21 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:126:16:126:19 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:126:16:126:19 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:127:14:127:17 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:127:14:127:17 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:128:22:128:25 | name | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:128:22:128:25 | name | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:129:16:129:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:129:16:129:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:131:16:131:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:131:16:131:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:132:16:132:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:132:16:132:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:133:16:133:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:133:16:133:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:134:16:134:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:134:16:134:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:138:16:138:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:138:16:138:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:139:16:139:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:139:16:139:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:141:16:141:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:141:16:141:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:142:16:142:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:142:16:142:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:144:16:144:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:144:16:144:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:145:16:145:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:145:16:145:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:149:16:149:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:149:16:149:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:150:16:150:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:150:16:150:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:152:16:152:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:152:16:152:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:153:16:153:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:153:16:153:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:155:16:155:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:155:16:155:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:156:16:156:22 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:156:16:156:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:170:25:170:31 | nameStr | JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:170:25:170:31 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:109:42:109:69 | nameStr | this user input | -| JndiInjectionTest.java:177:16:177:22 | nameStr | JndiInjectionTest.java:174:41:174:68 | nameStr : String | JndiInjectionTest.java:177:16:177:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:174:41:174:68 | nameStr | this user input | -| JndiInjectionTest.java:178:16:178:22 | nameStr | JndiInjectionTest.java:174:41:174:68 | nameStr : String | JndiInjectionTest.java:178:16:178:22 | nameStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:174:41:174:68 | nameStr | this user input | -| JndiInjectionTest.java:183:33:183:57 | new JMXServiceURL(...) | JndiInjectionTest.java:182:37:182:63 | urlStr : String | JndiInjectionTest.java:183:33:183:57 | new JMXServiceURL(...) | JNDI lookup might include name from $@. | JndiInjectionTest.java:182:37:182:63 | urlStr | this user input | -| JndiInjectionTest.java:187:5:187:13 | connector | JndiInjectionTest.java:182:37:182:63 | urlStr : String | JndiInjectionTest.java:187:5:187:13 | connector | JNDI lookup might include name from $@. | JndiInjectionTest.java:182:37:182:63 | urlStr | this user input | -| JndiInjectionTest.java:194:35:194:40 | urlStr | JndiInjectionTest.java:191:27:191:53 | urlStr : String | JndiInjectionTest.java:194:35:194:40 | urlStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:191:27:191:53 | urlStr | this user input | -| JndiInjectionTest.java:202:41:202:46 | urlStr | JndiInjectionTest.java:199:27:199:53 | urlStr : String | JndiInjectionTest.java:202:41:202:46 | urlStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:199:27:199:53 | urlStr | this user input | -| JndiInjectionTest.java:211:37:211:42 | urlStr | JndiInjectionTest.java:207:52:207:78 | urlStr : String | JndiInjectionTest.java:211:37:211:42 | urlStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:207:52:207:78 | urlStr | this user input | -| JndiInjectionTest.java:221:51:221:56 | urlStr | JndiInjectionTest.java:216:52:216:78 | urlStr : String | JndiInjectionTest.java:221:51:221:56 | urlStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:216:52:216:78 | urlStr | this user input | -| JndiInjectionTest.java:231:51:231:56 | urlStr | JndiInjectionTest.java:226:52:226:78 | urlStr : String | JndiInjectionTest.java:231:51:231:56 | urlStr | JNDI lookup might include name from $@. | JndiInjectionTest.java:226:52:226:78 | urlStr | this user input | -edges -| JndiInjectionTest.java:32:38:32:65 | nameStr : String | JndiInjectionTest.java:33:35:33:41 | nameStr : String | provenance | | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:43:16:43:19 | name | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:44:20:44:23 | name | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:45:29:45:32 | name | provenance | Sink:MaD:9 | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:46:16:46:19 | name | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:47:14:47:17 | name | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:48:22:48:25 | name | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | provenance | Config | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:36:16:36:22 | nameStr | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:37:20:37:26 | nameStr | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:38:29:38:35 | nameStr | provenance | Sink:MaD:9 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:39:16:39:22 | nameStr | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:40:14:40:20 | nameStr | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | JndiInjectionTest.java:41:22:41:28 | nameStr | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:52:34:52:61 | nameStr : String | JndiInjectionTest.java:53:34:53:40 | nameStr : String | provenance | | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | JndiInjectionTest.java:62:16:62:19 | name | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | JndiInjectionTest.java:63:20:63:23 | name | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | JndiInjectionTest.java:64:16:64:19 | name | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | JndiInjectionTest.java:65:14:65:17 | name | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | JndiInjectionTest.java:66:22:66:25 | name | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | provenance | Config | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:56:16:56:22 | nameStr | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:57:20:57:26 | nameStr | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:58:16:58:22 | nameStr | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:59:14:59:20 | nameStr | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:60:22:60:28 | nameStr | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:70:16:70:22 | nameStr | provenance | Sink:MaD:3 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:71:16:71:22 | nameStr | provenance | Sink:MaD:3 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:74:16:74:22 | nameStr | provenance | Sink:MaD:3 | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | JndiInjectionTest.java:75:16:75:22 | nameStr | provenance | Sink:MaD:3 | -| JndiInjectionTest.java:83:42:83:69 | nameStr : String | JndiInjectionTest.java:84:35:84:41 | nameStr : String | provenance | | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:93:16:93:19 | name | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:94:20:94:23 | name | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:95:16:95:19 | name | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:96:14:96:17 | name | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | JndiInjectionTest.java:97:22:97:25 | name | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | provenance | Config | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:87:16:87:22 | nameStr | provenance | Sink:MaD:6 | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:88:20:88:26 | nameStr | provenance | Sink:MaD:7 | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:89:16:89:22 | nameStr | provenance | Sink:MaD:8 | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:90:14:90:20 | nameStr | provenance | Sink:MaD:4 | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | JndiInjectionTest.java:91:22:91:28 | nameStr | provenance | Sink:MaD:5 | -| JndiInjectionTest.java:101:42:101:69 | nameStr : String | JndiInjectionTest.java:104:16:104:22 | nameStr | provenance | Sink:MaD:11 | -| JndiInjectionTest.java:101:42:101:69 | nameStr : String | JndiInjectionTest.java:105:16:105:22 | nameStr | provenance | Sink:MaD:11 | -| JndiInjectionTest.java:109:42:109:69 | nameStr : String | JndiInjectionTest.java:111:41:111:47 | nameStr : String | provenance | | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:113:16:113:19 | name | provenance | Sink:MaD:15 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:115:16:115:19 | name | provenance | Sink:MaD:16 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:117:16:117:19 | name | provenance | Sink:MaD:17 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:123:23:123:26 | name | provenance | Sink:MaD:21 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:125:18:125:21 | name | provenance | Sink:MaD:12 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:126:16:126:19 | name | provenance | Sink:MaD:22 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:127:14:127:17 | name | provenance | Sink:MaD:13 | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | JndiInjectionTest.java:128:22:128:25 | name | provenance | Sink:MaD:14 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:111:17:111:48 | add(...) : Name | provenance | Config | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:118:16:118:22 | nameStr | provenance | Sink:MaD:18 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:120:16:120:22 | nameStr | provenance | Sink:MaD:19 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:122:16:122:22 | nameStr | provenance | Sink:MaD:20 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:124:23:124:29 | nameStr | provenance | Sink:MaD:21 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:129:16:129:22 | nameStr | provenance | | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:131:16:131:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:132:16:132:22 | nameStr | provenance | Sink:MaD:25 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:132:16:132:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:133:16:133:22 | nameStr | provenance | Sink:MaD:24 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:133:16:133:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:134:16:134:22 | nameStr | provenance | Sink:MaD:23 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:134:16:134:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:138:16:138:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:139:16:139:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:141:16:141:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:142:16:142:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:144:16:144:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:145:16:145:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:149:16:149:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:150:16:150:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:152:16:152:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:153:16:153:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:155:16:155:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:156:16:156:22 | nameStr | provenance | Sink:MaD:27 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:170:25:170:31 | nameStr | provenance | Sink:MaD:26 | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | JndiInjectionTest.java:170:25:170:31 | nameStr | provenance | Sink:MaD:28 | -| JndiInjectionTest.java:174:41:174:68 | nameStr : String | JndiInjectionTest.java:177:16:177:22 | nameStr | provenance | Sink:MaD:10 | -| JndiInjectionTest.java:174:41:174:68 | nameStr : String | JndiInjectionTest.java:178:16:178:22 | nameStr | provenance | Sink:MaD:10 | -| JndiInjectionTest.java:182:37:182:63 | urlStr : String | JndiInjectionTest.java:183:51:183:56 | urlStr : String | provenance | | -| JndiInjectionTest.java:183:51:183:56 | urlStr : String | JndiInjectionTest.java:183:33:183:57 | new JMXServiceURL(...) | provenance | Config Sink:MaD:2 | -| JndiInjectionTest.java:183:51:183:56 | urlStr : String | JndiInjectionTest.java:185:43:185:48 | urlStr : String | provenance | | -| JndiInjectionTest.java:185:25:185:49 | new JMXServiceURL(...) : JMXServiceURL | JndiInjectionTest.java:186:66:186:68 | url : JMXServiceURL | provenance | | -| JndiInjectionTest.java:185:43:185:48 | urlStr : String | JndiInjectionTest.java:185:25:185:49 | new JMXServiceURL(...) : JMXServiceURL | provenance | Config | -| JndiInjectionTest.java:186:30:186:75 | newJMXConnector(...) : JMXConnector | JndiInjectionTest.java:187:5:187:13 | connector | provenance | Sink:MaD:1 | -| JndiInjectionTest.java:186:66:186:68 | url : JMXServiceURL | JndiInjectionTest.java:186:30:186:75 | newJMXConnector(...) : JMXConnector | provenance | Config | -| JndiInjectionTest.java:186:66:186:68 | url : JMXServiceURL | JndiInjectionTest.java:186:30:186:75 | newJMXConnector(...) : JMXConnector | provenance | MaD:29 | -| JndiInjectionTest.java:191:27:191:53 | urlStr : String | JndiInjectionTest.java:194:35:194:40 | urlStr | provenance | | -| JndiInjectionTest.java:199:27:199:53 | urlStr : String | JndiInjectionTest.java:202:41:202:46 | urlStr | provenance | | -| JndiInjectionTest.java:207:52:207:78 | urlStr : String | JndiInjectionTest.java:211:37:211:42 | urlStr | provenance | | -| JndiInjectionTest.java:216:52:216:78 | urlStr : String | JndiInjectionTest.java:221:51:221:56 | urlStr | provenance | | -| JndiInjectionTest.java:226:52:226:78 | urlStr : String | JndiInjectionTest.java:231:51:231:56 | urlStr | provenance | | -models -| 1 | Sink: javax.management.remote; JMXConnector; true; connect; ; ; Argument[this]; jndi-injection; manual | -| 2 | Sink: javax.management.remote; JMXConnectorFactory; false; connect; ; ; Argument[0]; jndi-injection; manual | -| 3 | Sink: javax.naming.directory; DirContext; true; search; ; ; Argument[0..1]; ldap-injection; manual | -| 4 | Sink: javax.naming; Context; true; list; ; ; Argument[0]; jndi-injection; manual | -| 5 | Sink: javax.naming; Context; true; listBindings; ; ; Argument[0]; jndi-injection; manual | -| 6 | Sink: javax.naming; Context; true; lookup; ; ; Argument[0]; jndi-injection; manual | -| 7 | Sink: javax.naming; Context; true; lookupLink; ; ; Argument[0]; jndi-injection; manual | -| 8 | Sink: javax.naming; Context; true; rename; ; ; Argument[0]; jndi-injection; manual | -| 9 | Sink: javax.naming; InitialContext; true; doLookup; ; ; Argument[0]; jndi-injection; manual | -| 10 | Sink: org.apache.shiro.jndi; JndiTemplate; false; lookup; ; ; Argument[0]; jndi-injection; manual | -| 11 | Sink: org.springframework.jndi; JndiTemplate; false; lookup; ; ; Argument[0]; jndi-injection; manual | -| 12 | Sink: org.springframework.ldap.core; LdapOperations; true; findByDn; ; ; Argument[0]; jndi-injection; manual | -| 13 | Sink: org.springframework.ldap.core; LdapOperations; true; list; ; ; Argument[0]; jndi-injection; manual | -| 14 | Sink: org.springframework.ldap.core; LdapOperations; true; listBindings; ; ; Argument[0]; jndi-injection; manual | -| 15 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (Name); ; Argument[0]; jndi-injection; manual | -| 16 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (Name,ContextMapper); ; Argument[0]; jndi-injection; manual | -| 17 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (Name,String[],ContextMapper); ; Argument[0]; jndi-injection; manual | -| 18 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (String); ; Argument[0]; jndi-injection; manual | -| 19 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (String,ContextMapper); ; Argument[0]; jndi-injection; manual | -| 20 | Sink: org.springframework.ldap.core; LdapOperations; true; lookup; (String,String[],ContextMapper); ; Argument[0]; jndi-injection; manual | -| 21 | Sink: org.springframework.ldap.core; LdapOperations; true; lookupContext; ; ; Argument[0]; jndi-injection; manual | -| 22 | Sink: org.springframework.ldap.core; LdapOperations; true; rename; ; ; Argument[0]; jndi-injection; manual | -| 23 | Sink: org.springframework.ldap.core; LdapOperations; true; search; (String,String,ContextMapper); ; Argument[0]; jndi-injection; manual | -| 24 | Sink: org.springframework.ldap.core; LdapOperations; true; search; (String,String,int,ContextMapper); ; Argument[0]; jndi-injection; manual | -| 25 | Sink: org.springframework.ldap.core; LdapOperations; true; search; (String,String,int,String[],ContextMapper); ; Argument[0]; jndi-injection; manual | -| 26 | Sink: org.springframework.ldap.core; LdapOperations; true; searchForObject; (String,String,ContextMapper); ; Argument[0]; jndi-injection; manual | -| 27 | Sink: org.springframework.ldap.core; LdapTemplate; false; search; ; ; Argument[0..1]; ldap-injection; manual | -| 28 | Sink: org.springframework.ldap.core; LdapTemplate; false; searchForObject; ; ; Argument[0..1]; ldap-injection; manual | -| 29 | Summary: javax.management.remote; JMXConnectorFactory; true; newJMXConnector; (JMXServiceURL,Map); ; Argument[0]; ReturnValue; taint; df-generated | -nodes -| JndiInjectionTest.java:32:38:32:65 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:33:17:33:42 | new CompositeName(...) : CompositeName | semmle.label | new CompositeName(...) : CompositeName | -| JndiInjectionTest.java:33:35:33:41 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:36:16:36:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:37:20:37:26 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:38:29:38:35 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:39:16:39:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:40:14:40:20 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:41:22:41:28 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:43:16:43:19 | name | semmle.label | name | -| JndiInjectionTest.java:44:20:44:23 | name | semmle.label | name | -| JndiInjectionTest.java:45:29:45:32 | name | semmle.label | name | -| JndiInjectionTest.java:46:16:46:19 | name | semmle.label | name | -| JndiInjectionTest.java:47:14:47:17 | name | semmle.label | name | -| JndiInjectionTest.java:48:22:48:25 | name | semmle.label | name | -| JndiInjectionTest.java:52:34:52:61 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:53:17:53:59 | new CompoundName(...) : CompoundName | semmle.label | new CompoundName(...) : CompoundName | -| JndiInjectionTest.java:53:34:53:40 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:56:16:56:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:57:20:57:26 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:58:16:58:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:59:14:59:20 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:60:22:60:28 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:62:16:62:19 | name | semmle.label | name | -| JndiInjectionTest.java:63:20:63:23 | name | semmle.label | name | -| JndiInjectionTest.java:64:16:64:19 | name | semmle.label | name | -| JndiInjectionTest.java:65:14:65:17 | name | semmle.label | name | -| JndiInjectionTest.java:66:22:66:25 | name | semmle.label | name | -| JndiInjectionTest.java:70:16:70:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:71:16:71:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:74:16:74:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:75:16:75:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:83:42:83:69 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:84:17:84:42 | new CompositeName(...) : CompositeName | semmle.label | new CompositeName(...) : CompositeName | -| JndiInjectionTest.java:84:35:84:41 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:87:16:87:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:88:20:88:26 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:89:16:89:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:90:14:90:20 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:91:22:91:28 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:93:16:93:19 | name | semmle.label | name | -| JndiInjectionTest.java:94:20:94:23 | name | semmle.label | name | -| JndiInjectionTest.java:95:16:95:19 | name | semmle.label | name | -| JndiInjectionTest.java:96:14:96:17 | name | semmle.label | name | -| JndiInjectionTest.java:97:22:97:25 | name | semmle.label | name | -| JndiInjectionTest.java:101:42:101:69 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:104:16:104:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:105:16:105:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:109:42:109:69 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:111:17:111:48 | add(...) : Name | semmle.label | add(...) : Name | -| JndiInjectionTest.java:111:41:111:47 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:113:16:113:19 | name | semmle.label | name | -| JndiInjectionTest.java:115:16:115:19 | name | semmle.label | name | -| JndiInjectionTest.java:117:16:117:19 | name | semmle.label | name | -| JndiInjectionTest.java:118:16:118:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:120:16:120:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:122:16:122:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:123:23:123:26 | name | semmle.label | name | -| JndiInjectionTest.java:124:23:124:29 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:125:18:125:21 | name | semmle.label | name | -| JndiInjectionTest.java:126:16:126:19 | name | semmle.label | name | -| JndiInjectionTest.java:127:14:127:17 | name | semmle.label | name | -| JndiInjectionTest.java:128:22:128:25 | name | semmle.label | name | -| JndiInjectionTest.java:129:16:129:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:131:16:131:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:132:16:132:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:133:16:133:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:134:16:134:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:138:16:138:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:139:16:139:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:141:16:141:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:142:16:142:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:144:16:144:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:145:16:145:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:149:16:149:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:150:16:150:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:152:16:152:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:153:16:153:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:155:16:155:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:156:16:156:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:170:25:170:31 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:174:41:174:68 | nameStr : String | semmle.label | nameStr : String | -| JndiInjectionTest.java:177:16:177:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:178:16:178:22 | nameStr | semmle.label | nameStr | -| JndiInjectionTest.java:182:37:182:63 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:183:33:183:57 | new JMXServiceURL(...) | semmle.label | new JMXServiceURL(...) | -| JndiInjectionTest.java:183:51:183:56 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:185:25:185:49 | new JMXServiceURL(...) : JMXServiceURL | semmle.label | new JMXServiceURL(...) : JMXServiceURL | -| JndiInjectionTest.java:185:43:185:48 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:186:30:186:75 | newJMXConnector(...) : JMXConnector | semmle.label | newJMXConnector(...) : JMXConnector | -| JndiInjectionTest.java:186:66:186:68 | url : JMXServiceURL | semmle.label | url : JMXServiceURL | -| JndiInjectionTest.java:187:5:187:13 | connector | semmle.label | connector | -| JndiInjectionTest.java:191:27:191:53 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:194:35:194:40 | urlStr | semmle.label | urlStr | -| JndiInjectionTest.java:199:27:199:53 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:202:41:202:46 | urlStr | semmle.label | urlStr | -| JndiInjectionTest.java:207:52:207:78 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:211:37:211:42 | urlStr | semmle.label | urlStr | -| JndiInjectionTest.java:216:52:216:78 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:221:51:221:56 | urlStr | semmle.label | urlStr | -| JndiInjectionTest.java:226:52:226:78 | urlStr : String | semmle.label | urlStr : String | -| JndiInjectionTest.java:231:51:231:56 | urlStr | semmle.label | urlStr | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.java b/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.java deleted file mode 100644 index 961023db60de..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.java +++ /dev/null @@ -1,274 +0,0 @@ -import java.io.IOException; -import java.util.Hashtable; -import java.util.Properties; - -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.CompositeName; -import javax.naming.CompoundName; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.Name; -import javax.naming.NamingException; -import javax.naming.directory.DirContext; -import javax.naming.directory.InitialDirContext; -import javax.naming.directory.SearchControls; -import javax.naming.ldap.InitialLdapContext; - -import org.springframework.jndi.JndiTemplate; -import org.springframework.ldap.core.AttributesMapper; -import org.springframework.ldap.core.ContextMapper; -import org.springframework.ldap.core.DirContextProcessor; -import org.springframework.ldap.core.LdapTemplate; -import org.springframework.ldap.core.NameClassPairCallbackHandler; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -public class JndiInjectionTest { - @RequestMapping - public void testInitialContextBad1(@RequestParam String nameStr) throws NamingException { // $ Source - Name name = new CompositeName(nameStr); - InitialContext ctx = new InitialContext(); - - ctx.lookup(nameStr); // $ Alert - ctx.lookupLink(nameStr); // $ Alert - InitialContext.doLookup(nameStr); // $ Alert - ctx.rename(nameStr, ""); // $ Alert - ctx.list(nameStr); // $ Alert - ctx.listBindings(nameStr); // $ Alert - - ctx.lookup(name); // $ Alert - ctx.lookupLink(name); // $ Alert - InitialContext.doLookup(name); // $ Alert - ctx.rename(name, null); // $ Alert - ctx.list(name); // $ Alert - ctx.listBindings(name); // $ Alert - } - - @RequestMapping - public void testDirContextBad1(@RequestParam String nameStr) throws NamingException { // $ Source - Name name = new CompoundName(nameStr, new Properties()); - DirContext ctx = new InitialDirContext(); - - ctx.lookup(nameStr); // $ Alert - ctx.lookupLink(nameStr); // $ Alert - ctx.rename(nameStr, ""); // $ Alert - ctx.list(nameStr); // $ Alert - ctx.listBindings(nameStr); // $ Alert - - ctx.lookup(name); // $ Alert - ctx.lookupLink(name); // $ Alert - ctx.rename(name, null); // $ Alert - ctx.list(name); // $ Alert - ctx.listBindings(name); // $ Alert - - SearchControls searchControls = new SearchControls(); - searchControls.setReturningObjFlag(true); - ctx.search(nameStr, "", searchControls); // $ Alert - ctx.search(nameStr, "", new Object[] {}, searchControls); // $ Alert - - SearchControls searchControls2 = new SearchControls(1, 0, 0, null, true, false); - ctx.search(nameStr, "", searchControls2); // $ Alert - ctx.search(nameStr, "", new Object[] {}, searchControls2); // $ Alert - - SearchControls searchControls3 = new SearchControls(1, 0, 0, null, false, false); - ctx.search(nameStr, "", searchControls3); // Safe - ctx.search(nameStr, "", new Object[] {}, searchControls3); // Safe - } - - @RequestMapping - public void testInitialLdapContextBad1(@RequestParam String nameStr) throws NamingException { // $ Source - Name name = new CompositeName(nameStr); - InitialLdapContext ctx = new InitialLdapContext(); - - ctx.lookup(nameStr); // $ Alert - ctx.lookupLink(nameStr); // $ Alert - ctx.rename(nameStr, ""); // $ Alert - ctx.list(nameStr); // $ Alert - ctx.listBindings(nameStr); // $ Alert - - ctx.lookup(name); // $ Alert - ctx.lookupLink(name); // $ Alert - ctx.rename(name, null); // $ Alert - ctx.list(name); // $ Alert - ctx.listBindings(name); // $ Alert - } - - @RequestMapping - public void testSpringJndiTemplateBad1(@RequestParam String nameStr) throws NamingException { // $ Source - JndiTemplate ctx = new JndiTemplate(); - - ctx.lookup(nameStr); // $ Alert - ctx.lookup(nameStr, null); // $ Alert - } - - @RequestMapping - public void testSpringLdapTemplateBad1(@RequestParam String nameStr) throws NamingException { // $ Source - LdapTemplate ctx = new LdapTemplate(); - Name name = new CompositeName().add(nameStr); - - ctx.lookup(name); // $ Alert - ctx.lookup(name, (AttributesMapper) null); // Safe - ctx.lookup(name, (ContextMapper) null); // $ Alert - ctx.lookup(name, new String[] {}, (AttributesMapper) null); // Safe - ctx.lookup(name, new String[] {}, (ContextMapper) null); // $ Alert - ctx.lookup(nameStr); // $ Alert - ctx.lookup(nameStr, (AttributesMapper) null); // Safe - ctx.lookup(nameStr, (ContextMapper) null); // $ Alert - ctx.lookup(nameStr, new String[] {}, (AttributesMapper) null); // Safe - ctx.lookup(nameStr, new String[] {}, (ContextMapper) null); // $ Alert - ctx.lookupContext(name); // $ Alert - ctx.lookupContext(nameStr); // $ Alert - ctx.findByDn(name, null); // $ Alert - ctx.rename(name, null); // $ Alert - ctx.list(name); // $ Alert - ctx.listBindings(name); // $ Alert - ctx.unbind(nameStr, true); // $ Alert - - ctx.search(nameStr, "", 0, true, null); // $ Alert - ctx.search(nameStr, "", 0, new String[] {}, (ContextMapper) null); // $ Alert - ctx.search(nameStr, "", 0, (ContextMapper) null); // $ Alert - ctx.search(nameStr, "", (ContextMapper) null); // $ Alert - - SearchControls searchControls = new SearchControls(); - searchControls.setReturningObjFlag(true); - ctx.search(nameStr, "", searchControls, (AttributesMapper) null); // $ Alert - ctx.search(nameStr, "", searchControls, (AttributesMapper) null, // $ Alert - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls, (ContextMapper) null); // $ Alert - ctx.search(nameStr, "", searchControls, (ContextMapper) null, // $ Alert - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls, (NameClassPairCallbackHandler) null); // $ Alert - ctx.search(nameStr, "", searchControls, (NameClassPairCallbackHandler) null, // $ Alert - (DirContextProcessor) null); - - SearchControls searchControls2 = new SearchControls(1, 0, 0, null, true, false); - ctx.search(nameStr, "", searchControls2, (AttributesMapper) null); // $ Alert - ctx.search(nameStr, "", searchControls2, (AttributesMapper) null, // $ Alert - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls2, (ContextMapper) null); // $ Alert - ctx.search(nameStr, "", searchControls2, (ContextMapper) null, // $ Alert - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls2, (NameClassPairCallbackHandler) null); // $ Alert - ctx.search(nameStr, "", searchControls2, (NameClassPairCallbackHandler) null, // $ Alert - (DirContextProcessor) null); - - SearchControls searchControls3 = new SearchControls(1, 0, 0, null, false, false); - ctx.search(nameStr, "", searchControls3, (AttributesMapper) null); // Safe - ctx.search(nameStr, "", searchControls3, (AttributesMapper) null, // Safe - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls3, (ContextMapper) null); // Safe - ctx.search(nameStr, "", searchControls3, (ContextMapper) null, // Safe - (DirContextProcessor) null); - ctx.search(nameStr, "", searchControls3, (NameClassPairCallbackHandler) null); // Safe - ctx.search(nameStr, "", searchControls3, (NameClassPairCallbackHandler) null, // Safe - (DirContextProcessor) null); - - ctx.searchForObject(nameStr, "", (ContextMapper) null); // $ Alert - } - - @RequestMapping - public void testShiroJndiTemplateBad1(@RequestParam String nameStr) throws NamingException { // $ Source - org.apache.shiro.jndi.JndiTemplate ctx = new org.apache.shiro.jndi.JndiTemplate(); - - ctx.lookup(nameStr); // $ Alert - ctx.lookup(nameStr, null); // $ Alert - } - - @RequestMapping - public void testJMXServiceUrlBad1(@RequestParam String urlStr) throws IOException { // $ Source - JMXConnectorFactory.connect(new JMXServiceURL(urlStr)); // $ Alert - - JMXServiceURL url = new JMXServiceURL(urlStr); - JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, null); - connector.connect(); // $ Alert - } - - @RequestMapping - public void testEnvBad1(@RequestParam String urlStr) throws NamingException { // $ Source - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); - env.put(Context.PROVIDER_URL, urlStr); // $ Alert - new InitialContext(env); - } - - @RequestMapping - public void testEnvBad2(@RequestParam String urlStr) throws NamingException { // $ Source - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); - env.put("java.naming.provider.url", urlStr); // $ Alert - new InitialDirContext(env); - } - - @RequestMapping - public void testSpringJndiTemplatePropertiesBad1(@RequestParam String urlStr) // $ Source - throws NamingException { - Properties props = new Properties(); - props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); - props.put(Context.PROVIDER_URL, urlStr); // $ Alert - new JndiTemplate(props); - } - - @RequestMapping - public void testSpringJndiTemplatePropertiesBad2(@RequestParam String urlStr) // $ Source - throws NamingException { - Properties props = new Properties(); - props.setProperty(Context.INITIAL_CONTEXT_FACTORY, - "com.sun.jndi.rmi.registry.RegistryContextFactory"); - props.setProperty("java.naming.provider.url", urlStr); // $ Alert - new JndiTemplate(props); - } - - @RequestMapping - public void testSpringJndiTemplatePropertiesBad3(@RequestParam String urlStr) // $ Source - throws NamingException { - Properties props = new Properties(); - props.setProperty(Context.INITIAL_CONTEXT_FACTORY, - "com.sun.jndi.rmi.registry.RegistryContextFactory"); - props.setProperty("java.naming.provider.url", urlStr); // $ Alert - JndiTemplate template = new JndiTemplate(); - template.setEnvironment(props); - } - - @RequestMapping - public void testSpringLdapTemplateOk1(@RequestParam String nameStr) throws NamingException { - LdapTemplate ctx = new LdapTemplate(); - - ctx.unbind(nameStr); // Safe - ctx.unbind(nameStr, false); // Safe - - ctx.search(nameStr, "", 0, false, null); // Safe - ctx.search(nameStr, "", new SearchControls(), (NameClassPairCallbackHandler) new Object()); // Safe - ctx.search(nameStr, "", new SearchControls(), (NameClassPairCallbackHandler) new Object(), // Safe - null); - ctx.search(nameStr, "", (NameClassPairCallbackHandler) new Object()); // Safe - ctx.search(nameStr, "", 0, new String[] {}, (AttributesMapper) new Object()); // Safe - ctx.search(nameStr, "", 0, (AttributesMapper) new Object()); // Safe - ctx.search(nameStr, "", (AttributesMapper) new Object()); // Safe - ctx.search(nameStr, "", new SearchControls(), (ContextMapper) new Object()); // Safe - ctx.search(nameStr, "", new SearchControls(), (AttributesMapper) new Object()); // Safe - ctx.search(nameStr, "", new SearchControls(), (ContextMapper) new Object(), null); // Safe - ctx.search(nameStr, "", new SearchControls(), (AttributesMapper) new Object(), null); // Safe - - ctx.searchForObject(nameStr, "", new SearchControls(), (ContextMapper) new Object()); // Safe - } - - @RequestMapping - public void testEnvOk1(@RequestParam String urlStr) throws NamingException { - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); - env.put(Context.SECURITY_PRINCIPAL, urlStr); // Safe - new InitialContext(env); - } - - @RequestMapping - public void testEnvOk2(@RequestParam String urlStr) throws NamingException { - Hashtable env = new Hashtable(); - env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); - env.put("java.naming.security.principal", urlStr); // Safe - new InitialContext(env); - } -} diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.qlref deleted file mode 100644 index 90b6394597b8..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjection/JndiInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-074/JndiInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjection/options b/java/ql/test/query-tests/security/CWE-074/JndiInjection/options deleted file mode 100644 index 099749ee58bf..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/JndiInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/shiro-core-1.5.2:${testdir}/../../../../stubs/spring-ldap-2.3.2:${testdir}/../../../../stubs/Saxon-HE-9.9.1-7:${testdir}/../../../../stubs/apache-commons-logging-1.2 diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedos/ReDoS.expected b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected similarity index 100% rename from java/ql/test/query-tests/security/CWE-730/ExpRedos/ReDoS.expected rename to java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.expected diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.java b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.java new file mode 100644 index 000000000000..549ae554097b --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.java @@ -0,0 +1,274 @@ +import java.io.IOException; +import java.util.Hashtable; +import java.util.Properties; + +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import javax.naming.CompositeName; +import javax.naming.CompoundName; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.Name; +import javax.naming.NamingException; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import javax.naming.directory.SearchControls; +import javax.naming.ldap.InitialLdapContext; + +import org.springframework.jndi.JndiTemplate; +import org.springframework.ldap.core.AttributesMapper; +import org.springframework.ldap.core.ContextMapper; +import org.springframework.ldap.core.DirContextProcessor; +import org.springframework.ldap.core.LdapTemplate; +import org.springframework.ldap.core.NameClassPairCallbackHandler; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class JndiInjectionTest { + @RequestMapping + public void testInitialContextBad1(@RequestParam String nameStr) throws NamingException { + Name name = new CompositeName(nameStr); + InitialContext ctx = new InitialContext(); + + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookupLink(nameStr); // $hasJndiInjection + InitialContext.doLookup(nameStr); // $hasJndiInjection + ctx.rename(nameStr, ""); // $hasJndiInjection + ctx.list(nameStr); // $hasJndiInjection + ctx.listBindings(nameStr); // $hasJndiInjection + + ctx.lookup(name); // $hasJndiInjection + ctx.lookupLink(name); // $hasJndiInjection + InitialContext.doLookup(name); // $hasJndiInjection + ctx.rename(name, null); // $hasJndiInjection + ctx.list(name); // $hasJndiInjection + ctx.listBindings(name); // $hasJndiInjection + } + + @RequestMapping + public void testDirContextBad1(@RequestParam String nameStr) throws NamingException { + Name name = new CompoundName(nameStr, new Properties()); + DirContext ctx = new InitialDirContext(); + + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookupLink(nameStr); // $hasJndiInjection + ctx.rename(nameStr, ""); // $hasJndiInjection + ctx.list(nameStr); // $hasJndiInjection + ctx.listBindings(nameStr); // $hasJndiInjection + + ctx.lookup(name); // $hasJndiInjection + ctx.lookupLink(name); // $hasJndiInjection + ctx.rename(name, null); // $hasJndiInjection + ctx.list(name); // $hasJndiInjection + ctx.listBindings(name); // $hasJndiInjection + + SearchControls searchControls = new SearchControls(); + searchControls.setReturningObjFlag(true); + ctx.search(nameStr, "", searchControls); // $hasJndiInjection + ctx.search(nameStr, "", new Object[] {}, searchControls); // $hasJndiInjection + + SearchControls searchControls2 = new SearchControls(1, 0, 0, null, true, false); + ctx.search(nameStr, "", searchControls2); // $hasJndiInjection + ctx.search(nameStr, "", new Object[] {}, searchControls2); // $hasJndiInjection + + SearchControls searchControls3 = new SearchControls(1, 0, 0, null, false, false); + ctx.search(nameStr, "", searchControls3); // Safe + ctx.search(nameStr, "", new Object[] {}, searchControls3); // Safe + } + + @RequestMapping + public void testInitialLdapContextBad1(@RequestParam String nameStr) throws NamingException { + Name name = new CompositeName(nameStr); + InitialLdapContext ctx = new InitialLdapContext(); + + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookupLink(nameStr); // $hasJndiInjection + ctx.rename(nameStr, ""); // $hasJndiInjection + ctx.list(nameStr); // $hasJndiInjection + ctx.listBindings(nameStr); // $hasJndiInjection + + ctx.lookup(name); // $hasJndiInjection + ctx.lookupLink(name); // $hasJndiInjection + ctx.rename(name, null); // $hasJndiInjection + ctx.list(name); // $hasJndiInjection + ctx.listBindings(name); // $hasJndiInjection + } + + @RequestMapping + public void testSpringJndiTemplateBad1(@RequestParam String nameStr) throws NamingException { + JndiTemplate ctx = new JndiTemplate(); + + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookup(nameStr, null); // $hasJndiInjection + } + + @RequestMapping + public void testSpringLdapTemplateBad1(@RequestParam String nameStr) throws NamingException { + LdapTemplate ctx = new LdapTemplate(); + Name name = new CompositeName().add(nameStr); + + ctx.lookup(name); // $hasJndiInjection + ctx.lookup(name, (AttributesMapper) null); // Safe + ctx.lookup(name, (ContextMapper) null); // $hasJndiInjection + ctx.lookup(name, new String[] {}, (AttributesMapper) null); // Safe + ctx.lookup(name, new String[] {}, (ContextMapper) null); // $hasJndiInjection + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookup(nameStr, (AttributesMapper) null); // Safe + ctx.lookup(nameStr, (ContextMapper) null); // $hasJndiInjection + ctx.lookup(nameStr, new String[] {}, (AttributesMapper) null); // Safe + ctx.lookup(nameStr, new String[] {}, (ContextMapper) null); // $hasJndiInjection + ctx.lookupContext(name); // $hasJndiInjection + ctx.lookupContext(nameStr); // $hasJndiInjection + ctx.findByDn(name, null); // $hasJndiInjection + ctx.rename(name, null); // $hasJndiInjection + ctx.list(name); // $hasJndiInjection + ctx.listBindings(name); // $hasJndiInjection + ctx.unbind(nameStr, true); // $hasJndiInjection + + ctx.search(nameStr, "", 0, true, null); // $hasJndiInjection + ctx.search(nameStr, "", 0, new String[] {}, (ContextMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", 0, (ContextMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", (ContextMapper) null); // $hasJndiInjection + + SearchControls searchControls = new SearchControls(); + searchControls.setReturningObjFlag(true); + ctx.search(nameStr, "", searchControls, (AttributesMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls, (AttributesMapper) null, // $hasJndiInjection + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls, (ContextMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls, (ContextMapper) null, // $hasJndiInjection + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls, (NameClassPairCallbackHandler) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls, (NameClassPairCallbackHandler) null, // $hasJndiInjection + (DirContextProcessor) null); + + SearchControls searchControls2 = new SearchControls(1, 0, 0, null, true, false); + ctx.search(nameStr, "", searchControls2, (AttributesMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls2, (AttributesMapper) null, // $hasJndiInjection + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls2, (ContextMapper) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls2, (ContextMapper) null, // $hasJndiInjection + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls2, (NameClassPairCallbackHandler) null); // $hasJndiInjection + ctx.search(nameStr, "", searchControls2, (NameClassPairCallbackHandler) null, // $hasJndiInjection + (DirContextProcessor) null); + + SearchControls searchControls3 = new SearchControls(1, 0, 0, null, false, false); + ctx.search(nameStr, "", searchControls3, (AttributesMapper) null); // Safe + ctx.search(nameStr, "", searchControls3, (AttributesMapper) null, // Safe + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls3, (ContextMapper) null); // Safe + ctx.search(nameStr, "", searchControls3, (ContextMapper) null, // Safe + (DirContextProcessor) null); + ctx.search(nameStr, "", searchControls3, (NameClassPairCallbackHandler) null); // Safe + ctx.search(nameStr, "", searchControls3, (NameClassPairCallbackHandler) null, // Safe + (DirContextProcessor) null); + + ctx.searchForObject(nameStr, "", (ContextMapper) null); // $hasJndiInjection + } + + @RequestMapping + public void testShiroJndiTemplateBad1(@RequestParam String nameStr) throws NamingException { + org.apache.shiro.jndi.JndiTemplate ctx = new org.apache.shiro.jndi.JndiTemplate(); + + ctx.lookup(nameStr); // $hasJndiInjection + ctx.lookup(nameStr, null); // $hasJndiInjection + } + + @RequestMapping + public void testJMXServiceUrlBad1(@RequestParam String urlStr) throws IOException { + JMXConnectorFactory.connect(new JMXServiceURL(urlStr)); // $hasJndiInjection + + JMXServiceURL url = new JMXServiceURL(urlStr); + JMXConnector connector = JMXConnectorFactory.newJMXConnector(url, null); + connector.connect(); // $hasJndiInjection + } + + @RequestMapping + public void testEnvBad1(@RequestParam String urlStr) throws NamingException { + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + env.put(Context.PROVIDER_URL, urlStr); // $hasJndiInjection + new InitialContext(env); + } + + @RequestMapping + public void testEnvBad2(@RequestParam String urlStr) throws NamingException { + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + env.put("java.naming.provider.url", urlStr); // $hasJndiInjection + new InitialDirContext(env); + } + + @RequestMapping + public void testSpringJndiTemplatePropertiesBad1(@RequestParam String urlStr) + throws NamingException { + Properties props = new Properties(); + props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + props.put(Context.PROVIDER_URL, urlStr); // $hasJndiInjection + new JndiTemplate(props); + } + + @RequestMapping + public void testSpringJndiTemplatePropertiesBad2(@RequestParam String urlStr) + throws NamingException { + Properties props = new Properties(); + props.setProperty(Context.INITIAL_CONTEXT_FACTORY, + "com.sun.jndi.rmi.registry.RegistryContextFactory"); + props.setProperty("java.naming.provider.url", urlStr); // $hasJndiInjection + new JndiTemplate(props); + } + + @RequestMapping + public void testSpringJndiTemplatePropertiesBad3(@RequestParam String urlStr) + throws NamingException { + Properties props = new Properties(); + props.setProperty(Context.INITIAL_CONTEXT_FACTORY, + "com.sun.jndi.rmi.registry.RegistryContextFactory"); + props.setProperty("java.naming.provider.url", urlStr); // $hasJndiInjection + JndiTemplate template = new JndiTemplate(); + template.setEnvironment(props); + } + + @RequestMapping + public void testSpringLdapTemplateOk1(@RequestParam String nameStr) throws NamingException { + LdapTemplate ctx = new LdapTemplate(); + + ctx.unbind(nameStr); // Safe + ctx.unbind(nameStr, false); // Safe + + ctx.search(nameStr, "", 0, false, null); // Safe + ctx.search(nameStr, "", new SearchControls(), (NameClassPairCallbackHandler) new Object()); // Safe + ctx.search(nameStr, "", new SearchControls(), (NameClassPairCallbackHandler) new Object(), // Safe + null); + ctx.search(nameStr, "", (NameClassPairCallbackHandler) new Object()); // Safe + ctx.search(nameStr, "", 0, new String[] {}, (AttributesMapper) new Object()); // Safe + ctx.search(nameStr, "", 0, (AttributesMapper) new Object()); // Safe + ctx.search(nameStr, "", (AttributesMapper) new Object()); // Safe + ctx.search(nameStr, "", new SearchControls(), (ContextMapper) new Object()); // Safe + ctx.search(nameStr, "", new SearchControls(), (AttributesMapper) new Object()); // Safe + ctx.search(nameStr, "", new SearchControls(), (ContextMapper) new Object(), null); // Safe + ctx.search(nameStr, "", new SearchControls(), (AttributesMapper) new Object(), null); // Safe + + ctx.searchForObject(nameStr, "", new SearchControls(), (ContextMapper) new Object()); // Safe + } + + @RequestMapping + public void testEnvOk1(@RequestParam String urlStr) throws NamingException { + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + env.put(Context.SECURITY_PRINCIPAL, urlStr); // Safe + new InitialContext(env); + } + + @RequestMapping + public void testEnvOk2(@RequestParam String urlStr) throws NamingException { + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + env.put("java.naming.security.principal", urlStr); // Safe + new InitialContext(env); + } +} diff --git a/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql new file mode 100644 index 000000000000..03b588555b56 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/JndiInjectionTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.JndiInjectionQuery +import utils.test.InlineExpectationsTest + +module HasJndiInjectionTest implements TestSig { + string getARelevantTag() { result = "hasJndiInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasJndiInjection" and + exists(DataFlow::Node sink | JndiInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.expected deleted file mode 100644 index 87167aa84bf0..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.expected +++ /dev/null @@ -1,245 +0,0 @@ -#select -| XsltInjectionTest.java:31:5:31:59 | newTransformer(...) | XsltInjectionTest.java:30:44:30:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:31:5:31:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:30:44:30:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:36:5:36:74 | newTransformer(...) | XsltInjectionTest.java:35:66:35:88 | getInputStream(...) : InputStream | XsltInjectionTest.java:36:5:36:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:35:66:35:88 | getInputStream(...) | this user input | -| XsltInjectionTest.java:43:5:43:59 | newTransformer(...) | XsltInjectionTest.java:40:45:40:70 | param : String | XsltInjectionTest.java:43:5:43:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:40:45:40:70 | param | this user input | -| XsltInjectionTest.java:48:5:48:74 | newTransformer(...) | XsltInjectionTest.java:47:54:47:76 | getInputStream(...) : InputStream | XsltInjectionTest.java:48:5:48:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:47:54:47:76 | getInputStream(...) | this user input | -| XsltInjectionTest.java:54:5:54:59 | newTransformer(...) | XsltInjectionTest.java:53:67:53:89 | getInputStream(...) : InputStream | XsltInjectionTest.java:54:5:54:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:53:67:53:89 | getInputStream(...) | this user input | -| XsltInjectionTest.java:60:5:60:59 | newTransformer(...) | XsltInjectionTest.java:59:75:59:97 | getInputStream(...) : InputStream | XsltInjectionTest.java:60:5:60:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:59:75:59:97 | getInputStream(...) | this user input | -| XsltInjectionTest.java:66:5:66:74 | newTransformer(...) | XsltInjectionTest.java:65:31:65:53 | getInputStream(...) : InputStream | XsltInjectionTest.java:66:5:66:74 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:65:31:65:53 | getInputStream(...) | this user input | -| XsltInjectionTest.java:72:5:72:59 | newTransformer(...) | XsltInjectionTest.java:71:73:71:95 | getInputStream(...) : InputStream | XsltInjectionTest.java:72:5:72:59 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:71:73:71:95 | getInputStream(...) | this user input | -| XsltInjectionTest.java:80:5:80:34 | newTransformer(...) | XsltInjectionTest.java:76:44:76:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:80:5:80:34 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:76:44:76:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:87:5:87:34 | newTransformer(...) | XsltInjectionTest.java:84:44:84:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:87:5:87:34 | newTransformer(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:84:44:84:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:94:5:94:35 | load(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:94:5:94:35 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:95:5:95:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:95:5:95:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:96:5:96:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:96:5:96:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:97:5:97:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:97:5:97:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:98:5:98:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:98:5:98:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:99:5:99:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:99:5:99:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:100:5:100:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:100:5:100:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:101:5:101:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:101:5:101:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:102:5:102:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:102:5:102:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:103:5:103:37 | load30(...) | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:103:5:103:37 | load30(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:91:44:91:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:112:5:112:46 | load(...) | XsltInjectionTest.java:107:36:107:61 | param : String | XsltInjectionTest.java:112:5:112:46 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:107:36:107:61 | param | this user input | -| XsltInjectionTest.java:113:5:113:49 | load(...) | XsltInjectionTest.java:107:64:107:76 | socket : Socket | XsltInjectionTest.java:113:5:113:49 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:107:64:107:76 | socket | this user input | -| XsltInjectionTest.java:113:5:113:49 | load(...) | XsltInjectionTest.java:109:44:109:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:113:5:113:49 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:109:44:109:66 | getInputStream(...) | this user input | -| XsltInjectionTest.java:114:5:114:50 | load(...) | XsltInjectionTest.java:107:36:107:61 | param : String | XsltInjectionTest.java:114:5:114:50 | load(...) | XSLT transformation might include stylesheet from $@. | XsltInjectionTest.java:107:36:107:61 | param | this user input | -edges -| XsltInjectionTest.java:30:27:30:67 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:31:53:31:58 | source : StreamSource | provenance | | -| XsltInjectionTest.java:30:44:30:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:30:27:30:67 | new StreamSource(...) : StreamSource | provenance | Src:MaD:7 MaD:14 | -| XsltInjectionTest.java:31:53:31:58 | source : StreamSource | XsltInjectionTest.java:31:5:31:59 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:35:27:35:90 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:36:51:36:56 | source : StreamSource | provenance | | -| XsltInjectionTest.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | XsltInjectionTest.java:35:27:35:90 | new StreamSource(...) : StreamSource | provenance | MaD:14 | -| XsltInjectionTest.java:35:66:35:88 | getInputStream(...) : InputStream | XsltInjectionTest.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | provenance | Src:MaD:7 MaD:8 | -| XsltInjectionTest.java:36:5:36:57 | newTemplates(...) : Templates | XsltInjectionTest.java:36:5:36:74 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:36:5:36:57 | newTemplates(...) : Templates | XsltInjectionTest.java:36:5:36:74 | newTransformer(...) | provenance | MaD:15 Sink:MaD:1 | -| XsltInjectionTest.java:36:51:36:56 | source : StreamSource | XsltInjectionTest.java:36:5:36:57 | newTemplates(...) : Templates | provenance | Config | -| XsltInjectionTest.java:36:51:36:56 | source : StreamSource | XsltInjectionTest.java:36:5:36:57 | newTemplates(...) : Templates | provenance | MaD:16 | -| XsltInjectionTest.java:40:45:40:70 | param : String | XsltInjectionTest.java:42:61:42:64 | xslt : String | provenance | | -| XsltInjectionTest.java:42:27:42:66 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:43:53:43:58 | source : StreamSource | provenance | | -| XsltInjectionTest.java:42:44:42:65 | new StringReader(...) : StringReader | XsltInjectionTest.java:42:27:42:66 | new StreamSource(...) : StreamSource | provenance | MaD:14 | -| XsltInjectionTest.java:42:61:42:64 | xslt : String | XsltInjectionTest.java:42:44:42:65 | new StringReader(...) : StringReader | provenance | MaD:9 | -| XsltInjectionTest.java:43:53:43:58 | source : StreamSource | XsltInjectionTest.java:43:5:43:59 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:47:24:47:78 | new SAXSource(...) : SAXSource | XsltInjectionTest.java:48:51:48:56 | source : SAXSource | provenance | | -| XsltInjectionTest.java:47:38:47:77 | new InputSource(...) : InputSource | XsltInjectionTest.java:47:24:47:78 | new SAXSource(...) : SAXSource | provenance | MaD:12 | -| XsltInjectionTest.java:47:54:47:76 | getInputStream(...) : InputStream | XsltInjectionTest.java:47:38:47:77 | new InputSource(...) : InputSource | provenance | Src:MaD:7 MaD:17 | -| XsltInjectionTest.java:48:5:48:57 | newTemplates(...) : Templates | XsltInjectionTest.java:48:5:48:74 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:48:5:48:57 | newTemplates(...) : Templates | XsltInjectionTest.java:48:5:48:74 | newTransformer(...) | provenance | MaD:15 Sink:MaD:1 | -| XsltInjectionTest.java:48:51:48:56 | source : SAXSource | XsltInjectionTest.java:48:5:48:57 | newTemplates(...) : Templates | provenance | Config | -| XsltInjectionTest.java:48:51:48:56 | source : SAXSource | XsltInjectionTest.java:48:5:48:57 | newTemplates(...) : Templates | provenance | MaD:16 | -| XsltInjectionTest.java:53:9:53:92 | new SAXSource(...) : SAXSource | XsltInjectionTest.java:54:53:54:58 | source : SAXSource | provenance | | -| XsltInjectionTest.java:53:29:53:91 | new InputSource(...) : InputSource | XsltInjectionTest.java:53:9:53:92 | new SAXSource(...) : SAXSource | provenance | MaD:13 | -| XsltInjectionTest.java:53:45:53:90 | new InputStreamReader(...) : InputStreamReader | XsltInjectionTest.java:53:29:53:91 | new InputSource(...) : InputSource | provenance | MaD:17 | -| XsltInjectionTest.java:53:67:53:89 | getInputStream(...) : InputStream | XsltInjectionTest.java:53:45:53:90 | new InputStreamReader(...) : InputStreamReader | provenance | Src:MaD:7 MaD:8 | -| XsltInjectionTest.java:54:53:54:58 | source : SAXSource | XsltInjectionTest.java:54:5:54:59 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:59:9:59:99 | new StAXSource(...) : StAXSource | XsltInjectionTest.java:60:53:60:58 | source : StAXSource | provenance | | -| XsltInjectionTest.java:59:24:59:98 | createXMLEventReader(...) : XMLEventReader | XsltInjectionTest.java:59:9:59:99 | new StAXSource(...) : StAXSource | provenance | Config | -| XsltInjectionTest.java:59:75:59:97 | getInputStream(...) : InputStream | XsltInjectionTest.java:59:24:59:98 | createXMLEventReader(...) : XMLEventReader | provenance | Src:MaD:7 Config | -| XsltInjectionTest.java:60:53:60:58 | source : StAXSource | XsltInjectionTest.java:60:5:60:59 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:64:25:65:56 | new StAXSource(...) : StAXSource | XsltInjectionTest.java:66:51:66:56 | source : StAXSource | provenance | | -| XsltInjectionTest.java:64:40:65:55 | createXMLStreamReader(...) : XMLStreamReader | XsltInjectionTest.java:64:25:65:56 | new StAXSource(...) : StAXSource | provenance | Config | -| XsltInjectionTest.java:65:9:65:54 | new InputStreamReader(...) : InputStreamReader | XsltInjectionTest.java:64:40:65:55 | createXMLStreamReader(...) : XMLStreamReader | provenance | Config | -| XsltInjectionTest.java:65:31:65:53 | getInputStream(...) : InputStream | XsltInjectionTest.java:65:9:65:54 | new InputStreamReader(...) : InputStreamReader | provenance | Src:MaD:7 MaD:8 | -| XsltInjectionTest.java:66:5:66:57 | newTemplates(...) : Templates | XsltInjectionTest.java:66:5:66:74 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:66:5:66:57 | newTemplates(...) : Templates | XsltInjectionTest.java:66:5:66:74 | newTransformer(...) | provenance | MaD:15 Sink:MaD:1 | -| XsltInjectionTest.java:66:51:66:56 | source : StAXSource | XsltInjectionTest.java:66:5:66:57 | newTemplates(...) : Templates | provenance | Config | -| XsltInjectionTest.java:66:51:66:56 | source : StAXSource | XsltInjectionTest.java:66:5:66:57 | newTemplates(...) : Templates | provenance | MaD:16 | -| XsltInjectionTest.java:70:24:71:97 | new DOMSource(...) : DOMSource | XsltInjectionTest.java:72:53:72:58 | source : DOMSource | provenance | | -| XsltInjectionTest.java:71:9:71:96 | parse(...) : Document | XsltInjectionTest.java:70:24:71:97 | new DOMSource(...) : DOMSource | provenance | Config | -| XsltInjectionTest.java:71:73:71:95 | getInputStream(...) : InputStream | XsltInjectionTest.java:71:9:71:96 | parse(...) : Document | provenance | Src:MaD:7 Config | -| XsltInjectionTest.java:72:53:72:58 | source : DOMSource | XsltInjectionTest.java:72:5:72:59 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:76:27:76:67 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:80:28:80:33 | source : StreamSource | provenance | | -| XsltInjectionTest.java:76:44:76:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:76:27:76:67 | new StreamSource(...) : StreamSource | provenance | Src:MaD:7 MaD:14 | -| XsltInjectionTest.java:80:28:80:33 | source : StreamSource | XsltInjectionTest.java:80:5:80:34 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:84:27:84:67 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:87:28:87:33 | source : StreamSource | provenance | | -| XsltInjectionTest.java:84:44:84:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:84:27:84:67 | new StreamSource(...) : StreamSource | provenance | Src:MaD:7 MaD:14 | -| XsltInjectionTest.java:87:28:87:33 | source : StreamSource | XsltInjectionTest.java:87:5:87:34 | newTransformer(...) | provenance | Config Sink:MaD:1 | -| XsltInjectionTest.java:91:27:91:67 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:94:22:94:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:91:27:91:67 | new StreamSource(...) : StreamSource | provenance | Src:MaD:7 MaD:14 | -| XsltInjectionTest.java:94:5:94:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:94:5:94:35 | load(...) | provenance | Config Sink:MaD:6 | -| XsltInjectionTest.java:94:22:94:27 | source : StreamSource | XsltInjectionTest.java:94:5:94:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:94:22:94:27 | source : StreamSource | XsltInjectionTest.java:95:22:95:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:95:5:95:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:95:5:95:37 | load30(...) | provenance | Config Sink:MaD:5 | -| XsltInjectionTest.java:95:22:95:27 | source : StreamSource | XsltInjectionTest.java:95:5:95:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:95:22:95:27 | source : StreamSource | XsltInjectionTest.java:96:22:96:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:96:5:96:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:96:5:96:37 | load30(...) | provenance | Config Sink:MaD:2 | -| XsltInjectionTest.java:96:22:96:27 | source : StreamSource | XsltInjectionTest.java:96:5:96:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:96:22:96:27 | source : StreamSource | XsltInjectionTest.java:97:22:97:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:97:5:97:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:97:5:97:37 | load30(...) | provenance | Config Sink:MaD:2 | -| XsltInjectionTest.java:97:22:97:27 | source : StreamSource | XsltInjectionTest.java:97:5:97:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:97:22:97:27 | source : StreamSource | XsltInjectionTest.java:98:22:98:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:98:5:98:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:98:5:98:37 | load30(...) | provenance | Config Sink:MaD:2 | -| XsltInjectionTest.java:98:22:98:27 | source : StreamSource | XsltInjectionTest.java:98:5:98:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:98:22:98:27 | source : StreamSource | XsltInjectionTest.java:99:22:99:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:99:5:99:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:99:5:99:37 | load30(...) | provenance | Config Sink:MaD:2 | -| XsltInjectionTest.java:99:22:99:27 | source : StreamSource | XsltInjectionTest.java:99:5:99:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:99:22:99:27 | source : StreamSource | XsltInjectionTest.java:100:22:100:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:100:5:100:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:100:5:100:37 | load30(...) | provenance | Config Sink:MaD:3 | -| XsltInjectionTest.java:100:22:100:27 | source : StreamSource | XsltInjectionTest.java:100:5:100:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:100:22:100:27 | source : StreamSource | XsltInjectionTest.java:101:22:101:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:101:5:101:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:101:5:101:37 | load30(...) | provenance | Config Sink:MaD:3 | -| XsltInjectionTest.java:101:22:101:27 | source : StreamSource | XsltInjectionTest.java:101:5:101:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:101:22:101:27 | source : StreamSource | XsltInjectionTest.java:102:22:102:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:102:5:102:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:102:5:102:37 | load30(...) | provenance | Config Sink:MaD:4 | -| XsltInjectionTest.java:102:22:102:27 | source : StreamSource | XsltInjectionTest.java:102:5:102:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:102:22:102:27 | source : StreamSource | XsltInjectionTest.java:103:22:103:27 | source : StreamSource | provenance | | -| XsltInjectionTest.java:103:5:103:28 | compile(...) : XsltExecutable | XsltInjectionTest.java:103:5:103:37 | load30(...) | provenance | Config Sink:MaD:4 | -| XsltInjectionTest.java:103:22:103:27 | source : StreamSource | XsltInjectionTest.java:103:5:103:28 | compile(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:107:36:107:61 | param : String | XsltInjectionTest.java:108:23:108:27 | param : String | provenance | | -| XsltInjectionTest.java:107:64:107:76 | socket : Socket | XsltInjectionTest.java:109:44:109:49 | socket : Socket | provenance | | -| XsltInjectionTest.java:108:15:108:28 | new URI(...) : URI | XsltInjectionTest.java:112:36:112:38 | uri : URI | provenance | | -| XsltInjectionTest.java:108:23:108:27 | param : String | XsltInjectionTest.java:108:15:108:28 | new URI(...) : URI | provenance | MaD:11 | -| XsltInjectionTest.java:109:27:109:67 | new StreamSource(...) : StreamSource | XsltInjectionTest.java:113:29:113:34 | source : StreamSource | provenance | | -| XsltInjectionTest.java:109:44:109:49 | socket : Socket | XsltInjectionTest.java:109:44:109:66 | getInputStream(...) : InputStream | provenance | MaD:10 | -| XsltInjectionTest.java:109:44:109:66 | getInputStream(...) : InputStream | XsltInjectionTest.java:109:27:109:67 | new StreamSource(...) : StreamSource | provenance | Src:MaD:7 MaD:14 | -| XsltInjectionTest.java:112:5:112:39 | loadExecutablePackage(...) : XsltExecutable | XsltInjectionTest.java:112:5:112:46 | load(...) | provenance | Config Sink:MaD:6 | -| XsltInjectionTest.java:112:36:112:38 | uri : URI | XsltInjectionTest.java:112:5:112:39 | loadExecutablePackage(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:112:36:112:38 | uri : URI | XsltInjectionTest.java:114:33:114:35 | uri : URI | provenance | | -| XsltInjectionTest.java:113:5:113:35 | compilePackage(...) : XsltPackage | XsltInjectionTest.java:113:5:113:42 | link(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:113:5:113:42 | link(...) : XsltExecutable | XsltInjectionTest.java:113:5:113:49 | load(...) | provenance | Config Sink:MaD:6 | -| XsltInjectionTest.java:113:29:113:34 | source : StreamSource | XsltInjectionTest.java:113:5:113:35 | compilePackage(...) : XsltPackage | provenance | Config | -| XsltInjectionTest.java:114:5:114:36 | loadLibraryPackage(...) : XsltPackage | XsltInjectionTest.java:114:5:114:43 | link(...) : XsltExecutable | provenance | Config | -| XsltInjectionTest.java:114:5:114:43 | link(...) : XsltExecutable | XsltInjectionTest.java:114:5:114:50 | load(...) | provenance | Config Sink:MaD:6 | -| XsltInjectionTest.java:114:33:114:35 | uri : URI | XsltInjectionTest.java:114:5:114:36 | loadLibraryPackage(...) : XsltPackage | provenance | Config | -models -| 1 | Sink: javax.xml.transform; Transformer; false; transform; ; ; Argument[this]; xslt-injection; manual | -| 2 | Sink: net.sf.saxon.s9api; Xslt30Transformer; false; applyTemplates; ; ; Argument[this]; xslt-injection; manual | -| 3 | Sink: net.sf.saxon.s9api; Xslt30Transformer; false; callFunction; ; ; Argument[this]; xslt-injection; manual | -| 4 | Sink: net.sf.saxon.s9api; Xslt30Transformer; false; callTemplate; ; ; Argument[this]; xslt-injection; manual | -| 5 | Sink: net.sf.saxon.s9api; Xslt30Transformer; false; transform; ; ; Argument[this]; xslt-injection; manual | -| 6 | Sink: net.sf.saxon.s9api; XsltTransformer; false; transform; ; ; Argument[this]; xslt-injection; manual | -| 7 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 8 | Summary: java.io; InputStreamReader; false; InputStreamReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 9 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 10 | Summary: java.net; Socket; true; getInputStream; (); ; Argument[this]; ReturnValue; taint; df-generated | -| 11 | Summary: java.net; URI; false; URI; (String); ; Argument[0]; Argument[this]; taint; manual | -| 12 | Summary: javax.xml.transform.sax; SAXSource; false; SAXSource; (InputSource); ; Argument[0]; Argument[this]; taint; manual | -| 13 | Summary: javax.xml.transform.sax; SAXSource; false; SAXSource; (XMLReader,InputSource); ; Argument[1]; Argument[this]; taint; manual | -| 14 | Summary: javax.xml.transform.stream; StreamSource; false; StreamSource; ; ; Argument[0]; Argument[this]; taint; manual | -| 15 | Summary: javax.xml.transform; Templates; true; newTransformer; (); ; Argument[this]; ReturnValue; taint; df-generated | -| 16 | Summary: javax.xml.transform; TransformerFactory; true; newTemplates; (Source); ; Argument[0]; ReturnValue; taint; df-generated | -| 17 | Summary: org.xml.sax; InputSource; false; InputSource; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| XsltInjectionTest.java:30:27:30:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:30:44:30:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:31:5:31:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:31:53:31:58 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:35:27:35:90 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:35:44:35:89 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjectionTest.java:35:66:35:88 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:36:5:36:57 | newTemplates(...) : Templates | semmle.label | newTemplates(...) : Templates | -| XsltInjectionTest.java:36:5:36:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:36:51:36:56 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:40:45:40:70 | param : String | semmle.label | param : String | -| XsltInjectionTest.java:42:27:42:66 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:42:44:42:65 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| XsltInjectionTest.java:42:61:42:64 | xslt : String | semmle.label | xslt : String | -| XsltInjectionTest.java:43:5:43:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:43:53:43:58 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:47:24:47:78 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| XsltInjectionTest.java:47:38:47:77 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| XsltInjectionTest.java:47:54:47:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:48:5:48:57 | newTemplates(...) : Templates | semmle.label | newTemplates(...) : Templates | -| XsltInjectionTest.java:48:5:48:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:48:51:48:56 | source : SAXSource | semmle.label | source : SAXSource | -| XsltInjectionTest.java:53:9:53:92 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| XsltInjectionTest.java:53:29:53:91 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| XsltInjectionTest.java:53:45:53:90 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjectionTest.java:53:67:53:89 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:54:5:54:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:54:53:54:58 | source : SAXSource | semmle.label | source : SAXSource | -| XsltInjectionTest.java:59:9:59:99 | new StAXSource(...) : StAXSource | semmle.label | new StAXSource(...) : StAXSource | -| XsltInjectionTest.java:59:24:59:98 | createXMLEventReader(...) : XMLEventReader | semmle.label | createXMLEventReader(...) : XMLEventReader | -| XsltInjectionTest.java:59:75:59:97 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:60:5:60:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:60:53:60:58 | source : StAXSource | semmle.label | source : StAXSource | -| XsltInjectionTest.java:64:25:65:56 | new StAXSource(...) : StAXSource | semmle.label | new StAXSource(...) : StAXSource | -| XsltInjectionTest.java:64:40:65:55 | createXMLStreamReader(...) : XMLStreamReader | semmle.label | createXMLStreamReader(...) : XMLStreamReader | -| XsltInjectionTest.java:65:9:65:54 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| XsltInjectionTest.java:65:31:65:53 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:66:5:66:57 | newTemplates(...) : Templates | semmle.label | newTemplates(...) : Templates | -| XsltInjectionTest.java:66:5:66:74 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:66:51:66:56 | source : StAXSource | semmle.label | source : StAXSource | -| XsltInjectionTest.java:70:24:71:97 | new DOMSource(...) : DOMSource | semmle.label | new DOMSource(...) : DOMSource | -| XsltInjectionTest.java:71:9:71:96 | parse(...) : Document | semmle.label | parse(...) : Document | -| XsltInjectionTest.java:71:73:71:95 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:72:5:72:59 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:72:53:72:58 | source : DOMSource | semmle.label | source : DOMSource | -| XsltInjectionTest.java:76:27:76:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:76:44:76:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:80:5:80:34 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:80:28:80:33 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:84:27:84:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:84:44:84:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:87:5:87:34 | newTransformer(...) | semmle.label | newTransformer(...) | -| XsltInjectionTest.java:87:28:87:33 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:91:27:91:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:91:44:91:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:94:5:94:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:94:5:94:35 | load(...) | semmle.label | load(...) | -| XsltInjectionTest.java:94:22:94:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:95:5:95:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:95:5:95:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:95:22:95:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:96:5:96:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:96:5:96:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:96:22:96:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:97:5:97:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:97:5:97:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:97:22:97:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:98:5:98:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:98:5:98:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:98:22:98:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:99:5:99:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:99:5:99:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:99:22:99:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:100:5:100:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:100:5:100:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:100:22:100:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:101:5:101:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:101:5:101:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:101:22:101:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:102:5:102:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:102:5:102:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:102:22:102:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:103:5:103:28 | compile(...) : XsltExecutable | semmle.label | compile(...) : XsltExecutable | -| XsltInjectionTest.java:103:5:103:37 | load30(...) | semmle.label | load30(...) | -| XsltInjectionTest.java:103:22:103:27 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:107:36:107:61 | param : String | semmle.label | param : String | -| XsltInjectionTest.java:107:64:107:76 | socket : Socket | semmle.label | socket : Socket | -| XsltInjectionTest.java:108:15:108:28 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| XsltInjectionTest.java:108:23:108:27 | param : String | semmle.label | param : String | -| XsltInjectionTest.java:109:27:109:67 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| XsltInjectionTest.java:109:44:109:49 | socket : Socket | semmle.label | socket : Socket | -| XsltInjectionTest.java:109:44:109:66 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XsltInjectionTest.java:112:5:112:39 | loadExecutablePackage(...) : XsltExecutable | semmle.label | loadExecutablePackage(...) : XsltExecutable | -| XsltInjectionTest.java:112:5:112:46 | load(...) | semmle.label | load(...) | -| XsltInjectionTest.java:112:36:112:38 | uri : URI | semmle.label | uri : URI | -| XsltInjectionTest.java:113:5:113:35 | compilePackage(...) : XsltPackage | semmle.label | compilePackage(...) : XsltPackage | -| XsltInjectionTest.java:113:5:113:42 | link(...) : XsltExecutable | semmle.label | link(...) : XsltExecutable | -| XsltInjectionTest.java:113:5:113:49 | load(...) | semmle.label | load(...) | -| XsltInjectionTest.java:113:29:113:34 | source : StreamSource | semmle.label | source : StreamSource | -| XsltInjectionTest.java:114:5:114:36 | loadLibraryPackage(...) : XsltPackage | semmle.label | loadLibraryPackage(...) : XsltPackage | -| XsltInjectionTest.java:114:5:114:43 | link(...) : XsltExecutable | semmle.label | link(...) : XsltExecutable | -| XsltInjectionTest.java:114:5:114:50 | load(...) | semmle.label | load(...) | -| XsltInjectionTest.java:114:33:114:35 | uri : URI | semmle.label | uri : URI | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.qlref deleted file mode 100644 index e32e035cedb4..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-074/XsltInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection/options b/java/ql/test/query-tests/security/CWE-074/XsltInjection/options deleted file mode 100644 index 099749ee58bf..000000000000 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/shiro-core-1.5.2:${testdir}/../../../../stubs/spring-ldap-2.3.2:${testdir}/../../../../stubs/Saxon-HE-9.9.1-7:${testdir}/../../../../stubs/apache-commons-logging-1.2 diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.java b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java similarity index 81% rename from java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.java rename to java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java index d6804d801b79..2bfd02a865c6 100644 --- a/java/ql/test/query-tests/security/CWE-074/XsltInjection/XsltInjectionTest.java +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.java @@ -27,91 +27,91 @@ @Controller public class XsltInjectionTest { public void testStreamSourceInputStream(Socket socket) throws Exception { - StreamSource source = new StreamSource(socket.getInputStream()); // $ Source - TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $ Alert + StreamSource source = new StreamSource(socket.getInputStream()); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStreamSourceReader(Socket socket) throws Exception { - StreamSource source = new StreamSource(new InputStreamReader(socket.getInputStream())); // $ Source - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $ Alert + StreamSource source = new StreamSource(new InputStreamReader(socket.getInputStream())); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } @RequestMapping - public void testStreamSourceInjectedParam(@RequestParam String param) throws Exception { // $ Source + public void testStreamSourceInjectedParam(@RequestParam String param) throws Exception { String xslt = ""; StreamSource source = new StreamSource(new StringReader(xslt)); - TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $ Alert + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testSAXSourceInputStream(Socket socket) throws Exception { - SAXSource source = new SAXSource(new InputSource(socket.getInputStream())); // $ Source - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $ Alert + SAXSource source = new SAXSource(new InputSource(socket.getInputStream())); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } public void testSAXSourceReader(Socket socket) throws Exception { SAXSource source = - new SAXSource(null, new InputSource(new InputStreamReader(socket.getInputStream()))); // $ Source - TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $ Alert + new SAXSource(null, new InputSource(new InputStreamReader(socket.getInputStream()))); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStAXSourceEventReader(Socket socket) throws Exception { StAXSource source = - new StAXSource(XMLInputFactory.newInstance().createXMLEventReader(socket.getInputStream())); // $ Source - TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $ Alert + new StAXSource(XMLInputFactory.newInstance().createXMLEventReader(socket.getInputStream())); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testStAXSourceEventStream(Socket socket) throws Exception { StAXSource source = new StAXSource(XMLInputFactory.newInstance().createXMLStreamReader(null, - new InputStreamReader(socket.getInputStream()))); // $ Source - TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $ Alert + new InputStreamReader(socket.getInputStream()))); + TransformerFactory.newInstance().newTemplates(source).newTransformer().transform(null, null); // $hasXsltInjection } public void testDOMSource(Socket socket) throws Exception { DOMSource source = new DOMSource( - DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(socket.getInputStream())); // $ Source - TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $ Alert + DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(socket.getInputStream())); + TransformerFactory.newInstance().newTransformer(source).transform(null, null); // $hasXsltInjection } public void testDisabledXXE(Socket socket) throws Exception { - StreamSource source = new StreamSource(socket.getInputStream()); // $ Source + StreamSource source = new StreamSource(socket.getInputStream()); TransformerFactory factory = TransformerFactory.newInstance(); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - factory.newTransformer(source).transform(null, null); // $ Alert + factory.newTransformer(source).transform(null, null); // $hasXsltInjection } public void testFeatureSecureProcessingDisabled(Socket socket) throws Exception { - StreamSource source = new StreamSource(socket.getInputStream()); // $ Source + StreamSource source = new StreamSource(socket.getInputStream()); TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false); - factory.newTransformer(source).transform(null, null); // $ Alert + factory.newTransformer(source).transform(null, null); // $hasXsltInjection } public void testSaxon(Socket socket) throws Exception { - StreamSource source = new StreamSource(socket.getInputStream()); // $ Source + StreamSource source = new StreamSource(socket.getInputStream()); XsltCompiler compiler = new Processor(true).newXsltCompiler(); - compiler.compile(source).load().transform(); // $ Alert - compiler.compile(source).load30().transform(null, null); // $ Alert - compiler.compile(source).load30().applyTemplates((Source) null); // $ Alert - compiler.compile(source).load30().applyTemplates((Source) null, null); // $ Alert - compiler.compile(source).load30().applyTemplates((XdmValue) null); // $ Alert - compiler.compile(source).load30().applyTemplates((XdmValue) null, null); // $ Alert - compiler.compile(source).load30().callFunction(null, null); // $ Alert - compiler.compile(source).load30().callFunction(null, null, null); // $ Alert - compiler.compile(source).load30().callTemplate(null); // $ Alert - compiler.compile(source).load30().callTemplate(null, null); // $ Alert + compiler.compile(source).load().transform(); // $hasXsltInjection + compiler.compile(source).load30().transform(null, null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((Source) null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((Source) null, null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((XdmValue) null); // $hasXsltInjection + compiler.compile(source).load30().applyTemplates((XdmValue) null, null); // $hasXsltInjection + compiler.compile(source).load30().callFunction(null, null); // $hasXsltInjection + compiler.compile(source).load30().callFunction(null, null, null); // $hasXsltInjection + compiler.compile(source).load30().callTemplate(null); // $hasXsltInjection + compiler.compile(source).load30().callTemplate(null, null); // $hasXsltInjection } @RequestMapping - public void testSaxonXsltPackage(@RequestParam String param, Socket socket) throws Exception { // $ Source + public void testSaxonXsltPackage(@RequestParam String param, Socket socket) throws Exception { URI uri = new URI(param); - StreamSource source = new StreamSource(socket.getInputStream()); // $ Source + StreamSource source = new StreamSource(socket.getInputStream()); XsltCompiler compiler = new Processor(true).newXsltCompiler(); - compiler.loadExecutablePackage(uri).load().transform(); // $ Alert - compiler.compilePackage(source).link().load().transform(); // $ Alert - compiler.loadLibraryPackage(uri).link().load().transform(); // $ Alert + compiler.loadExecutablePackage(uri).load().transform(); // $hasXsltInjection + compiler.compilePackage(source).link().load().transform(); // $hasXsltInjection + compiler.loadLibraryPackage(uri).link().load().transform(); // $hasXsltInjection } public void testOkFeatureSecureProcessing(Socket socket) throws Exception { diff --git a/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql new file mode 100644 index 000000000000..72c003246bc2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/XsltInjectionTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.XsltInjectionQuery +import utils.test.InlineExpectationsTest + +module HasXsltInjectionTest implements TestSig { + string getARelevantTag() { result = "hasXsltInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasXsltInjection" and + exists(DataFlow::Node sink | XsltInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-074/options b/java/ql/test/query-tests/security/CWE-074/options new file mode 100644 index 000000000000..becd1ca3f587 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-074/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/springframework-5.8.x:${testdir}/../../../stubs/shiro-core-1.5.2:${testdir}/../../../stubs/spring-ldap-2.3.2:${testdir}/../../../stubs/Saxon-HE-9.9.1-7:${testdir}/../../../stubs/apache-commons-logging-1.2 diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JaxXSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JaxXSS.java index 0e096ab94e02..a0719526d979 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JaxXSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JaxXSS.java @@ -12,25 +12,25 @@ public class JaxXSS { @GET - public static Response specificContentType(boolean safeContentType, boolean chainDirectly, boolean contentTypeFirst, String userControlled) { // $ Source + public static Response specificContentType(boolean safeContentType, boolean chainDirectly, boolean contentTypeFirst, String userControlled) { Response.ResponseBuilder builder = Response.ok(); if(!safeContentType) { if(chainDirectly) { if(contentTypeFirst) - return builder.type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ Alert + return builder.type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ xss else - return builder.entity(userControlled).type(MediaType.TEXT_HTML).build(); // $ Alert + return builder.entity(userControlled).type(MediaType.TEXT_HTML).build(); // $ xss } else { if(contentTypeFirst) { Response.ResponseBuilder builder2 = builder.type(MediaType.TEXT_HTML); - return builder2.entity(userControlled).build(); // $ Alert + return builder2.entity(userControlled).build(); // $ xss } else { Response.ResponseBuilder builder2 = builder.entity(userControlled); - return builder2.type(MediaType.TEXT_HTML).build(); // $ Alert + return builder2.type(MediaType.TEXT_HTML).build(); // $ xss } } } @@ -56,7 +56,7 @@ public static Response specificContentType(boolean safeContentType, boolean chai } @GET - public static Response specificContentTypeSetterMethods(int route, boolean safeContentType, String userControlled) { // $ Source + public static Response specificContentTypeSetterMethods(int route, boolean safeContentType, String userControlled) { // Test the remarkably many routes to setting a content-type in Jax-RS, besides the ResponseBuilder.entity method used above: @@ -105,39 +105,39 @@ else if(route == 8) { else { if(route == 0) { // via ok, as a string literal: - return Response.ok("text/html").entity(userControlled).build(); // $ Alert + return Response.ok("text/html").entity(userControlled).build(); // $ xss } else if(route == 1) { // via ok, as a string constant: - return Response.ok(MediaType.TEXT_HTML).entity(userControlled).build(); // $ Alert + return Response.ok(MediaType.TEXT_HTML).entity(userControlled).build(); // $ xss } else if(route == 2) { // via ok, as a MediaType constant: - return Response.ok(MediaType.TEXT_HTML_TYPE).entity(userControlled).build(); // $ Alert + return Response.ok(MediaType.TEXT_HTML_TYPE).entity(userControlled).build(); // $ xss } else if(route == 3) { // via ok, as a Variant, via constructor: - return Response.ok(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).entity(userControlled).build(); // $ Alert + return Response.ok(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).entity(userControlled).build(); // $ xss } else if(route == 4) { // via ok, as a Variant, via static method: - return Response.ok(Variant.mediaTypes(MediaType.TEXT_HTML_TYPE).build()).entity(userControlled).build(); // $ Alert + return Response.ok(Variant.mediaTypes(MediaType.TEXT_HTML_TYPE).build()).entity(userControlled).build(); // $ xss } else if(route == 5) { // via ok, as a Variant, via instance method: - return Response.ok(Variant.languages(Locale.UK).mediaTypes(MediaType.TEXT_HTML_TYPE).build()).entity(userControlled).build(); // $ Alert + return Response.ok(Variant.languages(Locale.UK).mediaTypes(MediaType.TEXT_HTML_TYPE).build()).entity(userControlled).build(); // $ xss } else if(route == 6) { // via builder variant, before entity: - return Response.ok().variant(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).entity(userControlled).build(); // $ Alert + return Response.ok().variant(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).entity(userControlled).build(); // $ xss } else if(route == 7) { // via builder variant, after entity: - return Response.ok().entity(userControlled).variant(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).build(); // $ Alert + return Response.ok().entity(userControlled).variant(new Variant(MediaType.TEXT_HTML_TYPE, "language", "encoding")).build(); // $ xss } else if(route == 8) { // provide entity via ok, then content-type via builder: - return Response.ok(userControlled).type(MediaType.TEXT_HTML_TYPE).build(); // $ Alert + return Response.ok(userControlled).type(MediaType.TEXT_HTML_TYPE).build(); // $ xss } } @@ -161,28 +161,28 @@ public static Response methodContentTypeSafeStringLiteral(String userControlled) } @GET @Produces(MediaType.TEXT_HTML) - public static Response methodContentTypeUnsafe(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public static Response methodContentTypeUnsafe(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @POST @Produces(MediaType.TEXT_HTML) - public static Response methodContentTypeUnsafePost(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public static Response methodContentTypeUnsafePost(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET @Produces("text/html") - public static Response methodContentTypeUnsafeStringLiteral(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public static Response methodContentTypeUnsafeStringLiteral(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET @Produces({MediaType.TEXT_HTML, MediaType.APPLICATION_JSON}) - public static Response methodContentTypeMaybeSafe(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public static Response methodContentTypeMaybeSafe(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET @Produces(MediaType.APPLICATION_JSON) - public static Response methodContentTypeSafeOverriddenWithUnsafe(String userControlled) { // $ Source - return Response.ok().type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ Alert + public static Response methodContentTypeSafeOverriddenWithUnsafe(String userControlled) { + return Response.ok().type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ xss } @GET @Produces(MediaType.TEXT_HTML) @@ -204,13 +204,13 @@ public String testDirectReturn(String userControlled) { } @GET @Produces({"text/html"}) - public Response overridesWithUnsafe(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public Response overridesWithUnsafe(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET - public Response overridesWithUnsafe2(String userControlled) { // $ Source - return Response.ok().type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ Alert + public Response overridesWithUnsafe2(String userControlled) { + return Response.ok().type(MediaType.TEXT_HTML).entity(userControlled).build(); // $ xss } } @@ -218,13 +218,13 @@ public Response overridesWithUnsafe2(String userControlled) { // $ Source @Produces({"text/html"}) public static class ClassContentTypeUnsafe { @GET - public Response test(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public Response test(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET - public String testDirectReturn(String userControlled) { // $ Source - return userControlled; // $ Alert + public String testDirectReturn(String userControlled) { + return userControlled; // $ xss } @GET @Produces({"application/json"}) @@ -239,13 +239,13 @@ public Response overridesWithSafe2(String userControlled) { } @GET - public static Response entityWithNoMediaType(String userControlled) { // $ Source - return Response.ok(userControlled).build(); // $ Alert + public static Response entityWithNoMediaType(String userControlled) { + return Response.ok(userControlled).build(); // $ xss } @GET - public static String stringWithNoMediaType(String userControlled) { // $ Source - return userControlled; // $ Alert + public static String stringWithNoMediaType(String userControlled) { + return userControlled; // $ xss } } diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java index f3efab3ddfe3..38df344dff26 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/JsfXSS.java @@ -18,7 +18,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws { super.encodeBegin(facesContext, component); - Map requestParameters = facesContext.getExternalContext().getRequestParameterMap(); // $ Source + Map requestParameters = facesContext.getExternalContext().getRequestParameterMap(); String windowId = requestParameters.get("window_id"); ResponseWriter writer = facesContext.getResponseWriter(); @@ -26,7 +26,7 @@ public void encodeBegin(FacesContext facesContext, UIComponent component) throws writer.write("(function(){"); writer.write("dswh.init('" + windowId + "','" + "......" + "'," - + -1 + ",{"); // $ Alert + + -1 + ",{"); // $ xss writer.write("});"); writer.write("})();"); writer.write(""); @@ -57,13 +57,13 @@ public void testAllSources(FacesContext facesContext) throws IOException { ExternalContext ec = facesContext.getExternalContext(); ResponseWriter writer = facesContext.getResponseWriter(); - writer.write(ec.getRequestParameterMap().keySet().iterator().next()); // $ Alert - writer.write(ec.getRequestParameterNames().next()); // $ Alert - writer.write(ec.getRequestParameterValuesMap().get("someKey")[0]); // $ Alert - writer.write(ec.getRequestParameterValuesMap().keySet().iterator().next()); // $ Alert - writer.write(ec.getRequestPathInfo()); // $ Alert - writer.write(((Cookie)ec.getRequestCookieMap().get("someKey")).getName()); // $ Alert - writer.write(ec.getRequestHeaderMap().get("someKey")); // $ Alert - writer.write(ec.getRequestHeaderValuesMap().get("someKey")[0]); // $ Alert + writer.write(ec.getRequestParameterMap().keySet().iterator().next()); // $ xss + writer.write(ec.getRequestParameterNames().next()); // $ xss + writer.write(ec.getRequestParameterValuesMap().get("someKey")[0]); // $ xss + writer.write(ec.getRequestParameterValuesMap().keySet().iterator().next()); // $ xss + writer.write(ec.getRequestPathInfo()); // $ xss + writer.write(((Cookie)ec.getRequestCookieMap().get("someKey")).getName()); // $ xss + writer.write(ec.getRequestHeaderMap().get("someKey")); // $ xss + writer.write(ec.getRequestHeaderValuesMap().get("someKey")[0]); // $ xss } } diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/SpringXSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/SpringXSS.java index fd3a26bcf105..ff4957f3788a 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/SpringXSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/SpringXSS.java @@ -13,17 +13,17 @@ public class SpringXSS { @GetMapping - public static ResponseEntity specificContentType(boolean safeContentType, boolean chainDirectly, String userControlled) { // $ Source + public static ResponseEntity specificContentType(boolean safeContentType, boolean chainDirectly, String userControlled) { ResponseEntity.BodyBuilder builder = ResponseEntity.ok(); if(!safeContentType) { if(chainDirectly) { - return builder.contentType(MediaType.TEXT_HTML).body(userControlled); // $ Alert + return builder.contentType(MediaType.TEXT_HTML).body(userControlled); // $ xss } else { ResponseEntity.BodyBuilder builder2 = builder.contentType(MediaType.TEXT_HTML); - return builder2.body(userControlled); // $ Alert + return builder2.body(userControlled); // $ xss } } else { @@ -59,23 +59,23 @@ public static ResponseEntity methodContentTypeSafeStringLiteral(String u } @GetMapping(value = "/xyz", produces = MediaType.TEXT_HTML_VALUE) - public static ResponseEntity methodContentTypeUnsafe(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public static ResponseEntity methodContentTypeUnsafe(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/xyz", produces = "text/html") - public static ResponseEntity methodContentTypeUnsafeStringLiteral(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public static ResponseEntity methodContentTypeUnsafeStringLiteral(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/xyz", produces = {MediaType.TEXT_HTML_VALUE, MediaType.APPLICATION_JSON_VALUE}) - public static ResponseEntity methodContentTypeMaybeSafe(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public static ResponseEntity methodContentTypeMaybeSafe(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/xyz", produces = MediaType.APPLICATION_JSON_VALUE) - public static ResponseEntity methodContentTypeSafeOverriddenWithUnsafe(String userControlled) { // $ Source - return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(userControlled); // $ Alert + public static ResponseEntity methodContentTypeSafeOverriddenWithUnsafe(String userControlled) { + return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(userControlled); // $ xss } @GetMapping(value = "/xyz", produces = MediaType.TEXT_HTML_VALUE) @@ -84,17 +84,17 @@ public static ResponseEntity methodContentTypeUnsafeOverriddenWithSafe(S } @GetMapping(value = "/xyz", produces = {"text/html", "application/json"}) - public static ResponseEntity methodContentTypeMaybeSafeStringLiterals(String userControlled, int constructionMethod) { // $ Source + public static ResponseEntity methodContentTypeMaybeSafeStringLiterals(String userControlled, int constructionMethod) { // Also try out some alternative constructors for the ResponseEntity: switch(constructionMethod) { case 0: - return ResponseEntity.ok(userControlled); // $ Alert + return ResponseEntity.ok(userControlled); // $ xss case 1: - return ResponseEntity.of(Optional.of(userControlled)); // $ Alert + return ResponseEntity.of(Optional.of(userControlled)); // $ xss case 2: - return ResponseEntity.ok().body(userControlled); // $ Alert + return ResponseEntity.ok().body(userControlled); // $ xss case 3: - return new ResponseEntity(userControlled, HttpStatus.OK); // $ Alert + return new ResponseEntity(userControlled, HttpStatus.OK); // $ xss default: return null; } @@ -114,13 +114,13 @@ public String testDirectReturn(String userControlled) { } @GetMapping(value = "/xyz", produces = {"text/html"}) - public ResponseEntity overridesWithUnsafe(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public ResponseEntity overridesWithUnsafe(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/abc") - public ResponseEntity overridesWithUnsafe2(String userControlled) { // $ Source - return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(userControlled); // $ Alert + public ResponseEntity overridesWithUnsafe2(String userControlled) { + return ResponseEntity.ok().contentType(MediaType.TEXT_HTML).body(userControlled); // $ xss } } @@ -128,13 +128,13 @@ public ResponseEntity overridesWithUnsafe2(String userControlled) { // $ @RequestMapping(produces = {"text/html"}) private static class ClassContentTypeUnsafe { @GetMapping(value = "/abc") - public ResponseEntity test(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public ResponseEntity test(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/abc") - public String testDirectReturn(String userControlled) { // $ Source - return userControlled; // $ Alert + public String testDirectReturn(String userControlled) { + return userControlled; // $ xss } @GetMapping(value = "/xyz", produces = {"application/json"}) @@ -149,13 +149,13 @@ public ResponseEntity overridesWithSafe2(String userControlled) { } @GetMapping(value = "/abc") - public static ResponseEntity entityWithNoMediaType(String userControlled) { // $ Source - return ResponseEntity.ok(userControlled); // $ Alert + public static ResponseEntity entityWithNoMediaType(String userControlled) { + return ResponseEntity.ok(userControlled); // $ xss } @GetMapping(value = "/abc") - public static String stringWithNoMediaType(String userControlled) { // $ Source - return userControlled; // $ Alert + public static String stringWithNoMediaType(String userControlled) { + return userControlled; // $ xss } @GetMapping(value = "/abc") diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected index fcd7fd0ff18c..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.expected @@ -1,336 +0,0 @@ -#select -| JaxXSS.java:22:59:22:72 | userControlled | JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:22:59:22:72 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:15:120:15:140 | userControlled | user-provided value | -| JaxXSS.java:24:33:24:46 | userControlled | JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:24:33:24:46 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:15:120:15:140 | userControlled | user-provided value | -| JaxXSS.java:29:34:29:47 | userControlled | JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:29:34:29:47 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:15:120:15:140 | userControlled | user-provided value | -| JaxXSS.java:33:18:33:59 | build(...) | JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:33:18:33:59 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:15:120:15:140 | userControlled | user-provided value | -| JaxXSS.java:108:16:108:70 | build(...) | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:108:16:108:70 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:112:16:112:78 | build(...) | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:112:16:112:78 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:116:16:116:83 | build(...) | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:116:16:116:83 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:120:98:120:111 | userControlled | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:120:98:120:111 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:124:89:124:102 | userControlled | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:124:89:124:102 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:128:110:128:123 | userControlled | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:128:110:128:123 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:132:108:132:121 | userControlled | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:132:108:132:121 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:136:37:136:50 | userControlled | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:136:37:136:50 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:140:16:140:81 | build(...) | JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:140:16:140:81 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:59:95:59:115 | userControlled | user-provided value | -| JaxXSS.java:165:12:165:46 | build(...) | JaxXSS.java:164:50:164:70 | userControlled : String | JaxXSS.java:165:12:165:46 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:164:50:164:70 | userControlled | user-provided value | -| JaxXSS.java:170:12:170:46 | build(...) | JaxXSS.java:169:54:169:74 | userControlled : String | JaxXSS.java:170:12:170:46 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:169:54:169:74 | userControlled | user-provided value | -| JaxXSS.java:175:12:175:46 | build(...) | JaxXSS.java:174:63:174:83 | userControlled : String | JaxXSS.java:175:12:175:46 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:174:63:174:83 | userControlled | user-provided value | -| JaxXSS.java:180:12:180:46 | build(...) | JaxXSS.java:179:53:179:73 | userControlled : String | JaxXSS.java:180:12:180:46 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:179:53:179:73 | userControlled | user-provided value | -| JaxXSS.java:185:59:185:72 | userControlled | JaxXSS.java:184:68:184:88 | userControlled : String | JaxXSS.java:185:59:185:72 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:184:68:184:88 | userControlled | user-provided value | -| JaxXSS.java:208:14:208:48 | build(...) | JaxXSS.java:207:41:207:61 | userControlled : String | JaxXSS.java:208:14:208:48 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:207:41:207:61 | userControlled | user-provided value | -| JaxXSS.java:213:61:213:74 | userControlled | JaxXSS.java:212:42:212:62 | userControlled : String | JaxXSS.java:213:61:213:74 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:212:42:212:62 | userControlled | user-provided value | -| JaxXSS.java:222:14:222:48 | build(...) | JaxXSS.java:221:26:221:46 | userControlled : String | JaxXSS.java:222:14:222:48 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:221:26:221:46 | userControlled | user-provided value | -| JaxXSS.java:227:14:227:27 | userControlled | JaxXSS.java:226:36:226:56 | userControlled : String | JaxXSS.java:227:14:227:27 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:226:36:226:56 | userControlled | user-provided value | -| JaxXSS.java:243:12:243:46 | build(...) | JaxXSS.java:242:48:242:68 | userControlled : String | JaxXSS.java:243:12:243:46 | build(...) | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:242:48:242:68 | userControlled | user-provided value | -| JaxXSS.java:248:12:248:25 | userControlled | JaxXSS.java:247:46:247:66 | userControlled : String | JaxXSS.java:248:12:248:25 | userControlled | Cross-site scripting vulnerability due to a $@. | JaxXSS.java:247:46:247:66 | userControlled | user-provided value | -| JsfXSS.java:27:22:29:27 | ... + ... | JsfXSS.java:21:50:21:107 | getRequestParameterMap(...) : Map | JsfXSS.java:27:22:29:27 | ... + ... | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:21:50:21:107 | getRequestParameterMap(...) | user-provided value | -| JsfXSS.java:60:22:60:75 | next(...) | JsfXSS.java:60:22:60:48 | getRequestParameterMap(...) : Map | JsfXSS.java:60:22:60:75 | next(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:60:22:60:48 | getRequestParameterMap(...) | user-provided value | -| JsfXSS.java:61:22:61:57 | next(...) | JsfXSS.java:61:22:61:50 | getRequestParameterNames(...) : Iterator | JsfXSS.java:61:22:61:57 | next(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:61:22:61:50 | getRequestParameterNames(...) | user-provided value | -| JsfXSS.java:62:22:62:72 | ...[...] | JsfXSS.java:62:22:62:54 | getRequestParameterValuesMap(...) : Map | JsfXSS.java:62:22:62:72 | ...[...] | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:62:22:62:54 | getRequestParameterValuesMap(...) | user-provided value | -| JsfXSS.java:63:22:63:81 | next(...) | JsfXSS.java:63:22:63:54 | getRequestParameterValuesMap(...) : Map | JsfXSS.java:63:22:63:81 | next(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:63:22:63:54 | getRequestParameterValuesMap(...) | user-provided value | -| JsfXSS.java:64:22:64:44 | getRequestPathInfo(...) | JsfXSS.java:64:22:64:44 | getRequestPathInfo(...) | JsfXSS.java:64:22:64:44 | getRequestPathInfo(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:64:22:64:44 | getRequestPathInfo(...) | user-provided value | -| JsfXSS.java:65:22:65:80 | getName(...) | JsfXSS.java:65:22:65:80 | getName(...) | JsfXSS.java:65:22:65:80 | getName(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:65:22:65:80 | getName(...) | user-provided value | -| JsfXSS.java:66:22:66:60 | get(...) | JsfXSS.java:66:22:66:45 | getRequestHeaderMap(...) : Map | JsfXSS.java:66:22:66:60 | get(...) | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:66:22:66:45 | getRequestHeaderMap(...) | user-provided value | -| JsfXSS.java:67:22:67:69 | ...[...] | JsfXSS.java:67:22:67:51 | getRequestHeaderValuesMap(...) : Map | JsfXSS.java:67:22:67:69 | ...[...] | Cross-site scripting vulnerability due to a $@. | JsfXSS.java:67:22:67:51 | getRequestHeaderValuesMap(...) | user-provided value | -| SpringXSS.java:22:62:22:75 | userControlled | SpringXSS.java:16:108:16:128 | userControlled : String | SpringXSS.java:22:62:22:75 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:16:108:16:128 | userControlled | user-provided value | -| SpringXSS.java:26:30:26:43 | userControlled | SpringXSS.java:16:108:16:128 | userControlled : String | SpringXSS.java:26:30:26:43 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:16:108:16:128 | userControlled | user-provided value | -| SpringXSS.java:63:12:63:44 | ok(...) | SpringXSS.java:62:64:62:84 | userControlled : String | SpringXSS.java:63:12:63:44 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:62:64:62:84 | userControlled | user-provided value | -| SpringXSS.java:68:12:68:44 | ok(...) | SpringXSS.java:67:77:67:97 | userControlled : String | SpringXSS.java:68:12:68:44 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:67:77:67:97 | userControlled | user-provided value | -| SpringXSS.java:73:12:73:44 | ok(...) | SpringXSS.java:72:67:72:87 | userControlled : String | SpringXSS.java:73:12:73:44 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:72:67:72:87 | userControlled | user-provided value | -| SpringXSS.java:78:70:78:83 | userControlled | SpringXSS.java:77:82:77:102 | userControlled : String | SpringXSS.java:78:70:78:83 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:77:82:77:102 | userControlled | user-provided value | -| SpringXSS.java:91:14:91:46 | ok(...) | SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:91:14:91:46 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:87:81:87:101 | userControlled | user-provided value | -| SpringXSS.java:93:14:93:59 | of(...) | SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:93:14:93:59 | of(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:87:81:87:101 | userControlled | user-provided value | -| SpringXSS.java:95:14:95:53 | body(...) | SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:95:14:95:53 | body(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:87:81:87:101 | userControlled | user-provided value | -| SpringXSS.java:97:14:97:70 | new ResponseEntity(...) | SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:97:14:97:70 | new ResponseEntity(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:87:81:87:101 | userControlled | user-provided value | -| SpringXSS.java:118:14:118:46 | ok(...) | SpringXSS.java:117:55:117:75 | userControlled : String | SpringXSS.java:118:14:118:46 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:117:55:117:75 | userControlled | user-provided value | -| SpringXSS.java:123:72:123:85 | userControlled | SpringXSS.java:122:56:122:76 | userControlled : String | SpringXSS.java:123:72:123:85 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:122:56:122:76 | userControlled | user-provided value | -| SpringXSS.java:132:14:132:46 | ok(...) | SpringXSS.java:131:40:131:60 | userControlled : String | SpringXSS.java:132:14:132:46 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:131:40:131:60 | userControlled | user-provided value | -| SpringXSS.java:137:14:137:27 | userControlled | SpringXSS.java:136:36:136:56 | userControlled : String | SpringXSS.java:137:14:137:27 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:136:36:136:56 | userControlled | user-provided value | -| SpringXSS.java:153:12:153:44 | ok(...) | SpringXSS.java:152:62:152:82 | userControlled : String | SpringXSS.java:153:12:153:44 | ok(...) | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:152:62:152:82 | userControlled | user-provided value | -| SpringXSS.java:158:12:158:25 | userControlled | SpringXSS.java:157:46:157:66 | userControlled : String | SpringXSS.java:158:12:158:25 | userControlled | Cross-site scripting vulnerability due to a $@. | SpringXSS.java:157:46:157:66 | userControlled | user-provided value | -| XSS.java:19:12:19:77 | ... + ... | XSS.java:19:28:19:55 | getParameter(...) : String | XSS.java:19:12:19:77 | ... + ... | Cross-site scripting vulnerability due to a $@. | XSS.java:19:28:19:55 | getParameter(...) | user-provided value | -| XSS.java:34:30:34:87 | ... + ... | XSS.java:34:67:34:87 | getPathInfo(...) : String | XSS.java:34:30:34:87 | ... + ... | Cross-site scripting vulnerability due to a $@. | XSS.java:34:67:34:87 | getPathInfo(...) | user-provided value | -| XSS.java:37:36:37:67 | getBytes(...) | XSS.java:37:36:37:56 | getPathInfo(...) : String | XSS.java:37:36:37:67 | getBytes(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:37:36:37:56 | getPathInfo(...) | user-provided value | -| XSS.java:83:33:83:53 | getPathInfo(...) | XSS.java:83:33:83:53 | getPathInfo(...) | XSS.java:83:33:83:53 | getPathInfo(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:83:33:83:53 | getPathInfo(...) | user-provided value | -| XSS.java:88:33:88:53 | getPathInfo(...) | XSS.java:88:33:88:53 | getPathInfo(...) | XSS.java:88:33:88:53 | getPathInfo(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:88:33:88:53 | getPathInfo(...) | user-provided value | -| XSS.java:93:33:93:53 | getPathInfo(...) | XSS.java:93:33:93:53 | getPathInfo(...) | XSS.java:93:33:93:53 | getPathInfo(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:93:33:93:53 | getPathInfo(...) | user-provided value | -| XSS.java:100:39:100:70 | getBytes(...) | XSS.java:100:39:100:59 | getPathInfo(...) : String | XSS.java:100:39:100:70 | getBytes(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:100:39:100:59 | getPathInfo(...) | user-provided value | -| XSS.java:105:39:105:70 | getBytes(...) | XSS.java:105:39:105:59 | getPathInfo(...) : String | XSS.java:105:39:105:70 | getBytes(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:105:39:105:59 | getPathInfo(...) | user-provided value | -| XSS.java:110:39:110:70 | getBytes(...) | XSS.java:110:39:110:59 | getPathInfo(...) : String | XSS.java:110:39:110:70 | getBytes(...) | Cross-site scripting vulnerability due to a $@. | XSS.java:110:39:110:59 | getPathInfo(...) | user-provided value | -edges -| JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:22:59:22:72 | userControlled | provenance | | -| JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:24:33:24:46 | userControlled | provenance | | -| JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:29:34:29:47 | userControlled | provenance | | -| JaxXSS.java:15:120:15:140 | userControlled : String | JaxXSS.java:32:62:32:75 | userControlled : String | provenance | | -| JaxXSS.java:32:47:32:76 | entity(...) : ResponseBuilder | JaxXSS.java:33:18:33:25 | builder2 : ResponseBuilder | provenance | | -| JaxXSS.java:32:62:32:75 | userControlled : String | JaxXSS.java:32:47:32:76 | entity(...) : ResponseBuilder | provenance | MaD:17+MaD:18 | -| JaxXSS.java:33:18:33:25 | builder2 : ResponseBuilder | JaxXSS.java:33:18:33:51 | type(...) : ResponseBuilder | provenance | MaD:19 | -| JaxXSS.java:33:18:33:51 | type(...) : ResponseBuilder | JaxXSS.java:33:18:33:59 | build(...) | provenance | MaD:16 | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:108:48:108:61 | userControlled : String | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:112:56:112:69 | userControlled : String | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:116:61:116:74 | userControlled : String | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:120:98:120:111 | userControlled | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:124:89:124:102 | userControlled | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:128:110:128:123 | userControlled | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:132:108:132:121 | userControlled | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:136:37:136:50 | userControlled | provenance | | -| JaxXSS.java:59:95:59:115 | userControlled : String | JaxXSS.java:140:28:140:41 | userControlled : String | provenance | | -| JaxXSS.java:108:16:108:62 | entity(...) : ResponseBuilder | JaxXSS.java:108:16:108:70 | build(...) | provenance | MaD:16 | -| JaxXSS.java:108:48:108:61 | userControlled : String | JaxXSS.java:108:16:108:62 | entity(...) : ResponseBuilder | provenance | MaD:17+MaD:18 | -| JaxXSS.java:112:16:112:70 | entity(...) : ResponseBuilder | JaxXSS.java:112:16:112:78 | build(...) | provenance | MaD:16 | -| JaxXSS.java:112:56:112:69 | userControlled : String | JaxXSS.java:112:16:112:70 | entity(...) : ResponseBuilder | provenance | MaD:17+MaD:18 | -| JaxXSS.java:116:16:116:75 | entity(...) : ResponseBuilder | JaxXSS.java:116:16:116:83 | build(...) | provenance | MaD:16 | -| JaxXSS.java:116:61:116:74 | userControlled : String | JaxXSS.java:116:16:116:75 | entity(...) : ResponseBuilder | provenance | MaD:17+MaD:18 | -| JaxXSS.java:140:16:140:42 | ok(...) : ResponseBuilder | JaxXSS.java:140:16:140:73 | type(...) : ResponseBuilder | provenance | MaD:19 | -| JaxXSS.java:140:16:140:73 | type(...) : ResponseBuilder | JaxXSS.java:140:16:140:81 | build(...) | provenance | MaD:16 | -| JaxXSS.java:140:28:140:41 | userControlled : String | JaxXSS.java:140:16:140:42 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:164:50:164:70 | userControlled : String | JaxXSS.java:165:24:165:37 | userControlled : String | provenance | | -| JaxXSS.java:165:12:165:38 | ok(...) : ResponseBuilder | JaxXSS.java:165:12:165:46 | build(...) | provenance | MaD:16 | -| JaxXSS.java:165:24:165:37 | userControlled : String | JaxXSS.java:165:12:165:38 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:169:54:169:74 | userControlled : String | JaxXSS.java:170:24:170:37 | userControlled : String | provenance | | -| JaxXSS.java:170:12:170:38 | ok(...) : ResponseBuilder | JaxXSS.java:170:12:170:46 | build(...) | provenance | MaD:16 | -| JaxXSS.java:170:24:170:37 | userControlled : String | JaxXSS.java:170:12:170:38 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:174:63:174:83 | userControlled : String | JaxXSS.java:175:24:175:37 | userControlled : String | provenance | | -| JaxXSS.java:175:12:175:38 | ok(...) : ResponseBuilder | JaxXSS.java:175:12:175:46 | build(...) | provenance | MaD:16 | -| JaxXSS.java:175:24:175:37 | userControlled : String | JaxXSS.java:175:12:175:38 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:179:53:179:73 | userControlled : String | JaxXSS.java:180:24:180:37 | userControlled : String | provenance | | -| JaxXSS.java:180:12:180:38 | ok(...) : ResponseBuilder | JaxXSS.java:180:12:180:46 | build(...) | provenance | MaD:16 | -| JaxXSS.java:180:24:180:37 | userControlled : String | JaxXSS.java:180:12:180:38 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:184:68:184:88 | userControlled : String | JaxXSS.java:185:59:185:72 | userControlled | provenance | | -| JaxXSS.java:207:41:207:61 | userControlled : String | JaxXSS.java:208:26:208:39 | userControlled : String | provenance | | -| JaxXSS.java:208:14:208:40 | ok(...) : ResponseBuilder | JaxXSS.java:208:14:208:48 | build(...) | provenance | MaD:16 | -| JaxXSS.java:208:26:208:39 | userControlled : String | JaxXSS.java:208:14:208:40 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:212:42:212:62 | userControlled : String | JaxXSS.java:213:61:213:74 | userControlled | provenance | | -| JaxXSS.java:221:26:221:46 | userControlled : String | JaxXSS.java:222:26:222:39 | userControlled : String | provenance | | -| JaxXSS.java:222:14:222:40 | ok(...) : ResponseBuilder | JaxXSS.java:222:14:222:48 | build(...) | provenance | MaD:16 | -| JaxXSS.java:222:26:222:39 | userControlled : String | JaxXSS.java:222:14:222:40 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:226:36:226:56 | userControlled : String | JaxXSS.java:227:14:227:27 | userControlled | provenance | | -| JaxXSS.java:242:48:242:68 | userControlled : String | JaxXSS.java:243:24:243:37 | userControlled : String | provenance | | -| JaxXSS.java:243:12:243:38 | ok(...) : ResponseBuilder | JaxXSS.java:243:12:243:46 | build(...) | provenance | MaD:16 | -| JaxXSS.java:243:24:243:37 | userControlled : String | JaxXSS.java:243:12:243:38 | ok(...) : ResponseBuilder | provenance | MaD:20 | -| JaxXSS.java:247:46:247:66 | userControlled : String | JaxXSS.java:248:12:248:25 | userControlled | provenance | | -| JsfXSS.java:21:50:21:107 | getRequestParameterMap(...) : Map | JsfXSS.java:22:27:22:43 | requestParameters : Map | provenance | Src:MaD:5 | -| JsfXSS.java:22:27:22:43 | requestParameters : Map | JsfXSS.java:22:27:22:60 | get(...) : String | provenance | MaD:13 | -| JsfXSS.java:22:27:22:60 | get(...) : String | JsfXSS.java:27:22:29:27 | ... + ... | provenance | Sink:MaD:2 | -| JsfXSS.java:60:22:60:48 | getRequestParameterMap(...) : Map | JsfXSS.java:60:22:60:57 | keySet(...) : Set [] : Object | provenance | Src:MaD:5 MaD:14 | -| JsfXSS.java:60:22:60:57 | keySet(...) : Set [] : Object | JsfXSS.java:60:22:60:68 | iterator(...) : Iterator [] : Object | provenance | MaD:10 | -| JsfXSS.java:60:22:60:68 | iterator(...) : Iterator [] : Object | JsfXSS.java:60:22:60:75 | next(...) | provenance | MaD:12 Sink:MaD:2 | -| JsfXSS.java:61:22:61:50 | getRequestParameterNames(...) : Iterator | JsfXSS.java:61:22:61:57 | next(...) | provenance | Src:MaD:6 MaD:12 Sink:MaD:2 | -| JsfXSS.java:62:22:62:54 | getRequestParameterValuesMap(...) : Map | JsfXSS.java:62:22:62:69 | get(...) : String[] | provenance | Src:MaD:7 MaD:13 | -| JsfXSS.java:62:22:62:69 | get(...) : String[] | JsfXSS.java:62:22:62:72 | ...[...] | provenance | Sink:MaD:2 | -| JsfXSS.java:63:22:63:54 | getRequestParameterValuesMap(...) : Map | JsfXSS.java:63:22:63:63 | keySet(...) : Set [] : Object | provenance | Src:MaD:7 MaD:14 | -| JsfXSS.java:63:22:63:63 | keySet(...) : Set [] : Object | JsfXSS.java:63:22:63:74 | iterator(...) : Iterator [] : Object | provenance | MaD:10 | -| JsfXSS.java:63:22:63:74 | iterator(...) : Iterator [] : Object | JsfXSS.java:63:22:63:81 | next(...) | provenance | MaD:12 Sink:MaD:2 | -| JsfXSS.java:66:22:66:45 | getRequestHeaderMap(...) : Map | JsfXSS.java:66:22:66:60 | get(...) | provenance | Src:MaD:3 MaD:13 Sink:MaD:2 | -| JsfXSS.java:67:22:67:51 | getRequestHeaderValuesMap(...) : Map | JsfXSS.java:67:22:67:66 | get(...) : String[] | provenance | Src:MaD:4 MaD:13 | -| JsfXSS.java:67:22:67:66 | get(...) : String[] | JsfXSS.java:67:22:67:69 | ...[...] | provenance | Sink:MaD:2 | -| SpringXSS.java:16:108:16:128 | userControlled : String | SpringXSS.java:22:62:22:75 | userControlled | provenance | | -| SpringXSS.java:16:108:16:128 | userControlled : String | SpringXSS.java:26:30:26:43 | userControlled | provenance | | -| SpringXSS.java:62:64:62:84 | userControlled : String | SpringXSS.java:63:12:63:44 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:62:64:62:84 | userControlled : String | SpringXSS.java:63:30:63:43 | userControlled : String | provenance | | -| SpringXSS.java:63:30:63:43 | userControlled : String | SpringXSS.java:63:12:63:44 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:67:77:67:97 | userControlled : String | SpringXSS.java:68:12:68:44 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:67:77:67:97 | userControlled : String | SpringXSS.java:68:30:68:43 | userControlled : String | provenance | | -| SpringXSS.java:68:30:68:43 | userControlled : String | SpringXSS.java:68:12:68:44 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:72:67:72:87 | userControlled : String | SpringXSS.java:73:12:73:44 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:72:67:72:87 | userControlled : String | SpringXSS.java:73:30:73:43 | userControlled : String | provenance | | -| SpringXSS.java:73:30:73:43 | userControlled : String | SpringXSS.java:73:12:73:44 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:77:82:77:102 | userControlled : String | SpringXSS.java:78:70:78:83 | userControlled | provenance | | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:91:14:91:46 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:91:32:91:45 | userControlled : String | provenance | | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:93:44:93:57 | userControlled : String | provenance | | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:95:14:95:53 | body(...) | provenance | SpringResponseEntityBodyBuilder | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:95:39:95:52 | userControlled : String | provenance | | -| SpringXSS.java:87:81:87:101 | userControlled : String | SpringXSS.java:97:41:97:54 | userControlled : String | provenance | | -| SpringXSS.java:91:32:91:45 | userControlled : String | SpringXSS.java:91:14:91:46 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:93:32:93:58 | of(...) : Optional [] : String | SpringXSS.java:93:14:93:59 | of(...) | provenance | MaD:23 | -| SpringXSS.java:93:44:93:57 | userControlled : String | SpringXSS.java:93:32:93:58 | of(...) : Optional [] : String | provenance | MaD:15 | -| SpringXSS.java:95:39:95:52 | userControlled : String | SpringXSS.java:95:14:95:53 | body(...) | provenance | MaD:21 | -| SpringXSS.java:97:41:97:54 | userControlled : String | SpringXSS.java:97:14:97:70 | new ResponseEntity(...) | provenance | MaD:22 | -| SpringXSS.java:117:55:117:75 | userControlled : String | SpringXSS.java:118:14:118:46 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:117:55:117:75 | userControlled : String | SpringXSS.java:118:32:118:45 | userControlled : String | provenance | | -| SpringXSS.java:118:32:118:45 | userControlled : String | SpringXSS.java:118:14:118:46 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:122:56:122:76 | userControlled : String | SpringXSS.java:123:72:123:85 | userControlled | provenance | | -| SpringXSS.java:131:40:131:60 | userControlled : String | SpringXSS.java:132:14:132:46 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:131:40:131:60 | userControlled : String | SpringXSS.java:132:32:132:45 | userControlled : String | provenance | | -| SpringXSS.java:132:32:132:45 | userControlled : String | SpringXSS.java:132:14:132:46 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:136:36:136:56 | userControlled : String | SpringXSS.java:137:14:137:27 | userControlled | provenance | | -| SpringXSS.java:152:62:152:82 | userControlled : String | SpringXSS.java:153:12:153:44 | ok(...) | provenance | SpringResponseEntity | -| SpringXSS.java:152:62:152:82 | userControlled : String | SpringXSS.java:153:30:153:43 | userControlled : String | provenance | | -| SpringXSS.java:153:30:153:43 | userControlled : String | SpringXSS.java:153:12:153:44 | ok(...) | provenance | MaD:24 | -| SpringXSS.java:157:46:157:66 | userControlled : String | SpringXSS.java:158:12:158:25 | userControlled | provenance | | -| XSS.java:19:28:19:55 | getParameter(...) : String | XSS.java:19:12:19:77 | ... + ... | provenance | Src:MaD:9 Sink:MaD:1 | -| XSS.java:34:67:34:87 | getPathInfo(...) : String | XSS.java:34:30:34:87 | ... + ... | provenance | Src:MaD:8 Sink:MaD:1 | -| XSS.java:37:36:37:56 | getPathInfo(...) : String | XSS.java:37:36:37:67 | getBytes(...) | provenance | Src:MaD:8 MaD:11 | -| XSS.java:100:39:100:59 | getPathInfo(...) : String | XSS.java:100:39:100:70 | getBytes(...) | provenance | Src:MaD:8 MaD:11 | -| XSS.java:105:39:105:59 | getPathInfo(...) : String | XSS.java:105:39:105:70 | getBytes(...) | provenance | Src:MaD:8 MaD:11 | -| XSS.java:110:39:110:59 | getPathInfo(...) : String | XSS.java:110:39:110:70 | getBytes(...) | provenance | Src:MaD:8 MaD:11 | -models -| 1 | Sink: java.io; PrintWriter; false; print; ; ; Argument[0]; file-content-store; manual | -| 2 | Sink: java.io; Writer; true; write; ; ; Argument[0]; file-content-store; manual | -| 3 | Source: javax.faces.context; ExternalContext; true; getRequestHeaderMap; (); ; ReturnValue; remote; manual | -| 4 | Source: javax.faces.context; ExternalContext; true; getRequestHeaderValuesMap; (); ; ReturnValue; remote; manual | -| 5 | Source: javax.faces.context; ExternalContext; true; getRequestParameterMap; (); ; ReturnValue; remote; manual | -| 6 | Source: javax.faces.context; ExternalContext; true; getRequestParameterNames; (); ; ReturnValue; remote; manual | -| 7 | Source: javax.faces.context; ExternalContext; true; getRequestParameterValuesMap; (); ; ReturnValue; remote; manual | -| 8 | Source: javax.servlet.http; HttpServletRequest; false; getPathInfo; (); ; ReturnValue; remote; manual | -| 9 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 10 | Summary: java.lang; Iterable; true; iterator; (); ; Argument[this].Element; ReturnValue.Element; value; manual | -| 11 | Summary: java.lang; String; false; getBytes; ; ; Argument[this]; ReturnValue; taint; manual | -| 12 | Summary: java.util; Iterator; true; next; ; ; Argument[this].Element; ReturnValue; value; manual | -| 13 | Summary: java.util; Map; true; get; ; ; Argument[this].MapValue; ReturnValue; value; manual | -| 14 | Summary: java.util; Map; true; keySet; (); ; Argument[this].MapKey; ReturnValue.Element; value; manual | -| 15 | Summary: java.util; Optional; false; of; ; ; Argument[0]; ReturnValue.Element; value; manual | -| 16 | Summary: javax.ws.rs.core; Response$ResponseBuilder; true; build; ; ; Argument[this]; ReturnValue; taint; manual | -| 17 | Summary: javax.ws.rs.core; Response$ResponseBuilder; true; entity; ; ; Argument[0]; Argument[this]; taint; manual | -| 18 | Summary: javax.ws.rs.core; Response$ResponseBuilder; true; entity; ; ; Argument[this]; ReturnValue; value; manual | -| 19 | Summary: javax.ws.rs.core; Response$ResponseBuilder; true; type; ; ; Argument[this]; ReturnValue; value; manual | -| 20 | Summary: javax.ws.rs.core; Response; false; ok; ; ; Argument[0]; ReturnValue; taint; manual | -| 21 | Summary: org.springframework.http; ResponseEntity$BodyBuilder; true; body; (Object); ; Argument[0]; ReturnValue; taint; manual | -| 22 | Summary: org.springframework.http; ResponseEntity; true; ResponseEntity; (Object,HttpStatus); ; Argument[0]; Argument[this]; taint; manual | -| 23 | Summary: org.springframework.http; ResponseEntity; true; of; (Optional); ; Argument[0].Element; ReturnValue; taint; manual | -| 24 | Summary: org.springframework.http; ResponseEntity; true; ok; (Object); ; Argument[0]; ReturnValue; taint; manual | -nodes -| JaxXSS.java:15:120:15:140 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:22:59:22:72 | userControlled | semmle.label | userControlled | -| JaxXSS.java:24:33:24:46 | userControlled | semmle.label | userControlled | -| JaxXSS.java:29:34:29:47 | userControlled | semmle.label | userControlled | -| JaxXSS.java:32:47:32:76 | entity(...) : ResponseBuilder | semmle.label | entity(...) : ResponseBuilder | -| JaxXSS.java:32:62:32:75 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:33:18:33:25 | builder2 : ResponseBuilder | semmle.label | builder2 : ResponseBuilder | -| JaxXSS.java:33:18:33:51 | type(...) : ResponseBuilder | semmle.label | type(...) : ResponseBuilder | -| JaxXSS.java:33:18:33:59 | build(...) | semmle.label | build(...) | -| JaxXSS.java:59:95:59:115 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:108:16:108:62 | entity(...) : ResponseBuilder | semmle.label | entity(...) : ResponseBuilder | -| JaxXSS.java:108:16:108:70 | build(...) | semmle.label | build(...) | -| JaxXSS.java:108:48:108:61 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:112:16:112:70 | entity(...) : ResponseBuilder | semmle.label | entity(...) : ResponseBuilder | -| JaxXSS.java:112:16:112:78 | build(...) | semmle.label | build(...) | -| JaxXSS.java:112:56:112:69 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:116:16:116:75 | entity(...) : ResponseBuilder | semmle.label | entity(...) : ResponseBuilder | -| JaxXSS.java:116:16:116:83 | build(...) | semmle.label | build(...) | -| JaxXSS.java:116:61:116:74 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:120:98:120:111 | userControlled | semmle.label | userControlled | -| JaxXSS.java:124:89:124:102 | userControlled | semmle.label | userControlled | -| JaxXSS.java:128:110:128:123 | userControlled | semmle.label | userControlled | -| JaxXSS.java:132:108:132:121 | userControlled | semmle.label | userControlled | -| JaxXSS.java:136:37:136:50 | userControlled | semmle.label | userControlled | -| JaxXSS.java:140:16:140:42 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:140:16:140:73 | type(...) : ResponseBuilder | semmle.label | type(...) : ResponseBuilder | -| JaxXSS.java:140:16:140:81 | build(...) | semmle.label | build(...) | -| JaxXSS.java:140:28:140:41 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:164:50:164:70 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:165:12:165:38 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:165:12:165:46 | build(...) | semmle.label | build(...) | -| JaxXSS.java:165:24:165:37 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:169:54:169:74 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:170:12:170:38 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:170:12:170:46 | build(...) | semmle.label | build(...) | -| JaxXSS.java:170:24:170:37 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:174:63:174:83 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:175:12:175:38 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:175:12:175:46 | build(...) | semmle.label | build(...) | -| JaxXSS.java:175:24:175:37 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:179:53:179:73 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:180:12:180:38 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:180:12:180:46 | build(...) | semmle.label | build(...) | -| JaxXSS.java:180:24:180:37 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:184:68:184:88 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:185:59:185:72 | userControlled | semmle.label | userControlled | -| JaxXSS.java:207:41:207:61 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:208:14:208:40 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:208:14:208:48 | build(...) | semmle.label | build(...) | -| JaxXSS.java:208:26:208:39 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:212:42:212:62 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:213:61:213:74 | userControlled | semmle.label | userControlled | -| JaxXSS.java:221:26:221:46 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:222:14:222:40 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:222:14:222:48 | build(...) | semmle.label | build(...) | -| JaxXSS.java:222:26:222:39 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:226:36:226:56 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:227:14:227:27 | userControlled | semmle.label | userControlled | -| JaxXSS.java:242:48:242:68 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:243:12:243:38 | ok(...) : ResponseBuilder | semmle.label | ok(...) : ResponseBuilder | -| JaxXSS.java:243:12:243:46 | build(...) | semmle.label | build(...) | -| JaxXSS.java:243:24:243:37 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:247:46:247:66 | userControlled : String | semmle.label | userControlled : String | -| JaxXSS.java:248:12:248:25 | userControlled | semmle.label | userControlled | -| JsfXSS.java:21:50:21:107 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| JsfXSS.java:22:27:22:43 | requestParameters : Map | semmle.label | requestParameters : Map | -| JsfXSS.java:22:27:22:60 | get(...) : String | semmle.label | get(...) : String | -| JsfXSS.java:27:22:29:27 | ... + ... | semmle.label | ... + ... | -| JsfXSS.java:60:22:60:48 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map | -| JsfXSS.java:60:22:60:57 | keySet(...) : Set [] : Object | semmle.label | keySet(...) : Set [] : Object | -| JsfXSS.java:60:22:60:68 | iterator(...) : Iterator [] : Object | semmle.label | iterator(...) : Iterator [] : Object | -| JsfXSS.java:60:22:60:75 | next(...) | semmle.label | next(...) | -| JsfXSS.java:61:22:61:50 | getRequestParameterNames(...) : Iterator | semmle.label | getRequestParameterNames(...) : Iterator | -| JsfXSS.java:61:22:61:57 | next(...) | semmle.label | next(...) | -| JsfXSS.java:62:22:62:54 | getRequestParameterValuesMap(...) : Map | semmle.label | getRequestParameterValuesMap(...) : Map | -| JsfXSS.java:62:22:62:69 | get(...) : String[] | semmle.label | get(...) : String[] | -| JsfXSS.java:62:22:62:72 | ...[...] | semmle.label | ...[...] | -| JsfXSS.java:63:22:63:54 | getRequestParameterValuesMap(...) : Map | semmle.label | getRequestParameterValuesMap(...) : Map | -| JsfXSS.java:63:22:63:63 | keySet(...) : Set [] : Object | semmle.label | keySet(...) : Set [] : Object | -| JsfXSS.java:63:22:63:74 | iterator(...) : Iterator [] : Object | semmle.label | iterator(...) : Iterator [] : Object | -| JsfXSS.java:63:22:63:81 | next(...) | semmle.label | next(...) | -| JsfXSS.java:64:22:64:44 | getRequestPathInfo(...) | semmle.label | getRequestPathInfo(...) | -| JsfXSS.java:65:22:65:80 | getName(...) | semmle.label | getName(...) | -| JsfXSS.java:66:22:66:45 | getRequestHeaderMap(...) : Map | semmle.label | getRequestHeaderMap(...) : Map | -| JsfXSS.java:66:22:66:60 | get(...) | semmle.label | get(...) | -| JsfXSS.java:67:22:67:51 | getRequestHeaderValuesMap(...) : Map | semmle.label | getRequestHeaderValuesMap(...) : Map | -| JsfXSS.java:67:22:67:66 | get(...) : String[] | semmle.label | get(...) : String[] | -| JsfXSS.java:67:22:67:69 | ...[...] | semmle.label | ...[...] | -| SpringXSS.java:16:108:16:128 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:22:62:22:75 | userControlled | semmle.label | userControlled | -| SpringXSS.java:26:30:26:43 | userControlled | semmle.label | userControlled | -| SpringXSS.java:62:64:62:84 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:63:12:63:44 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:63:30:63:43 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:67:77:67:97 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:68:12:68:44 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:68:30:68:43 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:72:67:72:87 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:73:12:73:44 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:73:30:73:43 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:77:82:77:102 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:78:70:78:83 | userControlled | semmle.label | userControlled | -| SpringXSS.java:87:81:87:101 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:91:14:91:46 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:91:32:91:45 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:93:14:93:59 | of(...) | semmle.label | of(...) | -| SpringXSS.java:93:32:93:58 | of(...) : Optional [] : String | semmle.label | of(...) : Optional [] : String | -| SpringXSS.java:93:44:93:57 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:95:14:95:53 | body(...) | semmle.label | body(...) | -| SpringXSS.java:95:39:95:52 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:97:14:97:70 | new ResponseEntity(...) | semmle.label | new ResponseEntity(...) | -| SpringXSS.java:97:41:97:54 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:117:55:117:75 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:118:14:118:46 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:118:32:118:45 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:122:56:122:76 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:123:72:123:85 | userControlled | semmle.label | userControlled | -| SpringXSS.java:131:40:131:60 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:132:14:132:46 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:132:32:132:45 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:136:36:136:56 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:137:14:137:27 | userControlled | semmle.label | userControlled | -| SpringXSS.java:152:62:152:82 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:153:12:153:44 | ok(...) | semmle.label | ok(...) | -| SpringXSS.java:153:30:153:43 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:157:46:157:66 | userControlled : String | semmle.label | userControlled : String | -| SpringXSS.java:158:12:158:25 | userControlled | semmle.label | userControlled | -| XSS.java:19:12:19:77 | ... + ... | semmle.label | ... + ... | -| XSS.java:19:28:19:55 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| XSS.java:34:30:34:87 | ... + ... | semmle.label | ... + ... | -| XSS.java:34:67:34:87 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | -| XSS.java:37:36:37:56 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | -| XSS.java:37:36:37:67 | getBytes(...) | semmle.label | getBytes(...) | -| XSS.java:83:33:83:53 | getPathInfo(...) | semmle.label | getPathInfo(...) | -| XSS.java:88:33:88:53 | getPathInfo(...) | semmle.label | getPathInfo(...) | -| XSS.java:93:33:93:53 | getPathInfo(...) | semmle.label | getPathInfo(...) | -| XSS.java:100:39:100:59 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | -| XSS.java:100:39:100:70 | getBytes(...) | semmle.label | getBytes(...) | -| XSS.java:105:39:105:59 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | -| XSS.java:105:39:105:70 | getBytes(...) | semmle.label | getBytes(...) | -| XSS.java:110:39:110:59 | getPathInfo(...) : String | semmle.label | getPathInfo(...) : String | -| XSS.java:110:39:110:70 | getBytes(...) | semmle.label | getBytes(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java index 13ae6b62e10c..3584c45d8b2b 100644 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.java @@ -16,7 +16,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response, b throws ServletException, IOException { // BAD: a request parameter is written directly to the Servlet response stream response.getWriter() - .print("The page \"" + request.getParameter("page") + "\" was not found."); // $ Alert + .print("The page \"" + request.getParameter("page") + "\" was not found."); // $ xss // GOOD: servlet API encodes the error message HTML for the HTML context response.sendError(HttpServletResponse.SC_NOT_FOUND, @@ -31,10 +31,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response, b "The page \"" + capitalizeName(request.getParameter("page")) + "\" was not found."); // BAD: outputting the path of the resource - response.getWriter().print("The path section of the URL was " + request.getPathInfo()); // $ Alert + response.getWriter().print("The path section of the URL was " + request.getPathInfo()); // $ xss // BAD: typical XSS, this time written to an OutputStream instead of a Writer - response.getOutputStream().write(request.getPathInfo().getBytes()); // $ Alert + response.getOutputStream().write(request.getPathInfo().getBytes()); // $ xss // GOOD: sanitizer response.getOutputStream().write(hudson.Util.escape(request.getPathInfo()).getBytes()); // safe @@ -80,34 +80,34 @@ else if(setContentMethod == 1) { if(setContentMethod == 0) { // BAD: set content-type to something that is not safe response.setContentType("text/html"); - response.getWriter().print(request.getPathInfo()); // $ Alert + response.getWriter().print(request.getPathInfo()); // $ xss } else if(setContentMethod == 1) { // BAD: set content-type to something that is not safe response.setHeader("Content-Type", "text/html"); - response.getWriter().print(request.getPathInfo()); // $ Alert + response.getWriter().print(request.getPathInfo()); // $ xss } else { // BAD: set content-type to something that is not safe response.addHeader("Content-Type", "text/html"); - response.getWriter().print(request.getPathInfo()); // $ Alert + response.getWriter().print(request.getPathInfo()); // $ xss } } else { if(setContentMethod == 0) { // BAD: set content-type to something that is not safe response.setContentType("text/html"); - response.getOutputStream().write(request.getPathInfo().getBytes()); // $ Alert + response.getOutputStream().write(request.getPathInfo().getBytes()); // $ xss } else if(setContentMethod == 1) { // BAD: set content-type to something that is not safe response.setHeader("Content-Type", "text/html"); - response.getOutputStream().write(request.getPathInfo().getBytes()); // $ Alert + response.getOutputStream().write(request.getPathInfo().getBytes()); // $ xss } else { // BAD: set content-type to something that is not safe response.addHeader("Content-Type", "text/html"); - response.getOutputStream().write(request.getPathInfo().getBytes()); // $ Alert + response.getOutputStream().write(request.getPathInfo().getBytes()); // $ xss } } } diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql new file mode 100644 index 000000000000..271488ffb1f0 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.XssQuery +import utils.test.InlineExpectationsTest + +module XssTest implements TestSig { + string getARelevantTag() { result = "xss" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "xss" and + exists(DataFlow::Node sink | XssFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.qlref b/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.qlref deleted file mode 100644 index bff2f2538a29..000000000000 --- a/java/ql/test/query-tests/security/CWE-079/semmle/tests/XSS.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-079/XSS.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallation.java b/java/ql/test/query-tests/security/CWE-094/ApkInstallation.java similarity index 83% rename from java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallation.java rename to java/ql/test/query-tests/security/CWE-094/ApkInstallation.java index ee6a0c56b709..680ad6330839 100644 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallation.java +++ b/java/ql/test/query-tests/security/CWE-094/ApkInstallation.java @@ -11,7 +11,7 @@ public class ApkInstallation extends Activity { public void installAPK(String path) { // BAD: the path is not checked Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); // $ Alert + intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); // $ hasApkInstallation startActivity(intent); } @@ -19,7 +19,7 @@ public void installAPK3(String path) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setType(APK_MIMETYPE); // BAD: the path is not checked - intent.setData(Uri.fromFile(new File(path))); // $ Alert + intent.setData(Uri.fromFile(new File(path))); // $ hasApkInstallation startActivity(intent); } @@ -27,7 +27,7 @@ public void installAPKFromExternalStorage(String path) { // BAD: file is from external storage File file = new File(Environment.getExternalStorageDirectory(), path); Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(file), APK_MIMETYPE); // $ Alert + intent.setDataAndType(Uri.fromFile(file), APK_MIMETYPE); // $ hasApkInstallation startActivity(intent); } @@ -35,14 +35,14 @@ public void installAPKFromExternalStorageWithActionInstallPackage(String path) { // BAD: file is from external storage File file = new File(Environment.getExternalStorageDirectory(), path); Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); - intent.setData(Uri.fromFile(file)); // $ Alert + intent.setData(Uri.fromFile(file)); // $ hasApkInstallation startActivity(intent); } public void installAPKInstallPackageLiteral(String path) { File file = new File(Environment.getExternalStorageDirectory(), path); Intent intent = new Intent("android.intent.action.INSTALL_PACKAGE"); - intent.setData(Uri.fromFile(file)); // $ Alert + intent.setData(Uri.fromFile(file)); // $ hasApkInstallation startActivity(intent); } @@ -50,7 +50,7 @@ public void otherIntent(File file) { Intent intent = new Intent(this, OtherActivity.class); intent.setAction(Intent.ACTION_VIEW); // BAD: the file is from unknown source - intent.setData(Uri.fromFile(file)); // $ Alert + intent.setData(Uri.fromFile(file)); // $ hasApkInstallation } } diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql new file mode 100644 index 000000000000..a4efceebc189 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest.ql @@ -0,0 +1,19 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.ArbitraryApkInstallationQuery +import utils.test.InlineExpectationsTest + +module HasApkInstallationTest implements TestSig { + string getARelevantTag() { result = "hasApkInstallation" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasApkInstallation" and + exists(DataFlow::Node sink | ApkInstallationFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.expected b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.expected deleted file mode 100644 index 7a6b0ccde886..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.expected +++ /dev/null @@ -1,16 +0,0 @@ -#select -| ApkInstallation.java:14:31:14:58 | fromFile(...) | ApkInstallation.java:14:31:14:58 | fromFile(...) | ApkInstallation.java:14:31:14:58 | fromFile(...) | Arbitrary Android APK installation. | -| ApkInstallation.java:22:24:22:51 | fromFile(...) | ApkInstallation.java:22:24:22:51 | fromFile(...) | ApkInstallation.java:22:24:22:51 | fromFile(...) | Arbitrary Android APK installation. | -| ApkInstallation.java:30:31:30:48 | fromFile(...) | ApkInstallation.java:30:31:30:48 | fromFile(...) | ApkInstallation.java:30:31:30:48 | fromFile(...) | Arbitrary Android APK installation. | -| ApkInstallation.java:38:24:38:41 | fromFile(...) | ApkInstallation.java:38:24:38:41 | fromFile(...) | ApkInstallation.java:38:24:38:41 | fromFile(...) | Arbitrary Android APK installation. | -| ApkInstallation.java:45:24:45:41 | fromFile(...) | ApkInstallation.java:45:24:45:41 | fromFile(...) | ApkInstallation.java:45:24:45:41 | fromFile(...) | Arbitrary Android APK installation. | -| ApkInstallation.java:53:24:53:41 | fromFile(...) | ApkInstallation.java:53:24:53:41 | fromFile(...) | ApkInstallation.java:53:24:53:41 | fromFile(...) | Arbitrary Android APK installation. | -edges -nodes -| ApkInstallation.java:14:31:14:58 | fromFile(...) | semmle.label | fromFile(...) | -| ApkInstallation.java:22:24:22:51 | fromFile(...) | semmle.label | fromFile(...) | -| ApkInstallation.java:30:31:30:48 | fromFile(...) | semmle.label | fromFile(...) | -| ApkInstallation.java:38:24:38:41 | fromFile(...) | semmle.label | fromFile(...) | -| ApkInstallation.java:45:24:45:41 | fromFile(...) | semmle.label | fromFile(...) | -| ApkInstallation.java:53:24:53:41 | fromFile(...) | semmle.label | fromFile(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.qlref b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.qlref deleted file mode 100644 index 7566db8af78d..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/ApkInstallationTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/ArbitraryApkInstallation.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/options b/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/ApkInstallationTest/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/FreemarkerSSTI.java b/java/ql/test/query-tests/security/CWE-094/FreemarkerSSTI.java new file mode 100644 index 000000000000..31eb634a5fe4 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/FreemarkerSSTI.java @@ -0,0 +1,117 @@ +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import java.lang.String; +import java.io.Reader; +import java.io.StringReader; +import java.io.OutputStreamWriter; +import java.util.HashMap; + +import freemarker.template.Template; +import freemarker.template.Configuration; +import freemarker.cache.StringTemplateLoader; +import freemarker.core.ParserConfiguration; + +@Controller +public class FreemarkerSSTI { + String sourceName = "sourceName"; + + @GetMapping(value = "bad1") + public void bad1(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Reader reader = new StringReader(code); + + Template t = new Template(name, reader); // $hasTemplateInjection + } + + @GetMapping(value = "bad2") + public void bad2(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Reader reader = new StringReader(code); + Configuration cfg = new Configuration(); + + Template t = new Template(name, reader, cfg); // $hasTemplateInjection + } + + @GetMapping(value = "bad3") + public void bad3(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Reader reader = new StringReader(code); + Configuration cfg = new Configuration(); + + Template t = new Template(name, reader, cfg, "UTF-8"); // $hasTemplateInjection + } + + @GetMapping(value = "bad4") + public void bad4(HttpServletRequest request) { + String name = "ttemplate"; + String sourceCode = request.getParameter("sourceCode"); + Configuration cfg = new Configuration(); + + Template t = new Template(name, sourceCode, cfg); // $hasTemplateInjection + } + + @GetMapping(value = "bad5") + public void bad5(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Configuration cfg = new Configuration(); + Reader reader = new StringReader(code); + + Template t = new Template(name, sourceName, reader, cfg); // $hasTemplateInjection + } + + @GetMapping(value = "bad6") + public void bad6(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Configuration cfg = new Configuration(); + ParserConfiguration customParserConfiguration = new Configuration(); + Reader reader = new StringReader(code); + + Template t = + new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8"); // $hasTemplateInjection + } + + @GetMapping(value = "bad7") + public void bad7(HttpServletRequest request) { + String name = "ttemplate"; + String code = request.getParameter("code"); + Configuration cfg = new Configuration(); + ParserConfiguration customParserConfiguration = new Configuration(); + Reader reader = new StringReader(code); + + Template t = new Template(name, sourceName, reader, cfg, "UTF-8"); // $hasTemplateInjection + } + + @GetMapping(value = "bad8") + public void bad8(HttpServletRequest request) { + String code = request.getParameter("code"); + StringTemplateLoader stringLoader = new StringTemplateLoader(); + + stringLoader.putTemplate("myTemplate", code); // $hasTemplateInjection + } + + @GetMapping(value = "bad9") + public void bad9(HttpServletRequest request) { + String code = request.getParameter("code"); + StringTemplateLoader stringLoader = new StringTemplateLoader(); + + stringLoader.putTemplate("myTemplate", code, 0); // $hasTemplateInjection + } + + @GetMapping(value = "good1") + public void good1(HttpServletRequest request) { + HashMap root = new HashMap(); + String code = request.getParameter("code"); + root.put("code", code); + Configuration cfg = new Configuration(); + Template temp = cfg.getTemplate("test.ftlh"); + OutputStreamWriter out = new OutputStreamWriter(System.out); + temp.process(root, out); // Safe + } +} diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyClassLoaderTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyClassLoaderTest.java new file mode 100644 index 000000000000..2ded64caaf63 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/GroovyClassLoaderTest.java @@ -0,0 +1,55 @@ +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringReader; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import groovy.lang.GroovyClassLoader; +import groovy.lang.GroovyCodeSource; + +public class GroovyClassLoaderTest extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // "groovy.lang;GroovyClassLoader;false;parseClass;(GroovyCodeSource);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); + classLoader.parseClass(gcs); // $hasGroovyInjection + } + // "groovy.lang;GroovyClassLoader;false;parseClass;(GroovyCodeSource,boolean);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); + classLoader.parseClass(gcs, true); // $hasGroovyInjection + } + // "groovy.lang;GroovyClassLoader;false;parseClass;(InputStream,String);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + classLoader.parseClass(new ByteArrayInputStream(script.getBytes()), "test"); // $hasGroovyInjection + } + // "groovy.lang;GroovyClassLoader;false;parseClass;(Reader,String);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + classLoader.parseClass(new StringReader(script), "test"); // $hasGroovyInjection + } + // "groovy.lang;GroovyClassLoader;false;parseClass;(String);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + classLoader.parseClass(script); // $hasGroovyInjection + } + // "groovy.lang;GroovyClassLoader;false;parseClass;(String,String);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + final GroovyClassLoader classLoader = new GroovyClassLoader(); + classLoader.parseClass(script, "test"); // $hasGroovyInjection + } + } +} + diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyCompilationUnitTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyCompilationUnitTest.java similarity index 84% rename from java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyCompilationUnitTest.java rename to java/ql/test/query-tests/security/CWE-094/GroovyCompilationUnitTest.java index a906d9fdc968..f25e27e6893d 100644 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyCompilationUnitTest.java +++ b/java/ql/test/query-tests/security/CWE-094/GroovyCompilationUnitTest.java @@ -18,8 +18,8 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) // "org.codehaus.groovy.control;CompilationUnit;false;compile;;;Argument[this];groovy;manual" { CompilationUnit cu = new CompilationUnit(); - cu.addSource("test", request.getParameter("source")); // $ Source - cu.compile(); // $ Alert + cu.addSource("test", request.getParameter("source")); + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); @@ -29,20 +29,20 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) { CompilationUnit cu = new CompilationUnit(); cu.addSource("test", - new ByteArrayInputStream(request.getParameter("source").getBytes())); // $ Source - cu.compile(); // $ Alert + new ByteArrayInputStream(request.getParameter("source").getBytes())); + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); - cu.addSource(new URL(request.getParameter("source"))); // $ Source - cu.compile(); // $ Alert + cu.addSource(new URL(request.getParameter("source"))); + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); SourceUnit su = - new SourceUnit("test", request.getParameter("source"), null, null, null); // $ Source + new SourceUnit("test", request.getParameter("source"), null, null, null); cu.addSource(su); - cu.compile(); // $ Alert + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); @@ -53,29 +53,29 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) } { CompilationUnit cu = new CompilationUnit(); - StringReaderSource rs = new StringReaderSource(request.getParameter("source"), null); // $ Source + StringReaderSource rs = new StringReaderSource(request.getParameter("source"), null); SourceUnit su = new SourceUnit("test", rs, null, null, null); cu.addSource(su); - cu.compile(); // $ Alert + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); SourceUnit su = - new SourceUnit(new URL(request.getParameter("source")), null, null, null); // $ Source + new SourceUnit(new URL(request.getParameter("source")), null, null, null); cu.addSource(su); - cu.compile(); // $ Alert + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); - SourceUnit su = SourceUnit.create("test", request.getParameter("source")); // $ Source + SourceUnit su = SourceUnit.create("test", request.getParameter("source")); cu.addSource(su); - cu.compile(); // $ Alert + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); - SourceUnit su = SourceUnit.create("test", request.getParameter("source"), 0); // $ Source + SourceUnit su = SourceUnit.create("test", request.getParameter("source"), 0); cu.addSource(su); - cu.compile(); // $ Alert + cu.compile(); // $hasGroovyInjection } { CompilationUnit cu = new CompilationUnit(); @@ -85,8 +85,8 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) } { JavaAwareCompilationUnit cu = new JavaAwareCompilationUnit(); - cu.addSource("test", request.getParameter("source")); // $ Source - cu.compile(); // $ Alert + cu.addSource("test", request.getParameter("source")); + cu.compile(); // $hasGroovyInjection } { JavaStubCompilationUnit cu = new JavaStubCompilationUnit(null, null); diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyEvalTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyEvalTest.java new file mode 100644 index 000000000000..3647a3346fa8 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/GroovyEvalTest.java @@ -0,0 +1,40 @@ +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import groovy.util.Eval; + +public class GroovyEvalTest extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // "groovy.util;Eval;false;me;(String);;Argument[0];groovy;manual", + { + String script = request.getParameter("script"); + Eval.me(script); // $hasGroovyInjection + } + // "groovy.util;Eval;false;me;(String,Object,String);;Argument[2];groovy;manual", + { + String script = request.getParameter("script"); + Eval.me("test", "result", script); // $hasGroovyInjection + } + // "groovy.util;Eval;false;x;(Object,String);;Argument[1];groovy;manual", + { + String script = request.getParameter("script"); + Eval.x("result2", script); // $hasGroovyInjection + + } + // "groovy.util;Eval;false;xy;(Object,Object,String);;Argument[2];groovy;manual", + { + String script = request.getParameter("script"); + Eval.xy("result3", "result4", script); // $hasGroovyInjection + } + // "groovy.util;Eval;false;xyz;(Object,Object,Object,String);;Argument[3];groovy;manual", + { + String script = request.getParameter("script"); + Eval.xyz("result3", "result4", "aaa", script); // $hasGroovyInjection + } + } +} + diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyClassLoaderTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyClassLoaderTest.java deleted file mode 100644 index ff7d73f16bd9..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyClassLoaderTest.java +++ /dev/null @@ -1,54 +0,0 @@ -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringReader; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import groovy.lang.GroovyClassLoader; -import groovy.lang.GroovyCodeSource; - -public class GroovyClassLoaderTest extends HttpServlet { - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - // "groovy.lang;GroovyClassLoader;false;parseClass;(GroovyCodeSource);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); - classLoader.parseClass(gcs); // $ Alert - } - // "groovy.lang;GroovyClassLoader;false;parseClass;(GroovyCodeSource,boolean);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); - classLoader.parseClass(gcs, true); // $ Alert - } - // "groovy.lang;GroovyClassLoader;false;parseClass;(InputStream,String);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - classLoader.parseClass(new ByteArrayInputStream(script.getBytes()), "test"); // $ Alert - } - // "groovy.lang;GroovyClassLoader;false;parseClass;(Reader,String);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - classLoader.parseClass(new StringReader(script), "test"); // $ Alert - } - // "groovy.lang;GroovyClassLoader;false;parseClass;(String);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - classLoader.parseClass(script); // $ Alert - } - // "groovy.lang;GroovyClassLoader;false;parseClass;(String,String);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - final GroovyClassLoader classLoader = new GroovyClassLoader(); - classLoader.parseClass(script, "test"); // $ Alert - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyEvalTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyEvalTest.java deleted file mode 100644 index 3756cd10bfa2..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyEvalTest.java +++ /dev/null @@ -1,39 +0,0 @@ -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import groovy.util.Eval; - -public class GroovyEvalTest extends HttpServlet { - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - // "groovy.util;Eval;false;me;(String);;Argument[0];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - Eval.me(script); // $ Alert - } - // "groovy.util;Eval;false;me;(String,Object,String);;Argument[2];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - Eval.me("test", "result", script); // $ Alert - } - // "groovy.util;Eval;false;x;(Object,String);;Argument[1];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - Eval.x("result2", script); // $ Alert - - } - // "groovy.util;Eval;false;xy;(Object,Object,String);;Argument[2];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - Eval.xy("result3", "result4", script); // $ Alert - } - // "groovy.util;Eval;false;xyz;(Object,Object,Object,String);;Argument[3];groovy;manual", - { - String script = request.getParameter("script"); // $ Source - Eval.xyz("result3", "result4", "aaa", script); // $ Alert - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.expected deleted file mode 100644 index 3a00c80a7043..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.expected +++ /dev/null @@ -1,327 +0,0 @@ -#select -| GroovyClassLoaderTest.java:20:36:20:38 | gcs | GroovyClassLoaderTest.java:17:29:17:58 | getParameter(...) : String | GroovyClassLoaderTest.java:20:36:20:38 | gcs | Groovy script depends on a $@. | GroovyClassLoaderTest.java:17:29:17:58 | getParameter(...) | user-provided value | -| GroovyClassLoaderTest.java:27:36:27:38 | gcs | GroovyClassLoaderTest.java:24:29:24:58 | getParameter(...) : String | GroovyClassLoaderTest.java:27:36:27:38 | gcs | Groovy script depends on a $@. | GroovyClassLoaderTest.java:24:29:24:58 | getParameter(...) | user-provided value | -| GroovyClassLoaderTest.java:33:36:33:78 | new ByteArrayInputStream(...) | GroovyClassLoaderTest.java:31:29:31:58 | getParameter(...) : String | GroovyClassLoaderTest.java:33:36:33:78 | new ByteArrayInputStream(...) | Groovy script depends on a $@. | GroovyClassLoaderTest.java:31:29:31:58 | getParameter(...) | user-provided value | -| GroovyClassLoaderTest.java:39:36:39:59 | new StringReader(...) | GroovyClassLoaderTest.java:37:29:37:58 | getParameter(...) : String | GroovyClassLoaderTest.java:39:36:39:59 | new StringReader(...) | Groovy script depends on a $@. | GroovyClassLoaderTest.java:37:29:37:58 | getParameter(...) | user-provided value | -| GroovyClassLoaderTest.java:45:36:45:41 | script | GroovyClassLoaderTest.java:43:29:43:58 | getParameter(...) : String | GroovyClassLoaderTest.java:45:36:45:41 | script | Groovy script depends on a $@. | GroovyClassLoaderTest.java:43:29:43:58 | getParameter(...) | user-provided value | -| GroovyClassLoaderTest.java:51:36:51:41 | script | GroovyClassLoaderTest.java:49:29:49:58 | getParameter(...) : String | GroovyClassLoaderTest.java:51:36:51:41 | script | Groovy script depends on a $@. | GroovyClassLoaderTest.java:49:29:49:58 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:22:13:22:14 | cu | GroovyCompilationUnitTest.java:21:34:21:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:22:13:22:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:21:34:21:63 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:33:13:33:14 | cu | GroovyCompilationUnitTest.java:32:46:32:75 | getParameter(...) : String | GroovyCompilationUnitTest.java:33:13:33:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:32:46:32:75 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:38:13:38:14 | cu | GroovyCompilationUnitTest.java:37:34:37:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:38:13:38:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:37:34:37:63 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:45:13:45:14 | cu | GroovyCompilationUnitTest.java:43:44:43:73 | getParameter(...) : String | GroovyCompilationUnitTest.java:45:13:45:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:43:44:43:73 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:59:13:59:14 | cu | GroovyCompilationUnitTest.java:56:60:56:89 | getParameter(...) : String | GroovyCompilationUnitTest.java:59:13:59:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:56:60:56:89 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:66:13:66:14 | cu | GroovyCompilationUnitTest.java:64:44:64:73 | getParameter(...) : String | GroovyCompilationUnitTest.java:66:13:66:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:64:44:64:73 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:72:13:72:14 | cu | GroovyCompilationUnitTest.java:70:55:70:84 | getParameter(...) : String | GroovyCompilationUnitTest.java:72:13:72:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:70:55:70:84 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:78:13:78:14 | cu | GroovyCompilationUnitTest.java:76:55:76:84 | getParameter(...) : String | GroovyCompilationUnitTest.java:78:13:78:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:76:55:76:84 | getParameter(...) | user-provided value | -| GroovyCompilationUnitTest.java:89:13:89:14 | cu | GroovyCompilationUnitTest.java:88:34:88:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:89:13:89:14 | cu | Groovy script depends on a $@. | GroovyCompilationUnitTest.java:88:34:88:63 | getParameter(...) | user-provided value | -| GroovyEvalTest.java:15:21:15:26 | script | GroovyEvalTest.java:14:29:14:58 | getParameter(...) : String | GroovyEvalTest.java:15:21:15:26 | script | Groovy script depends on a $@. | GroovyEvalTest.java:14:29:14:58 | getParameter(...) | user-provided value | -| GroovyEvalTest.java:20:39:20:44 | script | GroovyEvalTest.java:19:29:19:58 | getParameter(...) : String | GroovyEvalTest.java:20:39:20:44 | script | Groovy script depends on a $@. | GroovyEvalTest.java:19:29:19:58 | getParameter(...) | user-provided value | -| GroovyEvalTest.java:25:31:25:36 | script | GroovyEvalTest.java:24:29:24:58 | getParameter(...) : String | GroovyEvalTest.java:25:31:25:36 | script | Groovy script depends on a $@. | GroovyEvalTest.java:24:29:24:58 | getParameter(...) | user-provided value | -| GroovyEvalTest.java:31:43:31:48 | script | GroovyEvalTest.java:30:29:30:58 | getParameter(...) : String | GroovyEvalTest.java:31:43:31:48 | script | Groovy script depends on a $@. | GroovyEvalTest.java:30:29:30:58 | getParameter(...) | user-provided value | -| GroovyEvalTest.java:36:51:36:56 | script | GroovyEvalTest.java:35:29:35:58 | getParameter(...) : String | GroovyEvalTest.java:36:51:36:56 | script | Groovy script depends on a $@. | GroovyEvalTest.java:35:29:35:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:24:28:24:30 | gcs | GroovyShellTest.java:22:29:22:58 | getParameter(...) : String | GroovyShellTest.java:24:28:24:30 | gcs | Groovy script depends on a $@. | GroovyShellTest.java:22:29:22:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:31:28:31:33 | reader | GroovyShellTest.java:29:29:29:58 | getParameter(...) : String | GroovyShellTest.java:31:28:31:33 | reader | Groovy script depends on a $@. | GroovyShellTest.java:29:29:29:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:38:28:38:33 | reader | GroovyShellTest.java:36:29:36:58 | getParameter(...) : String | GroovyShellTest.java:38:28:38:33 | reader | Groovy script depends on a $@. | GroovyShellTest.java:36:29:36:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:44:28:44:33 | script | GroovyShellTest.java:43:29:43:58 | getParameter(...) : String | GroovyShellTest.java:44:28:44:33 | script | Groovy script depends on a $@. | GroovyShellTest.java:43:29:43:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:50:28:50:33 | script | GroovyShellTest.java:49:29:49:58 | getParameter(...) : String | GroovyShellTest.java:50:28:50:33 | script | Groovy script depends on a $@. | GroovyShellTest.java:49:29:49:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:56:28:56:33 | script | GroovyShellTest.java:55:29:55:58 | getParameter(...) : String | GroovyShellTest.java:56:28:56:33 | script | Groovy script depends on a $@. | GroovyShellTest.java:55:29:55:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:62:25:62:39 | new URI(...) | GroovyShellTest.java:61:29:61:58 | getParameter(...) : String | GroovyShellTest.java:62:25:62:39 | new URI(...) | Groovy script depends on a $@. | GroovyShellTest.java:61:29:61:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:70:25:70:30 | reader | GroovyShellTest.java:68:29:68:58 | getParameter(...) : String | GroovyShellTest.java:70:25:70:30 | reader | Groovy script depends on a $@. | GroovyShellTest.java:68:29:68:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:77:25:77:30 | reader | GroovyShellTest.java:75:29:75:58 | getParameter(...) : String | GroovyShellTest.java:77:25:77:30 | reader | Groovy script depends on a $@. | GroovyShellTest.java:75:29:75:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:83:25:83:30 | script | GroovyShellTest.java:82:29:82:58 | getParameter(...) : String | GroovyShellTest.java:83:25:83:30 | script | Groovy script depends on a $@. | GroovyShellTest.java:82:29:82:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:89:25:89:30 | script | GroovyShellTest.java:88:29:88:58 | getParameter(...) : String | GroovyShellTest.java:89:25:89:30 | script | Groovy script depends on a $@. | GroovyShellTest.java:88:29:88:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:95:25:95:39 | new URI(...) | GroovyShellTest.java:94:29:94:58 | getParameter(...) : String | GroovyShellTest.java:95:25:95:39 | new URI(...) | Groovy script depends on a $@. | GroovyShellTest.java:94:29:94:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:103:23:103:25 | gcs | GroovyShellTest.java:101:29:101:58 | getParameter(...) : String | GroovyShellTest.java:103:23:103:25 | gcs | Groovy script depends on a $@. | GroovyShellTest.java:101:29:101:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:110:23:110:25 | gcs | GroovyShellTest.java:108:29:108:58 | getParameter(...) : String | GroovyShellTest.java:110:23:110:25 | gcs | Groovy script depends on a $@. | GroovyShellTest.java:108:29:108:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:117:23:117:28 | reader | GroovyShellTest.java:115:29:115:58 | getParameter(...) : String | GroovyShellTest.java:117:23:117:28 | reader | Groovy script depends on a $@. | GroovyShellTest.java:115:29:115:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:124:23:124:28 | reader | GroovyShellTest.java:122:29:122:58 | getParameter(...) : String | GroovyShellTest.java:124:23:124:28 | reader | Groovy script depends on a $@. | GroovyShellTest.java:122:29:122:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:130:23:130:28 | script | GroovyShellTest.java:129:29:129:58 | getParameter(...) : String | GroovyShellTest.java:130:23:130:28 | script | Groovy script depends on a $@. | GroovyShellTest.java:129:29:129:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:136:23:136:28 | script | GroovyShellTest.java:135:29:135:58 | getParameter(...) : String | GroovyShellTest.java:136:23:136:28 | script | Groovy script depends on a $@. | GroovyShellTest.java:135:29:135:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:142:23:142:37 | new URI(...) | GroovyShellTest.java:141:29:141:58 | getParameter(...) : String | GroovyShellTest.java:142:23:142:37 | new URI(...) | Groovy script depends on a $@. | GroovyShellTest.java:141:29:141:58 | getParameter(...) | user-provided value | -| GroovyShellTest.java:149:23:149:37 | new URI(...) | GroovyShellTest.java:148:29:148:58 | getParameter(...) : String | GroovyShellTest.java:149:23:149:37 | new URI(...) | Groovy script depends on a $@. | GroovyShellTest.java:148:29:148:58 | getParameter(...) | user-provided value | -| TemplateEngineTest.java:22:35:22:64 | getParameter(...) | TemplateEngineTest.java:22:35:22:64 | getParameter(...) | TemplateEngineTest.java:22:35:22:64 | getParameter(...) | Groovy script depends on a $@. | TemplateEngineTest.java:22:35:22:64 | getParameter(...) | user-provided value | -| TemplateEngineTest.java:23:35:23:47 | (...)... | TemplateEngineTest.java:14:16:14:45 | getParameter(...) : String | TemplateEngineTest.java:23:35:23:47 | (...)... | Groovy script depends on a $@. | TemplateEngineTest.java:14:16:14:45 | getParameter(...) | user-provided value | -| TemplateEngineTest.java:24:35:24:49 | (...)... | TemplateEngineTest.java:14:16:14:45 | getParameter(...) : String | TemplateEngineTest.java:24:35:24:49 | (...)... | Groovy script depends on a $@. | TemplateEngineTest.java:14:16:14:45 | getParameter(...) | user-provided value | -| TemplateEngineTest.java:25:35:25:46 | (...)... | TemplateEngineTest.java:14:16:14:45 | getParameter(...) : String | TemplateEngineTest.java:25:35:25:46 | (...)... | Groovy script depends on a $@. | TemplateEngineTest.java:14:16:14:45 | getParameter(...) | user-provided value | -edges -| GroovyClassLoaderTest.java:17:29:17:58 | getParameter(...) : String | GroovyClassLoaderTest.java:19:57:19:62 | script : String | provenance | Src:MaD:33 | -| GroovyClassLoaderTest.java:19:36:19:79 | new GroovyCodeSource(...) : GroovyCodeSource | GroovyClassLoaderTest.java:20:36:20:38 | gcs | provenance | Sink:MaD:1 | -| GroovyClassLoaderTest.java:19:57:19:62 | script : String | GroovyClassLoaderTest.java:19:36:19:79 | new GroovyCodeSource(...) : GroovyCodeSource | provenance | Config | -| GroovyClassLoaderTest.java:24:29:24:58 | getParameter(...) : String | GroovyClassLoaderTest.java:26:57:26:62 | script : String | provenance | Src:MaD:33 | -| GroovyClassLoaderTest.java:26:36:26:79 | new GroovyCodeSource(...) : GroovyCodeSource | GroovyClassLoaderTest.java:27:36:27:38 | gcs | provenance | Sink:MaD:2 | -| GroovyClassLoaderTest.java:26:57:26:62 | script : String | GroovyClassLoaderTest.java:26:36:26:79 | new GroovyCodeSource(...) : GroovyCodeSource | provenance | Config | -| GroovyClassLoaderTest.java:31:29:31:58 | getParameter(...) : String | GroovyClassLoaderTest.java:33:61:33:66 | script : String | provenance | Src:MaD:33 | -| GroovyClassLoaderTest.java:33:61:33:66 | script : String | GroovyClassLoaderTest.java:33:61:33:77 | getBytes(...) : byte[] | provenance | MaD:36 | -| GroovyClassLoaderTest.java:33:61:33:77 | getBytes(...) : byte[] | GroovyClassLoaderTest.java:33:36:33:78 | new ByteArrayInputStream(...) | provenance | MaD:34 Sink:MaD:3 | -| GroovyClassLoaderTest.java:33:61:33:77 | getBytes(...) : byte[] | GroovyClassLoaderTest.java:33:36:33:78 | new ByteArrayInputStream(...) | provenance | inputStreamWrapper Sink:MaD:3 | -| GroovyClassLoaderTest.java:37:29:37:58 | getParameter(...) : String | GroovyClassLoaderTest.java:39:53:39:58 | script : String | provenance | Src:MaD:33 | -| GroovyClassLoaderTest.java:39:53:39:58 | script : String | GroovyClassLoaderTest.java:39:36:39:59 | new StringReader(...) | provenance | MaD:35 Sink:MaD:4 | -| GroovyClassLoaderTest.java:43:29:43:58 | getParameter(...) : String | GroovyClassLoaderTest.java:45:36:45:41 | script | provenance | Src:MaD:33 Sink:MaD:5 | -| GroovyClassLoaderTest.java:49:29:49:58 | getParameter(...) : String | GroovyClassLoaderTest.java:51:36:51:41 | script | provenance | Src:MaD:33 Sink:MaD:6 | -| GroovyCompilationUnitTest.java:21:13:21:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:22:13:22:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:21:34:21:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:21:13:21:14 | cu [post update] : CompilationUnit | provenance | Src:MaD:33 Config | -| GroovyCompilationUnitTest.java:31:13:31:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:33:13:33:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:32:21:32:87 | new ByteArrayInputStream(...) : ByteArrayInputStream | GroovyCompilationUnitTest.java:31:13:31:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:32:46:32:75 | getParameter(...) : String | GroovyCompilationUnitTest.java:32:46:32:86 | getBytes(...) : byte[] | provenance | Src:MaD:33 MaD:36 | -| GroovyCompilationUnitTest.java:32:46:32:86 | getBytes(...) : byte[] | GroovyCompilationUnitTest.java:32:21:32:87 | new ByteArrayInputStream(...) : ByteArrayInputStream | provenance | MaD:34 | -| GroovyCompilationUnitTest.java:32:46:32:86 | getBytes(...) : byte[] | GroovyCompilationUnitTest.java:32:21:32:87 | new ByteArrayInputStream(...) : ByteArrayInputStream | provenance | inputStreamWrapper | -| GroovyCompilationUnitTest.java:37:13:37:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:38:13:38:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:37:26:37:64 | new URL(...) : URL | GroovyCompilationUnitTest.java:37:13:37:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:37:34:37:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:37:26:37:64 | new URL(...) : URL | provenance | Src:MaD:33 MaD:38 | -| GroovyCompilationUnitTest.java:43:21:43:92 | new SourceUnit(...) : SourceUnit | GroovyCompilationUnitTest.java:44:26:44:27 | su : SourceUnit | provenance | | -| GroovyCompilationUnitTest.java:43:44:43:73 | getParameter(...) : String | GroovyCompilationUnitTest.java:43:21:43:92 | new SourceUnit(...) : SourceUnit | provenance | Src:MaD:33 Config | -| GroovyCompilationUnitTest.java:44:13:44:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:45:13:45:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:44:26:44:27 | su : SourceUnit | GroovyCompilationUnitTest.java:44:13:44:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:56:37:56:96 | new StringReaderSource(...) : StringReaderSource | GroovyCompilationUnitTest.java:57:52:57:53 | rs : StringReaderSource | provenance | | -| GroovyCompilationUnitTest.java:56:60:56:89 | getParameter(...) : String | GroovyCompilationUnitTest.java:56:37:56:96 | new StringReaderSource(...) : StringReaderSource | provenance | Src:MaD:33 Config | -| GroovyCompilationUnitTest.java:57:29:57:72 | new SourceUnit(...) : SourceUnit | GroovyCompilationUnitTest.java:58:26:58:27 | su : SourceUnit | provenance | | -| GroovyCompilationUnitTest.java:57:52:57:53 | rs : StringReaderSource | GroovyCompilationUnitTest.java:57:29:57:72 | new SourceUnit(...) : SourceUnit | provenance | Config | -| GroovyCompilationUnitTest.java:58:13:58:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:59:13:59:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:58:26:58:27 | su : SourceUnit | GroovyCompilationUnitTest.java:58:13:58:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:64:21:64:93 | new SourceUnit(...) : SourceUnit | GroovyCompilationUnitTest.java:65:26:65:27 | su : SourceUnit | provenance | | -| GroovyCompilationUnitTest.java:64:36:64:74 | new URL(...) : URL | GroovyCompilationUnitTest.java:64:21:64:93 | new SourceUnit(...) : SourceUnit | provenance | Config | -| GroovyCompilationUnitTest.java:64:44:64:73 | getParameter(...) : String | GroovyCompilationUnitTest.java:64:36:64:74 | new URL(...) : URL | provenance | Src:MaD:33 MaD:38 | -| GroovyCompilationUnitTest.java:65:13:65:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:66:13:66:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:65:26:65:27 | su : SourceUnit | GroovyCompilationUnitTest.java:65:13:65:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:70:29:70:85 | create(...) : SourceUnit | GroovyCompilationUnitTest.java:71:26:71:27 | su : SourceUnit | provenance | | -| GroovyCompilationUnitTest.java:70:55:70:84 | getParameter(...) : String | GroovyCompilationUnitTest.java:70:29:70:85 | create(...) : SourceUnit | provenance | Src:MaD:33 Config | -| GroovyCompilationUnitTest.java:71:13:71:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:72:13:72:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:71:26:71:27 | su : SourceUnit | GroovyCompilationUnitTest.java:71:13:71:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:76:29:76:88 | create(...) : SourceUnit | GroovyCompilationUnitTest.java:77:26:77:27 | su : SourceUnit | provenance | | -| GroovyCompilationUnitTest.java:76:55:76:84 | getParameter(...) : String | GroovyCompilationUnitTest.java:76:29:76:88 | create(...) : SourceUnit | provenance | Src:MaD:33 Config | -| GroovyCompilationUnitTest.java:77:13:77:14 | cu [post update] : CompilationUnit | GroovyCompilationUnitTest.java:78:13:78:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:77:26:77:27 | su : SourceUnit | GroovyCompilationUnitTest.java:77:13:77:14 | cu [post update] : CompilationUnit | provenance | Config | -| GroovyCompilationUnitTest.java:88:13:88:14 | cu [post update] : JavaAwareCompilationUnit | GroovyCompilationUnitTest.java:89:13:89:14 | cu | provenance | Sink:MaD:32 | -| GroovyCompilationUnitTest.java:88:34:88:63 | getParameter(...) : String | GroovyCompilationUnitTest.java:88:13:88:14 | cu [post update] : JavaAwareCompilationUnit | provenance | Src:MaD:33 Config | -| GroovyEvalTest.java:14:29:14:58 | getParameter(...) : String | GroovyEvalTest.java:15:21:15:26 | script | provenance | Src:MaD:33 Sink:MaD:27 | -| GroovyEvalTest.java:19:29:19:58 | getParameter(...) : String | GroovyEvalTest.java:20:39:20:44 | script | provenance | Src:MaD:33 Sink:MaD:28 | -| GroovyEvalTest.java:24:29:24:58 | getParameter(...) : String | GroovyEvalTest.java:25:31:25:36 | script | provenance | Src:MaD:33 Sink:MaD:29 | -| GroovyEvalTest.java:30:29:30:58 | getParameter(...) : String | GroovyEvalTest.java:31:43:31:48 | script | provenance | Src:MaD:33 Sink:MaD:30 | -| GroovyEvalTest.java:35:29:35:58 | getParameter(...) : String | GroovyEvalTest.java:36:51:36:56 | script | provenance | Src:MaD:33 Sink:MaD:31 | -| GroovyShellTest.java:22:29:22:58 | getParameter(...) : String | GroovyShellTest.java:23:57:23:62 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:23:36:23:79 | new GroovyCodeSource(...) : GroovyCodeSource | GroovyShellTest.java:24:28:24:30 | gcs | provenance | Sink:MaD:7 | -| GroovyShellTest.java:23:57:23:62 | script : String | GroovyShellTest.java:23:36:23:79 | new GroovyCodeSource(...) : GroovyCodeSource | provenance | Config | -| GroovyShellTest.java:29:29:29:58 | getParameter(...) : String | GroovyShellTest.java:30:46:30:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:30:29:30:52 | new StringReader(...) : StringReader | GroovyShellTest.java:31:28:31:33 | reader | provenance | Sink:MaD:8 | -| GroovyShellTest.java:30:46:30:51 | script : String | GroovyShellTest.java:30:29:30:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:36:29:36:58 | getParameter(...) : String | GroovyShellTest.java:37:46:37:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:37:29:37:52 | new StringReader(...) : StringReader | GroovyShellTest.java:38:28:38:33 | reader | provenance | Sink:MaD:9 | -| GroovyShellTest.java:37:46:37:51 | script : String | GroovyShellTest.java:37:29:37:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:43:29:43:58 | getParameter(...) : String | GroovyShellTest.java:44:28:44:33 | script | provenance | Src:MaD:33 Sink:MaD:10 | -| GroovyShellTest.java:49:29:49:58 | getParameter(...) : String | GroovyShellTest.java:50:28:50:33 | script | provenance | Src:MaD:33 Sink:MaD:11 | -| GroovyShellTest.java:55:29:55:58 | getParameter(...) : String | GroovyShellTest.java:56:28:56:33 | script | provenance | Src:MaD:33 Sink:MaD:12 | -| GroovyShellTest.java:61:29:61:58 | getParameter(...) : String | GroovyShellTest.java:62:33:62:38 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:62:33:62:38 | script : String | GroovyShellTest.java:62:25:62:39 | new URI(...) | provenance | MaD:37 Sink:MaD:17 | -| GroovyShellTest.java:68:29:68:58 | getParameter(...) : String | GroovyShellTest.java:69:46:69:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:69:29:69:52 | new StringReader(...) : StringReader | GroovyShellTest.java:70:25:70:30 | reader | provenance | Sink:MaD:13 | -| GroovyShellTest.java:69:46:69:51 | script : String | GroovyShellTest.java:69:29:69:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:75:29:75:58 | getParameter(...) : String | GroovyShellTest.java:76:46:76:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:76:29:76:52 | new StringReader(...) : StringReader | GroovyShellTest.java:77:25:77:30 | reader | provenance | Sink:MaD:14 | -| GroovyShellTest.java:76:46:76:51 | script : String | GroovyShellTest.java:76:29:76:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:82:29:82:58 | getParameter(...) : String | GroovyShellTest.java:83:25:83:30 | script | provenance | Src:MaD:33 Sink:MaD:15 | -| GroovyShellTest.java:88:29:88:58 | getParameter(...) : String | GroovyShellTest.java:89:25:89:30 | script | provenance | Src:MaD:33 Sink:MaD:16 | -| GroovyShellTest.java:94:29:94:58 | getParameter(...) : String | GroovyShellTest.java:95:33:95:38 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:95:33:95:38 | script : String | GroovyShellTest.java:95:25:95:39 | new URI(...) | provenance | MaD:37 Sink:MaD:17 | -| GroovyShellTest.java:101:29:101:58 | getParameter(...) : String | GroovyShellTest.java:102:57:102:62 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:102:36:102:79 | new GroovyCodeSource(...) : GroovyCodeSource | GroovyShellTest.java:103:23:103:25 | gcs | provenance | Sink:MaD:19 | -| GroovyShellTest.java:102:57:102:62 | script : String | GroovyShellTest.java:102:36:102:79 | new GroovyCodeSource(...) : GroovyCodeSource | provenance | Config | -| GroovyShellTest.java:108:29:108:58 | getParameter(...) : String | GroovyShellTest.java:109:57:109:62 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:109:36:109:79 | new GroovyCodeSource(...) : GroovyCodeSource | GroovyShellTest.java:110:23:110:25 | gcs | provenance | Sink:MaD:18 | -| GroovyShellTest.java:109:57:109:62 | script : String | GroovyShellTest.java:109:36:109:79 | new GroovyCodeSource(...) : GroovyCodeSource | provenance | Config | -| GroovyShellTest.java:115:29:115:58 | getParameter(...) : String | GroovyShellTest.java:116:46:116:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:116:29:116:52 | new StringReader(...) : StringReader | GroovyShellTest.java:117:23:117:28 | reader | provenance | Sink:MaD:21 | -| GroovyShellTest.java:116:46:116:51 | script : String | GroovyShellTest.java:116:29:116:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:122:29:122:58 | getParameter(...) : String | GroovyShellTest.java:123:46:123:51 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:123:29:123:52 | new StringReader(...) : StringReader | GroovyShellTest.java:124:23:124:28 | reader | provenance | Sink:MaD:20 | -| GroovyShellTest.java:123:46:123:51 | script : String | GroovyShellTest.java:123:29:123:52 | new StringReader(...) : StringReader | provenance | MaD:35 | -| GroovyShellTest.java:129:29:129:58 | getParameter(...) : String | GroovyShellTest.java:130:23:130:28 | script | provenance | Src:MaD:33 Sink:MaD:23 | -| GroovyShellTest.java:135:29:135:58 | getParameter(...) : String | GroovyShellTest.java:136:23:136:28 | script | provenance | Src:MaD:33 Sink:MaD:22 | -| GroovyShellTest.java:141:29:141:58 | getParameter(...) : String | GroovyShellTest.java:142:31:142:36 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:142:31:142:36 | script : String | GroovyShellTest.java:142:23:142:37 | new URI(...) | provenance | MaD:37 Sink:MaD:25 | -| GroovyShellTest.java:148:29:148:58 | getParameter(...) : String | GroovyShellTest.java:149:31:149:36 | script : String | provenance | Src:MaD:33 | -| GroovyShellTest.java:149:31:149:36 | script : String | GroovyShellTest.java:149:23:149:37 | new URI(...) | provenance | MaD:37 Sink:MaD:24 | -| TemplateEngineTest.java:14:16:14:45 | getParameter(...) : String | TemplateEngineTest.java:20:29:20:43 | source(...) : String | provenance | Src:MaD:33 | -| TemplateEngineTest.java:20:29:20:43 | source(...) : String | TemplateEngineTest.java:23:35:23:47 | (...)... | provenance | Sink:MaD:26 | -| TemplateEngineTest.java:20:29:20:43 | source(...) : String | TemplateEngineTest.java:24:35:24:49 | (...)... | provenance | Sink:MaD:26 | -| TemplateEngineTest.java:20:29:20:43 | source(...) : String | TemplateEngineTest.java:25:35:25:46 | (...)... | provenance | Sink:MaD:26 | -models -| 1 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (GroovyCodeSource); ; Argument[0]; groovy-injection; manual | -| 2 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (GroovyCodeSource,boolean); ; Argument[0]; groovy-injection; manual | -| 3 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (InputStream,String); ; Argument[0]; groovy-injection; manual | -| 4 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (Reader,String); ; Argument[0]; groovy-injection; manual | -| 5 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (String); ; Argument[0]; groovy-injection; manual | -| 6 | Sink: groovy.lang; GroovyClassLoader; false; parseClass; (String,String); ; Argument[0]; groovy-injection; manual | -| 7 | Sink: groovy.lang; GroovyShell; false; evaluate; (GroovyCodeSource); ; Argument[0]; groovy-injection; manual | -| 8 | Sink: groovy.lang; GroovyShell; false; evaluate; (Reader); ; Argument[0]; groovy-injection; manual | -| 9 | Sink: groovy.lang; GroovyShell; false; evaluate; (Reader,String); ; Argument[0]; groovy-injection; manual | -| 10 | Sink: groovy.lang; GroovyShell; false; evaluate; (String); ; Argument[0]; groovy-injection; manual | -| 11 | Sink: groovy.lang; GroovyShell; false; evaluate; (String,String); ; Argument[0]; groovy-injection; manual | -| 12 | Sink: groovy.lang; GroovyShell; false; evaluate; (String,String,String); ; Argument[0]; groovy-injection; manual | -| 13 | Sink: groovy.lang; GroovyShell; false; parse; (Reader); ; Argument[0]; groovy-injection; manual | -| 14 | Sink: groovy.lang; GroovyShell; false; parse; (Reader,String); ; Argument[0]; groovy-injection; manual | -| 15 | Sink: groovy.lang; GroovyShell; false; parse; (String); ; Argument[0]; groovy-injection; manual | -| 16 | Sink: groovy.lang; GroovyShell; false; parse; (String,String); ; Argument[0]; groovy-injection; manual | -| 17 | Sink: groovy.lang; GroovyShell; false; parse; (URI); ; Argument[0]; groovy-injection; manual | -| 18 | Sink: groovy.lang; GroovyShell; false; run; (GroovyCodeSource,List); ; Argument[0]; groovy-injection; manual | -| 19 | Sink: groovy.lang; GroovyShell; false; run; (GroovyCodeSource,String[]); ; Argument[0]; groovy-injection; manual | -| 20 | Sink: groovy.lang; GroovyShell; false; run; (Reader,String,List); ; Argument[0]; groovy-injection; manual | -| 21 | Sink: groovy.lang; GroovyShell; false; run; (Reader,String,String[]); ; Argument[0]; groovy-injection; manual | -| 22 | Sink: groovy.lang; GroovyShell; false; run; (String,String,List); ; Argument[0]; groovy-injection; manual | -| 23 | Sink: groovy.lang; GroovyShell; false; run; (String,String,String[]); ; Argument[0]; groovy-injection; manual | -| 24 | Sink: groovy.lang; GroovyShell; false; run; (URI,List); ; Argument[0]; groovy-injection; manual | -| 25 | Sink: groovy.lang; GroovyShell; false; run; (URI,String[]); ; Argument[0]; groovy-injection; manual | -| 26 | Sink: groovy.text; TemplateEngine; true; createTemplate; ; ; Argument[0]; groovy-injection; manual | -| 27 | Sink: groovy.util; Eval; false; me; (String); ; Argument[0]; groovy-injection; manual | -| 28 | Sink: groovy.util; Eval; false; me; (String,Object,String); ; Argument[2]; groovy-injection; manual | -| 29 | Sink: groovy.util; Eval; false; x; (Object,String); ; Argument[1]; groovy-injection; manual | -| 30 | Sink: groovy.util; Eval; false; xy; (Object,Object,String); ; Argument[2]; groovy-injection; manual | -| 31 | Sink: groovy.util; Eval; false; xyz; (Object,Object,Object,String); ; Argument[3]; groovy-injection; manual | -| 32 | Sink: org.codehaus.groovy.control; CompilationUnit; false; compile; ; ; Argument[this]; groovy-injection; manual | -| 33 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 34 | Summary: java.io; ByteArrayInputStream; false; ByteArrayInputStream; ; ; Argument[0]; Argument[this]; taint; manual | -| 35 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 36 | Summary: java.lang; String; false; getBytes; ; ; Argument[this]; ReturnValue; taint; manual | -| 37 | Summary: java.net; URI; false; URI; (String); ; Argument[0]; Argument[this]; taint; manual | -| 38 | Summary: java.net; URL; false; URL; (String); ; Argument[0]; Argument[this]; taint; manual | -nodes -| GroovyClassLoaderTest.java:17:29:17:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:19:36:19:79 | new GroovyCodeSource(...) : GroovyCodeSource | semmle.label | new GroovyCodeSource(...) : GroovyCodeSource | -| GroovyClassLoaderTest.java:19:57:19:62 | script : String | semmle.label | script : String | -| GroovyClassLoaderTest.java:20:36:20:38 | gcs | semmle.label | gcs | -| GroovyClassLoaderTest.java:24:29:24:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:26:36:26:79 | new GroovyCodeSource(...) : GroovyCodeSource | semmle.label | new GroovyCodeSource(...) : GroovyCodeSource | -| GroovyClassLoaderTest.java:26:57:26:62 | script : String | semmle.label | script : String | -| GroovyClassLoaderTest.java:27:36:27:38 | gcs | semmle.label | gcs | -| GroovyClassLoaderTest.java:31:29:31:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:33:36:33:78 | new ByteArrayInputStream(...) | semmle.label | new ByteArrayInputStream(...) | -| GroovyClassLoaderTest.java:33:61:33:66 | script : String | semmle.label | script : String | -| GroovyClassLoaderTest.java:33:61:33:77 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | -| GroovyClassLoaderTest.java:37:29:37:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:39:36:39:59 | new StringReader(...) | semmle.label | new StringReader(...) | -| GroovyClassLoaderTest.java:39:53:39:58 | script : String | semmle.label | script : String | -| GroovyClassLoaderTest.java:43:29:43:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:45:36:45:41 | script | semmle.label | script | -| GroovyClassLoaderTest.java:49:29:49:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyClassLoaderTest.java:51:36:51:41 | script | semmle.label | script | -| GroovyCompilationUnitTest.java:21:13:21:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:21:34:21:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:22:13:22:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:31:13:31:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:32:21:32:87 | new ByteArrayInputStream(...) : ByteArrayInputStream | semmle.label | new ByteArrayInputStream(...) : ByteArrayInputStream | -| GroovyCompilationUnitTest.java:32:46:32:75 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:32:46:32:86 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | -| GroovyCompilationUnitTest.java:33:13:33:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:37:13:37:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:37:26:37:64 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| GroovyCompilationUnitTest.java:37:34:37:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:38:13:38:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:43:21:43:92 | new SourceUnit(...) : SourceUnit | semmle.label | new SourceUnit(...) : SourceUnit | -| GroovyCompilationUnitTest.java:43:44:43:73 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:44:13:44:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:44:26:44:27 | su : SourceUnit | semmle.label | su : SourceUnit | -| GroovyCompilationUnitTest.java:45:13:45:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:56:37:56:96 | new StringReaderSource(...) : StringReaderSource | semmle.label | new StringReaderSource(...) : StringReaderSource | -| GroovyCompilationUnitTest.java:56:60:56:89 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:57:29:57:72 | new SourceUnit(...) : SourceUnit | semmle.label | new SourceUnit(...) : SourceUnit | -| GroovyCompilationUnitTest.java:57:52:57:53 | rs : StringReaderSource | semmle.label | rs : StringReaderSource | -| GroovyCompilationUnitTest.java:58:13:58:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:58:26:58:27 | su : SourceUnit | semmle.label | su : SourceUnit | -| GroovyCompilationUnitTest.java:59:13:59:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:64:21:64:93 | new SourceUnit(...) : SourceUnit | semmle.label | new SourceUnit(...) : SourceUnit | -| GroovyCompilationUnitTest.java:64:36:64:74 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| GroovyCompilationUnitTest.java:64:44:64:73 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:65:13:65:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:65:26:65:27 | su : SourceUnit | semmle.label | su : SourceUnit | -| GroovyCompilationUnitTest.java:66:13:66:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:70:29:70:85 | create(...) : SourceUnit | semmle.label | create(...) : SourceUnit | -| GroovyCompilationUnitTest.java:70:55:70:84 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:71:13:71:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:71:26:71:27 | su : SourceUnit | semmle.label | su : SourceUnit | -| GroovyCompilationUnitTest.java:72:13:72:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:76:29:76:88 | create(...) : SourceUnit | semmle.label | create(...) : SourceUnit | -| GroovyCompilationUnitTest.java:76:55:76:84 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:77:13:77:14 | cu [post update] : CompilationUnit | semmle.label | cu [post update] : CompilationUnit | -| GroovyCompilationUnitTest.java:77:26:77:27 | su : SourceUnit | semmle.label | su : SourceUnit | -| GroovyCompilationUnitTest.java:78:13:78:14 | cu | semmle.label | cu | -| GroovyCompilationUnitTest.java:88:13:88:14 | cu [post update] : JavaAwareCompilationUnit | semmle.label | cu [post update] : JavaAwareCompilationUnit | -| GroovyCompilationUnitTest.java:88:34:88:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyCompilationUnitTest.java:89:13:89:14 | cu | semmle.label | cu | -| GroovyEvalTest.java:14:29:14:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyEvalTest.java:15:21:15:26 | script | semmle.label | script | -| GroovyEvalTest.java:19:29:19:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyEvalTest.java:20:39:20:44 | script | semmle.label | script | -| GroovyEvalTest.java:24:29:24:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyEvalTest.java:25:31:25:36 | script | semmle.label | script | -| GroovyEvalTest.java:30:29:30:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyEvalTest.java:31:43:31:48 | script | semmle.label | script | -| GroovyEvalTest.java:35:29:35:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyEvalTest.java:36:51:36:56 | script | semmle.label | script | -| GroovyShellTest.java:22:29:22:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:23:36:23:79 | new GroovyCodeSource(...) : GroovyCodeSource | semmle.label | new GroovyCodeSource(...) : GroovyCodeSource | -| GroovyShellTest.java:23:57:23:62 | script : String | semmle.label | script : String | -| GroovyShellTest.java:24:28:24:30 | gcs | semmle.label | gcs | -| GroovyShellTest.java:29:29:29:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:30:29:30:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:30:46:30:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:31:28:31:33 | reader | semmle.label | reader | -| GroovyShellTest.java:36:29:36:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:37:29:37:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:37:46:37:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:38:28:38:33 | reader | semmle.label | reader | -| GroovyShellTest.java:43:29:43:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:44:28:44:33 | script | semmle.label | script | -| GroovyShellTest.java:49:29:49:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:50:28:50:33 | script | semmle.label | script | -| GroovyShellTest.java:55:29:55:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:56:28:56:33 | script | semmle.label | script | -| GroovyShellTest.java:61:29:61:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:62:25:62:39 | new URI(...) | semmle.label | new URI(...) | -| GroovyShellTest.java:62:33:62:38 | script : String | semmle.label | script : String | -| GroovyShellTest.java:68:29:68:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:69:29:69:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:69:46:69:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:70:25:70:30 | reader | semmle.label | reader | -| GroovyShellTest.java:75:29:75:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:76:29:76:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:76:46:76:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:77:25:77:30 | reader | semmle.label | reader | -| GroovyShellTest.java:82:29:82:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:83:25:83:30 | script | semmle.label | script | -| GroovyShellTest.java:88:29:88:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:89:25:89:30 | script | semmle.label | script | -| GroovyShellTest.java:94:29:94:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:95:25:95:39 | new URI(...) | semmle.label | new URI(...) | -| GroovyShellTest.java:95:33:95:38 | script : String | semmle.label | script : String | -| GroovyShellTest.java:101:29:101:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:102:36:102:79 | new GroovyCodeSource(...) : GroovyCodeSource | semmle.label | new GroovyCodeSource(...) : GroovyCodeSource | -| GroovyShellTest.java:102:57:102:62 | script : String | semmle.label | script : String | -| GroovyShellTest.java:103:23:103:25 | gcs | semmle.label | gcs | -| GroovyShellTest.java:108:29:108:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:109:36:109:79 | new GroovyCodeSource(...) : GroovyCodeSource | semmle.label | new GroovyCodeSource(...) : GroovyCodeSource | -| GroovyShellTest.java:109:57:109:62 | script : String | semmle.label | script : String | -| GroovyShellTest.java:110:23:110:25 | gcs | semmle.label | gcs | -| GroovyShellTest.java:115:29:115:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:116:29:116:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:116:46:116:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:117:23:117:28 | reader | semmle.label | reader | -| GroovyShellTest.java:122:29:122:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:123:29:123:52 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| GroovyShellTest.java:123:46:123:51 | script : String | semmle.label | script : String | -| GroovyShellTest.java:124:23:124:28 | reader | semmle.label | reader | -| GroovyShellTest.java:129:29:129:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:130:23:130:28 | script | semmle.label | script | -| GroovyShellTest.java:135:29:135:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:136:23:136:28 | script | semmle.label | script | -| GroovyShellTest.java:141:29:141:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:142:23:142:37 | new URI(...) | semmle.label | new URI(...) | -| GroovyShellTest.java:142:31:142:36 | script : String | semmle.label | script : String | -| GroovyShellTest.java:148:29:148:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GroovyShellTest.java:149:23:149:37 | new URI(...) | semmle.label | new URI(...) | -| GroovyShellTest.java:149:31:149:36 | script : String | semmle.label | script : String | -| TemplateEngineTest.java:14:16:14:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| TemplateEngineTest.java:20:29:20:43 | source(...) : String | semmle.label | source(...) : String | -| TemplateEngineTest.java:22:35:22:64 | getParameter(...) | semmle.label | getParameter(...) | -| TemplateEngineTest.java:23:35:23:47 | (...)... | semmle.label | (...)... | -| TemplateEngineTest.java:24:35:24:49 | (...)... | semmle.label | (...)... | -| TemplateEngineTest.java:25:35:25:46 | (...)... | semmle.label | (...)... | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.qlref deleted file mode 100644 index b19d5fce5227..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/GroovyInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyShellTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyShellTest.java deleted file mode 100644 index 6e2e773b03c1..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/GroovyShellTest.java +++ /dev/null @@ -1,153 +0,0 @@ -import java.io.IOException; -import java.io.Reader; -import java.io.StringReader; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import groovy.lang.GroovyCodeSource; -import groovy.lang.GroovyShell; - -public class GroovyShellTest extends HttpServlet { - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - - // "groovy.lang;GroovyShell;false;evaluate;(GroovyCodeSource);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); - shell.evaluate(gcs); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(Reader);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.evaluate(reader); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(Reader,String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.evaluate(reader, "_"); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.evaluate(script); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(String,String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.evaluate(script, "test"); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(String,String,String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.evaluate(script, "test", "test2"); // $ Alert - } - // "groovy.lang;GroovyShell;false;evaluate;(URI);;Argument[0];groovy;manual", - try { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.parse(new URI(script)); // $ Alert - } catch (URISyntaxException e) { - } - // "groovy.lang;GroovyShell;false;parse;(Reader);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.parse(reader); // $ Alert - } - // "groovy.lang;GroovyShell;false;parse;(Reader,String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.parse(reader, "_"); // $ Alert - } - // "groovy.lang;GroovyShell;false;parse;(String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.parse(script); // $ Alert - } - // "groovy.lang;GroovyShell;false;parse;(String,String);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.parse(script, "_"); // $ Alert - } - // "groovy.lang;GroovyShell;false;parse;(URI);;Argument[0];groovy;manual", - try { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.parse(new URI(script)); // $ Alert - } catch (URISyntaxException e) { - } - // "groovy.lang;GroovyShell;false;run;(GroovyCodeSource,String[]);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); - shell.run(gcs, new String[] {}); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(GroovyCodeSource,List);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); - shell.run(gcs, new ArrayList()); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(Reader,String,String[]);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.run(reader, "test", new String[] {}); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(Reader,String,List);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - Reader reader = new StringReader(script); - shell.run(reader, "test", new ArrayList()); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(String,String,String[]);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.run(script, "_", new String[] {}); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(String,String,List);;Argument[0];groovy;manual", - { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.run(script, "_", new ArrayList()); // $ Alert - } - // "groovy.lang;GroovyShell;false;run;(URI,String[]);;Argument[0];groovy;manual", - try { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.run(new URI(script), new String[] {}); // $ Alert - } catch (URISyntaxException e) { - } - // "groovy.lang;GroovyShell;false;run;(URI,List);;Argument[0];groovy;manual", - try { - GroovyShell shell = new GroovyShell(); - String script = request.getParameter("script"); // $ Source - shell.run(new URI(script), new ArrayList()); // $ Alert - } catch (URISyntaxException e) { - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/TemplateEngineTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/TemplateEngineTest.java deleted file mode 100644 index a046b9cd332a..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/TemplateEngineTest.java +++ /dev/null @@ -1,30 +0,0 @@ -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.net.URL; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import groovy.text.TemplateEngine; - -public class TemplateEngineTest extends HttpServlet { - - private Object source(HttpServletRequest request) { - return request.getParameter("script"); // $ Source - } - - protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - try { - Object script = source(request); - TemplateEngine engine = null; - engine.createTemplate(request.getParameter("script")); // $ Alert - engine.createTemplate((File) script); // $ Alert - engine.createTemplate((Reader) script); // $ Alert - engine.createTemplate((URL) script); // $ Alert - } catch (Exception e) { - } - - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/options b/java/ql/test/query-tests/security/CWE-094/GroovyInjection/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/GroovyInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql new file mode 100644 index 000000000000..26f32638d918 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/GroovyInjectionTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.GroovyInjectionQuery +import utils.test.InlineExpectationsTest + +module HasGroovyInjectionTest implements TestSig { + string getARelevantTag() { result = "hasGroovyInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasGroovyInjection" and + exists(DataFlow::Node sink | GroovyInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/GroovyShellTest.java b/java/ql/test/query-tests/security/CWE-094/GroovyShellTest.java new file mode 100644 index 000000000000..1e5b806f18e3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/GroovyShellTest.java @@ -0,0 +1,154 @@ +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import groovy.lang.GroovyCodeSource; +import groovy.lang.GroovyShell; + +public class GroovyShellTest extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + // "groovy.lang;GroovyShell;false;evaluate;(GroovyCodeSource);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); + shell.evaluate(gcs); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(Reader);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.evaluate(reader); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(Reader,String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.evaluate(reader, "_"); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.evaluate(script); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(String,String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.evaluate(script, "test"); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(String,String,String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.evaluate(script, "test", "test2"); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;evaluate;(URI);;Argument[0];groovy;manual", + try { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.parse(new URI(script)); // $hasGroovyInjection + } catch (URISyntaxException e) { + } + // "groovy.lang;GroovyShell;false;parse;(Reader);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.parse(reader); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;parse;(Reader,String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.parse(reader, "_"); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;parse;(String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.parse(script); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;parse;(String,String);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.parse(script, "_"); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;parse;(URI);;Argument[0];groovy;manual", + try { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.parse(new URI(script)); // $hasGroovyInjection + } catch (URISyntaxException e) { + } + // "groovy.lang;GroovyShell;false;run;(GroovyCodeSource,String[]);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); + shell.run(gcs, new String[] {}); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(GroovyCodeSource,List);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + GroovyCodeSource gcs = new GroovyCodeSource(script, "test", "Test"); + shell.run(gcs, new ArrayList()); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(Reader,String,String[]);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.run(reader, "test", new String[] {}); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(Reader,String,List);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + Reader reader = new StringReader(script); + shell.run(reader, "test", new ArrayList()); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(String,String,String[]);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.run(script, "_", new String[] {}); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(String,String,List);;Argument[0];groovy;manual", + { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.run(script, "_", new ArrayList()); // $hasGroovyInjection + } + // "groovy.lang;GroovyShell;false;run;(URI,String[]);;Argument[0];groovy;manual", + try { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.run(new URI(script), new String[] {}); // $hasGroovyInjection + } catch (URISyntaxException e) { + } + // "groovy.lang;GroovyShell;false;run;(URI,List);;Argument[0];groovy;manual", + try { + GroovyShell shell = new GroovyShell(); + String script = request.getParameter("script"); + shell.run(new URI(script), new ArrayList()); // $hasGroovyInjection + } catch (URISyntaxException e) { + } + } +} + diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl2Injection.java b/java/ql/test/query-tests/security/CWE-094/Jexl2Injection.java similarity index 90% rename from java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl2Injection.java rename to java/ql/test/query-tests/security/CWE-094/Jexl2Injection.java index b306cf4e535a..d7ee659a4c85 100644 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl2Injection.java +++ b/java/ql/test/query-tests/security/CWE-094/Jexl2Injection.java @@ -11,21 +11,21 @@ private static void runJexlExpression(String jexlExpr) { JexlEngine jexl = new JexlEngine(); Expression e = jexl.createExpression(jexlExpr); JexlContext jc = new MapContext(); - e.evaluate(jc); // $ Alert + e.evaluate(jc); // $hasJexlInjection } private static void runJexlExpressionWithJexlInfo(String jexlExpr) { JexlEngine jexl = new JexlEngine(); Expression e = jexl.createExpression(jexlExpr, new DebugInfo("unknown", 0, 0)); JexlContext jc = new MapContext(); - e.evaluate(jc); // $ Alert + e.evaluate(jc); // $hasJexlInjection } private static void runJexlScript(String jexlExpr) { JexlEngine jexl = new JexlEngine(); Script script = jexl.createScript(jexlExpr); JexlContext jc = new MapContext(); - script.execute(jc); // $ Alert + script.execute(jc); // $hasJexlInjection } private static void runJexlScriptViaCallable(String jexlExpr) { @@ -34,7 +34,7 @@ private static void runJexlScriptViaCallable(String jexlExpr) { JexlContext jc = new MapContext(); try { - script.callable(jc).call(); // $ Alert + script.callable(jc).call(); // $hasJexlInjection } catch (Exception e) { throw new RuntimeException(e); } @@ -42,37 +42,37 @@ private static void runJexlScriptViaCallable(String jexlExpr) { private static void runJexlExpressionViaGetProperty(String jexlExpr) { JexlEngine jexl = new JexlEngine(); - jexl.getProperty(new Object(), jexlExpr); // $ Alert + jexl.getProperty(new Object(), jexlExpr); // $hasJexlInjection } private static void runJexlExpressionViaSetProperty(String jexlExpr) { JexlEngine jexl = new JexlEngine(); - jexl.setProperty(new Object(), jexlExpr, new Object()); // $ Alert + jexl.setProperty(new Object(), jexlExpr, new Object()); // $hasJexlInjection } private static void runJexlExpressionViaUnifiedJEXLParseAndEvaluate(String jexlExpr) { JexlEngine jexl = new JexlEngine(); UnifiedJEXL unifiedJEXL = new UnifiedJEXL(jexl); - unifiedJEXL.parse(jexlExpr).evaluate(new MapContext()); // $ Alert + unifiedJEXL.parse(jexlExpr).evaluate(new MapContext()); // $hasJexlInjection } private static void runJexlExpressionViaUnifiedJEXLParseAndPrepare(String jexlExpr) { JexlEngine jexl = new JexlEngine(); UnifiedJEXL unifiedJEXL = new UnifiedJEXL(jexl); - unifiedJEXL.parse(jexlExpr).prepare(new MapContext()); // $ Alert + unifiedJEXL.parse(jexlExpr).prepare(new MapContext()); // $hasJexlInjection } private static void runJexlExpressionViaUnifiedJEXLTemplateEvaluate(String jexlExpr) { JexlEngine jexl = new JexlEngine(); UnifiedJEXL unifiedJEXL = new UnifiedJEXL(jexl); - unifiedJEXL.createTemplate(jexlExpr).evaluate(new MapContext(), new StringWriter()); // $ Alert + unifiedJEXL.createTemplate(jexlExpr).evaluate(new MapContext(), new StringWriter()); // $hasJexlInjection } private static void testWithSocket(Consumer action) throws Exception { try (ServerSocket serverSocket = new ServerSocket(0)) { try (Socket socket = serverSocket.accept()) { byte[] bytes = new byte[1024]; - int n = socket.getInputStream().read(bytes); // $ Source + int n = socket.getInputStream().read(bytes); String jexlExpr = new String(bytes, 0, n); action.accept(jexlExpr); } diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl3Injection.java b/java/ql/test/query-tests/security/CWE-094/Jexl3Injection.java similarity index 90% rename from java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl3Injection.java rename to java/ql/test/query-tests/security/CWE-094/Jexl3Injection.java index c047bb5b3158..0300b8ffe3f6 100644 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjection/Jexl3Injection.java +++ b/java/ql/test/query-tests/security/CWE-094/Jexl3Injection.java @@ -18,21 +18,21 @@ private static void runJexlExpression(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JexlExpression e = jexl.createExpression(jexlExpr); JexlContext jc = new MapContext(); - e.evaluate(jc); // $ Alert + e.evaluate(jc); // $hasJexlInjection } private static void runJexlExpressionWithJexlInfo(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JexlExpression e = jexl.createExpression(new JexlInfo("unknown", 0, 0), jexlExpr); JexlContext jc = new MapContext(); - e.evaluate(jc); // $ Alert + e.evaluate(jc); // $hasJexlInjection } private static void runJexlScript(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JexlScript script = jexl.createScript(jexlExpr); JexlContext jc = new MapContext(); - script.execute(jc); // $ Alert + script.execute(jc); // $hasJexlInjection } private static void runJexlScriptViaCallable(String jexlExpr) { @@ -41,7 +41,7 @@ private static void runJexlScriptViaCallable(String jexlExpr) { JexlContext jc = new MapContext(); try { - script.callable(jc).call(); // $ Alert + script.callable(jc).call(); // $hasJexlInjection } catch (Exception e) { throw new RuntimeException(e); } @@ -49,30 +49,30 @@ private static void runJexlScriptViaCallable(String jexlExpr) { private static void runJexlExpressionViaGetProperty(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); - jexl.getProperty(new Object(), jexlExpr); // $ Alert + jexl.getProperty(new Object(), jexlExpr); // $hasJexlInjection } private static void runJexlExpressionViaSetProperty(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); - jexl.setProperty(new Object(), jexlExpr, new Object()); // $ Alert + jexl.setProperty(new Object(), jexlExpr, new Object()); // $hasJexlInjection } private static void runJexlExpressionViaJxltEngineExpressionEvaluate(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JxltEngine jxlt = jexl.createJxltEngine(); - jxlt.createExpression(jexlExpr).evaluate(new MapContext()); // $ Alert + jxlt.createExpression(jexlExpr).evaluate(new MapContext()); // $hasJexlInjection } private static void runJexlExpressionViaJxltEngineExpressionPrepare(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JxltEngine jxlt = jexl.createJxltEngine(); - jxlt.createExpression(jexlExpr).prepare(new MapContext()); // $ Alert + jxlt.createExpression(jexlExpr).prepare(new MapContext()); // $hasJexlInjection } private static void runJexlExpressionViaJxltEngineTemplateEvaluate(String jexlExpr) { JexlEngine jexl = new JexlBuilder().create(); JxltEngine jxlt = jexl.createJxltEngine(); - jxlt.createTemplate(jexlExpr).evaluate(new MapContext(), new StringWriter()); // $ Alert + jxlt.createTemplate(jexlExpr).evaluate(new MapContext(), new StringWriter()); // $hasJexlInjection } private static void runJexlExpressionViaCallable(String jexlExpr) { @@ -81,7 +81,7 @@ private static void runJexlExpressionViaCallable(String jexlExpr) { JexlContext jc = new MapContext(); try { - e.callable(jc).call(); // $ Alert + e.callable(jc).call(); // $hasJexlInjection } catch (Exception ex) { throw new RuntimeException(ex); } @@ -91,7 +91,7 @@ private static void testWithSocket(Consumer action) throws Exception { try (ServerSocket serverSocket = new ServerSocket(0)) { try (Socket socket = serverSocket.accept()) { byte[] bytes = new byte[1024]; - int n = socket.getInputStream().read(bytes); // $ Source + int n = socket.getInputStream().read(bytes); String jexlExpr = new String(bytes, 0, n); action.accept(jexlExpr); } @@ -141,14 +141,14 @@ public static void testWithJexlExpressionCallable() throws Exception { } @PostMapping("/request") - public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromPathVariable(@PathVariable String expr) { // $ Source + public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromPathVariable(@PathVariable String expr) { runJexlExpression(expr); return ResponseEntity.ok(HttpStatus.OK); } @PostMapping("/request") - public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromRequestBody(@RequestBody Data data) { // $ Source + public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromRequestBody(@RequestBody Data data) { String expr = data.getExpr(); runJexlExpression(expr); @@ -158,7 +158,7 @@ public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromRequestBody(@ @PostMapping("/request") public ResponseEntity testWithSpringControllerThatEvaluatesJexlFromRequestBodyWithNestedObjects( - @RequestBody CustomRequest customRequest) { // $ Source + @RequestBody CustomRequest customRequest) { String expr = customRequest.getData().getExpr(); runJexlExpression(expr); diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.expected deleted file mode 100644 index 24e02a7ac019..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.expected +++ /dev/null @@ -1,303 +0,0 @@ -#select -| Jexl2Injection.java:14:9:14:9 | e | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:14:9:14:9 | e | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:21:9:21:9 | e | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:21:9:21:9 | e | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:28:9:28:14 | script | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:28:9:28:14 | script | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:37:13:37:18 | script | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:37:13:37:18 | script | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:45:40:45:47 | jexlExpr | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:45:40:45:47 | jexlExpr | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:50:40:50:47 | jexlExpr | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:50:40:50:47 | jexlExpr | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:56:9:56:35 | parse(...) | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:56:9:56:35 | parse(...) | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:62:9:62:35 | parse(...) | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:62:9:62:35 | parse(...) | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl2Injection.java:68:9:68:44 | createTemplate(...) | Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:68:9:68:44 | createTemplate(...) | JEXL expression depends on a $@. | Jexl2Injection.java:75:25:75:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:21:9:21:9 | e | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:21:9:21:9 | e | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:21:9:21:9 | e | Jexl3Injection.java:144:85:144:109 | expr : String | Jexl3Injection.java:21:9:21:9 | e | JEXL expression depends on a $@. | Jexl3Injection.java:144:85:144:109 | expr | user-provided value | -| Jexl3Injection.java:21:9:21:9 | e | Jexl3Injection.java:151:84:151:105 | data : Data | Jexl3Injection.java:21:9:21:9 | e | JEXL expression depends on a $@. | Jexl3Injection.java:151:84:151:105 | data | user-provided value | -| Jexl3Injection.java:21:9:21:9 | e | Jexl3Injection.java:161:13:161:52 | customRequest : CustomRequest | Jexl3Injection.java:21:9:21:9 | e | JEXL expression depends on a $@. | Jexl3Injection.java:161:13:161:52 | customRequest | user-provided value | -| Jexl3Injection.java:28:9:28:9 | e | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:28:9:28:9 | e | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:35:9:35:14 | script | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:35:9:35:14 | script | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:44:13:44:18 | script | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:44:13:44:18 | script | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:52:40:52:47 | jexlExpr | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:52:40:52:47 | jexlExpr | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:57:40:57:47 | jexlExpr | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:57:40:57:47 | jexlExpr | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:63:9:63:39 | createExpression(...) | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:63:9:63:39 | createExpression(...) | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:69:9:69:39 | createExpression(...) | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:69:9:69:39 | createExpression(...) | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:75:9:75:37 | createTemplate(...) | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:75:9:75:37 | createTemplate(...) | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -| Jexl3Injection.java:84:13:84:13 | e | Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:84:13:84:13 | e | JEXL expression depends on a $@. | Jexl3Injection.java:94:25:94:47 | getInputStream(...) | user-provided value | -edges -| Jexl2Injection.java:10:43:10:57 | jexlExpr : String | Jexl2Injection.java:12:46:12:53 | jexlExpr : String | provenance | | -| Jexl2Injection.java:12:24:12:54 | createExpression(...) : Expression | Jexl2Injection.java:14:9:14:9 | e | provenance | Sink:MaD:1 | -| Jexl2Injection.java:12:46:12:53 | jexlExpr : String | Jexl2Injection.java:12:24:12:54 | createExpression(...) : Expression | provenance | Config | -| Jexl2Injection.java:17:55:17:69 | jexlExpr : String | Jexl2Injection.java:19:46:19:53 | jexlExpr : String | provenance | | -| Jexl2Injection.java:19:24:19:86 | createExpression(...) : Expression | Jexl2Injection.java:21:9:21:9 | e | provenance | Sink:MaD:1 | -| Jexl2Injection.java:19:46:19:53 | jexlExpr : String | Jexl2Injection.java:19:24:19:86 | createExpression(...) : Expression | provenance | Config | -| Jexl2Injection.java:24:39:24:53 | jexlExpr : String | Jexl2Injection.java:26:43:26:50 | jexlExpr : String | provenance | | -| Jexl2Injection.java:26:25:26:51 | createScript(...) : Script | Jexl2Injection.java:28:9:28:14 | script | provenance | Sink:MaD:5 | -| Jexl2Injection.java:26:43:26:50 | jexlExpr : String | Jexl2Injection.java:26:25:26:51 | createScript(...) : Script | provenance | Config | -| Jexl2Injection.java:31:50:31:64 | jexlExpr : String | Jexl2Injection.java:33:43:33:50 | jexlExpr : String | provenance | | -| Jexl2Injection.java:33:25:33:51 | createScript(...) : Script | Jexl2Injection.java:37:13:37:18 | script | provenance | Sink:MaD:4 | -| Jexl2Injection.java:33:43:33:50 | jexlExpr : String | Jexl2Injection.java:33:25:33:51 | createScript(...) : Script | provenance | Config | -| Jexl2Injection.java:43:57:43:71 | jexlExpr : String | Jexl2Injection.java:45:40:45:47 | jexlExpr | provenance | Sink:MaD:2 | -| Jexl2Injection.java:48:57:48:71 | jexlExpr : String | Jexl2Injection.java:50:40:50:47 | jexlExpr | provenance | Sink:MaD:3 | -| Jexl2Injection.java:53:73:53:87 | jexlExpr : String | Jexl2Injection.java:56:27:56:34 | jexlExpr : String | provenance | | -| Jexl2Injection.java:56:27:56:34 | jexlExpr : String | Jexl2Injection.java:56:9:56:35 | parse(...) | provenance | Config Sink:MaD:6 | -| Jexl2Injection.java:59:72:59:86 | jexlExpr : String | Jexl2Injection.java:62:27:62:34 | jexlExpr : String | provenance | | -| Jexl2Injection.java:62:27:62:34 | jexlExpr : String | Jexl2Injection.java:62:9:62:35 | parse(...) | provenance | Config Sink:MaD:7 | -| Jexl2Injection.java:65:73:65:87 | jexlExpr : String | Jexl2Injection.java:68:36:68:43 | jexlExpr : String | provenance | | -| Jexl2Injection.java:68:36:68:43 | jexlExpr : String | Jexl2Injection.java:68:9:68:44 | createTemplate(...) | provenance | Config Sink:MaD:8 | -| Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | Jexl2Injection.java:75:54:75:58 | bytes [post update] : byte[] | provenance | Src:MaD:18 MaD:19 | -| Jexl2Injection.java:75:54:75:58 | bytes [post update] : byte[] | Jexl2Injection.java:76:46:76:50 | bytes : byte[] | provenance | | -| Jexl2Injection.java:76:35:76:57 | new String(...) : String | Jexl2Injection.java:77:31:77:38 | jexlExpr : String | provenance | | -| Jexl2Injection.java:76:46:76:50 | bytes : byte[] | Jexl2Injection.java:76:35:76:57 | new String(...) : String | provenance | MaD:20 | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:85:24:85:56 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:89:24:89:68 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:93:24:93:52 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:97:24:97:63 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:101:24:101:70 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:105:24:105:70 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:109:24:109:86 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:113:24:113:85 | jexlExpr : String | provenance | | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | Jexl2Injection.java:117:24:117:86 | jexlExpr : String | provenance | | -| Jexl2Injection.java:85:24:85:56 | jexlExpr : String | Jexl2Injection.java:10:43:10:57 | jexlExpr : String | provenance | | -| Jexl2Injection.java:85:24:85:56 | jexlExpr : String | Jexl2Injection.java:85:24:85:56 | jexlExpr : String | provenance | | -| Jexl2Injection.java:89:24:89:68 | jexlExpr : String | Jexl2Injection.java:17:55:17:69 | jexlExpr : String | provenance | | -| Jexl2Injection.java:89:24:89:68 | jexlExpr : String | Jexl2Injection.java:89:24:89:68 | jexlExpr : String | provenance | | -| Jexl2Injection.java:93:24:93:52 | jexlExpr : String | Jexl2Injection.java:24:39:24:53 | jexlExpr : String | provenance | | -| Jexl2Injection.java:93:24:93:52 | jexlExpr : String | Jexl2Injection.java:93:24:93:52 | jexlExpr : String | provenance | | -| Jexl2Injection.java:97:24:97:63 | jexlExpr : String | Jexl2Injection.java:31:50:31:64 | jexlExpr : String | provenance | | -| Jexl2Injection.java:97:24:97:63 | jexlExpr : String | Jexl2Injection.java:97:24:97:63 | jexlExpr : String | provenance | | -| Jexl2Injection.java:101:24:101:70 | jexlExpr : String | Jexl2Injection.java:43:57:43:71 | jexlExpr : String | provenance | | -| Jexl2Injection.java:101:24:101:70 | jexlExpr : String | Jexl2Injection.java:101:24:101:70 | jexlExpr : String | provenance | | -| Jexl2Injection.java:105:24:105:70 | jexlExpr : String | Jexl2Injection.java:48:57:48:71 | jexlExpr : String | provenance | | -| Jexl2Injection.java:105:24:105:70 | jexlExpr : String | Jexl2Injection.java:105:24:105:70 | jexlExpr : String | provenance | | -| Jexl2Injection.java:109:24:109:86 | jexlExpr : String | Jexl2Injection.java:53:73:53:87 | jexlExpr : String | provenance | | -| Jexl2Injection.java:109:24:109:86 | jexlExpr : String | Jexl2Injection.java:109:24:109:86 | jexlExpr : String | provenance | | -| Jexl2Injection.java:113:24:113:85 | jexlExpr : String | Jexl2Injection.java:59:72:59:86 | jexlExpr : String | provenance | | -| Jexl2Injection.java:113:24:113:85 | jexlExpr : String | Jexl2Injection.java:113:24:113:85 | jexlExpr : String | provenance | | -| Jexl2Injection.java:117:24:117:86 | jexlExpr : String | Jexl2Injection.java:65:73:65:87 | jexlExpr : String | provenance | | -| Jexl2Injection.java:117:24:117:86 | jexlExpr : String | Jexl2Injection.java:117:24:117:86 | jexlExpr : String | provenance | | -| Jexl3Injection.java:17:43:17:57 | jexlExpr : String | Jexl3Injection.java:19:50:19:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:19:28:19:58 | createExpression(...) : JexlExpression | Jexl3Injection.java:21:9:21:9 | e | provenance | Sink:MaD:12 | -| Jexl3Injection.java:19:50:19:57 | jexlExpr : String | Jexl3Injection.java:19:28:19:58 | createExpression(...) : JexlExpression | provenance | Config | -| Jexl3Injection.java:24:55:24:69 | jexlExpr : String | Jexl3Injection.java:26:81:26:88 | jexlExpr : String | provenance | | -| Jexl3Injection.java:26:28:26:89 | createExpression(...) : JexlExpression | Jexl3Injection.java:28:9:28:9 | e | provenance | Sink:MaD:12 | -| Jexl3Injection.java:26:81:26:88 | jexlExpr : String | Jexl3Injection.java:26:28:26:89 | createExpression(...) : JexlExpression | provenance | Config | -| Jexl3Injection.java:31:39:31:53 | jexlExpr : String | Jexl3Injection.java:33:47:33:54 | jexlExpr : String | provenance | | -| Jexl3Injection.java:33:29:33:55 | createScript(...) : JexlScript | Jexl3Injection.java:35:9:35:14 | script | provenance | Sink:MaD:14 | -| Jexl3Injection.java:33:47:33:54 | jexlExpr : String | Jexl3Injection.java:33:29:33:55 | createScript(...) : JexlScript | provenance | Config | -| Jexl3Injection.java:38:50:38:64 | jexlExpr : String | Jexl3Injection.java:40:47:40:54 | jexlExpr : String | provenance | | -| Jexl3Injection.java:40:29:40:55 | createScript(...) : JexlScript | Jexl3Injection.java:44:13:44:18 | script | provenance | Sink:MaD:13 | -| Jexl3Injection.java:40:47:40:54 | jexlExpr : String | Jexl3Injection.java:40:29:40:55 | createScript(...) : JexlScript | provenance | Config | -| Jexl3Injection.java:50:57:50:71 | jexlExpr : String | Jexl3Injection.java:52:40:52:47 | jexlExpr | provenance | Sink:MaD:9 | -| Jexl3Injection.java:55:57:55:71 | jexlExpr : String | Jexl3Injection.java:57:40:57:47 | jexlExpr | provenance | Sink:MaD:10 | -| Jexl3Injection.java:60:74:60:88 | jexlExpr : String | Jexl3Injection.java:63:31:63:38 | jexlExpr : String | provenance | | -| Jexl3Injection.java:63:31:63:38 | jexlExpr : String | Jexl3Injection.java:63:9:63:39 | createExpression(...) | provenance | Config Sink:MaD:15 | -| Jexl3Injection.java:66:73:66:87 | jexlExpr : String | Jexl3Injection.java:69:31:69:38 | jexlExpr : String | provenance | | -| Jexl3Injection.java:69:31:69:38 | jexlExpr : String | Jexl3Injection.java:69:9:69:39 | createExpression(...) | provenance | Config Sink:MaD:16 | -| Jexl3Injection.java:72:72:72:86 | jexlExpr : String | Jexl3Injection.java:75:29:75:36 | jexlExpr : String | provenance | | -| Jexl3Injection.java:75:29:75:36 | jexlExpr : String | Jexl3Injection.java:75:9:75:37 | createTemplate(...) | provenance | Config Sink:MaD:17 | -| Jexl3Injection.java:78:54:78:68 | jexlExpr : String | Jexl3Injection.java:80:50:80:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:80:28:80:58 | createExpression(...) : JexlExpression | Jexl3Injection.java:84:13:84:13 | e | provenance | Sink:MaD:11 | -| Jexl3Injection.java:80:50:80:57 | jexlExpr : String | Jexl3Injection.java:80:28:80:58 | createExpression(...) : JexlExpression | provenance | Config | -| Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | Jexl3Injection.java:94:54:94:58 | bytes [post update] : byte[] | provenance | Src:MaD:18 MaD:19 | -| Jexl3Injection.java:94:54:94:58 | bytes [post update] : byte[] | Jexl3Injection.java:95:46:95:50 | bytes : byte[] | provenance | | -| Jexl3Injection.java:95:35:95:57 | new String(...) : String | Jexl3Injection.java:96:31:96:38 | jexlExpr : String | provenance | | -| Jexl3Injection.java:95:46:95:50 | bytes : byte[] | Jexl3Injection.java:95:35:95:57 | new String(...) : String | provenance | MaD:20 | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:104:24:104:56 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:108:24:108:68 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:112:24:112:52 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:116:24:116:63 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:120:24:120:70 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:124:24:124:70 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:128:24:128:87 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:132:24:132:86 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:136:24:136:85 | jexlExpr : String | provenance | | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | Jexl3Injection.java:140:24:140:67 | jexlExpr : String | provenance | | -| Jexl3Injection.java:104:24:104:56 | jexlExpr : String | Jexl3Injection.java:17:43:17:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:104:24:104:56 | jexlExpr : String | Jexl3Injection.java:104:24:104:56 | jexlExpr : String | provenance | | -| Jexl3Injection.java:108:24:108:68 | jexlExpr : String | Jexl3Injection.java:24:55:24:69 | jexlExpr : String | provenance | | -| Jexl3Injection.java:108:24:108:68 | jexlExpr : String | Jexl3Injection.java:108:24:108:68 | jexlExpr : String | provenance | | -| Jexl3Injection.java:112:24:112:52 | jexlExpr : String | Jexl3Injection.java:31:39:31:53 | jexlExpr : String | provenance | | -| Jexl3Injection.java:112:24:112:52 | jexlExpr : String | Jexl3Injection.java:112:24:112:52 | jexlExpr : String | provenance | | -| Jexl3Injection.java:116:24:116:63 | jexlExpr : String | Jexl3Injection.java:38:50:38:64 | jexlExpr : String | provenance | | -| Jexl3Injection.java:116:24:116:63 | jexlExpr : String | Jexl3Injection.java:116:24:116:63 | jexlExpr : String | provenance | | -| Jexl3Injection.java:120:24:120:70 | jexlExpr : String | Jexl3Injection.java:50:57:50:71 | jexlExpr : String | provenance | | -| Jexl3Injection.java:120:24:120:70 | jexlExpr : String | Jexl3Injection.java:120:24:120:70 | jexlExpr : String | provenance | | -| Jexl3Injection.java:124:24:124:70 | jexlExpr : String | Jexl3Injection.java:55:57:55:71 | jexlExpr : String | provenance | | -| Jexl3Injection.java:124:24:124:70 | jexlExpr : String | Jexl3Injection.java:124:24:124:70 | jexlExpr : String | provenance | | -| Jexl3Injection.java:128:24:128:87 | jexlExpr : String | Jexl3Injection.java:60:74:60:88 | jexlExpr : String | provenance | | -| Jexl3Injection.java:128:24:128:87 | jexlExpr : String | Jexl3Injection.java:128:24:128:87 | jexlExpr : String | provenance | | -| Jexl3Injection.java:132:24:132:86 | jexlExpr : String | Jexl3Injection.java:66:73:66:87 | jexlExpr : String | provenance | | -| Jexl3Injection.java:132:24:132:86 | jexlExpr : String | Jexl3Injection.java:132:24:132:86 | jexlExpr : String | provenance | | -| Jexl3Injection.java:136:24:136:85 | jexlExpr : String | Jexl3Injection.java:72:72:72:86 | jexlExpr : String | provenance | | -| Jexl3Injection.java:136:24:136:85 | jexlExpr : String | Jexl3Injection.java:136:24:136:85 | jexlExpr : String | provenance | | -| Jexl3Injection.java:140:24:140:67 | jexlExpr : String | Jexl3Injection.java:78:54:78:68 | jexlExpr : String | provenance | | -| Jexl3Injection.java:140:24:140:67 | jexlExpr : String | Jexl3Injection.java:140:24:140:67 | jexlExpr : String | provenance | | -| Jexl3Injection.java:144:85:144:109 | expr : String | Jexl3Injection.java:146:27:146:30 | expr : String | provenance | | -| Jexl3Injection.java:146:27:146:30 | expr : String | Jexl3Injection.java:17:43:17:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:151:84:151:105 | data : Data | Jexl3Injection.java:153:23:153:26 | data : Data | provenance | | -| Jexl3Injection.java:151:84:151:105 | data : Data | Jexl3Injection.java:154:27:154:30 | expr : String | provenance | SpringUntrustedDataType.getter | -| Jexl3Injection.java:153:23:153:26 | data : Data | Jexl3Injection.java:153:23:153:36 | getExpr(...) : String | provenance | entrypointFieldStep | -| Jexl3Injection.java:153:23:153:26 | data : Data | Jexl3Injection.java:190:23:190:29 | parameter this : Data | provenance | | -| Jexl3Injection.java:153:23:153:36 | getExpr(...) : String | Jexl3Injection.java:154:27:154:30 | expr : String | provenance | | -| Jexl3Injection.java:154:27:154:30 | expr : String | Jexl3Injection.java:17:43:17:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:161:13:161:52 | customRequest : CustomRequest | Jexl3Injection.java:163:23:163:35 | customRequest : CustomRequest | provenance | | -| Jexl3Injection.java:161:13:161:52 | customRequest : CustomRequest | Jexl3Injection.java:163:23:163:45 | getData(...) : Data | provenance | SpringUntrustedDataType.getter | -| Jexl3Injection.java:161:13:161:52 | customRequest : CustomRequest | Jexl3Injection.java:164:27:164:30 | expr : String | provenance | SpringUntrustedDataType.getter | -| Jexl3Injection.java:163:23:163:35 | customRequest : CustomRequest | Jexl3Injection.java:163:23:163:45 | getData(...) : Data | provenance | entrypointFieldStep | -| Jexl3Injection.java:163:23:163:35 | customRequest : CustomRequest | Jexl3Injection.java:177:21:177:27 | parameter this : CustomRequest | provenance | | -| Jexl3Injection.java:163:23:163:45 | getData(...) : Data | Jexl3Injection.java:163:23:163:55 | getExpr(...) : String | provenance | entrypointFieldStep | -| Jexl3Injection.java:163:23:163:45 | getData(...) : Data | Jexl3Injection.java:164:27:164:30 | expr : String | provenance | SpringUntrustedDataType.getter | -| Jexl3Injection.java:163:23:163:45 | getData(...) : Data | Jexl3Injection.java:190:23:190:29 | parameter this : Data | provenance | | -| Jexl3Injection.java:163:23:163:55 | getExpr(...) : String | Jexl3Injection.java:164:27:164:30 | expr : String | provenance | | -| Jexl3Injection.java:164:27:164:30 | expr : String | Jexl3Injection.java:17:43:17:57 | jexlExpr : String | provenance | | -| Jexl3Injection.java:177:21:177:27 | parameter this : CustomRequest | Jexl3Injection.java:178:20:178:23 | data : Data | provenance | entrypointFieldStep | -| Jexl3Injection.java:190:23:190:29 | parameter this : Data | Jexl3Injection.java:191:20:191:23 | expr : String | provenance | entrypointFieldStep | -models -| 1 | Sink: org.apache.commons.jexl2; Expression; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 2 | Sink: org.apache.commons.jexl2; JexlEngine; false; getProperty; (Object,String); ; Argument[1]; jexl-injection; manual | -| 3 | Sink: org.apache.commons.jexl2; JexlEngine; false; setProperty; (Object,String,Object); ; Argument[1]; jexl-injection; manual | -| 4 | Sink: org.apache.commons.jexl2; Script; false; callable; ; ; Argument[this]; jexl-injection; manual | -| 5 | Sink: org.apache.commons.jexl2; Script; false; execute; ; ; Argument[this]; jexl-injection; manual | -| 6 | Sink: org.apache.commons.jexl2; UnifiedJEXL$Expression; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 7 | Sink: org.apache.commons.jexl2; UnifiedJEXL$Expression; false; prepare; ; ; Argument[this]; jexl-injection; manual | -| 8 | Sink: org.apache.commons.jexl2; UnifiedJEXL$Template; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 9 | Sink: org.apache.commons.jexl3; JexlEngine; false; getProperty; (Object,String); ; Argument[1]; jexl-injection; manual | -| 10 | Sink: org.apache.commons.jexl3; JexlEngine; false; setProperty; (Object,String,Object); ; Argument[1]; jexl-injection; manual | -| 11 | Sink: org.apache.commons.jexl3; JexlExpression; false; callable; ; ; Argument[this]; jexl-injection; manual | -| 12 | Sink: org.apache.commons.jexl3; JexlExpression; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 13 | Sink: org.apache.commons.jexl3; JexlScript; false; callable; ; ; Argument[this]; jexl-injection; manual | -| 14 | Sink: org.apache.commons.jexl3; JexlScript; false; execute; ; ; Argument[this]; jexl-injection; manual | -| 15 | Sink: org.apache.commons.jexl3; JxltEngine$Expression; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 16 | Sink: org.apache.commons.jexl3; JxltEngine$Expression; false; prepare; ; ; Argument[this]; jexl-injection; manual | -| 17 | Sink: org.apache.commons.jexl3; JxltEngine$Template; false; evaluate; ; ; Argument[this]; jexl-injection; manual | -| 18 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 19 | Summary: java.io; InputStream; true; read; (byte[]); ; Argument[this]; Argument[0]; taint; manual | -| 20 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| Jexl2Injection.java:10:43:10:57 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:12:24:12:54 | createExpression(...) : Expression | semmle.label | createExpression(...) : Expression | -| Jexl2Injection.java:12:46:12:53 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:14:9:14:9 | e | semmle.label | e | -| Jexl2Injection.java:17:55:17:69 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:19:24:19:86 | createExpression(...) : Expression | semmle.label | createExpression(...) : Expression | -| Jexl2Injection.java:19:46:19:53 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:21:9:21:9 | e | semmle.label | e | -| Jexl2Injection.java:24:39:24:53 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:26:25:26:51 | createScript(...) : Script | semmle.label | createScript(...) : Script | -| Jexl2Injection.java:26:43:26:50 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:28:9:28:14 | script | semmle.label | script | -| Jexl2Injection.java:31:50:31:64 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:33:25:33:51 | createScript(...) : Script | semmle.label | createScript(...) : Script | -| Jexl2Injection.java:33:43:33:50 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:37:13:37:18 | script | semmle.label | script | -| Jexl2Injection.java:43:57:43:71 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:45:40:45:47 | jexlExpr | semmle.label | jexlExpr | -| Jexl2Injection.java:48:57:48:71 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:50:40:50:47 | jexlExpr | semmle.label | jexlExpr | -| Jexl2Injection.java:53:73:53:87 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:56:9:56:35 | parse(...) | semmle.label | parse(...) | -| Jexl2Injection.java:56:27:56:34 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:59:72:59:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:62:9:62:35 | parse(...) | semmle.label | parse(...) | -| Jexl2Injection.java:62:27:62:34 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:65:73:65:87 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:68:9:68:44 | createTemplate(...) | semmle.label | createTemplate(...) | -| Jexl2Injection.java:68:36:68:43 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:75:25:75:47 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| Jexl2Injection.java:75:54:75:58 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| Jexl2Injection.java:76:35:76:57 | new String(...) : String | semmle.label | new String(...) : String | -| Jexl2Injection.java:76:46:76:50 | bytes : byte[] | semmle.label | bytes : byte[] | -| Jexl2Injection.java:77:31:77:38 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:85:24:85:56 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:85:24:85:56 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:89:24:89:68 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:89:24:89:68 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:93:24:93:52 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:93:24:93:52 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:97:24:97:63 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:97:24:97:63 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:101:24:101:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:101:24:101:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:105:24:105:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:105:24:105:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:109:24:109:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:109:24:109:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:113:24:113:85 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:113:24:113:85 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:117:24:117:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl2Injection.java:117:24:117:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:17:43:17:57 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:19:28:19:58 | createExpression(...) : JexlExpression | semmle.label | createExpression(...) : JexlExpression | -| Jexl3Injection.java:19:50:19:57 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:21:9:21:9 | e | semmle.label | e | -| Jexl3Injection.java:24:55:24:69 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:26:28:26:89 | createExpression(...) : JexlExpression | semmle.label | createExpression(...) : JexlExpression | -| Jexl3Injection.java:26:81:26:88 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:28:9:28:9 | e | semmle.label | e | -| Jexl3Injection.java:31:39:31:53 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:33:29:33:55 | createScript(...) : JexlScript | semmle.label | createScript(...) : JexlScript | -| Jexl3Injection.java:33:47:33:54 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:35:9:35:14 | script | semmle.label | script | -| Jexl3Injection.java:38:50:38:64 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:40:29:40:55 | createScript(...) : JexlScript | semmle.label | createScript(...) : JexlScript | -| Jexl3Injection.java:40:47:40:54 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:44:13:44:18 | script | semmle.label | script | -| Jexl3Injection.java:50:57:50:71 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:52:40:52:47 | jexlExpr | semmle.label | jexlExpr | -| Jexl3Injection.java:55:57:55:71 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:57:40:57:47 | jexlExpr | semmle.label | jexlExpr | -| Jexl3Injection.java:60:74:60:88 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:63:9:63:39 | createExpression(...) | semmle.label | createExpression(...) | -| Jexl3Injection.java:63:31:63:38 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:66:73:66:87 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:69:9:69:39 | createExpression(...) | semmle.label | createExpression(...) | -| Jexl3Injection.java:69:31:69:38 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:72:72:72:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:75:9:75:37 | createTemplate(...) | semmle.label | createTemplate(...) | -| Jexl3Injection.java:75:29:75:36 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:78:54:78:68 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:80:28:80:58 | createExpression(...) : JexlExpression | semmle.label | createExpression(...) : JexlExpression | -| Jexl3Injection.java:80:50:80:57 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:84:13:84:13 | e | semmle.label | e | -| Jexl3Injection.java:94:25:94:47 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| Jexl3Injection.java:94:54:94:58 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| Jexl3Injection.java:95:35:95:57 | new String(...) : String | semmle.label | new String(...) : String | -| Jexl3Injection.java:95:46:95:50 | bytes : byte[] | semmle.label | bytes : byte[] | -| Jexl3Injection.java:96:31:96:38 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:104:24:104:56 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:104:24:104:56 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:108:24:108:68 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:108:24:108:68 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:112:24:112:52 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:112:24:112:52 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:116:24:116:63 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:116:24:116:63 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:120:24:120:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:120:24:120:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:124:24:124:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:124:24:124:70 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:128:24:128:87 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:128:24:128:87 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:132:24:132:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:132:24:132:86 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:136:24:136:85 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:136:24:136:85 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:140:24:140:67 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:140:24:140:67 | jexlExpr : String | semmle.label | jexlExpr : String | -| Jexl3Injection.java:144:85:144:109 | expr : String | semmle.label | expr : String | -| Jexl3Injection.java:146:27:146:30 | expr : String | semmle.label | expr : String | -| Jexl3Injection.java:151:84:151:105 | data : Data | semmle.label | data : Data | -| Jexl3Injection.java:153:23:153:26 | data : Data | semmle.label | data : Data | -| Jexl3Injection.java:153:23:153:36 | getExpr(...) : String | semmle.label | getExpr(...) : String | -| Jexl3Injection.java:154:27:154:30 | expr : String | semmle.label | expr : String | -| Jexl3Injection.java:161:13:161:52 | customRequest : CustomRequest | semmle.label | customRequest : CustomRequest | -| Jexl3Injection.java:163:23:163:35 | customRequest : CustomRequest | semmle.label | customRequest : CustomRequest | -| Jexl3Injection.java:163:23:163:45 | getData(...) : Data | semmle.label | getData(...) : Data | -| Jexl3Injection.java:163:23:163:55 | getExpr(...) : String | semmle.label | getExpr(...) : String | -| Jexl3Injection.java:164:27:164:30 | expr : String | semmle.label | expr : String | -| Jexl3Injection.java:177:21:177:27 | parameter this : CustomRequest | semmle.label | parameter this : CustomRequest | -| Jexl3Injection.java:178:20:178:23 | data : Data | semmle.label | data : Data | -| Jexl3Injection.java:190:23:190:29 | parameter this : Data | semmle.label | parameter this : Data | -| Jexl3Injection.java:191:20:191:23 | expr : String | semmle.label | expr : String | -subpaths -| Jexl3Injection.java:153:23:153:26 | data : Data | Jexl3Injection.java:190:23:190:29 | parameter this : Data | Jexl3Injection.java:191:20:191:23 | expr : String | Jexl3Injection.java:153:23:153:36 | getExpr(...) : String | -| Jexl3Injection.java:163:23:163:35 | customRequest : CustomRequest | Jexl3Injection.java:177:21:177:27 | parameter this : CustomRequest | Jexl3Injection.java:178:20:178:23 | data : Data | Jexl3Injection.java:163:23:163:45 | getData(...) : Data | -| Jexl3Injection.java:163:23:163:45 | getData(...) : Data | Jexl3Injection.java:190:23:190:29 | parameter this : Data | Jexl3Injection.java:191:20:191:23 | expr : String | Jexl3Injection.java:163:23:163:55 | getExpr(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.qlref deleted file mode 100644 index a33d55722f6d..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjection/JexlInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/JexlInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/options b/java/ql/test/query-tests/security/CWE-094/JexlInjection/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/JexlInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql new file mode 100644 index 000000000000..0515c0fc75da --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/JexlInjectionTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.JexlInjectionQuery +import utils.test.InlineExpectationsTest + +module JexlInjectionTest implements TestSig { + string getARelevantTag() { result = "hasJexlInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasJexlInjection" and + exists(DataFlow::Node sink | JexlInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/JinJavaSSTI.java b/java/ql/test/query-tests/security/CWE-094/JinJavaSSTI.java similarity index 81% rename from java/ql/test/query-tests/security/CWE-094/TemplateInjection/JinJavaSSTI.java rename to java/ql/test/query-tests/security/CWE-094/JinJavaSSTI.java index 9bd9bad4ca8f..4341a44f192c 100644 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/JinJavaSSTI.java +++ b/java/ql/test/query-tests/security/CWE-094/JinJavaSSTI.java @@ -18,27 +18,27 @@ public class JinJavaSSTI { @GetMapping(value = "bad1") public void bad1(HttpServletRequest request) { - String template = request.getParameter("template"); // $ Source + String template = request.getParameter("template"); Jinjava jinjava = new Jinjava(); Map context = new HashMap<>(); - String renderedTemplate = jinjava.render(template, context); // $ Alert + String renderedTemplate = jinjava.render(template, context); // $hasTemplateInjection } @GetMapping(value = "bad2") public void bad2(HttpServletRequest request) { - String template = request.getParameter("template"); // $ Source + String template = request.getParameter("template"); Jinjava jinjava = new Jinjava(); Map bindings = new HashMap<>(); - RenderResult renderResult = jinjava.renderForResult(template, bindings); // $ Alert + RenderResult renderResult = jinjava.renderForResult(template, bindings); // $hasTemplateInjection } @GetMapping(value = "bad3") public void bad3(HttpServletRequest request) { - String template = request.getParameter("template"); // $ Source + String template = request.getParameter("template"); Jinjava jinjava = new Jinjava(); Map bindings = new HashMap<>(); JinjavaConfig renderConfig = new JinjavaConfig(); - RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig); // $ Alert + RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig); // $hasTemplateInjection } } diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.expected deleted file mode 100644 index eb2034ab06de..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.expected +++ /dev/null @@ -1,133 +0,0 @@ -#select -| MvelInjectionTest.java:24:15:24:26 | read(...) | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:24:15:24:26 | read(...) | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:29:28:29:37 | expression | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:29:28:29:37 | expression | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:35:5:35:13 | statement | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:35:5:35:13 | statement | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:36:5:36:13 | statement | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:36:5:36:13 | statement | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:42:5:42:14 | expression | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:42:5:42:14 | expression | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:48:5:48:14 | expression | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:48:5:48:14 | expression | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:56:5:56:18 | compiledScript | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:56:5:56:18 | compiledScript | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:59:21:59:26 | script | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:59:21:59:26 | script | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:67:5:67:10 | script | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:67:5:67:10 | script | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:71:26:71:37 | read(...) | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:71:26:71:37 | read(...) | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:75:29:75:74 | compileTemplate(...) | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:75:29:75:74 | compileTemplate(...) | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:80:29:80:46 | compile(...) | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:80:29:80:46 | compile(...) | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -| MvelInjectionTest.java:86:32:86:41 | expression | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:86:32:86:41 | expression | MVEL expression depends on a $@. | MvelInjectionTest.java:90:27:90:49 | getInputStream(...) | user-provided value | -edges -| MvelInjectionTest.java:28:31:28:66 | compileExpression(...) : Serializable | MvelInjectionTest.java:29:28:29:37 | expression | provenance | Sink:MaD:11 | -| MvelInjectionTest.java:28:54:28:65 | read(...) : String | MvelInjectionTest.java:28:31:28:66 | compileExpression(...) : Serializable | provenance | Config | -| MvelInjectionTest.java:33:35:33:70 | new ExpressionCompiler(...) : ExpressionCompiler | MvelInjectionTest.java:34:37:34:44 | compiler : ExpressionCompiler | provenance | | -| MvelInjectionTest.java:33:58:33:69 | read(...) : String | MvelInjectionTest.java:33:35:33:70 | new ExpressionCompiler(...) : ExpressionCompiler | provenance | Config | -| MvelInjectionTest.java:34:37:34:44 | compiler : ExpressionCompiler | MvelInjectionTest.java:34:37:34:54 | compile(...) : CompiledExpression | provenance | Config | -| MvelInjectionTest.java:34:37:34:54 | compile(...) : CompiledExpression | MvelInjectionTest.java:35:5:35:13 | statement | provenance | Sink:MaD:5 | -| MvelInjectionTest.java:34:37:34:54 | compile(...) : CompiledExpression | MvelInjectionTest.java:36:5:36:13 | statement | provenance | Sink:MaD:2 | -| MvelInjectionTest.java:40:35:40:70 | new ExpressionCompiler(...) : ExpressionCompiler | MvelInjectionTest.java:41:37:41:44 | compiler : ExpressionCompiler | provenance | | -| MvelInjectionTest.java:40:58:40:69 | read(...) : String | MvelInjectionTest.java:40:35:40:70 | new ExpressionCompiler(...) : ExpressionCompiler | provenance | Config | -| MvelInjectionTest.java:41:37:41:44 | compiler : ExpressionCompiler | MvelInjectionTest.java:41:37:41:54 | compile(...) : CompiledExpression | provenance | Config | -| MvelInjectionTest.java:41:37:41:54 | compile(...) : CompiledExpression | MvelInjectionTest.java:42:5:42:14 | expression | provenance | Sink:MaD:4 | -| MvelInjectionTest.java:47:9:47:96 | new CompiledAccExpression(...) : CompiledAccExpression | MvelInjectionTest.java:48:5:48:14 | expression | provenance | Sink:MaD:3 | -| MvelInjectionTest.java:47:35:47:46 | read(...) : String | MvelInjectionTest.java:47:35:47:60 | toCharArray(...) : char[] | provenance | MaD:16 | -| MvelInjectionTest.java:47:35:47:60 | toCharArray(...) : char[] | MvelInjectionTest.java:47:9:47:96 | new CompiledAccExpression(...) : CompiledAccExpression | provenance | Config | -| MvelInjectionTest.java:52:20:52:31 | read(...) : String | MvelInjectionTest.java:55:52:55:56 | input : String | provenance | | -| MvelInjectionTest.java:55:37:55:57 | compile(...) : CompiledScript | MvelInjectionTest.java:56:5:56:18 | compiledScript | provenance | Sink:MaD:1 | -| MvelInjectionTest.java:55:52:55:56 | input : String | MvelInjectionTest.java:55:37:55:57 | compile(...) : CompiledScript | provenance | Config | -| MvelInjectionTest.java:55:52:55:56 | input : String | MvelInjectionTest.java:58:49:58:53 | input : String | provenance | | -| MvelInjectionTest.java:58:27:58:54 | compiledScript(...) : Serializable | MvelInjectionTest.java:59:21:59:26 | script | provenance | Sink:MaD:7 | -| MvelInjectionTest.java:58:49:58:53 | input : String | MvelInjectionTest.java:58:27:58:54 | compiledScript(...) : Serializable | provenance | Config | -| MvelInjectionTest.java:64:35:64:70 | new ExpressionCompiler(...) : ExpressionCompiler | MvelInjectionTest.java:65:37:65:44 | compiler : ExpressionCompiler | provenance | | -| MvelInjectionTest.java:64:58:64:69 | read(...) : String | MvelInjectionTest.java:64:35:64:70 | new ExpressionCompiler(...) : ExpressionCompiler | provenance | Config | -| MvelInjectionTest.java:65:37:65:44 | compiler : ExpressionCompiler | MvelInjectionTest.java:65:37:65:54 | compile(...) : CompiledExpression | provenance | Config | -| MvelInjectionTest.java:65:37:65:54 | compile(...) : CompiledExpression | MvelInjectionTest.java:66:64:66:72 | statement : CompiledExpression | provenance | | -| MvelInjectionTest.java:66:33:66:73 | new MvelCompiledScript(...) : MvelCompiledScript | MvelInjectionTest.java:67:5:67:10 | script | provenance | Sink:MaD:6 | -| MvelInjectionTest.java:66:64:66:72 | statement : CompiledExpression | MvelInjectionTest.java:66:33:66:73 | new MvelCompiledScript(...) : MvelCompiledScript | provenance | Config | -| MvelInjectionTest.java:75:62:75:73 | read(...) : String | MvelInjectionTest.java:75:29:75:74 | compileTemplate(...) | provenance | Config Sink:MaD:9 | -| MvelInjectionTest.java:79:33:79:66 | new TemplateCompiler(...) : TemplateCompiler | MvelInjectionTest.java:80:29:80:36 | compiler : TemplateCompiler | provenance | | -| MvelInjectionTest.java:79:54:79:65 | read(...) : String | MvelInjectionTest.java:79:33:79:66 | new TemplateCompiler(...) : TemplateCompiler | provenance | Config | -| MvelInjectionTest.java:80:29:80:36 | compiler : TemplateCompiler | MvelInjectionTest.java:80:29:80:46 | compile(...) | provenance | Config Sink:MaD:9 | -| MvelInjectionTest.java:84:35:84:70 | new ExpressionCompiler(...) : ExpressionCompiler | MvelInjectionTest.java:85:37:85:44 | compiler : ExpressionCompiler | provenance | | -| MvelInjectionTest.java:84:58:84:69 | read(...) : String | MvelInjectionTest.java:84:35:84:70 | new ExpressionCompiler(...) : ExpressionCompiler | provenance | Config | -| MvelInjectionTest.java:85:37:85:44 | compiler : ExpressionCompiler | MvelInjectionTest.java:85:37:85:54 | compile(...) : CompiledExpression | provenance | Config | -| MvelInjectionTest.java:85:37:85:54 | compile(...) : CompiledExpression | MvelInjectionTest.java:86:32:86:41 | expression | provenance | Sink:MaD:12 | -| MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | MvelInjectionTest.java:92:15:92:16 | is : InputStream | provenance | Src:MaD:13 | -| MvelInjectionTest.java:92:15:92:16 | is : InputStream | MvelInjectionTest.java:92:23:92:27 | bytes [post update] : byte[] | provenance | MaD:14 | -| MvelInjectionTest.java:92:23:92:27 | bytes [post update] : byte[] | MvelInjectionTest.java:93:25:93:29 | bytes : byte[] | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:24:15:24:26 | read(...) | provenance | Sink:MaD:10 | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:28:54:28:65 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:33:58:33:69 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:40:58:40:69 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:47:35:47:46 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:52:20:52:31 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:64:58:64:69 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:71:26:71:37 | read(...) | provenance | Sink:MaD:8 | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:75:62:75:73 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:79:54:79:65 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | MvelInjectionTest.java:84:58:84:69 | read(...) : String | provenance | | -| MvelInjectionTest.java:93:25:93:29 | bytes : byte[] | MvelInjectionTest.java:93:14:93:36 | new String(...) : String | provenance | MaD:15 | -models -| 1 | Sink: javax.script; CompiledScript; false; eval; ; ; Argument[this]; mvel-injection; manual | -| 2 | Sink: org.mvel2.compiler; Accessor; false; getValue; ; ; Argument[this]; mvel-injection; manual | -| 3 | Sink: org.mvel2.compiler; CompiledAccExpression; false; getValue; ; ; Argument[this]; mvel-injection; manual | -| 4 | Sink: org.mvel2.compiler; CompiledExpression; false; getDirectValue; ; ; Argument[this]; mvel-injection; manual | -| 5 | Sink: org.mvel2.compiler; ExecutableStatement; false; getValue; ; ; Argument[this]; mvel-injection; manual | -| 6 | Sink: org.mvel2.jsr223; MvelCompiledScript; false; eval; ; ; Argument[this]; mvel-injection; manual | -| 7 | Sink: org.mvel2.jsr223; MvelScriptEngine; false; evaluate; ; ; Argument[0]; mvel-injection; manual | -| 8 | Sink: org.mvel2.templates; TemplateRuntime; false; eval; ; ; Argument[0]; mvel-injection; manual | -| 9 | Sink: org.mvel2.templates; TemplateRuntime; false; execute; ; ; Argument[0]; mvel-injection; manual | -| 10 | Sink: org.mvel2; MVEL; false; eval; ; ; Argument[0]; mvel-injection; manual | -| 11 | Sink: org.mvel2; MVEL; false; executeExpression; ; ; Argument[0]; mvel-injection; manual | -| 12 | Sink: org.mvel2; MVELRuntime; false; execute; ; ; Argument[1]; mvel-injection; manual | -| 13 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 14 | Summary: java.io; InputStream; true; read; (byte[]); ; Argument[this]; Argument[0]; taint; manual | -| 15 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -| 16 | Summary: java.lang; String; false; toCharArray; ; ; Argument[this]; ReturnValue; taint; manual | -nodes -| MvelInjectionTest.java:24:15:24:26 | read(...) | semmle.label | read(...) | -| MvelInjectionTest.java:28:31:28:66 | compileExpression(...) : Serializable | semmle.label | compileExpression(...) : Serializable | -| MvelInjectionTest.java:28:54:28:65 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:29:28:29:37 | expression | semmle.label | expression | -| MvelInjectionTest.java:33:35:33:70 | new ExpressionCompiler(...) : ExpressionCompiler | semmle.label | new ExpressionCompiler(...) : ExpressionCompiler | -| MvelInjectionTest.java:33:58:33:69 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:34:37:34:44 | compiler : ExpressionCompiler | semmle.label | compiler : ExpressionCompiler | -| MvelInjectionTest.java:34:37:34:54 | compile(...) : CompiledExpression | semmle.label | compile(...) : CompiledExpression | -| MvelInjectionTest.java:35:5:35:13 | statement | semmle.label | statement | -| MvelInjectionTest.java:36:5:36:13 | statement | semmle.label | statement | -| MvelInjectionTest.java:40:35:40:70 | new ExpressionCompiler(...) : ExpressionCompiler | semmle.label | new ExpressionCompiler(...) : ExpressionCompiler | -| MvelInjectionTest.java:40:58:40:69 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:41:37:41:44 | compiler : ExpressionCompiler | semmle.label | compiler : ExpressionCompiler | -| MvelInjectionTest.java:41:37:41:54 | compile(...) : CompiledExpression | semmle.label | compile(...) : CompiledExpression | -| MvelInjectionTest.java:42:5:42:14 | expression | semmle.label | expression | -| MvelInjectionTest.java:47:9:47:96 | new CompiledAccExpression(...) : CompiledAccExpression | semmle.label | new CompiledAccExpression(...) : CompiledAccExpression | -| MvelInjectionTest.java:47:35:47:46 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:47:35:47:60 | toCharArray(...) : char[] | semmle.label | toCharArray(...) : char[] | -| MvelInjectionTest.java:48:5:48:14 | expression | semmle.label | expression | -| MvelInjectionTest.java:52:20:52:31 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:55:37:55:57 | compile(...) : CompiledScript | semmle.label | compile(...) : CompiledScript | -| MvelInjectionTest.java:55:52:55:56 | input : String | semmle.label | input : String | -| MvelInjectionTest.java:56:5:56:18 | compiledScript | semmle.label | compiledScript | -| MvelInjectionTest.java:58:27:58:54 | compiledScript(...) : Serializable | semmle.label | compiledScript(...) : Serializable | -| MvelInjectionTest.java:58:49:58:53 | input : String | semmle.label | input : String | -| MvelInjectionTest.java:59:21:59:26 | script | semmle.label | script | -| MvelInjectionTest.java:64:35:64:70 | new ExpressionCompiler(...) : ExpressionCompiler | semmle.label | new ExpressionCompiler(...) : ExpressionCompiler | -| MvelInjectionTest.java:64:58:64:69 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:65:37:65:44 | compiler : ExpressionCompiler | semmle.label | compiler : ExpressionCompiler | -| MvelInjectionTest.java:65:37:65:54 | compile(...) : CompiledExpression | semmle.label | compile(...) : CompiledExpression | -| MvelInjectionTest.java:66:33:66:73 | new MvelCompiledScript(...) : MvelCompiledScript | semmle.label | new MvelCompiledScript(...) : MvelCompiledScript | -| MvelInjectionTest.java:66:64:66:72 | statement : CompiledExpression | semmle.label | statement : CompiledExpression | -| MvelInjectionTest.java:67:5:67:10 | script | semmle.label | script | -| MvelInjectionTest.java:71:26:71:37 | read(...) | semmle.label | read(...) | -| MvelInjectionTest.java:75:29:75:74 | compileTemplate(...) | semmle.label | compileTemplate(...) | -| MvelInjectionTest.java:75:62:75:73 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:79:33:79:66 | new TemplateCompiler(...) : TemplateCompiler | semmle.label | new TemplateCompiler(...) : TemplateCompiler | -| MvelInjectionTest.java:79:54:79:65 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:80:29:80:36 | compiler : TemplateCompiler | semmle.label | compiler : TemplateCompiler | -| MvelInjectionTest.java:80:29:80:46 | compile(...) | semmle.label | compile(...) | -| MvelInjectionTest.java:84:35:84:70 | new ExpressionCompiler(...) : ExpressionCompiler | semmle.label | new ExpressionCompiler(...) : ExpressionCompiler | -| MvelInjectionTest.java:84:58:84:69 | read(...) : String | semmle.label | read(...) : String | -| MvelInjectionTest.java:85:37:85:44 | compiler : ExpressionCompiler | semmle.label | compiler : ExpressionCompiler | -| MvelInjectionTest.java:85:37:85:54 | compile(...) : CompiledExpression | semmle.label | compile(...) : CompiledExpression | -| MvelInjectionTest.java:86:32:86:41 | expression | semmle.label | expression | -| MvelInjectionTest.java:90:27:90:49 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| MvelInjectionTest.java:92:15:92:16 | is : InputStream | semmle.label | is : InputStream | -| MvelInjectionTest.java:92:23:92:27 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| MvelInjectionTest.java:93:14:93:36 | new String(...) : String | semmle.label | new String(...) : String | -| MvelInjectionTest.java:93:25:93:29 | bytes : byte[] | semmle.label | bytes : byte[] | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.qlref deleted file mode 100644 index 9236766fe8c6..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/MvelInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjection/options b/java/ql/test/query-tests/security/CWE-094/MvelInjection/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.java b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.java similarity index 84% rename from java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.java rename to java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.java index 4e6738dbfd9a..4013246eecda 100644 --- a/java/ql/test/query-tests/security/CWE-094/MvelInjection/MvelInjectionTest.java +++ b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.java @@ -21,31 +21,31 @@ public class MvelInjectionTest { public static void testWithMvelEval(Socket socket) throws IOException { - MVEL.eval(read(socket)); // $ Alert + MVEL.eval(read(socket)); // $hasMvelInjection } public static void testWithMvelCompileAndExecute(Socket socket) throws IOException { Serializable expression = MVEL.compileExpression(read(socket)); - MVEL.executeExpression(expression); // $ Alert + MVEL.executeExpression(expression); // $hasMvelInjection } public static void testWithExpressionCompiler(Socket socket) throws IOException { ExpressionCompiler compiler = new ExpressionCompiler(read(socket)); ExecutableStatement statement = compiler.compile(); - statement.getValue(new Object(), new ImmutableDefaultFactory()); // $ Alert - statement.getValue(new Object(), new Object(), new ImmutableDefaultFactory()); // $ Alert + statement.getValue(new Object(), new ImmutableDefaultFactory()); // $hasMvelInjection + statement.getValue(new Object(), new Object(), new ImmutableDefaultFactory()); // $hasMvelInjection } public static void testWithCompiledExpressionGetDirectValue(Socket socket) throws IOException { ExpressionCompiler compiler = new ExpressionCompiler(read(socket)); CompiledExpression expression = compiler.compile(); - expression.getDirectValue(new Object(), new ImmutableDefaultFactory()); // $ Alert + expression.getDirectValue(new Object(), new ImmutableDefaultFactory()); // $hasMvelInjection } public static void testCompiledAccExpressionGetValue(Socket socket) throws IOException { CompiledAccExpression expression = new CompiledAccExpression(read(socket).toCharArray(), Object.class, new ParserContext()); - expression.getValue(new Object(), new ImmutableDefaultFactory()); // $ Alert + expression.getValue(new Object(), new ImmutableDefaultFactory()); // $hasMvelInjection } public static void testMvelScriptEngineCompileAndEvaluate(Socket socket) throws Exception { @@ -53,10 +53,10 @@ public static void testMvelScriptEngineCompileAndEvaluate(Socket socket) throws MvelScriptEngine engine = new MvelScriptEngine(); CompiledScript compiledScript = engine.compile(input); - compiledScript.eval(); // $ Alert + compiledScript.eval(); // $hasMvelInjection Serializable script = engine.compiledScript(input); - engine.evaluate(script, new SimpleScriptContext()); // $ Alert + engine.evaluate(script, new SimpleScriptContext()); // $hasMvelInjection } public static void testMvelCompiledScriptCompileAndEvaluate(Socket socket) throws Exception { @@ -64,30 +64,30 @@ public static void testMvelCompiledScriptCompileAndEvaluate(Socket socket) throw ExpressionCompiler compiler = new ExpressionCompiler(read(socket)); ExecutableStatement statement = compiler.compile(); MvelCompiledScript script = new MvelCompiledScript(engine, statement); - script.eval(new SimpleScriptContext()); // $ Alert + script.eval(new SimpleScriptContext()); // $hasMvelInjection } public static void testTemplateRuntimeEval(Socket socket) throws Exception { - TemplateRuntime.eval(read(socket), new HashMap()); // $ Alert + TemplateRuntime.eval(read(socket), new HashMap()); // $hasMvelInjection } public static void testTemplateRuntimeCompileTemplateAndExecute(Socket socket) throws Exception { - TemplateRuntime.execute(TemplateCompiler.compileTemplate(read(socket)), new HashMap()); // $ Alert + TemplateRuntime.execute(TemplateCompiler.compileTemplate(read(socket)), new HashMap()); // $hasMvelInjection } public static void testTemplateRuntimeCompileAndExecute(Socket socket) throws Exception { TemplateCompiler compiler = new TemplateCompiler(read(socket)); - TemplateRuntime.execute(compiler.compile(), new HashMap()); // $ Alert + TemplateRuntime.execute(compiler.compile(), new HashMap()); // $hasMvelInjection } public static void testMvelRuntimeExecute(Socket socket) throws Exception { ExpressionCompiler compiler = new ExpressionCompiler(read(socket)); CompiledExpression expression = compiler.compile(); - MVELRuntime.execute(false, expression, new Object(), new ImmutableDefaultFactory()); // $ Alert + MVELRuntime.execute(false, expression, new Object(), new ImmutableDefaultFactory()); // $hasMvelInjection } public static String read(Socket socket) throws IOException { - try (InputStream is = socket.getInputStream()) { // $ Source + try (InputStream is = socket.getInputStream()) { byte[] bytes = new byte[1024]; int n = is.read(bytes); return new String(bytes, 0, n); diff --git a/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql new file mode 100644 index 000000000000..08dc091898c8 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/MvelInjectionTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.MvelInjectionQuery +import utils.test.InlineExpectationsTest + +module HasMvelInjectionTest implements TestSig { + string getARelevantTag() { result = "hasMvelInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasMvelInjection" and + exists(DataFlow::Node sink | MvelInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/PebbleSSTI.java b/java/ql/test/query-tests/security/CWE-094/PebbleSSTI.java similarity index 80% rename from java/ql/test/query-tests/security/CWE-094/TemplateInjection/PebbleSSTI.java rename to java/ql/test/query-tests/security/CWE-094/PebbleSSTI.java index 45beaf46fa19..c026f98645bb 100644 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/PebbleSSTI.java +++ b/java/ql/test/query-tests/security/CWE-094/PebbleSSTI.java @@ -15,15 +15,15 @@ public class PebbleSSTI { @GetMapping(value = "bad1") public void bad1(HttpServletRequest request) { - String templateName = request.getParameter("templateName"); // $ Source + String templateName = request.getParameter("templateName"); PebbleEngine engine = new PebbleEngine.Builder().build(); - PebbleTemplate compiledTemplate = engine.getTemplate(templateName); // $ Alert + PebbleTemplate compiledTemplate = engine.getTemplate(templateName); // $hasTemplateInjection } @GetMapping(value = "bad2") public void bad2(HttpServletRequest request) { - String templateName = request.getParameter("templateName"); // $ Source + String templateName = request.getParameter("templateName"); PebbleEngine engine = new PebbleEngine.Builder().build(); - PebbleTemplate compiledTemplate = engine.getLiteralTemplate(templateName); // $ Alert + PebbleTemplate compiledTemplate = engine.getLiteralTemplate(templateName); // $hasTemplateInjection } } diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/SandboxedJexl2.java b/java/ql/test/query-tests/security/CWE-094/SandboxedJexl2.java similarity index 100% rename from java/ql/test/query-tests/security/CWE-094/JexlInjection/SandboxedJexl2.java rename to java/ql/test/query-tests/security/CWE-094/SandboxedJexl2.java diff --git a/java/ql/test/query-tests/security/CWE-094/JexlInjection/SandboxedJexl3.java b/java/ql/test/query-tests/security/CWE-094/SandboxedJexl3.java similarity index 100% rename from java/ql/test/query-tests/security/CWE-094/JexlInjection/SandboxedJexl3.java rename to java/ql/test/query-tests/security/CWE-094/SandboxedJexl3.java diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.expected deleted file mode 100644 index 37df514bac5f..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.expected +++ /dev/null @@ -1,120 +0,0 @@ -#select -| SpelInjectionTest.java:24:5:24:14 | expression | SpelInjectionTest.java:16:22:16:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:24:5:24:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:16:22:16:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:35:5:35:14 | expression | SpelInjectionTest.java:28:22:28:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:35:5:35:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:28:22:28:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:46:5:46:14 | expression | SpelInjectionTest.java:39:22:39:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:46:5:46:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:39:22:39:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:60:5:60:14 | expression | SpelInjectionTest.java:50:22:50:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:60:5:60:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:50:22:50:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:71:5:71:14 | expression | SpelInjectionTest.java:64:22:64:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:71:5:71:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:64:22:64:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:82:5:82:14 | expression | SpelInjectionTest.java:75:22:75:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:82:5:82:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:75:22:75:44 | getInputStream(...) | user-provided value | -| SpelInjectionTest.java:95:5:95:14 | expression | SpelInjectionTest.java:86:22:86:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:95:5:95:14 | expression | SpEL expression depends on a $@. | SpelInjectionTest.java:86:22:86:44 | getInputStream(...) | user-provided value | -edges -| SpelInjectionTest.java:16:22:16:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:19:13:19:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:19:13:19:14 | in : InputStream | SpelInjectionTest.java:19:21:19:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:19:21:19:25 | bytes [post update] : byte[] | SpelInjectionTest.java:20:31:20:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:20:20:20:42 | new String(...) : String | SpelInjectionTest.java:23:52:23:56 | input : String | provenance | | -| SpelInjectionTest.java:20:31:20:35 | bytes : byte[] | SpelInjectionTest.java:20:20:20:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:23:29:23:57 | parseExpression(...) : Expression | SpelInjectionTest.java:24:5:24:14 | expression | provenance | | -| SpelInjectionTest.java:23:52:23:56 | input : String | SpelInjectionTest.java:23:29:23:57 | parseExpression(...) : Expression | provenance | Config | -| SpelInjectionTest.java:28:22:28:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:31:13:31:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:31:13:31:14 | in : InputStream | SpelInjectionTest.java:31:21:31:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:31:21:31:25 | bytes [post update] : byte[] | SpelInjectionTest.java:32:31:32:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:32:20:32:42 | new String(...) : String | SpelInjectionTest.java:34:49:34:53 | input : String | provenance | | -| SpelInjectionTest.java:32:31:32:35 | bytes : byte[] | SpelInjectionTest.java:32:20:32:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:34:33:34:54 | parseRaw(...) : SpelExpression | SpelInjectionTest.java:35:5:35:14 | expression | provenance | | -| SpelInjectionTest.java:34:49:34:53 | input : String | SpelInjectionTest.java:34:33:34:54 | parseRaw(...) : SpelExpression | provenance | Config | -| SpelInjectionTest.java:39:22:39:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:42:13:42:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:42:13:42:14 | in : InputStream | SpelInjectionTest.java:42:21:42:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:42:21:42:25 | bytes [post update] : byte[] | SpelInjectionTest.java:43:31:43:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:43:20:43:42 | new String(...) : String | SpelInjectionTest.java:45:72:45:76 | input : String | provenance | | -| SpelInjectionTest.java:43:31:43:35 | bytes : byte[] | SpelInjectionTest.java:43:20:43:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:45:29:45:77 | parseExpression(...) : Expression | SpelInjectionTest.java:46:5:46:14 | expression | provenance | | -| SpelInjectionTest.java:45:72:45:76 | input : String | SpelInjectionTest.java:45:29:45:77 | parseExpression(...) : Expression | provenance | Config | -| SpelInjectionTest.java:50:22:50:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:53:13:53:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:53:13:53:14 | in : InputStream | SpelInjectionTest.java:53:21:53:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:53:21:53:25 | bytes [post update] : byte[] | SpelInjectionTest.java:54:31:54:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:54:20:54:42 | new String(...) : String | SpelInjectionTest.java:56:72:56:76 | input : String | provenance | | -| SpelInjectionTest.java:54:31:54:35 | bytes : byte[] | SpelInjectionTest.java:54:20:54:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:56:29:56:77 | parseExpression(...) : Expression | SpelInjectionTest.java:60:5:60:14 | expression | provenance | | -| SpelInjectionTest.java:56:72:56:76 | input : String | SpelInjectionTest.java:56:29:56:77 | parseExpression(...) : Expression | provenance | Config | -| SpelInjectionTest.java:64:22:64:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:67:13:67:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:67:13:67:14 | in : InputStream | SpelInjectionTest.java:67:21:67:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:67:21:67:25 | bytes [post update] : byte[] | SpelInjectionTest.java:68:31:68:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:68:20:68:42 | new String(...) : String | SpelInjectionTest.java:70:52:70:56 | input : String | provenance | | -| SpelInjectionTest.java:68:31:68:35 | bytes : byte[] | SpelInjectionTest.java:68:20:68:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:70:29:70:57 | parseExpression(...) : Expression | SpelInjectionTest.java:71:5:71:14 | expression | provenance | | -| SpelInjectionTest.java:70:52:70:56 | input : String | SpelInjectionTest.java:70:29:70:57 | parseExpression(...) : Expression | provenance | Config | -| SpelInjectionTest.java:75:22:75:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:78:13:78:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:78:13:78:14 | in : InputStream | SpelInjectionTest.java:78:21:78:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:78:21:78:25 | bytes [post update] : byte[] | SpelInjectionTest.java:79:31:79:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:79:20:79:42 | new String(...) : String | SpelInjectionTest.java:81:52:81:56 | input : String | provenance | | -| SpelInjectionTest.java:79:31:79:35 | bytes : byte[] | SpelInjectionTest.java:79:20:79:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:81:29:81:57 | parseExpression(...) : Expression | SpelInjectionTest.java:82:5:82:14 | expression | provenance | | -| SpelInjectionTest.java:81:52:81:56 | input : String | SpelInjectionTest.java:81:29:81:57 | parseExpression(...) : Expression | provenance | Config | -| SpelInjectionTest.java:86:22:86:44 | getInputStream(...) : InputStream | SpelInjectionTest.java:89:13:89:14 | in : InputStream | provenance | Src:MaD:1 | -| SpelInjectionTest.java:89:13:89:14 | in : InputStream | SpelInjectionTest.java:89:21:89:25 | bytes [post update] : byte[] | provenance | MaD:2 | -| SpelInjectionTest.java:89:21:89:25 | bytes [post update] : byte[] | SpelInjectionTest.java:90:31:90:35 | bytes : byte[] | provenance | | -| SpelInjectionTest.java:90:20:90:42 | new String(...) : String | SpelInjectionTest.java:92:52:92:56 | input : String | provenance | | -| SpelInjectionTest.java:90:31:90:35 | bytes : byte[] | SpelInjectionTest.java:90:20:90:42 | new String(...) : String | provenance | MaD:3 | -| SpelInjectionTest.java:92:29:92:57 | parseExpression(...) : Expression | SpelInjectionTest.java:95:5:95:14 | expression | provenance | | -| SpelInjectionTest.java:92:52:92:56 | input : String | SpelInjectionTest.java:92:29:92:57 | parseExpression(...) : Expression | provenance | Config | -models -| 1 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 2 | Summary: java.io; InputStream; true; read; (byte[]); ; Argument[this]; Argument[0]; taint; manual | -| 3 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| SpelInjectionTest.java:16:22:16:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:19:13:19:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:19:21:19:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:20:20:20:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:20:31:20:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:23:29:23:57 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:23:52:23:56 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:24:5:24:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:28:22:28:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:31:13:31:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:31:21:31:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:32:20:32:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:32:31:32:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:34:33:34:54 | parseRaw(...) : SpelExpression | semmle.label | parseRaw(...) : SpelExpression | -| SpelInjectionTest.java:34:49:34:53 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:35:5:35:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:39:22:39:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:42:13:42:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:42:21:42:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:43:20:43:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:43:31:43:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:45:29:45:77 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:45:72:45:76 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:46:5:46:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:50:22:50:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:53:13:53:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:53:21:53:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:54:20:54:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:54:31:54:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:56:29:56:77 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:56:72:56:76 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:60:5:60:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:64:22:64:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:67:13:67:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:67:21:67:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:68:20:68:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:68:31:68:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:70:29:70:57 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:70:52:70:56 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:71:5:71:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:75:22:75:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:78:13:78:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:78:21:78:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:79:20:79:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:79:31:79:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:81:29:81:57 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:81:52:81:56 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:82:5:82:14 | expression | semmle.label | expression | -| SpelInjectionTest.java:86:22:86:44 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SpelInjectionTest.java:89:13:89:14 | in : InputStream | semmle.label | in : InputStream | -| SpelInjectionTest.java:89:21:89:25 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| SpelInjectionTest.java:90:20:90:42 | new String(...) : String | semmle.label | new String(...) : String | -| SpelInjectionTest.java:90:31:90:35 | bytes : byte[] | semmle.label | bytes : byte[] | -| SpelInjectionTest.java:92:29:92:57 | parseExpression(...) : Expression | semmle.label | parseExpression(...) : Expression | -| SpelInjectionTest.java:92:52:92:56 | input : String | semmle.label | input : String | -| SpelInjectionTest.java:95:5:95:14 | expression | semmle.label | expression | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.qlref deleted file mode 100644 index 5effbcb98298..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/SpelInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection/options b/java/ql/test/query-tests/security/CWE-094/SpelInjection/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.java b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java similarity index 81% rename from java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.java rename to java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java index 88c4e913d493..d10bcfa66864 100644 --- a/java/ql/test/query-tests/security/CWE-094/SpelInjection/SpelInjectionTest.java +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.java @@ -13,7 +13,7 @@ public class SpelInjectionTest { private static final ExpressionParser PARSER = new SpelExpressionParser(); public void testGetValue(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); @@ -21,33 +21,33 @@ public void testGetValue(Socket socket) throws IOException { ExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression(input); - expression.getValue(); // $ Alert + expression.getValue(); // $hasSpelInjection } public void testGetValueWithParseRaw(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); String input = new String(bytes, 0, n); SpelExpressionParser parser = new SpelExpressionParser(); SpelExpression expression = parser.parseRaw(input); - expression.getValue(); // $ Alert + expression.getValue(); // $hasSpelInjection } public void testGetValueWithChainedCalls(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); String input = new String(bytes, 0, n); Expression expression = new SpelExpressionParser().parseExpression(input); - expression.getValue(); // $ Alert + expression.getValue(); // $hasSpelInjection } public void testSetValueWithRootObject(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); @@ -57,33 +57,33 @@ public void testSetValueWithRootObject(Socket socket) throws IOException { Object root = new Object(); Object value = new Object(); - expression.setValue(root, value); // $ Alert + expression.setValue(root, value); // $hasSpelInjection } public void testGetValueWithStaticParser(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); String input = new String(bytes, 0, n); Expression expression = PARSER.parseExpression(input); - expression.getValue(); // $ Alert + expression.getValue(); // $hasSpelInjection } public void testGetValueType(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); String input = new String(bytes, 0, n); Expression expression = PARSER.parseExpression(input); - expression.getValueType(); // $ Alert + expression.getValueType(); // $hasSpelInjection } public void testWithStandardEvaluationContext(Socket socket) throws IOException { - InputStream in = socket.getInputStream(); // $ Source + InputStream in = socket.getInputStream(); byte[] bytes = new byte[1024]; int n = in.read(bytes); @@ -92,7 +92,7 @@ public void testWithStandardEvaluationContext(Socket socket) throws IOException Expression expression = PARSER.parseExpression(input); StandardEvaluationContext context = new StandardEvaluationContext(); - expression.getValue(context); // $ Alert + expression.getValue(context); // $hasSpelInjection } public void testWithSimpleEvaluationContext(Socket socket) throws IOException { diff --git a/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql new file mode 100644 index 000000000000..727229e989d3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/SpelInjectionTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.dataflow.TaintTracking +import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.SpelInjectionQuery +import utils.test.InlineExpectationsTest + +module HasSpelInjectionTest implements TestSig { + string getARelevantTag() { result = "hasSpelInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasSpelInjection" and + exists(DataFlow::Node sink | SpelInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateEngineTest.java b/java/ql/test/query-tests/security/CWE-094/TemplateEngineTest.java new file mode 100644 index 000000000000..dbf32494e10e --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/TemplateEngineTest.java @@ -0,0 +1,30 @@ +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.net.URL; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import groovy.text.TemplateEngine; + +public class TemplateEngineTest extends HttpServlet { + + private Object source(HttpServletRequest request) { + return request.getParameter("script"); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + try { + Object script = source(request); + TemplateEngine engine = null; + engine.createTemplate(request.getParameter("script")); // $ hasGroovyInjection + engine.createTemplate((File) script); // $ hasGroovyInjection + engine.createTemplate((Reader) script); // $ hasGroovyInjection + engine.createTemplate((URL) script); // $ hasGroovyInjection + } catch (Exception e) { + } + + } +} diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/FreemarkerSSTI.java b/java/ql/test/query-tests/security/CWE-094/TemplateInjection/FreemarkerSSTI.java deleted file mode 100644 index a39ed8c5a4e5..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/FreemarkerSSTI.java +++ /dev/null @@ -1,117 +0,0 @@ -import javax.servlet.http.HttpServletRequest; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import java.lang.String; -import java.io.Reader; -import java.io.StringReader; -import java.io.OutputStreamWriter; -import java.util.HashMap; - -import freemarker.template.Template; -import freemarker.template.Configuration; -import freemarker.cache.StringTemplateLoader; -import freemarker.core.ParserConfiguration; - -@Controller -public class FreemarkerSSTI { - String sourceName = "sourceName"; - - @GetMapping(value = "bad1") - public void bad1(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Reader reader = new StringReader(code); - - Template t = new Template(name, reader); // $ Alert - } - - @GetMapping(value = "bad2") - public void bad2(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Reader reader = new StringReader(code); - Configuration cfg = new Configuration(); - - Template t = new Template(name, reader, cfg); // $ Alert - } - - @GetMapping(value = "bad3") - public void bad3(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Reader reader = new StringReader(code); - Configuration cfg = new Configuration(); - - Template t = new Template(name, reader, cfg, "UTF-8"); // $ Alert - } - - @GetMapping(value = "bad4") - public void bad4(HttpServletRequest request) { - String name = "ttemplate"; - String sourceCode = request.getParameter("sourceCode"); // $ Source - Configuration cfg = new Configuration(); - - Template t = new Template(name, sourceCode, cfg); // $ Alert - } - - @GetMapping(value = "bad5") - public void bad5(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Configuration cfg = new Configuration(); - Reader reader = new StringReader(code); - - Template t = new Template(name, sourceName, reader, cfg); // $ Alert - } - - @GetMapping(value = "bad6") - public void bad6(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Configuration cfg = new Configuration(); - ParserConfiguration customParserConfiguration = new Configuration(); - Reader reader = new StringReader(code); - - Template t = - new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8"); // $ Alert - } - - @GetMapping(value = "bad7") - public void bad7(HttpServletRequest request) { - String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source - Configuration cfg = new Configuration(); - ParserConfiguration customParserConfiguration = new Configuration(); - Reader reader = new StringReader(code); - - Template t = new Template(name, sourceName, reader, cfg, "UTF-8"); // $ Alert - } - - @GetMapping(value = "bad8") - public void bad8(HttpServletRequest request) { - String code = request.getParameter("code"); // $ Source - StringTemplateLoader stringLoader = new StringTemplateLoader(); - - stringLoader.putTemplate("myTemplate", code); // $ Alert - } - - @GetMapping(value = "bad9") - public void bad9(HttpServletRequest request) { - String code = request.getParameter("code"); // $ Source - StringTemplateLoader stringLoader = new StringTemplateLoader(); - - stringLoader.putTemplate("myTemplate", code, 0); // $ Alert - } - - @GetMapping(value = "good1") - public void good1(HttpServletRequest request) { - HashMap root = new HashMap(); - String code = request.getParameter("code"); - root.put("code", code); - Configuration cfg = new Configuration(); - Template temp = cfg.getTemplate("test.ftlh"); - OutputStreamWriter out = new OutputStreamWriter(System.out); - temp.process(root, out); // Safe - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.expected deleted file mode 100644 index 6727f69b5388..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.expected +++ /dev/null @@ -1,171 +0,0 @@ -#select -| FreemarkerSSTI.java:26:35:26:40 | reader | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:26:35:26:40 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:36:35:36:40 | reader | FreemarkerSSTI.java:32:17:32:44 | getParameter(...) : String | FreemarkerSSTI.java:36:35:36:40 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:32:17:32:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:46:35:46:40 | reader | FreemarkerSSTI.java:42:17:42:44 | getParameter(...) : String | FreemarkerSSTI.java:46:35:46:40 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:42:17:42:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:55:35:55:44 | sourceCode | FreemarkerSSTI.java:52:23:52:56 | getParameter(...) : String | FreemarkerSSTI.java:55:35:55:44 | sourceCode | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:52:23:52:56 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:65:47:65:52 | reader | FreemarkerSSTI.java:61:17:61:44 | getParameter(...) : String | FreemarkerSSTI.java:65:47:65:52 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:61:17:61:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:77:36:77:41 | reader | FreemarkerSSTI.java:71:17:71:44 | getParameter(...) : String | FreemarkerSSTI.java:77:36:77:41 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:71:17:71:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:88:47:88:52 | reader | FreemarkerSSTI.java:83:17:83:44 | getParameter(...) : String | FreemarkerSSTI.java:88:47:88:52 | reader | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:83:17:83:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:96:42:96:45 | code | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:96:42:96:45 | code | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) | user-provided value | -| FreemarkerSSTI.java:104:42:104:45 | code | FreemarkerSSTI.java:101:17:101:44 | getParameter(...) : String | FreemarkerSSTI.java:104:42:104:45 | code | Template, which may contain code, depends on a $@. | FreemarkerSSTI.java:101:17:101:44 | getParameter(...) | user-provided value | -| JinJavaSSTI.java:24:44:24:51 | template | JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:24:44:24:51 | template | Template, which may contain code, depends on a $@. | JinJavaSSTI.java:21:21:21:52 | getParameter(...) | user-provided value | -| JinJavaSSTI.java:32:55:32:62 | template | JinJavaSSTI.java:29:21:29:52 | getParameter(...) : String | JinJavaSSTI.java:32:55:32:62 | template | Template, which may contain code, depends on a $@. | JinJavaSSTI.java:29:21:29:52 | getParameter(...) | user-provided value | -| JinJavaSSTI.java:42:55:42:62 | template | JinJavaSSTI.java:37:21:37:52 | getParameter(...) : String | JinJavaSSTI.java:42:55:42:62 | template | Template, which may contain code, depends on a $@. | JinJavaSSTI.java:37:21:37:52 | getParameter(...) | user-provided value | -| PebbleSSTI.java:20:56:20:67 | templateName | PebbleSSTI.java:18:25:18:60 | getParameter(...) : String | PebbleSSTI.java:20:56:20:67 | templateName | Template, which may contain code, depends on a $@. | PebbleSSTI.java:18:25:18:60 | getParameter(...) | user-provided value | -| PebbleSSTI.java:27:63:27:74 | templateName | PebbleSSTI.java:25:25:25:60 | getParameter(...) : String | PebbleSSTI.java:27:63:27:74 | templateName | Template, which may contain code, depends on a $@. | PebbleSSTI.java:25:25:25:60 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:24:27:24:30 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:24:27:24:30 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:25:27:25:30 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:25:27:25:30 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:26:27:26:30 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:26:27:26:30 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:27:27:27:30 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:28:36:28:39 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:28:36:28:39 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:29:36:29:39 | code | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:29:36:29:39 | code | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:32:27:32:30 | spec | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:32:27:32:30 | spec | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:33:27:33:30 | spec | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:33:27:33:30 | spec | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| ThymeleafSSTI.java:34:36:34:39 | spec | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:34:36:34:39 | spec | Template, which may contain code, depends on a $@. | ThymeleafSSTI.java:21:17:21:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:37:45:37:48 | code | VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:37:45:37:48 | code | Template, which may contain code, depends on a $@. | VelocitySSTI.java:31:17:31:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:51:45:51:50 | reader | VelocitySSTI.java:43:17:43:44 | getParameter(...) : String | VelocitySSTI.java:51:45:51:50 | reader | Template, which may contain code, depends on a $@. | VelocitySSTI.java:43:17:43:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:61:25:61:30 | reader | VelocitySSTI.java:57:17:57:44 | getParameter(...) : String | VelocitySSTI.java:61:25:61:30 | reader | Template, which may contain code, depends on a $@. | VelocitySSTI.java:57:17:57:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:93:37:93:40 | code | VelocitySSTI.java:81:17:81:44 | getParameter(...) : String | VelocitySSTI.java:93:37:93:40 | code | Template, which may contain code, depends on a $@. | VelocitySSTI.java:81:17:81:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:94:37:94:58 | new StringReader(...) | VelocitySSTI.java:81:17:81:44 | getParameter(...) : String | VelocitySSTI.java:94:37:94:58 | new StringReader(...) | Template, which may contain code, depends on a $@. | VelocitySSTI.java:81:17:81:44 | getParameter(...) | user-provided value | -| VelocitySSTI.java:117:37:117:40 | code | VelocitySSTI.java:114:17:114:44 | getParameter(...) : String | VelocitySSTI.java:117:37:117:40 | code | Template, which may contain code, depends on a $@. | VelocitySSTI.java:114:17:114:44 | getParameter(...) | user-provided value | -edges -| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:24:36:24:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:26:35:26:40 | reader | provenance | Sink:MaD:6 | -| FreemarkerSSTI.java:24:36:24:39 | code : String | FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:32:17:32:44 | getParameter(...) : String | FreemarkerSSTI.java:33:36:33:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:33:19:33:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:36:35:36:40 | reader | provenance | Sink:MaD:7 | -| FreemarkerSSTI.java:33:36:33:39 | code : String | FreemarkerSSTI.java:33:19:33:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:42:17:42:44 | getParameter(...) : String | FreemarkerSSTI.java:43:36:43:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:43:19:43:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:46:35:46:40 | reader | provenance | Sink:MaD:8 | -| FreemarkerSSTI.java:43:36:43:39 | code : String | FreemarkerSSTI.java:43:19:43:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:52:23:52:56 | getParameter(...) : String | FreemarkerSSTI.java:55:35:55:44 | sourceCode | provenance | Src:MaD:19 Sink:MaD:9 | -| FreemarkerSSTI.java:61:17:61:44 | getParameter(...) : String | FreemarkerSSTI.java:63:36:63:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:63:19:63:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:65:47:65:52 | reader | provenance | Sink:MaD:10 | -| FreemarkerSSTI.java:63:36:63:39 | code : String | FreemarkerSSTI.java:63:19:63:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:71:17:71:44 | getParameter(...) : String | FreemarkerSSTI.java:74:36:74:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:74:19:74:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:77:36:77:41 | reader | provenance | Sink:MaD:11 | -| FreemarkerSSTI.java:74:36:74:39 | code : String | FreemarkerSSTI.java:74:19:74:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:83:17:83:44 | getParameter(...) : String | FreemarkerSSTI.java:86:36:86:39 | code : String | provenance | Src:MaD:19 | -| FreemarkerSSTI.java:86:19:86:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:88:47:88:52 | reader | provenance | Sink:MaD:12 | -| FreemarkerSSTI.java:86:36:86:39 | code : String | FreemarkerSSTI.java:86:19:86:40 | new StringReader(...) : StringReader | provenance | MaD:20 | -| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:96:42:96:45 | code | provenance | Src:MaD:19 Sink:MaD:5 | -| FreemarkerSSTI.java:101:17:101:44 | getParameter(...) : String | FreemarkerSSTI.java:104:42:104:45 | code | provenance | Src:MaD:19 Sink:MaD:5 | -| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:24:44:24:51 | template | provenance | Src:MaD:19 Sink:MaD:1 | -| JinJavaSSTI.java:29:21:29:52 | getParameter(...) : String | JinJavaSSTI.java:32:55:32:62 | template | provenance | Src:MaD:19 Sink:MaD:2 | -| JinJavaSSTI.java:37:21:37:52 | getParameter(...) : String | JinJavaSSTI.java:42:55:42:62 | template | provenance | Src:MaD:19 Sink:MaD:2 | -| PebbleSSTI.java:18:25:18:60 | getParameter(...) : String | PebbleSSTI.java:20:56:20:67 | templateName | provenance | Src:MaD:19 Sink:MaD:4 | -| PebbleSSTI.java:25:25:25:60 | getParameter(...) : String | PebbleSSTI.java:27:63:27:74 | templateName | provenance | Src:MaD:19 Sink:MaD:3 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:24:27:24:30 | code | provenance | Src:MaD:19 Sink:MaD:17 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:25:27:25:30 | code | provenance | Src:MaD:19 Sink:MaD:17 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:26:27:26:30 | code | provenance | Src:MaD:19 Sink:MaD:17 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code | provenance | Src:MaD:19 Sink:MaD:17 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:28:36:28:39 | code | provenance | Src:MaD:19 Sink:MaD:18 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:29:36:29:39 | code | provenance | Src:MaD:19 Sink:MaD:18 | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | ThymeleafSSTI.java:31:41:31:44 | code : String | provenance | Src:MaD:19 | -| ThymeleafSSTI.java:31:24:31:49 | new TemplateSpec(...) : TemplateSpec | ThymeleafSSTI.java:32:27:32:30 | spec | provenance | Sink:MaD:17 | -| ThymeleafSSTI.java:31:24:31:49 | new TemplateSpec(...) : TemplateSpec | ThymeleafSSTI.java:33:27:33:30 | spec | provenance | Sink:MaD:17 | -| ThymeleafSSTI.java:31:24:31:49 | new TemplateSpec(...) : TemplateSpec | ThymeleafSSTI.java:34:36:34:39 | spec | provenance | Sink:MaD:18 | -| ThymeleafSSTI.java:31:41:31:44 | code : String | ThymeleafSSTI.java:31:24:31:49 | new TemplateSpec(...) : TemplateSpec | provenance | MaD:21 | -| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:37:45:37:48 | code | provenance | Src:MaD:19 Sink:MaD:13 | -| VelocitySSTI.java:43:17:43:44 | getParameter(...) : String | VelocitySSTI.java:49:42:49:45 | code : String | provenance | Src:MaD:19 | -| VelocitySSTI.java:49:25:49:46 | new StringReader(...) : StringReader | VelocitySSTI.java:51:45:51:50 | reader | provenance | Sink:MaD:13 | -| VelocitySSTI.java:49:42:49:45 | code : String | VelocitySSTI.java:49:25:49:46 | new StringReader(...) : StringReader | provenance | MaD:20 | -| VelocitySSTI.java:57:17:57:44 | getParameter(...) : String | VelocitySSTI.java:60:42:60:45 | code : String | provenance | Src:MaD:19 | -| VelocitySSTI.java:60:25:60:46 | new StringReader(...) : StringReader | VelocitySSTI.java:61:25:61:30 | reader | provenance | Sink:MaD:16 | -| VelocitySSTI.java:60:42:60:45 | code : String | VelocitySSTI.java:60:25:60:46 | new StringReader(...) : StringReader | provenance | MaD:20 | -| VelocitySSTI.java:81:17:81:44 | getParameter(...) : String | VelocitySSTI.java:93:37:93:40 | code | provenance | Src:MaD:19 Sink:MaD:14 | -| VelocitySSTI.java:81:17:81:44 | getParameter(...) : String | VelocitySSTI.java:94:54:94:57 | code : String | provenance | Src:MaD:19 | -| VelocitySSTI.java:94:54:94:57 | code : String | VelocitySSTI.java:94:37:94:58 | new StringReader(...) | provenance | MaD:20 Sink:MaD:14 | -| VelocitySSTI.java:114:17:114:44 | getParameter(...) : String | VelocitySSTI.java:117:37:117:40 | code | provenance | Src:MaD:19 Sink:MaD:15 | -models -| 1 | Sink: com.hubspot.jinjava; Jinjava; true; render; ; ; Argument[0]; template-injection; manual | -| 2 | Sink: com.hubspot.jinjava; Jinjava; true; renderForResult; ; ; Argument[0]; template-injection; manual | -| 3 | Sink: com.mitchellbosecke.pebble; PebbleEngine; true; getLiteralTemplate; ; ; Argument[0]; template-injection; manual | -| 4 | Sink: com.mitchellbosecke.pebble; PebbleEngine; true; getTemplate; ; ; Argument[0]; template-injection; manual | -| 5 | Sink: freemarker.cache; StringTemplateLoader; true; putTemplate; ; ; Argument[1]; template-injection; manual | -| 6 | Sink: freemarker.template; Template; true; Template; (String,Reader); ; Argument[1]; template-injection; manual | -| 7 | Sink: freemarker.template; Template; true; Template; (String,Reader,Configuration); ; Argument[1]; template-injection; manual | -| 8 | Sink: freemarker.template; Template; true; Template; (String,Reader,Configuration,String); ; Argument[1]; template-injection; manual | -| 9 | Sink: freemarker.template; Template; true; Template; (String,String,Configuration); ; Argument[1]; template-injection; manual | -| 10 | Sink: freemarker.template; Template; true; Template; (String,String,Reader,Configuration); ; Argument[2]; template-injection; manual | -| 11 | Sink: freemarker.template; Template; true; Template; (String,String,Reader,Configuration,ParserConfiguration,String); ; Argument[2]; template-injection; manual | -| 12 | Sink: freemarker.template; Template; true; Template; (String,String,Reader,Configuration,String); ; Argument[2]; template-injection; manual | -| 13 | Sink: org.apache.velocity.app; Velocity; true; evaluate; ; ; Argument[3]; template-injection; manual | -| 14 | Sink: org.apache.velocity.app; VelocityEngine; true; evaluate; ; ; Argument[3]; template-injection; manual | -| 15 | Sink: org.apache.velocity.runtime.resource.util; StringResourceRepository; true; putStringResource; ; ; Argument[1]; template-injection; manual | -| 16 | Sink: org.apache.velocity.runtime; RuntimeServices; true; parse; ; ; Argument[0]; template-injection; manual | -| 17 | Sink: org.thymeleaf; ITemplateEngine; true; process; ; ; Argument[0]; template-injection; manual | -| 18 | Sink: org.thymeleaf; ITemplateEngine; true; processThrottled; ; ; Argument[0]; template-injection; manual | -| 19 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 20 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 21 | Summary: org.thymeleaf; TemplateSpec; false; TemplateSpec; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:24:36:24:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:26:35:26:40 | reader | semmle.label | reader | -| FreemarkerSSTI.java:32:17:32:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:33:19:33:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:33:36:33:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:36:35:36:40 | reader | semmle.label | reader | -| FreemarkerSSTI.java:42:17:42:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:43:19:43:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:43:36:43:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:46:35:46:40 | reader | semmle.label | reader | -| FreemarkerSSTI.java:52:23:52:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:55:35:55:44 | sourceCode | semmle.label | sourceCode | -| FreemarkerSSTI.java:61:17:61:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:63:19:63:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:63:36:63:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:65:47:65:52 | reader | semmle.label | reader | -| FreemarkerSSTI.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:74:19:74:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:74:36:74:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:77:36:77:41 | reader | semmle.label | reader | -| FreemarkerSSTI.java:83:17:83:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:86:19:86:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| FreemarkerSSTI.java:86:36:86:39 | code : String | semmle.label | code : String | -| FreemarkerSSTI.java:88:47:88:52 | reader | semmle.label | reader | -| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:96:42:96:45 | code | semmle.label | code | -| FreemarkerSSTI.java:101:17:101:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FreemarkerSSTI.java:104:42:104:45 | code | semmle.label | code | -| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JinJavaSSTI.java:24:44:24:51 | template | semmle.label | template | -| JinJavaSSTI.java:29:21:29:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JinJavaSSTI.java:32:55:32:62 | template | semmle.label | template | -| JinJavaSSTI.java:37:21:37:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JinJavaSSTI.java:42:55:42:62 | template | semmle.label | template | -| PebbleSSTI.java:18:25:18:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PebbleSSTI.java:20:56:20:67 | templateName | semmle.label | templateName | -| PebbleSSTI.java:25:25:25:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PebbleSSTI.java:27:63:27:74 | templateName | semmle.label | templateName | -| ThymeleafSSTI.java:21:17:21:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ThymeleafSSTI.java:24:27:24:30 | code | semmle.label | code | -| ThymeleafSSTI.java:25:27:25:30 | code | semmle.label | code | -| ThymeleafSSTI.java:26:27:26:30 | code | semmle.label | code | -| ThymeleafSSTI.java:27:27:27:30 | code | semmle.label | code | -| ThymeleafSSTI.java:28:36:28:39 | code | semmle.label | code | -| ThymeleafSSTI.java:29:36:29:39 | code | semmle.label | code | -| ThymeleafSSTI.java:31:24:31:49 | new TemplateSpec(...) : TemplateSpec | semmle.label | new TemplateSpec(...) : TemplateSpec | -| ThymeleafSSTI.java:31:41:31:44 | code : String | semmle.label | code : String | -| ThymeleafSSTI.java:32:27:32:30 | spec | semmle.label | spec | -| ThymeleafSSTI.java:33:27:33:30 | spec | semmle.label | spec | -| ThymeleafSSTI.java:34:36:34:39 | spec | semmle.label | spec | -| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| VelocitySSTI.java:37:45:37:48 | code | semmle.label | code | -| VelocitySSTI.java:43:17:43:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| VelocitySSTI.java:49:25:49:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| VelocitySSTI.java:49:42:49:45 | code : String | semmle.label | code : String | -| VelocitySSTI.java:51:45:51:50 | reader | semmle.label | reader | -| VelocitySSTI.java:57:17:57:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| VelocitySSTI.java:60:25:60:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader | -| VelocitySSTI.java:60:42:60:45 | code : String | semmle.label | code : String | -| VelocitySSTI.java:61:25:61:30 | reader | semmle.label | reader | -| VelocitySSTI.java:81:17:81:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| VelocitySSTI.java:93:37:93:40 | code | semmle.label | code | -| VelocitySSTI.java:94:37:94:58 | new StringReader(...) | semmle.label | new StringReader(...) | -| VelocitySSTI.java:94:54:94:57 | code : String | semmle.label | code : String | -| VelocitySSTI.java:114:17:114:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| VelocitySSTI.java:117:37:117:40 | code | semmle.label | code | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.qlref deleted file mode 100644 index e346322b6d43..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/TemplateInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-094/TemplateInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/ThymeleafSSTI.java b/java/ql/test/query-tests/security/CWE-094/TemplateInjection/ThymeleafSSTI.java deleted file mode 100644 index 669b287ea797..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/ThymeleafSSTI.java +++ /dev/null @@ -1,38 +0,0 @@ -import javax.imageio.stream.FileImageInputStream; -import javax.servlet.http.HttpServletRequest; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import java.lang.String; -import java.io.File; -import java.io.FileWriter; -import java.io.Reader; -import java.io.StringReader; -import java.io.Writer; -import java.util.Set; - -import org.thymeleaf.*; -import org.thymeleaf.context.Context; - -@Controller -public class ThymeleafSSTI { - @GetMapping(value = "bad1") - public void bad1(HttpServletRequest request) { - String code = request.getParameter("code"); // $ Source - try { - TemplateEngine templateEngine = new TemplateEngine(); - templateEngine.process(code, (Set) null, (Context) null); // $ Alert - templateEngine.process(code, (Set) null, (Context) null, (Writer) null); // $ Alert - templateEngine.process(code, (Context) null); // $ Alert - templateEngine.process(code, (Context) null, (Writer) null); // $ Alert - templateEngine.processThrottled(code, (Set) null, (Context) null); // $ Alert - templateEngine.processThrottled(code, (Context) null); // $ Alert - - TemplateSpec spec = new TemplateSpec(code, ""); - templateEngine.process(spec, (Context) null); // $ Alert - templateEngine.process(spec, (Context) null, (Writer) null); // $ Alert - templateEngine.processThrottled(spec, (Context) null); // $ Alert - } catch (Exception e) { - } - } -} diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/options b/java/ql/test/query-tests/security/CWE-094/TemplateInjection/options deleted file mode 100644 index d7c8332682ba..000000000000 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../../stubs/springframework-5.8.x:${testdir}/../../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../../stubs/apache-commons-logging-1.2:${testdir}/../../../../stubs/mvel2-2.4.7:${testdir}/../../../../stubs/groovy-all-3.0.7:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/scriptengine:${testdir}/../../../../stubs/jsr223-api:${testdir}/../../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../../stubs/jinjava-2.6.0:${testdir}/../../../../stubs/pebble-3.1.5:${testdir}/../../../../stubs/thymeleaf-3.0.14:${testdir}/../../../../stubs/apache-velocity-2.3:${testdir}/../../../..//stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql new file mode 100644 index 000000000000..809175bcd376 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/TemplateInjectionTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.TemplateInjectionQuery +import utils.test.InlineExpectationsTest + +module TemplateInjectionTest implements TestSig { + string getARelevantTag() { result = "hasTemplateInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasTemplateInjection" and + exists(DataFlow::Node sink | TemplateInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-094/ThymeleafSSTI.java b/java/ql/test/query-tests/security/CWE-094/ThymeleafSSTI.java new file mode 100644 index 000000000000..4b3906689483 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-094/ThymeleafSSTI.java @@ -0,0 +1,38 @@ +import javax.imageio.stream.FileImageInputStream; +import javax.servlet.http.HttpServletRequest; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +import java.lang.String; +import java.io.File; +import java.io.FileWriter; +import java.io.Reader; +import java.io.StringReader; +import java.io.Writer; +import java.util.Set; + +import org.thymeleaf.*; +import org.thymeleaf.context.Context; + +@Controller +public class ThymeleafSSTI { + @GetMapping(value = "bad1") + public void bad1(HttpServletRequest request) { + String code = request.getParameter("code"); + try { + TemplateEngine templateEngine = new TemplateEngine(); + templateEngine.process(code, (Set) null, (Context) null); // $hasTemplateInjection + templateEngine.process(code, (Set) null, (Context) null, (Writer) null); // $hasTemplateInjection + templateEngine.process(code, (Context) null); // $hasTemplateInjection + templateEngine.process(code, (Context) null, (Writer) null); // $hasTemplateInjection + templateEngine.processThrottled(code, (Set) null, (Context) null); // $hasTemplateInjection + templateEngine.processThrottled(code, (Context) null); // $hasTemplateInjection + + TemplateSpec spec = new TemplateSpec(code, ""); + templateEngine.process(spec, (Context) null); // $hasTemplateInjection + templateEngine.process(spec, (Context) null, (Writer) null); // $hasTemplateInjection + templateEngine.processThrottled(spec, (Context) null); // $hasTemplateInjection + } catch (Exception e) { + } + } +} diff --git a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/VelocitySSTI.java b/java/ql/test/query-tests/security/CWE-094/VelocitySSTI.java similarity index 83% rename from java/ql/test/query-tests/security/CWE-094/TemplateInjection/VelocitySSTI.java rename to java/ql/test/query-tests/security/CWE-094/VelocitySSTI.java index 463a653525e5..09c7a07058f2 100644 --- a/java/ql/test/query-tests/security/CWE-094/TemplateInjection/VelocitySSTI.java +++ b/java/ql/test/query-tests/security/CWE-094/VelocitySSTI.java @@ -28,19 +28,19 @@ public class VelocitySSTI { @GetMapping(value = "bad1") public void bad1(HttpServletRequest request) { String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source + String code = request.getParameter("code"); VelocityContext context = null; String s = "We are using $project $name to render this."; StringWriter w = new StringWriter(); - Velocity.evaluate(context, w, "mystring", code); // $ Alert + Velocity.evaluate(context, w, "mystring", code); // $hasTemplateInjection } @GetMapping(value = "bad2") public void bad2(HttpServletRequest request) { String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source + String code = request.getParameter("code"); VelocityContext context = null; @@ -48,17 +48,17 @@ public void bad2(HttpServletRequest request) { StringWriter w = new StringWriter(); StringReader reader = new StringReader(code); - Velocity.evaluate(context, w, "mystring", reader); // $ Alert + Velocity.evaluate(context, w, "mystring", reader); // $hasTemplateInjection } @GetMapping(value = "bad3") public void bad3(HttpServletRequest request) { String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source + String code = request.getParameter("code"); RuntimeServices runtimeServices = null; StringReader reader = new StringReader(code); - runtimeServices.parse(reader, new Template()); // $ Alert + runtimeServices.parse(reader, new Template()); // $hasTemplateInjection } @GetMapping(value = "good1") @@ -78,7 +78,7 @@ public void good1(HttpServletRequest request) { @GetMapping(value = "bad5") public void bad5(HttpServletRequest request) { String name = "ttemplate"; - String code = request.getParameter("code"); // $ Source + String code = request.getParameter("code"); VelocityContext context = new VelocityContext(); context.put("code", code); @@ -90,8 +90,8 @@ public void bad5(HttpServletRequest request) { ctx.put("key", code); engine.evaluate(ctx, null, null, (String) null); // Safe engine.evaluate(ctx, null, null, (Reader) null); // Safe - engine.evaluate(null, null, null, code); // $ Alert - engine.evaluate(null, null, null, new StringReader(code)); // $ Alert + engine.evaluate(null, null, null, code); // $hasTemplateInjection + engine.evaluate(null, null, null, new StringReader(code)); // $hasTemplateInjection } @GetMapping(value = "good2") @@ -111,10 +111,10 @@ public void good2(HttpServletRequest request) { @GetMapping(value = "bad6") public void bad6(HttpServletRequest request) { - String code = request.getParameter("code"); // $ Source + String code = request.getParameter("code"); StringResourceRepository repo = new StringResourceRepositoryImpl(); - repo.putStringResource("woogie2", code); // $ Alert + repo.putStringResource("woogie2", code); // $hasTemplateInjection } } diff --git a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected index d96abdbd6bc0..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected +++ b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.expected @@ -1,43 +0,0 @@ -#select -| MainActivity.java:13:34:13:39 | intent | MainActivity.java:12:29:12:39 | getIntent(...) : Intent | MainActivity.java:13:34:13:39 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:12:29:12:39 | getIntent(...) | user-provided value | -| MainActivity.java:17:34:17:44 | extraIntent | MainActivity.java:16:43:16:53 | getIntent(...) : Intent | MainActivity.java:17:34:17:44 | extraIntent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:16:43:16:53 | getIntent(...) | user-provided value | -| MainActivity.java:33:34:33:39 | intent | MainActivity.java:30:29:30:39 | getIntent(...) : Intent | MainActivity.java:33:34:33:39 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:30:29:30:39 | getIntent(...) | user-provided value | -| MainActivity.java:46:34:46:39 | intent | MainActivity.java:42:29:42:39 | getIntent(...) : Intent | MainActivity.java:46:34:46:39 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:42:29:42:39 | getIntent(...) | user-provided value | -| MainActivity.java:52:34:52:39 | intent | MainActivity.java:49:29:49:39 | getIntent(...) : Intent | MainActivity.java:52:34:52:39 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:49:29:49:39 | getIntent(...) | user-provided value | -| MainActivity.java:60:38:60:43 | intent | MainActivity.java:55:29:55:39 | getIntent(...) : Intent | MainActivity.java:60:38:60:43 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:55:29:55:39 | getIntent(...) | user-provided value | -| MainActivity.java:71:38:71:43 | intent | MainActivity.java:64:29:64:39 | getIntent(...) : Intent | MainActivity.java:71:38:71:43 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:64:29:64:39 | getIntent(...) | user-provided value | -| MainActivity.java:81:38:81:43 | intent | MainActivity.java:75:29:75:39 | getIntent(...) : Intent | MainActivity.java:81:38:81:43 | intent | This Intent can be set with arbitrary flags from a $@, and used to give access to internal content providers. | MainActivity.java:75:29:75:39 | getIntent(...) | user-provided value | -edges -| MainActivity.java:12:29:12:39 | getIntent(...) : Intent | MainActivity.java:13:34:13:39 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:16:34:16:87 | (...)... : Intent | MainActivity.java:17:34:17:44 | extraIntent | provenance | Sink:MaD:1 | -| MainActivity.java:16:43:16:53 | getIntent(...) : Intent | MainActivity.java:16:43:16:87 | getParcelableExtra(...) : Parcelable | provenance | MaD:2 | -| MainActivity.java:16:43:16:87 | getParcelableExtra(...) : Parcelable | MainActivity.java:16:34:16:87 | (...)... : Intent | provenance | | -| MainActivity.java:30:29:30:39 | getIntent(...) : Intent | MainActivity.java:33:34:33:39 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:42:29:42:39 | getIntent(...) : Intent | MainActivity.java:46:34:46:39 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:49:29:49:39 | getIntent(...) : Intent | MainActivity.java:52:34:52:39 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:55:29:55:39 | getIntent(...) : Intent | MainActivity.java:60:38:60:43 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:64:29:64:39 | getIntent(...) : Intent | MainActivity.java:71:38:71:43 | intent | provenance | Sink:MaD:1 | -| MainActivity.java:75:29:75:39 | getIntent(...) : Intent | MainActivity.java:81:38:81:43 | intent | provenance | Sink:MaD:1 | -models -| 1 | Sink: android.app; Activity; true; setResult; (int,Intent); ; Argument[1]; pending-intents; manual | -| 2 | Summary: android.content; Intent; true; getParcelableExtra; (String); ; Argument[this].SyntheticField[android.content.Intent.extras].MapValue; ReturnValue; value; manual | -nodes -| MainActivity.java:12:29:12:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:13:34:13:39 | intent | semmle.label | intent | -| MainActivity.java:16:34:16:87 | (...)... : Intent | semmle.label | (...)... : Intent | -| MainActivity.java:16:43:16:53 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:16:43:16:87 | getParcelableExtra(...) : Parcelable | semmle.label | getParcelableExtra(...) : Parcelable | -| MainActivity.java:17:34:17:44 | extraIntent | semmle.label | extraIntent | -| MainActivity.java:30:29:30:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:33:34:33:39 | intent | semmle.label | intent | -| MainActivity.java:42:29:42:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:46:34:46:39 | intent | semmle.label | intent | -| MainActivity.java:49:29:49:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:52:34:52:39 | intent | semmle.label | intent | -| MainActivity.java:55:29:55:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:60:38:60:43 | intent | semmle.label | intent | -| MainActivity.java:64:29:64:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:71:38:71:43 | intent | semmle.label | intent | -| MainActivity.java:75:29:75:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:81:38:81:43 | intent | semmle.label | intent | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql new file mode 100644 index 000000000000..f2f820743d1c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.IntentUriPermissionManipulationQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.qlref b/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.qlref deleted file mode 100644 index caac7a302e4d..000000000000 --- a/java/ql/test/query-tests/security/CWE-266/IntentUriPermissionManipulationTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-266/IntentUriPermissionManipulation.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-266/MainActivity.java b/java/ql/test/query-tests/security/CWE-266/MainActivity.java index 3f146d20af02..4af80cc2b18a 100644 --- a/java/ql/test/query-tests/security/CWE-266/MainActivity.java +++ b/java/ql/test/query-tests/security/CWE-266/MainActivity.java @@ -9,12 +9,12 @@ public class MainActivity extends Activity { public void onCreate(Bundle savedInstance) { { - Intent intent = getIntent(); // $ Source - setResult(RESULT_OK, intent); // $ Alert + Intent intent = getIntent(); + setResult(RESULT_OK, intent); // $ hasTaintFlow } { - Intent extraIntent = (Intent) getIntent().getParcelableExtra("extraIntent"); // $ Source - setResult(RESULT_OK, extraIntent); // $ Alert + Intent extraIntent = (Intent) getIntent().getParcelableExtra("extraIntent"); + setResult(RESULT_OK, extraIntent); // $ hasTaintFlow } { Intent intent = getIntent(); @@ -27,10 +27,10 @@ public void onCreate(Bundle savedInstance) { setResult(RESULT_OK, intent); // Safe } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); intent.setFlags( // Not properly sanitized Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_ACTIVITY_CLEAR_TOP); - setResult(RESULT_OK, intent); // $ Alert + setResult(RESULT_OK, intent); // $ hasTaintFlow } { Intent intent = getIntent(); @@ -39,46 +39,46 @@ public void onCreate(Bundle savedInstance) { setResult(RESULT_OK, intent); // Safe } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); // Combined, the following two calls are a sanitizer intent.removeFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.removeFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - setResult(RESULT_OK, intent); // $ SPURIOUS: $ Alert + setResult(RESULT_OK, intent); // $ SPURIOUS: $ hasTaintFlow } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); intent.removeFlags( // Not properly sanitized Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_ACTIVITY_CLEAR_TOP); - setResult(RESULT_OK, intent); // $ Alert + setResult(RESULT_OK, intent); // $ hasTaintFlow } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); // Good check if (intent.getData().equals(Uri.parse("content://safe/uri"))) { setResult(RESULT_OK, intent); // Safe } else { - setResult(RESULT_OK, intent); // $ Alert + setResult(RESULT_OK, intent); // $ hasTaintFlow } } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); int flags = intent.getFlags(); // Good check if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == 0 && (flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) == 0) { setResult(RESULT_OK, intent); // Safe } else { - setResult(RESULT_OK, intent); // $ Alert + setResult(RESULT_OK, intent); // $ hasTaintFlow } } { - Intent intent = getIntent(); // $ Source + Intent intent = getIntent(); int flags = intent.getFlags(); // Insufficient check if ((flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == 0) { - setResult(RESULT_OK, intent); // $ MISSING: $ Alert + setResult(RESULT_OK, intent); // $ MISSING: $ hasTaintFlow } else { - setResult(RESULT_OK, intent); // $ Alert + setResult(RESULT_OK, intent); // $ hasTaintFlow } } } diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected index 6d142f2b6348..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected +++ b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.expected @@ -1,94 +0,0 @@ -#select -| InsecureTrustManagerTest.java:124:22:124:33 | trustManager | InsecureTrustManagerTest.java:123:53:123:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:124:22:124:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:123:53:123:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:148:23:148:34 | trustManager | InsecureTrustManagerTest.java:147:54:147:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:148:23:148:34 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:147:54:147:79 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:180:23:180:34 | trustManager | InsecureTrustManagerTest.java:179:54:179:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:180:23:180:34 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:179:54:179:79 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:212:23:212:34 | trustManager | InsecureTrustManagerTest.java:211:54:211:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:212:23:212:34 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:211:54:211:79 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:229:23:229:34 | trustManager | InsecureTrustManagerTest.java:228:54:228:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:229:23:229:34 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:228:54:228:79 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:247:23:247:34 | trustManager | InsecureTrustManagerTest.java:246:54:246:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:247:23:247:34 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:246:54:246:79 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:267:22:267:33 | trustManager | InsecureTrustManagerTest.java:266:53:266:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:267:22:267:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:266:53:266:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:279:22:279:33 | trustManager | InsecureTrustManagerTest.java:278:53:278:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:279:22:279:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:278:53:278:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:291:22:291:33 | trustManager | InsecureTrustManagerTest.java:290:53:290:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:291:22:291:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:290:53:290:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:303:22:303:33 | trustManager | InsecureTrustManagerTest.java:302:53:302:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:303:22:303:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:302:53:302:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:315:22:315:33 | trustManager | InsecureTrustManagerTest.java:314:53:314:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:315:22:315:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:314:53:314:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:327:22:327:33 | trustManager | InsecureTrustManagerTest.java:326:53:326:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:327:22:327:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:326:53:326:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:339:22:339:33 | trustManager | InsecureTrustManagerTest.java:338:53:338:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:339:22:339:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:338:53:338:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:352:22:352:33 | trustManager | InsecureTrustManagerTest.java:351:53:351:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:352:22:352:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:351:53:351:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -| InsecureTrustManagerTest.java:360:22:360:33 | trustManager | InsecureTrustManagerTest.java:359:53:359:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:360:22:360:33 | trustManager | This uses $@, which is defined in $@ and trusts any certificate. | InsecureTrustManagerTest.java:359:53:359:78 | new InsecureTrustManager(...) : InsecureTrustManager | TrustManager | InsecureTrustManagerTest.java:35:23:35:42 | InsecureTrustManager | InsecureTrustManagerTest$InsecureTrustManager | -edges -| InsecureTrustManagerTest.java:123:33:123:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:124:22:124:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:123:53:123:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:123:33:123:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:147:34:147:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:148:23:148:34 | trustManager | provenance | | -| InsecureTrustManagerTest.java:147:54:147:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:147:34:147:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:179:34:179:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:180:23:180:34 | trustManager | provenance | | -| InsecureTrustManagerTest.java:179:54:179:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:179:34:179:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:211:34:211:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:212:23:212:34 | trustManager | provenance | | -| InsecureTrustManagerTest.java:211:54:211:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:211:34:211:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:228:34:228:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:229:23:229:34 | trustManager | provenance | | -| InsecureTrustManagerTest.java:228:54:228:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:228:34:228:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:246:34:246:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:247:23:247:34 | trustManager | provenance | | -| InsecureTrustManagerTest.java:246:54:246:79 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:246:34:246:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:266:33:266:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:267:22:267:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:266:53:266:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:266:33:266:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:278:33:278:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:279:22:279:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:278:53:278:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:278:33:278:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:290:33:290:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:291:22:291:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:290:53:290:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:290:33:290:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:302:33:302:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:303:22:303:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:302:53:302:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:302:33:302:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:314:33:314:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:315:22:315:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:314:53:314:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:314:33:314:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:326:33:326:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:327:22:327:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:326:53:326:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:326:33:326:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:338:33:338:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:339:22:339:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:338:53:338:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:338:33:338:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:351:33:351:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:352:22:352:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:351:53:351:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:351:33:351:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -| InsecureTrustManagerTest.java:359:33:359:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | InsecureTrustManagerTest.java:360:22:360:33 | trustManager | provenance | | -| InsecureTrustManagerTest.java:359:53:359:78 | new InsecureTrustManager(...) : InsecureTrustManager | InsecureTrustManagerTest.java:359:33:359:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | provenance | | -nodes -| InsecureTrustManagerTest.java:123:33:123:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:123:53:123:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:124:22:124:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:147:34:147:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:147:54:147:79 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:148:23:148:34 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:179:34:179:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:179:54:179:79 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:180:23:180:34 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:211:34:211:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:211:54:211:79 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:212:23:212:34 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:228:34:228:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:228:54:228:79 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:229:23:229:34 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:246:34:246:80 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:246:54:246:79 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:247:23:247:34 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:266:33:266:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:266:53:266:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:267:22:267:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:278:33:278:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:278:53:278:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:279:22:279:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:290:33:290:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:290:53:290:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:291:22:291:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:302:33:302:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:302:53:302:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:303:22:303:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:314:33:314:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:314:53:314:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:315:22:315:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:326:33:326:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:326:53:326:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:327:22:327:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:338:33:338:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:338:53:338:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:339:22:339:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:351:33:351:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:351:53:351:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:352:22:352:33 | trustManager | semmle.label | trustManager | -| InsecureTrustManagerTest.java:359:33:359:79 | {...} : TrustManager[] [[]] : InsecureTrustManager | semmle.label | {...} : TrustManager[] [[]] : InsecureTrustManager | -| InsecureTrustManagerTest.java:359:53:359:78 | new InsecureTrustManager(...) : InsecureTrustManager | semmle.label | new InsecureTrustManager(...) : InsecureTrustManager | -| InsecureTrustManagerTest.java:360:22:360:33 | trustManager | semmle.label | trustManager | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.java b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.java index 4e098fa29887..17e8fc60afcd 100644 --- a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.java +++ b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.java @@ -120,8 +120,8 @@ private static void directSecureTrustManagerCall() private static void directInsecureTrustManagerCall() throws NoSuchAlgorithmException, KeyManagementException { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } private static void namedVariableFlagDirectInsecureTrustManagerCall() @@ -144,8 +144,8 @@ private static void noNamedVariableFlagDirectInsecureTrustManagerCall() throws NoSuchAlgorithmException, KeyManagementException { if (SOME_NAME_THAT_IS_NOT_A_FLAG_NAME) { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } @@ -176,8 +176,8 @@ private static void noStringLiteralFlagDirectInsecureTrustManagerCall() throws NoSuchAlgorithmException, KeyManagementException { if (Boolean.parseBoolean(System.getProperty("SOME_NAME_THAT_IS_NOT_A_FLAG_NAME"))) { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } @@ -208,8 +208,8 @@ private static void noMethodAccessFlagDirectInsecureTrustManagerCall() throws NoSuchAlgorithmException, KeyManagementException { if (is42TheAnswerForEverything()) { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } @@ -225,8 +225,8 @@ private static void isEqualsIgnoreCaseDirectInsecureTrustManagerCall() String schemaFromHttpRequest = "HTTPS"; if (schemaFromHttpRequest.equalsIgnoreCase("https")) { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } @@ -243,8 +243,8 @@ private static void noIsEqualsIgnoreCaseDirectInsecureTrustManagerCall() String schemaFromHttpRequest = "HTTPS"; if (!schemaFromHttpRequest.equalsIgnoreCase("https")) { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } @@ -263,8 +263,8 @@ private static void namedVariableFlagNOTGuardingDirectInsecureTrustManagerCall() } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -275,8 +275,8 @@ private static void noNamedVariableFlagNOTGuardingDirectInsecureTrustManagerCall } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -287,8 +287,8 @@ private static void stringLiteralFlagNOTGuardingDirectInsecureTrustManagerCall() } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -299,8 +299,8 @@ private static void noStringLiteralFlagNOTGuardingDirectInsecureTrustManagerCall } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -311,8 +311,8 @@ private static void methodAccessFlagNOTGuardingDirectInsecureTrustManagerCall() } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -323,8 +323,8 @@ private static void noMethodAccessFlagNOTGuardingDirectInsecureTrustManagerCall( } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } private static void isEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCall() @@ -335,8 +335,8 @@ private static void isEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCall( } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } @@ -348,15 +348,15 @@ private static void noIsEqualsIgnoreCaseNOTGuardingDirectInsecureTrustManagerCal } SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } private static void disableTrustManager() throws NoSuchAlgorithmException, KeyManagementException { SSLContext context = SSLContext.getInstance("TLS"); - TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; // $ Source - context.init(null, trustManager, null); // $ Alert + TrustManager[] trustManager = new TrustManager[] {new InsecureTrustManager()}; + context.init(null, trustManager, null); // $ hasValueFlow } } diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql new file mode 100644 index 000000000000..1c0ffc49eba4 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.InsecureTrustManagerQuery +import utils.test.InlineExpectationsTest + +module InsecureTrustManagerTest implements TestSig { + string getARelevantTag() { result = "hasValueFlow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasValueFlow" and + exists(DataFlow::Node sink | InsecureTrustManagerFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.qlref b/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.qlref deleted file mode 100644 index f4c00b42347d..000000000000 --- a/java/ql/test/query-tests/security/CWE-295/InsecureTrustManager/InsecureTrustManagerTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-295/InsecureTrustManager.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.expected b/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.expected deleted file mode 100644 index d39985a091bb..000000000000 --- a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.expected +++ /dev/null @@ -1,21 +0,0 @@ -| CleartextStorageCookieTest.java:22:7:22:40 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:20:31:20:62 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:20:54:20:61 | password | sensitive data | CleartextStorageCookieTest.java:20:54:20:61 | password | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:20:54:20:61 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:21:31:21:38 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:23:69:23:76 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:24:46:24:53 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:33:67:33:74 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:34:36:34:43 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:37:84:37:91 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:38:51:38:58 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:44:7:44:32 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:43:23:43:51 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:42:40:42:47 | password | sensitive data | CleartextStorageCookieTest.java:43:46:43:50 | value | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:20:54:20:61 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:21:31:21:38 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:23:69:23:76 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:24:46:24:53 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:33:67:33:74 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:34:36:34:43 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:37:84:37:91 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:38:51:38:58 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:42:40:42:47 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:48:77:48:84 | password | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | -| CleartextStorageCookieTest.java:52:7:52:50 | addCookie(...) | This stores cookie $@ containing $@ which was $@. | CleartextStorageCookieTest.java:52:26:52:49 | new Cookie(...) | new Cookie(...) | CleartextStorageCookieTest.java:49:59:49:83 | getPassword(...) | sensitive data | CleartextStorageCookieTest.java:52:45:52:48 | data | added to the cookie | diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.java b/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.java deleted file mode 100644 index 5e4e949ca11e..000000000000 --- a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.java +++ /dev/null @@ -1,79 +0,0 @@ -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.Cookie; -import org.owasp.esapi.Encoder; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.security.MessageDigest; -import java.net.PasswordAuthentication; - -public class CleartextStorageCookieTest extends HttpServlet { - HttpServletResponse response; - String name = "user"; - String password = "BP@ssw0rd"; // $ Source - - public void doGet() throws Exception { - { - Cookie nameCookie = new Cookie("name", name); - nameCookie.setValue(name); - response.addCookie(nameCookie); // Safe - Cookie passwordCookie = new Cookie("password", password); - passwordCookie.setValue(password); - response.addCookie(passwordCookie); // $ Alert - Cookie encodedPasswordCookie = new Cookie("password", encrypt(password)); - encodedPasswordCookie.setValue(encrypt(password)); - response.addCookie(encodedPasswordCookie); // Safe - } - { - io.netty.handler.codec.http.Cookie nettyNameCookie = - new io.netty.handler.codec.http.DefaultCookie("name", name); - nettyNameCookie.setValue(name); // Safe - - io.netty.handler.codec.http.Cookie nettyPasswordCookie = - new io.netty.handler.codec.http.DefaultCookie("password", password); - nettyPasswordCookie.setValue(password); // $ MISSING: Alert (netty not supported by query) - - io.netty.handler.codec.http.cookie.Cookie nettyEncodedPasswordCookie = - new io.netty.handler.codec.http.cookie.DefaultCookie("password", encrypt(password)); - nettyEncodedPasswordCookie.setValue(encrypt(password)); // Safe - } - { - Encoder enc = null; - String value = enc.encodeForHTML(password); - Cookie cookie = new Cookie("password", value); - response.addCookie(cookie); // $ Alert - } - { - String data; - PasswordAuthentication credentials = new PasswordAuthentication(name, password.toCharArray()); - data = credentials.getUserName() + ":" + new String(credentials.getPassword()); - - // BAD: store data in a cookie in cleartext form - response.addCookie(new Cookie("auth", data)); // $ Alert - } - { - String data; - PasswordAuthentication credentials = - new PasswordAuthentication(name, password.toCharArray()); - String salt = "ThisIsMySalt"; - MessageDigest messageDigest = MessageDigest.getInstance("SHA-512"); - messageDigest.reset(); - String credentialsToHash = - credentials.getUserName() + ":" + new String(credentials.getPassword()); - byte[] hashedCredsAsBytes = - messageDigest.digest((salt+credentialsToHash).getBytes("UTF-8")); - data = new String(hashedCredsAsBytes); - - // GOOD: store data in a cookie in encrypted form - response.addCookie(new Cookie("auth", data)); // Safe - } - } - - - private static String encrypt(String cleartext) throws Exception { - MessageDigest digest = MessageDigest.getInstance("SHA-256"); - byte[] hash = digest.digest(cleartext.getBytes(StandardCharsets.UTF_8)); - String encoded = Base64.getEncoder().encodeToString(hash); - return encoded; - } -} diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.qlref b/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.qlref deleted file mode 100644 index 923d1277eebf..000000000000 --- a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/CleartextStorageCookieTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-312/CleartextStorageCookie.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/options b/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/options deleted file mode 100644 index 068e49acc977..000000000000 --- a/java/ql/test/query-tests/security/CWE-312/CleartextStorageCookie/options +++ /dev/null @@ -1 +0,0 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/apache-commons-lang3-3.7:${testdir}/../../../../stubs/esapi-2.0.1:${testdir}/../../../../stubs/netty-4.1.x diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected index 25c0a616e861..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected +++ b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.expected @@ -1,120 +0,0 @@ -#select -| InsufficientKeySizeTest.java:17:26:17:27 | 64 | InsufficientKeySizeTest.java:17:26:17:27 | 64 | InsufficientKeySizeTest.java:17:26:17:27 | 64 | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:17:26:17:27 | 64 | key size | -| InsufficientKeySizeTest.java:27:26:27:30 | size1 | InsufficientKeySizeTest.java:23:31:23:32 | 64 : Number | InsufficientKeySizeTest.java:27:26:27:30 | size1 | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:23:31:23:32 | 64 | key size | -| InsufficientKeySizeTest.java:30:26:30:30 | size2 | InsufficientKeySizeTest.java:24:25:24:26 | 64 : Number | InsufficientKeySizeTest.java:30:26:30:30 | size2 | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:24:25:24:26 | 64 | key size | -| InsufficientKeySizeTest.java:40:26:40:27 | 64 | InsufficientKeySizeTest.java:40:26:40:27 | 64 | InsufficientKeySizeTest.java:40:26:40:27 | 64 | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:40:26:40:27 | 64 | key size | -| InsufficientKeySizeTest.java:51:36:51:39 | 1024 | InsufficientKeySizeTest.java:51:36:51:39 | 1024 | InsufficientKeySizeTest.java:51:36:51:39 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:51:36:51:39 | 1024 | key size | -| InsufficientKeySizeTest.java:58:73:58:76 | 1024 | InsufficientKeySizeTest.java:58:73:58:76 | 1024 | InsufficientKeySizeTest.java:58:73:58:76 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:58:73:58:76 | 1024 | key size | -| InsufficientKeySizeTest.java:62:63:62:66 | 1024 | InsufficientKeySizeTest.java:62:63:62:66 | 1024 | InsufficientKeySizeTest.java:62:63:62:66 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:62:63:62:66 | 1024 | key size | -| InsufficientKeySizeTest.java:69:36:69:40 | size1 | InsufficientKeySizeTest.java:65:31:65:34 | 1024 : Number | InsufficientKeySizeTest.java:69:36:69:40 | size1 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:65:31:65:34 | 1024 | key size | -| InsufficientKeySizeTest.java:72:36:72:40 | size2 | InsufficientKeySizeTest.java:66:25:66:28 | 1024 : Number | InsufficientKeySizeTest.java:72:36:72:40 | size2 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:66:25:66:28 | 1024 | key size | -| InsufficientKeySizeTest.java:81:36:81:50 | getRSAKeySize(...) | InsufficientKeySizeTest.java:255:40:255:43 | 1024 : Number | InsufficientKeySizeTest.java:81:36:81:50 | getRSAKeySize(...) | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:255:40:255:43 | 1024 | key size | -| InsufficientKeySizeTest.java:86:36:86:39 | 1024 | InsufficientKeySizeTest.java:86:36:86:39 | 1024 | InsufficientKeySizeTest.java:86:36:86:39 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:86:36:86:39 | 1024 | key size | -| InsufficientKeySizeTest.java:97:36:97:39 | 1024 | InsufficientKeySizeTest.java:97:36:97:39 | 1024 | InsufficientKeySizeTest.java:97:36:97:39 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:97:36:97:39 | 1024 | key size | -| InsufficientKeySizeTest.java:104:67:104:70 | 1024 | InsufficientKeySizeTest.java:104:67:104:70 | 1024 | InsufficientKeySizeTest.java:104:67:104:70 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:104:67:104:70 | 1024 | key size | -| InsufficientKeySizeTest.java:108:60:108:63 | 1024 | InsufficientKeySizeTest.java:108:60:108:63 | 1024 | InsufficientKeySizeTest.java:108:60:108:63 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:108:60:108:63 | 1024 | key size | -| InsufficientKeySizeTest.java:112:27:112:30 | 1024 | InsufficientKeySizeTest.java:112:27:112:30 | 1024 | InsufficientKeySizeTest.java:112:27:112:30 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:112:27:112:30 | 1024 | key size | -| InsufficientKeySizeTest.java:117:28:117:31 | 1024 | InsufficientKeySizeTest.java:117:28:117:31 | 1024 | InsufficientKeySizeTest.java:117:28:117:31 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:117:28:117:31 | 1024 | key size | -| InsufficientKeySizeTest.java:128:36:128:39 | 1024 | InsufficientKeySizeTest.java:128:36:128:39 | 1024 | InsufficientKeySizeTest.java:128:36:128:39 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:128:36:128:39 | 1024 | key size | -| InsufficientKeySizeTest.java:135:64:135:67 | 1024 | InsufficientKeySizeTest.java:135:64:135:67 | 1024 | InsufficientKeySizeTest.java:135:64:135:67 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:135:64:135:67 | 1024 | key size | -| InsufficientKeySizeTest.java:139:59:139:62 | 1024 | InsufficientKeySizeTest.java:139:59:139:62 | 1024 | InsufficientKeySizeTest.java:139:59:139:62 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:139:59:139:62 | 1024 | key size | -| InsufficientKeySizeTest.java:143:27:143:30 | 1024 | InsufficientKeySizeTest.java:143:27:143:30 | 1024 | InsufficientKeySizeTest.java:143:27:143:30 | 1024 | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:143:27:143:30 | 1024 | key size | -| InsufficientKeySizeTest.java:150:36:150:38 | 128 | InsufficientKeySizeTest.java:150:36:150:38 | 128 | InsufficientKeySizeTest.java:150:36:150:38 | 128 | This $@ is less than the recommended key size of 256 bits. | InsufficientKeySizeTest.java:150:36:150:38 | 128 | key size | -| InsufficientKeySizeTest.java:154:65:154:75 | "secp112r1" | InsufficientKeySizeTest.java:154:65:154:75 | "secp112r1" | InsufficientKeySizeTest.java:154:65:154:75 | "secp112r1" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:154:65:154:75 | "secp112r1" | key size | -| InsufficientKeySizeTest.java:158:59:158:69 | "secp112r1" | InsufficientKeySizeTest.java:158:59:158:69 | "secp112r1" | InsufficientKeySizeTest.java:158:59:158:69 | "secp112r1" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:158:59:158:69 | "secp112r1" | key size | -| InsufficientKeySizeTest.java:165:65:165:82 | "X9.62 prime192v2" | InsufficientKeySizeTest.java:165:65:165:82 | "X9.62 prime192v2" | InsufficientKeySizeTest.java:165:65:165:82 | "X9.62 prime192v2" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:165:65:165:82 | "X9.62 prime192v2" | key size | -| InsufficientKeySizeTest.java:169:65:169:82 | "X9.62 c2tnb191v3" | InsufficientKeySizeTest.java:169:65:169:82 | "X9.62 c2tnb191v3" | InsufficientKeySizeTest.java:169:65:169:82 | "X9.62 c2tnb191v3" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:169:65:169:82 | "X9.62 c2tnb191v3" | key size | -| InsufficientKeySizeTest.java:173:65:173:75 | "sect163k1" | InsufficientKeySizeTest.java:173:65:173:75 | "sect163k1" | InsufficientKeySizeTest.java:173:65:173:75 | "sect163k1" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:173:65:173:75 | "sect163k1" | key size | -| InsufficientKeySizeTest.java:181:65:181:76 | "prime192v2" | InsufficientKeySizeTest.java:181:65:181:76 | "prime192v2" | InsufficientKeySizeTest.java:181:65:181:76 | "prime192v2" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:181:65:181:76 | "prime192v2" | key size | -| InsufficientKeySizeTest.java:189:65:189:76 | "c2tnb191v1" | InsufficientKeySizeTest.java:189:65:189:76 | "c2tnb191v1" | InsufficientKeySizeTest.java:189:65:189:76 | "c2tnb191v1" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:189:65:189:76 | "c2tnb191v1" | key size | -| InsufficientKeySizeTest.java:197:64:197:74 | "secp112r1" | InsufficientKeySizeTest.java:197:64:197:74 | "secp112r1" | InsufficientKeySizeTest.java:197:64:197:74 | "secp112r1" | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:197:64:197:74 | "secp112r1" | key size | -| InsufficientKeySizeTest.java:207:66:207:75 | curveName1 | InsufficientKeySizeTest.java:205:39:205:49 | "secp112r1" : String | InsufficientKeySizeTest.java:207:66:207:75 | curveName1 | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:205:39:205:49 | "secp112r1" | key size | -| InsufficientKeySizeTest.java:212:66:212:75 | curveName2 | InsufficientKeySizeTest.java:210:33:210:43 | "secp112r1" : String | InsufficientKeySizeTest.java:212:66:212:75 | curveName2 | This $@ is less than the recommended key size of EC bits. | InsufficientKeySizeTest.java:210:33:210:43 | "secp112r1" | key size | -| InsufficientKeySizeTest.java:219:21:219:27 | keySize | InsufficientKeySizeTest.java:24:25:24:26 | 64 : Number | InsufficientKeySizeTest.java:219:21:219:27 | keySize | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:24:25:24:26 | 64 | key size | -| InsufficientKeySizeTest.java:225:21:225:27 | keySize | InsufficientKeySizeTest.java:35:30:35:31 | 64 : Number | InsufficientKeySizeTest.java:225:21:225:27 | keySize | This $@ is less than the recommended key size of 128 bits. | InsufficientKeySizeTest.java:35:30:35:31 | 64 | key size | -| InsufficientKeySizeTest.java:230:31:230:37 | keySize | InsufficientKeySizeTest.java:66:25:66:28 | 1024 : Number | InsufficientKeySizeTest.java:230:31:230:37 | keySize | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:66:25:66:28 | 1024 | key size | -| InsufficientKeySizeTest.java:236:31:236:37 | keySize | InsufficientKeySizeTest.java:77:36:77:39 | 1024 : Number | InsufficientKeySizeTest.java:236:31:236:37 | keySize | This $@ is less than the recommended key size of 2048 bits. | InsufficientKeySizeTest.java:77:36:77:39 | 1024 | key size | -| InsufficientKeySizeTest.java:246:31:246:37 | keySize | InsufficientKeySizeTest.java:199:24:199:26 | 128 : Number | InsufficientKeySizeTest.java:246:31:246:37 | keySize | This $@ is less than the recommended key size of 256 bits. | InsufficientKeySizeTest.java:199:24:199:26 | 128 | key size | -| InsufficientKeySizeTest.java:252:31:252:37 | keySize | InsufficientKeySizeTest.java:202:40:202:42 | 128 : Number | InsufficientKeySizeTest.java:252:31:252:37 | keySize | This $@ is less than the recommended key size of 256 bits. | InsufficientKeySizeTest.java:202:40:202:42 | 128 | key size | -edges -| InsufficientKeySizeTest.java:23:31:23:32 | 64 : Number | InsufficientKeySizeTest.java:27:26:27:30 | size1 | provenance | | -| InsufficientKeySizeTest.java:24:25:24:26 | 64 : Number | InsufficientKeySizeTest.java:30:26:30:30 | size2 | provenance | | -| InsufficientKeySizeTest.java:24:25:24:26 | 64 : Number | InsufficientKeySizeTest.java:34:35:34:39 | size2 : Number | provenance | | -| InsufficientKeySizeTest.java:34:35:34:39 | size2 : Number | InsufficientKeySizeTest.java:217:46:217:56 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:35:30:35:31 | 64 : Number | InsufficientKeySizeTest.java:223:41:223:51 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:65:31:65:34 | 1024 : Number | InsufficientKeySizeTest.java:69:36:69:40 | size1 | provenance | | -| InsufficientKeySizeTest.java:66:25:66:28 | 1024 : Number | InsufficientKeySizeTest.java:72:36:72:40 | size2 | provenance | | -| InsufficientKeySizeTest.java:66:25:66:28 | 1024 : Number | InsufficientKeySizeTest.java:76:41:76:45 | size2 : Number | provenance | | -| InsufficientKeySizeTest.java:76:41:76:45 | size2 : Number | InsufficientKeySizeTest.java:228:52:228:62 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:77:36:77:39 | 1024 : Number | InsufficientKeySizeTest.java:234:47:234:57 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:199:24:199:26 | 128 : Number | InsufficientKeySizeTest.java:201:41:201:44 | size : Number | provenance | | -| InsufficientKeySizeTest.java:201:41:201:44 | size : Number | InsufficientKeySizeTest.java:244:52:244:62 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:202:40:202:42 | 128 : Number | InsufficientKeySizeTest.java:250:51:250:61 | keySize : Number | provenance | | -| InsufficientKeySizeTest.java:205:39:205:49 | "secp112r1" : String | InsufficientKeySizeTest.java:207:66:207:75 | curveName1 | provenance | | -| InsufficientKeySizeTest.java:210:33:210:43 | "secp112r1" : String | InsufficientKeySizeTest.java:212:66:212:75 | curveName2 | provenance | | -| InsufficientKeySizeTest.java:217:46:217:56 | keySize : Number | InsufficientKeySizeTest.java:219:21:219:27 | keySize | provenance | | -| InsufficientKeySizeTest.java:223:41:223:51 | keySize : Number | InsufficientKeySizeTest.java:225:21:225:27 | keySize | provenance | | -| InsufficientKeySizeTest.java:228:52:228:62 | keySize : Number | InsufficientKeySizeTest.java:230:31:230:37 | keySize | provenance | | -| InsufficientKeySizeTest.java:234:47:234:57 | keySize : Number | InsufficientKeySizeTest.java:236:31:236:37 | keySize | provenance | | -| InsufficientKeySizeTest.java:244:52:244:62 | keySize : Number | InsufficientKeySizeTest.java:246:31:246:37 | keySize | provenance | | -| InsufficientKeySizeTest.java:250:51:250:61 | keySize : Number | InsufficientKeySizeTest.java:252:31:252:37 | keySize | provenance | | -| InsufficientKeySizeTest.java:255:40:255:43 | 1024 : Number | InsufficientKeySizeTest.java:81:36:81:50 | getRSAKeySize(...) | provenance | | -nodes -| InsufficientKeySizeTest.java:17:26:17:27 | 64 | semmle.label | 64 | -| InsufficientKeySizeTest.java:23:31:23:32 | 64 : Number | semmle.label | 64 : Number | -| InsufficientKeySizeTest.java:24:25:24:26 | 64 : Number | semmle.label | 64 : Number | -| InsufficientKeySizeTest.java:27:26:27:30 | size1 | semmle.label | size1 | -| InsufficientKeySizeTest.java:30:26:30:30 | size2 | semmle.label | size2 | -| InsufficientKeySizeTest.java:34:35:34:39 | size2 : Number | semmle.label | size2 : Number | -| InsufficientKeySizeTest.java:35:30:35:31 | 64 : Number | semmle.label | 64 : Number | -| InsufficientKeySizeTest.java:40:26:40:27 | 64 | semmle.label | 64 | -| InsufficientKeySizeTest.java:51:36:51:39 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:58:73:58:76 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:62:63:62:66 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:65:31:65:34 | 1024 : Number | semmle.label | 1024 : Number | -| InsufficientKeySizeTest.java:66:25:66:28 | 1024 : Number | semmle.label | 1024 : Number | -| InsufficientKeySizeTest.java:69:36:69:40 | size1 | semmle.label | size1 | -| InsufficientKeySizeTest.java:72:36:72:40 | size2 | semmle.label | size2 | -| InsufficientKeySizeTest.java:76:41:76:45 | size2 : Number | semmle.label | size2 : Number | -| InsufficientKeySizeTest.java:77:36:77:39 | 1024 : Number | semmle.label | 1024 : Number | -| InsufficientKeySizeTest.java:81:36:81:50 | getRSAKeySize(...) | semmle.label | getRSAKeySize(...) | -| InsufficientKeySizeTest.java:86:36:86:39 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:97:36:97:39 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:104:67:104:70 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:108:60:108:63 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:112:27:112:30 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:117:28:117:31 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:128:36:128:39 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:135:64:135:67 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:139:59:139:62 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:143:27:143:30 | 1024 | semmle.label | 1024 | -| InsufficientKeySizeTest.java:150:36:150:38 | 128 | semmle.label | 128 | -| InsufficientKeySizeTest.java:154:65:154:75 | "secp112r1" | semmle.label | "secp112r1" | -| InsufficientKeySizeTest.java:158:59:158:69 | "secp112r1" | semmle.label | "secp112r1" | -| InsufficientKeySizeTest.java:165:65:165:82 | "X9.62 prime192v2" | semmle.label | "X9.62 prime192v2" | -| InsufficientKeySizeTest.java:169:65:169:82 | "X9.62 c2tnb191v3" | semmle.label | "X9.62 c2tnb191v3" | -| InsufficientKeySizeTest.java:173:65:173:75 | "sect163k1" | semmle.label | "sect163k1" | -| InsufficientKeySizeTest.java:181:65:181:76 | "prime192v2" | semmle.label | "prime192v2" | -| InsufficientKeySizeTest.java:189:65:189:76 | "c2tnb191v1" | semmle.label | "c2tnb191v1" | -| InsufficientKeySizeTest.java:197:64:197:74 | "secp112r1" | semmle.label | "secp112r1" | -| InsufficientKeySizeTest.java:199:24:199:26 | 128 : Number | semmle.label | 128 : Number | -| InsufficientKeySizeTest.java:201:41:201:44 | size : Number | semmle.label | size : Number | -| InsufficientKeySizeTest.java:202:40:202:42 | 128 : Number | semmle.label | 128 : Number | -| InsufficientKeySizeTest.java:205:39:205:49 | "secp112r1" : String | semmle.label | "secp112r1" : String | -| InsufficientKeySizeTest.java:207:66:207:75 | curveName1 | semmle.label | curveName1 | -| InsufficientKeySizeTest.java:210:33:210:43 | "secp112r1" : String | semmle.label | "secp112r1" : String | -| InsufficientKeySizeTest.java:212:66:212:75 | curveName2 | semmle.label | curveName2 | -| InsufficientKeySizeTest.java:217:46:217:56 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:219:21:219:27 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:223:41:223:51 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:225:21:225:27 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:228:52:228:62 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:230:31:230:37 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:234:47:234:57 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:236:31:236:37 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:244:52:244:62 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:246:31:246:37 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:250:51:250:61 | keySize : Number | semmle.label | keySize : Number | -| InsufficientKeySizeTest.java:252:31:252:37 | keySize | semmle.label | keySize | -| InsufficientKeySizeTest.java:255:40:255:43 | 1024 : Number | semmle.label | 1024 : Number | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.java b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.java index 9f3728f9640a..6f0d1f7115c7 100644 --- a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.java +++ b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.java @@ -14,30 +14,30 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java { /* Test with keysize as int */ KeyGenerator keyGen1 = KeyGenerator.getInstance("AES"); - keyGen1.init(64); // $ Alert + keyGen1.init(64); // $ hasInsufficientKeySize KeyGenerator keyGen2 = KeyGenerator.getInstance("AES"); keyGen2.init(128); // Safe: Key size is no less than 128 /* Test with local variable as keysize */ - final int size1 = 64; // $ Source// compile-time constant - int size2 = 64; // $ Source// not a compile-time constant + final int size1 = 64; // compile-time constant + int size2 = 64; // not a compile-time constant KeyGenerator keyGen3 = KeyGenerator.getInstance("AES"); - keyGen3.init(size1); // $ Alert + keyGen3.init(size1); // $ hasInsufficientKeySize KeyGenerator keyGen4 = KeyGenerator.getInstance("AES"); - keyGen4.init(size2); // $ Alert + keyGen4.init(size2); // $ hasInsufficientKeySize /* Test variables passed to another method */ KeyGenerator keyGen5 = KeyGenerator.getInstance("AES"); // MISSING: test KeyGenerator variable as argument testSymmetricVariable(size2, keyGen5); // test with variable as key size - testSymmetricInt(64); // $ Source // test with int literal as key size + testSymmetricInt(64); // test with int literal as key size /* Test with variable as algo name argument in `getInstance` method. */ final String algoName1 = "AES"; // compile-time constant KeyGenerator keyGen6 = KeyGenerator.getInstance(algoName1); - keyGen6.init(64); // $ Alert + keyGen6.init(64); // $ hasInsufficientKeySize String algoName2 = "AES"; // not a compile-time constant KeyGenerator keyGen7 = KeyGenerator.getInstance(algoName2); @@ -48,42 +48,42 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java { /* Test with keysize as int */ KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("RSA"); - keyPairGen1.initialize(1024); // $ Alert + keyPairGen1.initialize(1024); // $ hasInsufficientKeySize KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("RSA"); keyPairGen2.initialize(2048); // Safe: Key size is no less than 2048 /* Test spec */ KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("RSA"); - RSAKeyGenParameterSpec rsaSpec = new RSAKeyGenParameterSpec(1024, null); // $ Alert + RSAKeyGenParameterSpec rsaSpec = new RSAKeyGenParameterSpec(1024, null); // $ hasInsufficientKeySize keyPairGen3.initialize(rsaSpec); KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("RSA"); - keyPairGen4.initialize(new RSAKeyGenParameterSpec(1024, null)); // $ Alert + keyPairGen4.initialize(new RSAKeyGenParameterSpec(1024, null)); // $ hasInsufficientKeySize /* Test with local variable as keysize */ - final int size1 = 1024; // $ Source // compile-time constant - int size2 = 1024; // $ Source // not a compile-time constant + final int size1 = 1024; // compile-time constant + int size2 = 1024; // not a compile-time constant KeyPairGenerator keyPairGen5 = KeyPairGenerator.getInstance("RSA"); - keyPairGen5.initialize(size1); // $ Alert + keyPairGen5.initialize(size1); // $ hasInsufficientKeySize KeyPairGenerator keyPairGen6 = KeyPairGenerator.getInstance("RSA"); - keyPairGen6.initialize(size2); // $ Alert + keyPairGen6.initialize(size2); // $ hasInsufficientKeySize /* Test variables passed to another method */ KeyPairGenerator keyPairGen7 = KeyPairGenerator.getInstance("RSA"); // MISSING: test KeyGenerator variable as argument testAsymmetricNonEcVariable(size2, keyPairGen7); // test with variable as key size - testAsymmetricNonEcInt(1024); // $ Source // test with int literal as key size + testAsymmetricNonEcInt(1024); // test with int literal as key size /* Test getting key size as return value of another method */ KeyPairGenerator keyPairGen8 = KeyPairGenerator.getInstance("RSA"); - keyPairGen8.initialize(getRSAKeySize()); // $ Alert + keyPairGen8.initialize(getRSAKeySize()); // $ hasInsufficientKeySize /* Test with variable as algo name argument in `getInstance` method. */ final String algoName1 = "RSA"; // compile-time constant KeyPairGenerator keyPairGen9 = KeyPairGenerator.getInstance(algoName1); - keyPairGen9.initialize(1024); // $ Alert + keyPairGen9.initialize(1024); // $ hasInsufficientKeySize String algoName2 = "RSA"; // not a compile-time constant KeyPairGenerator keyPairGen10 = KeyPairGenerator.getInstance(algoName2); @@ -94,27 +94,27 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java { /* Test with keysize as int */ KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("DSA"); - keyPairGen1.initialize(1024); // $ Alert + keyPairGen1.initialize(1024); // $ hasInsufficientKeySize KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("DSA"); keyPairGen2.initialize(2048); // Safe: Key size is no less than 2048 /* Test spec */ KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("DSA"); - DSAGenParameterSpec dsaSpec = new DSAGenParameterSpec(1024, 0); // $ Alert + DSAGenParameterSpec dsaSpec = new DSAGenParameterSpec(1024, 0); // $ hasInsufficientKeySize keyPairGen3.initialize(dsaSpec); KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("DSA"); - keyPairGen4.initialize(new DSAGenParameterSpec(1024, 0)); // $ Alert + keyPairGen4.initialize(new DSAGenParameterSpec(1024, 0)); // $ hasInsufficientKeySize /* Test `AlgorithmParameterGenerator` */ AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DSA"); - paramGen.init(1024); // $ Alert + paramGen.init(1024); // $ hasInsufficientKeySize /* Test with variable as algo name argument in `getInstance` method. */ final String algoName1 = "DSA"; // compile-time constant AlgorithmParameterGenerator paramGen1 = AlgorithmParameterGenerator.getInstance(algoName1); - paramGen1.init(1024); // $ Alert + paramGen1.init(1024); // $ hasInsufficientKeySize String algoName2 = "DSA"; // not a compile-time constant AlgorithmParameterGenerator paramGen2 = AlgorithmParameterGenerator.getInstance(algoName2); @@ -125,52 +125,52 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java { /* Test with keysize as int */ KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("dh"); - keyPairGen1.initialize(1024); // $ Alert + keyPairGen1.initialize(1024); // $ hasInsufficientKeySize KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("DH"); keyPairGen2.initialize(2048); // Safe: Key size is no less than 2048 /* Test spec */ KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("DH"); - DHGenParameterSpec dhSpec = new DHGenParameterSpec(1024, 0); // $ Alert + DHGenParameterSpec dhSpec = new DHGenParameterSpec(1024, 0); // $ hasInsufficientKeySize keyPairGen3.initialize(dhSpec); KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("DH"); - keyPairGen4.initialize(new DHGenParameterSpec(1024, 0)); // $ Alert + keyPairGen4.initialize(new DHGenParameterSpec(1024, 0)); // $ hasInsufficientKeySize /* Test `AlgorithmParameterGenerator` */ AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH"); - paramGen.init(1024); // $ Alert + paramGen.init(1024); // $ hasInsufficientKeySize } // EC (Asymmetric): minimum recommended key size is 256 { /* Test with keysize as int */ KeyPairGenerator keyPairGen1 = KeyPairGenerator.getInstance("EC"); - keyPairGen1.initialize(128); // $ Alert + keyPairGen1.initialize(128); // $ hasInsufficientKeySize /* Test with keysize as curve name in spec */ KeyPairGenerator keyPairGen2 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec1 = new ECGenParameterSpec("secp112r1"); // $ Alert + ECGenParameterSpec ecSpec1 = new ECGenParameterSpec("secp112r1"); // $ hasInsufficientKeySize keyPairGen2.initialize(ecSpec1); KeyPairGenerator keyPairGen3 = KeyPairGenerator.getInstance("EC"); - keyPairGen3.initialize(new ECGenParameterSpec("secp112r1")); // $ Alert + keyPairGen3.initialize(new ECGenParameterSpec("secp112r1")); // $ hasInsufficientKeySize KeyPairGenerator keyPairGen4 = KeyPairGenerator.getInstance("EC"); ECGenParameterSpec ecSpec2 = new ECGenParameterSpec("secp256r1"); // Safe: Key size is no less than 256 keyPairGen4.initialize(ecSpec2); KeyPairGenerator keyPairGen5 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec3 = new ECGenParameterSpec("X9.62 prime192v2"); // $ Alert + ECGenParameterSpec ecSpec3 = new ECGenParameterSpec("X9.62 prime192v2"); // $ hasInsufficientKeySize keyPairGen5.initialize(ecSpec3); KeyPairGenerator keyPairGen6 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec4 = new ECGenParameterSpec("X9.62 c2tnb191v3"); // $ Alert + ECGenParameterSpec ecSpec4 = new ECGenParameterSpec("X9.62 c2tnb191v3"); // $ hasInsufficientKeySize keyPairGen6.initialize(ecSpec4); KeyPairGenerator keyPairGen7 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec5 = new ECGenParameterSpec("sect163k1"); // $ Alert + ECGenParameterSpec ecSpec5 = new ECGenParameterSpec("sect163k1"); // $ hasInsufficientKeySize keyPairGen7.initialize(ecSpec5); KeyPairGenerator keyPairGen8 = KeyPairGenerator.getInstance("EC"); @@ -178,7 +178,7 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java keyPairGen8.initialize(ecSpec6); KeyPairGenerator keyPairGen9 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec7 = new ECGenParameterSpec("prime192v2"); // $ Alert + ECGenParameterSpec ecSpec7 = new ECGenParameterSpec("prime192v2"); // $ hasInsufficientKeySize keyPairGen9.initialize(ecSpec7); KeyPairGenerator keyPairGen10 = KeyPairGenerator.getInstance("EC"); @@ -186,7 +186,7 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java keyPairGen10.initialize(ecSpec8); KeyPairGenerator keyPairGen14 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec9 = new ECGenParameterSpec("c2tnb191v1"); // $ Alert + ECGenParameterSpec ecSpec9 = new ECGenParameterSpec("c2tnb191v1"); // $ hasInsufficientKeySize keyPairGen14.initialize(ecSpec9); KeyPairGenerator keyPairGen15 = KeyPairGenerator.getInstance("EC"); @@ -194,46 +194,46 @@ public void keySizeTesting() throws java.security.NoSuchAlgorithmException, java keyPairGen15.initialize(ecSpec10); // Safe: Key size is no less than 256 /* Test variables passed to another method */ - ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp112r1"); // $ Alert + ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp112r1"); // $ hasInsufficientKeySize testAsymmetricEcSpecVariable(ecSpec); // test spec as an argument - int size = 128; // $ Source + int size = 128; KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("EC"); // MISSING: test KeyGenerator variable as argument testAsymmetricEcIntVariable(size, keyPairGen); // test with variable as key size - testAsymmetricEcIntLiteral(128); // $ Source // test with int literal as key size + testAsymmetricEcIntLiteral(128); // test with int literal as key size /* Test with variable as curve name argument in `ECGenParameterSpec` constructor. */ - final String curveName1 = "secp112r1"; // $ Source // compile-time constant + final String curveName1 = "secp112r1"; // compile-time constant KeyPairGenerator keyPairGen16 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec11 = new ECGenParameterSpec(curveName1); // $ Alert + ECGenParameterSpec ecSpec11 = new ECGenParameterSpec(curveName1); // $ hasInsufficientKeySize keyPairGen16.initialize(ecSpec11); - String curveName2 = "secp112r1"; // $ Source // not a compile-time constant + String curveName2 = "secp112r1"; // not a compile-time constant KeyPairGenerator keyPairGen17 = KeyPairGenerator.getInstance("EC"); - ECGenParameterSpec ecSpec12 = new ECGenParameterSpec(curveName2); // $ Alert + ECGenParameterSpec ecSpec12 = new ECGenParameterSpec(curveName2); // $ hasInsufficientKeySize keyPairGen17.initialize(ecSpec12); } } public static void testSymmetricVariable(int keySize, KeyGenerator kg) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyGenerator keyGen = KeyGenerator.getInstance("AES"); - keyGen.init(keySize); // $ Alert + keyGen.init(keySize); // $ hasInsufficientKeySize kg.init(64); // $ MISSING: hasInsufficientKeySize } public static void testSymmetricInt(int keySize) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyGenerator keyGen = KeyGenerator.getInstance("AES"); - keyGen.init(keySize); // $ Alert + keyGen.init(keySize); // $ hasInsufficientKeySize } public static void testAsymmetricNonEcVariable(int keySize, KeyPairGenerator kpg) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); - keyPairGen.initialize(keySize); // $ Alert + keyPairGen.initialize(keySize); // $ hasInsufficientKeySize kpg.initialize(1024); // $ MISSING: hasInsufficientKeySize } public static void testAsymmetricNonEcInt(int keySize) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); - keyPairGen.initialize(keySize); // $ Alert + keyPairGen.initialize(keySize); // $ hasInsufficientKeySize } public static void testAsymmetricEcSpecVariable(ECGenParameterSpec spec) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { @@ -243,14 +243,14 @@ public static void testAsymmetricEcSpecVariable(ECGenParameterSpec spec) throws public static void testAsymmetricEcIntVariable(int keySize, KeyPairGenerator kpg) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("EC"); - keyPairGen.initialize(keySize); // $ Alert + keyPairGen.initialize(keySize); // $ hasInsufficientKeySize kpg.initialize(128); // $ MISSING: hasInsufficientKeySize } public static void testAsymmetricEcIntLiteral(int keySize) throws java.security.NoSuchAlgorithmException, java.security.InvalidAlgorithmParameterException { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("EC"); - keyPairGen.initialize(keySize); // $ Alert + keyPairGen.initialize(keySize); // $ hasInsufficientKeySize } - public int getRSAKeySize(){ return 1024; } // $ Source + public int getRSAKeySize(){ return 1024; } } diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql new file mode 100644 index 000000000000..441faa888e34 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.ql @@ -0,0 +1,18 @@ +import java +import utils.test.InlineExpectationsTest +import semmle.code.java.security.InsufficientKeySizeQuery + +module InsufficientKeySizeTest implements TestSig { + string getARelevantTag() { result = "hasInsufficientKeySize" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasInsufficientKeySize" and + exists(KeySizeFlow::PathNode sink | KeySizeFlow::flowPath(_, sink) | + sink.getNode().getLocation() = location and + element = sink.getNode().toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.qlref b/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.qlref deleted file mode 100644 index 6b3f44f4ca2d..000000000000 --- a/java/ql/test/query-tests/security/CWE-326/InsufficientKeySizeTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-326/InsufficientKeySize.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-330/InsecureRandomCookies.java b/java/ql/test/query-tests/security/CWE-330/InsecureRandomCookies.java index 742c2cebcf9d..d34a0283313e 100644 --- a/java/ql/test/query-tests/security/CWE-330/InsecureRandomCookies.java +++ b/java/ql/test/query-tests/security/CWE-330/InsecureRandomCookies.java @@ -16,28 +16,28 @@ public class InsecureRandomCookies extends HttpServlet { public void doGet() { Random r = new Random(); - int c = r.nextInt(); // $ Source + int c = r.nextInt(); // BAD: The cookie value may be predictable. - Cookie cookie = new Cookie("name", Integer.toString(c)); // $ Alert - cookie.setValue(Integer.toString(c)); // $ Alert + Cookie cookie = new Cookie("name", Integer.toString(c)); // $hasWeakRandomFlow + cookie.setValue(Integer.toString(c)); // $hasWeakRandomFlow io.netty.handler.codec.http.Cookie nettyCookie = - new io.netty.handler.codec.http.DefaultCookie("name", Integer.toString(c)); // $ Alert - nettyCookie.setValue(Integer.toString(c)); // $ Alert + new io.netty.handler.codec.http.DefaultCookie("name", Integer.toString(c)); // $hasWeakRandomFlow + nettyCookie.setValue(Integer.toString(c)); // $hasWeakRandomFlow io.netty.handler.codec.http.cookie.Cookie nettyCookie2 = - new io.netty.handler.codec.http.cookie.DefaultCookie("name", Integer.toString(c)); // $ Alert - nettyCookie2.setValue(Integer.toString(c)); // $ Alert + new io.netty.handler.codec.http.cookie.DefaultCookie("name", Integer.toString(c)); // $hasWeakRandomFlow + nettyCookie2.setValue(Integer.toString(c)); // $hasWeakRandomFlow Encoder enc = null; - int c2 = r.nextInt(); // $ Source + int c2 = r.nextInt(); String value = enc.encodeForHTML(Integer.toString(c2)); // BAD: The cookie value may be predictable. - Cookie cookie2 = new Cookie("name", value); // $ Alert + Cookie cookie2 = new Cookie("name", value); // $hasWeakRandomFlow byte[] bytes = new byte[16]; - r.nextBytes(bytes); // $ Source + r.nextBytes(bytes); // BAD: The cookie value may be predictable. - Cookie cookie3 = new Cookie("name", new String(bytes)); // $ Alert + Cookie cookie3 = new Cookie("name", new String(bytes)); // $hasWeakRandomFlow SecureRandom sr = new SecureRandom(); @@ -48,22 +48,22 @@ public void doGet() { ThreadLocalRandom tlr = ThreadLocalRandom.current(); - Cookie cookie5 = new Cookie("name", Integer.toString(tlr.nextInt())); // $ Alert + Cookie cookie5 = new Cookie("name", Integer.toString(tlr.nextInt())); // $hasWeakRandomFlow - Cookie cookie6 = new Cookie("name", RandomStringUtils.random(10)); // $ Alert + Cookie cookie6 = new Cookie("name", RandomStringUtils.random(10)); // $hasWeakRandomFlow - Cookie cookie7 = new Cookie("name", RandomStringUtils.randomAscii(10)); // $ Alert + Cookie cookie7 = new Cookie("name", RandomStringUtils.randomAscii(10)); // $hasWeakRandomFlow - long c3 = r.nextLong(); // $ Source + long c3 = r.nextLong(); // BAD: The cookie value may be predictable. - Cookie cookie8 = new Cookie("name", Long.toString(c3 * 5)); // $ Alert + Cookie cookie8 = new Cookie("name", Long.toString(c3 * 5)); // $hasWeakRandomFlow - double c4 = Math.random(); // $ Source + double c4 = Math.random(); // BAD: The cookie value may be predictable. - Cookie cookie9 = new Cookie("name", Double.toString(c4)); // $ Alert + Cookie cookie9 = new Cookie("name", Double.toString(c4)); // $hasWeakRandomFlow - double c5 = Math.random(); // $ Source + double c5 = Math.random(); // BAD: The cookie value may be predictable. - Cookie cookie10 = new Cookie("name", Double.toString(++c5)); // $ Alert + Cookie cookie10 = new Cookie("name", Double.toString(++c5)); // $hasWeakRandomFlow } } diff --git a/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.expected b/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.expected index 3b460aeec32b..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.expected +++ b/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.expected @@ -1,69 +0,0 @@ -#select -| InsecureRandomCookies.java:21:44:21:62 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:21:44:21:62 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:22:25:22:43 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:22:25:22:43 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:25:71:25:89 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:25:71:25:89 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:26:30:26:48 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:26:30:26:48 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:28:78:28:96 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:28:78:28:96 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:29:31:29:49 | toString(...) | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:29:31:29:49 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:19:17:19:27 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:35:45:35:49 | value | InsecureRandomCookies.java:32:18:32:28 | nextInt(...) : Number | InsecureRandomCookies.java:35:45:35:49 | value | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:32:18:32:28 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:40:45:40:61 | new String(...) | InsecureRandomCookies.java:38:21:38:25 | bytes : byte[] | InsecureRandomCookies.java:40:45:40:61 | new String(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:38:21:38:25 | bytes | Insecure randomness source. | -| InsecureRandomCookies.java:51:45:51:75 | toString(...) | InsecureRandomCookies.java:51:62:51:74 | nextInt(...) : Number | InsecureRandomCookies.java:51:45:51:75 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:51:62:51:74 | nextInt(...) | Insecure randomness source. | -| InsecureRandomCookies.java:53:45:53:72 | random(...) | InsecureRandomCookies.java:53:45:53:72 | random(...) | InsecureRandomCookies.java:53:45:53:72 | random(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:53:45:53:72 | random(...) | Insecure randomness source. | -| InsecureRandomCookies.java:55:45:55:77 | randomAscii(...) | InsecureRandomCookies.java:55:45:55:77 | randomAscii(...) | InsecureRandomCookies.java:55:45:55:77 | randomAscii(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:55:45:55:77 | randomAscii(...) | Insecure randomness source. | -| InsecureRandomCookies.java:59:45:59:65 | toString(...) | InsecureRandomCookies.java:57:19:57:30 | nextLong(...) : Number | InsecureRandomCookies.java:59:45:59:65 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:57:19:57:30 | nextLong(...) | Insecure randomness source. | -| InsecureRandomCookies.java:63:45:63:63 | toString(...) | InsecureRandomCookies.java:61:21:61:33 | random(...) : Number | InsecureRandomCookies.java:63:45:63:63 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:61:21:61:33 | random(...) | Insecure randomness source. | -| InsecureRandomCookies.java:67:46:67:66 | toString(...) | InsecureRandomCookies.java:65:21:65:33 | random(...) : Number | InsecureRandomCookies.java:67:46:67:66 | toString(...) | Potential Insecure randomness due to a $@. | InsecureRandomCookies.java:65:21:65:33 | random(...) | Insecure randomness source. | -edges -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:21:44:21:62 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:22:25:22:43 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:25:71:25:89 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:26:30:26:48 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:28:78:28:96 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | InsecureRandomCookies.java:29:31:29:49 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:32:18:32:28 | nextInt(...) : Number | InsecureRandomCookies.java:33:42:33:61 | toString(...) : String | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:33:24:33:62 | encodeForHTML(...) : String | InsecureRandomCookies.java:35:45:35:49 | value | provenance | | -| InsecureRandomCookies.java:33:42:33:61 | toString(...) : String | InsecureRandomCookies.java:33:24:33:62 | encodeForHTML(...) : String | provenance | Config | -| InsecureRandomCookies.java:33:42:33:61 | toString(...) : String | InsecureRandomCookies.java:33:24:33:62 | encodeForHTML(...) : String | provenance | MaD:2 | -| InsecureRandomCookies.java:38:21:38:25 | bytes : byte[] | InsecureRandomCookies.java:40:56:40:60 | bytes : byte[] | provenance | | -| InsecureRandomCookies.java:40:56:40:60 | bytes : byte[] | InsecureRandomCookies.java:40:45:40:61 | new String(...) | provenance | MaD:1 | -| InsecureRandomCookies.java:51:62:51:74 | nextInt(...) : Number | InsecureRandomCookies.java:51:45:51:75 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:57:19:57:30 | nextLong(...) : Number | InsecureRandomCookies.java:59:59:59:60 | c3 : Number | provenance | | -| InsecureRandomCookies.java:59:59:59:60 | c3 : Number | InsecureRandomCookies.java:59:59:59:64 | ... * ... : Number | provenance | Config | -| InsecureRandomCookies.java:59:59:59:64 | ... * ... : Number | InsecureRandomCookies.java:59:45:59:65 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:61:21:61:33 | random(...) : Number | InsecureRandomCookies.java:63:45:63:63 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:65:21:65:33 | random(...) : Number | InsecureRandomCookies.java:67:64:67:65 | c5 : Number | provenance | | -| InsecureRandomCookies.java:67:62:67:65 | ++... : Number | InsecureRandomCookies.java:67:46:67:66 | toString(...) | provenance | TaintPreservingCallable | -| InsecureRandomCookies.java:67:64:67:65 | c5 : Number | InsecureRandomCookies.java:67:62:67:65 | ++... : Number | provenance | Config | -models -| 1 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -| 2 | Summary: org.owasp.esapi; Encoder; true; encodeForHTML; (String); ; Argument[0]; ReturnValue; taint; manual | -nodes -| InsecureRandomCookies.java:19:17:19:27 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | -| InsecureRandomCookies.java:21:44:21:62 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:22:25:22:43 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:25:71:25:89 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:26:30:26:48 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:28:78:28:96 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:29:31:29:49 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:32:18:32:28 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | -| InsecureRandomCookies.java:33:24:33:62 | encodeForHTML(...) : String | semmle.label | encodeForHTML(...) : String | -| InsecureRandomCookies.java:33:42:33:61 | toString(...) : String | semmle.label | toString(...) : String | -| InsecureRandomCookies.java:35:45:35:49 | value | semmle.label | value | -| InsecureRandomCookies.java:38:21:38:25 | bytes : byte[] | semmle.label | bytes : byte[] | -| InsecureRandomCookies.java:40:45:40:61 | new String(...) | semmle.label | new String(...) | -| InsecureRandomCookies.java:40:56:40:60 | bytes : byte[] | semmle.label | bytes : byte[] | -| InsecureRandomCookies.java:51:45:51:75 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:51:62:51:74 | nextInt(...) : Number | semmle.label | nextInt(...) : Number | -| InsecureRandomCookies.java:53:45:53:72 | random(...) | semmle.label | random(...) | -| InsecureRandomCookies.java:55:45:55:77 | randomAscii(...) | semmle.label | randomAscii(...) | -| InsecureRandomCookies.java:57:19:57:30 | nextLong(...) : Number | semmle.label | nextLong(...) : Number | -| InsecureRandomCookies.java:59:45:59:65 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:59:59:59:60 | c3 : Number | semmle.label | c3 : Number | -| InsecureRandomCookies.java:59:59:59:64 | ... * ... : Number | semmle.label | ... * ... : Number | -| InsecureRandomCookies.java:61:21:61:33 | random(...) : Number | semmle.label | random(...) : Number | -| InsecureRandomCookies.java:63:45:63:63 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:65:21:65:33 | random(...) : Number | semmle.label | random(...) : Number | -| InsecureRandomCookies.java:67:46:67:66 | toString(...) | semmle.label | toString(...) | -| InsecureRandomCookies.java:67:62:67:65 | ++... : Number | semmle.label | ++... : Number | -| InsecureRandomCookies.java:67:64:67:65 | c5 : Number | semmle.label | c5 : Number | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.ql b/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.ql new file mode 100644 index 000000000000..a9e8cbb2dc4d --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.ql @@ -0,0 +1,19 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.InsecureRandomnessQuery +import utils.test.InlineExpectationsTest + +module WeakRandomTest implements TestSig { + string getARelevantTag() { result = "hasWeakRandomFlow" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasWeakRandomFlow" and + exists(DataFlow::Node sink | InsecureRandomnessFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.qlref b/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.qlref deleted file mode 100644 index 2d02acfab9a4..000000000000 --- a/java/ql/test/query-tests/security/CWE-330/InsecureRandomnessTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-330/InsecureRandomness.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected index ba513e95a2d9..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected +++ b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.expected @@ -1,55 +0,0 @@ -#select -| MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:110:9:110:74 | build(...) | MissingJWTSignatureCheckTest.java:110:9:110:66 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:110:9:110:74 | build(...) | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:110:9:110:66 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:114:9:114:83 | build(...) | MissingJWTSignatureCheckTest.java:114:9:114:75 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:114:9:114:83 | build(...) | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:114:9:114:75 | setSigningKey(...) | JWT signing key | -| MissingJWTSignatureCheckTest.java:118:9:118:59 | setSigningKey(...) | MissingJWTSignatureCheckTest.java:118:9:118:59 | setSigningKey(...) | MissingJWTSignatureCheckTest.java:118:9:118:59 | setSigningKey(...) | This parser sets a $@, but the signature is not verified. | MissingJWTSignatureCheckTest.java:118:9:118:59 | setSigningKey(...) | JWT signing key | -edges -| MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:25:29:25:46 | getASignedParser(...) : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:17:16:17:81 | build(...) : JwtParser | provenance | Config | -| MissingJWTSignatureCheckTest.java:17:16:17:81 | build(...) : JwtParser | MissingJWTSignatureCheckTest.java:31:29:31:63 | getASignedParserFromParserBuilder(...) : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) : JwtParser | MissingJWTSignatureCheckTest.java:37:29:37:49 | getASignedNewParser(...) : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:25:29:25:46 | getASignedParser(...) : JwtParser | MissingJWTSignatureCheckTest.java:26:31:26:37 | parser1 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:25:29:25:46 | getASignedParser(...) : JwtParser | MissingJWTSignatureCheckTest.java:27:38:27:44 | parser1 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:26:31:26:37 | parser1 : JwtParser | MissingJWTSignatureCheckTest.java:82:40:82:55 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:27:38:27:44 | parser1 : JwtParser | MissingJWTSignatureCheckTest.java:86:47:86:62 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:31:29:31:63 | getASignedParserFromParserBuilder(...) : JwtParser | MissingJWTSignatureCheckTest.java:32:31:32:37 | parser2 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:31:29:31:63 | getASignedParserFromParserBuilder(...) : JwtParser | MissingJWTSignatureCheckTest.java:33:38:33:44 | parser2 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:32:31:32:37 | parser2 : JwtParser | MissingJWTSignatureCheckTest.java:82:40:82:55 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:33:38:33:44 | parser2 : JwtParser | MissingJWTSignatureCheckTest.java:86:47:86:62 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:37:29:37:49 | getASignedNewParser(...) : JwtParser | MissingJWTSignatureCheckTest.java:38:31:38:37 | parser3 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:37:29:37:49 | getASignedNewParser(...) : JwtParser | MissingJWTSignatureCheckTest.java:39:38:39:44 | parser3 : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:38:31:38:37 | parser3 : JwtParser | MissingJWTSignatureCheckTest.java:82:40:82:55 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:39:38:39:44 | parser3 : JwtParser | MissingJWTSignatureCheckTest.java:86:47:86:62 | parser : JwtParser | provenance | | -| MissingJWTSignatureCheckTest.java:82:40:82:55 | parser : JwtParser | MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | provenance | | -| MissingJWTSignatureCheckTest.java:86:47:86:62 | parser : JwtParser | MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | provenance | | -| MissingJWTSignatureCheckTest.java:110:9:110:66 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:110:9:110:74 | build(...) | provenance | Config | -| MissingJWTSignatureCheckTest.java:114:9:114:75 | setSigningKey(...) : DefaultJwtParserBuilder | MissingJWTSignatureCheckTest.java:114:9:114:83 | build(...) | provenance | Config | -nodes -| MissingJWTSignatureCheckTest.java:13:16:13:66 | setSigningKey(...) : JwtParser | semmle.label | setSigningKey(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:17:16:17:73 | setSigningKey(...) : DefaultJwtParserBuilder | semmle.label | setSigningKey(...) : DefaultJwtParserBuilder | -| MissingJWTSignatureCheckTest.java:17:16:17:81 | build(...) : JwtParser | semmle.label | build(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:21:16:21:75 | setSigningKey(...) : JwtParser | semmle.label | setSigningKey(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:25:29:25:46 | getASignedParser(...) : JwtParser | semmle.label | getASignedParser(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:26:31:26:37 | parser1 : JwtParser | semmle.label | parser1 : JwtParser | -| MissingJWTSignatureCheckTest.java:27:38:27:44 | parser1 : JwtParser | semmle.label | parser1 : JwtParser | -| MissingJWTSignatureCheckTest.java:31:29:31:63 | getASignedParserFromParserBuilder(...) : JwtParser | semmle.label | getASignedParserFromParserBuilder(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:32:31:32:37 | parser2 : JwtParser | semmle.label | parser2 : JwtParser | -| MissingJWTSignatureCheckTest.java:33:38:33:44 | parser2 : JwtParser | semmle.label | parser2 : JwtParser | -| MissingJWTSignatureCheckTest.java:37:29:37:49 | getASignedNewParser(...) : JwtParser | semmle.label | getASignedNewParser(...) : JwtParser | -| MissingJWTSignatureCheckTest.java:38:31:38:37 | parser3 : JwtParser | semmle.label | parser3 : JwtParser | -| MissingJWTSignatureCheckTest.java:39:38:39:44 | parser3 : JwtParser | semmle.label | parser3 : JwtParser | -| MissingJWTSignatureCheckTest.java:82:40:82:55 | parser : JwtParser | semmle.label | parser : JwtParser | -| MissingJWTSignatureCheckTest.java:83:9:83:14 | parser | semmle.label | parser | -| MissingJWTSignatureCheckTest.java:86:47:86:62 | parser : JwtParser | semmle.label | parser : JwtParser | -| MissingJWTSignatureCheckTest.java:87:9:87:14 | parser | semmle.label | parser | -| MissingJWTSignatureCheckTest.java:110:9:110:66 | setSigningKey(...) : DefaultJwtParserBuilder | semmle.label | setSigningKey(...) : DefaultJwtParserBuilder | -| MissingJWTSignatureCheckTest.java:110:9:110:74 | build(...) | semmle.label | build(...) | -| MissingJWTSignatureCheckTest.java:114:9:114:75 | setSigningKey(...) : DefaultJwtParserBuilder | semmle.label | setSigningKey(...) : DefaultJwtParserBuilder | -| MissingJWTSignatureCheckTest.java:114:9:114:83 | build(...) | semmle.label | build(...) | -| MissingJWTSignatureCheckTest.java:118:9:118:59 | setSigningKey(...) | semmle.label | setSigningKey(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.java b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.java index c4ab09b27e6d..93b54154ffc1 100644 --- a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.java +++ b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.java @@ -10,15 +10,15 @@ public class MissingJWTSignatureCheckTest { private JwtParser getASignedParser() { - return Jwts.parser().setSigningKey("someBase64EncodedKey"); // $ Source + return Jwts.parser().setSigningKey("someBase64EncodedKey"); } private JwtParser getASignedParserFromParserBuilder() { - return Jwts.parserBuilder().setSigningKey("someBase64EncodedKey").build(); // $ Source + return Jwts.parserBuilder().setSigningKey("someBase64EncodedKey").build(); } private JwtParser getASignedNewParser() { - return new DefaultJwtParser().setSigningKey("someBase64EncodedKey"); // $ Source + return new DefaultJwtParser().setSigningKey("someBase64EncodedKey"); } private void callSignedParsers() { @@ -80,11 +80,11 @@ private void signParserAfterParseCall() { } private void badJwtOnParserBuilder(JwtParser parser, String token) { - parser.parse(token); // $ Alert + parser.parse(token); // $hasMissingJwtSignatureCheck } private void badJwtHandlerOnParserBuilder(JwtParser parser, String token) { - parser.parse(token, new JwtHandlerAdapter>() { // $ Alert + parser.parse(token, new JwtHandlerAdapter>() { // $hasMissingJwtSignatureCheck @Override public Jwt onPlaintextJwt(Jwt jwt) { return jwt; @@ -107,15 +107,15 @@ public Jws onPlaintextJws(Jws jws) { } private void badJwtOnParserBuilder(String token) { - Jwts.parserBuilder().setSigningKey("someBase64EncodedKey").build().parse(token); // $ Alert + Jwts.parserBuilder().setSigningKey("someBase64EncodedKey").build().parse(token); // $hasMissingJwtSignatureCheck } private void badJwtOnDefaultParserBuilder(String token) { - new DefaultJwtParserBuilder().setSigningKey("someBase64EncodedKey").build().parse(token); // $ Alert + new DefaultJwtParserBuilder().setSigningKey("someBase64EncodedKey").build().parse(token); // $hasMissingJwtSignatureCheck } private void badJwtHandlerOnParser(String token) { - Jwts.parser().setSigningKey("someBase64EncodedKey").parse(token, // $ Alert + Jwts.parser().setSigningKey("someBase64EncodedKey").parse(token, // $hasMissingJwtSignatureCheck new JwtHandlerAdapter>() { @Override public Jwt onPlaintextJwt(Jwt jwt) { diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql new file mode 100644 index 000000000000..4ce6116e27f2 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.MissingJWTSignatureCheckQuery +import utils.test.InlineExpectationsTest + +module HasMissingJwtSignatureCheckTest implements TestSig { + string getARelevantTag() { result = "hasMissingJwtSignatureCheck" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasMissingJwtSignatureCheck" and + exists(DataFlow::Node sink | MissingJwtSignatureCheckFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.qlref b/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.qlref deleted file mode 100644 index 79b63ee641f5..000000000000 --- a/java/ql/test/query-tests/security/CWE-347/MissingJWTSignatureCheckTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-347/MissingJWTSignatureCheck.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-441/Test.java b/java/ql/test/query-tests/security/CWE-441/Test.java index be8bedeb7e7e..0bda09331159 100644 --- a/java/ql/test/query-tests/security/CWE-441/Test.java +++ b/java/ql/test/query-tests/security/CWE-441/Test.java @@ -29,23 +29,23 @@ private void validateWithBlockList(Uri uri) throws SecurityException { public void onCreate() { { ContentResolver contentResolver = getContentResolver(); - Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); // $ Source - contentResolver.openInputStream(uri); // $ Alert - contentResolver.openOutputStream(uri); // $ Alert - contentResolver.openAssetFile(uri, null, null); // $ Alert - contentResolver.openAssetFileDescriptor(uri, null); // $ Alert - contentResolver.openFile(uri, null, null); // $ Alert - contentResolver.openFileDescriptor(uri, null); // $ Alert - contentResolver.openTypedAssetFile(uri, null, null, null); // $ Alert - contentResolver.openTypedAssetFileDescriptor(uri, null, null); // $ Alert + Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); + contentResolver.openInputStream(uri); // $ hasTaintFlow + contentResolver.openOutputStream(uri); // $ hasTaintFlow + contentResolver.openAssetFile(uri, null, null); // $ hasTaintFlow + contentResolver.openAssetFileDescriptor(uri, null); // $ hasTaintFlow + contentResolver.openFile(uri, null, null); // $ hasTaintFlow + contentResolver.openFileDescriptor(uri, null); // $ hasTaintFlow + contentResolver.openTypedAssetFile(uri, null, null, null); // $ hasTaintFlow + contentResolver.openTypedAssetFileDescriptor(uri, null, null); // $ hasTaintFlow } { ContentResolver contentResolver = getContentResolver(); - Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); // $ Source + Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); String path = uri.getPath(); if (path.startsWith("/data")) throw new SecurityException(); - contentResolver.openInputStream(uri); // $ Alert + contentResolver.openInputStream(uri); // $ hasTaintFlow } // Equals checks { @@ -64,11 +64,11 @@ public void onCreate() { // Allow list checks { ContentResolver contentResolver = getContentResolver(); - Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); // $ Source + Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); String path = uri.getPath(); if (!path.startsWith("/safe/path")) throw new SecurityException(); - contentResolver.openInputStream(uri); // $ Alert + contentResolver.openInputStream(uri); // $ hasTaintFlow } { ContentResolver contentResolver = getContentResolver(); @@ -89,11 +89,11 @@ public void onCreate() { // Block list checks { ContentResolver contentResolver = getContentResolver(); - Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); // $ Source + Uri uri = (Uri) getIntent().getParcelableExtra("URI_EXTRA"); String path = uri.getPath(); if (path.startsWith("/data")) throw new SecurityException(); - contentResolver.openInputStream(uri); // $ Alert + contentResolver.openInputStream(uri); // $ hasTaintFlow } { ContentResolver contentResolver = getContentResolver(); diff --git a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected index 73fe6b44f3c7..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected +++ b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.expected @@ -1,59 +0,0 @@ -#select -| Test.java:33:45:33:47 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:33:45:33:47 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:34:46:34:48 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:34:46:34:48 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:35:43:35:45 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:35:43:35:45 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:36:53:36:55 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:36:53:36:55 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:37:38:37:40 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:37:38:37:40 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:38:48:38:50 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:38:48:38:50 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:39:48:39:50 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:39:48:39:50 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:40:58:40:60 | uri | Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:40:58:40:60 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:32:29:32:39 | getIntent(...) | user-provided value | -| Test.java:48:45:48:47 | uri | Test.java:44:29:44:39 | getIntent(...) : Intent | Test.java:48:45:48:47 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:44:29:44:39 | getIntent(...) | user-provided value | -| Test.java:71:45:71:47 | uri | Test.java:67:29:67:39 | getIntent(...) : Intent | Test.java:71:45:71:47 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:67:29:67:39 | getIntent(...) | user-provided value | -| Test.java:96:45:96:47 | uri | Test.java:92:29:92:39 | getIntent(...) : Intent | Test.java:96:45:96:47 | uri | This ContentResolver method that resolves a URI depends on a $@. | Test.java:92:29:92:39 | getIntent(...) | user-provided value | -edges -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:33:45:33:47 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:34:46:34:48 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:35:43:35:45 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:36:53:36:55 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:37:38:37:40 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:38:48:38:50 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:39:48:39:50 | uri | provenance | | -| Test.java:32:23:32:71 | (...)... : Uri | Test.java:40:58:40:60 | uri | provenance | | -| Test.java:32:29:32:39 | getIntent(...) : Intent | Test.java:32:29:32:71 | getParcelableExtra(...) : Parcelable | provenance | MaD:1 | -| Test.java:32:29:32:71 | getParcelableExtra(...) : Parcelable | Test.java:32:23:32:71 | (...)... : Uri | provenance | | -| Test.java:44:23:44:71 | (...)... : Uri | Test.java:48:45:48:47 | uri | provenance | | -| Test.java:44:29:44:39 | getIntent(...) : Intent | Test.java:44:29:44:71 | getParcelableExtra(...) : Parcelable | provenance | MaD:1 | -| Test.java:44:29:44:71 | getParcelableExtra(...) : Parcelable | Test.java:44:23:44:71 | (...)... : Uri | provenance | | -| Test.java:67:23:67:71 | (...)... : Uri | Test.java:71:45:71:47 | uri | provenance | | -| Test.java:67:29:67:39 | getIntent(...) : Intent | Test.java:67:29:67:71 | getParcelableExtra(...) : Parcelable | provenance | MaD:1 | -| Test.java:67:29:67:71 | getParcelableExtra(...) : Parcelable | Test.java:67:23:67:71 | (...)... : Uri | provenance | | -| Test.java:92:23:92:71 | (...)... : Uri | Test.java:96:45:96:47 | uri | provenance | | -| Test.java:92:29:92:39 | getIntent(...) : Intent | Test.java:92:29:92:71 | getParcelableExtra(...) : Parcelable | provenance | MaD:1 | -| Test.java:92:29:92:71 | getParcelableExtra(...) : Parcelable | Test.java:92:23:92:71 | (...)... : Uri | provenance | | -models -| 1 | Summary: android.content; Intent; true; getParcelableExtra; (String); ; Argument[this].SyntheticField[android.content.Intent.extras].MapValue; ReturnValue; value; manual | -nodes -| Test.java:32:23:32:71 | (...)... : Uri | semmle.label | (...)... : Uri | -| Test.java:32:29:32:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| Test.java:32:29:32:71 | getParcelableExtra(...) : Parcelable | semmle.label | getParcelableExtra(...) : Parcelable | -| Test.java:33:45:33:47 | uri | semmle.label | uri | -| Test.java:34:46:34:48 | uri | semmle.label | uri | -| Test.java:35:43:35:45 | uri | semmle.label | uri | -| Test.java:36:53:36:55 | uri | semmle.label | uri | -| Test.java:37:38:37:40 | uri | semmle.label | uri | -| Test.java:38:48:38:50 | uri | semmle.label | uri | -| Test.java:39:48:39:50 | uri | semmle.label | uri | -| Test.java:40:58:40:60 | uri | semmle.label | uri | -| Test.java:44:23:44:71 | (...)... : Uri | semmle.label | (...)... : Uri | -| Test.java:44:29:44:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| Test.java:44:29:44:71 | getParcelableExtra(...) : Parcelable | semmle.label | getParcelableExtra(...) : Parcelable | -| Test.java:48:45:48:47 | uri | semmle.label | uri | -| Test.java:67:23:67:71 | (...)... : Uri | semmle.label | (...)... : Uri | -| Test.java:67:29:67:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| Test.java:67:29:67:71 | getParcelableExtra(...) : Parcelable | semmle.label | getParcelableExtra(...) : Parcelable | -| Test.java:71:45:71:47 | uri | semmle.label | uri | -| Test.java:92:23:92:71 | (...)... : Uri | semmle.label | (...)... : Uri | -| Test.java:92:29:92:39 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| Test.java:92:29:92:71 | getParcelableExtra(...) : Parcelable | semmle.label | getParcelableExtra(...) : Parcelable | -| Test.java:96:45:96:47 | uri | semmle.label | uri | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql new file mode 100644 index 000000000000..ded8a8d69798 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.UnsafeContentUriResolutionQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.qlref b/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.qlref deleted file mode 100644 index abcbe555e289..000000000000 --- a/java/ql/test/query-tests/security/CWE-441/UnsafeContentUriResolutionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-441/UnsafeContentUriResolution.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected index 27281d078111..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.expected @@ -1,68 +0,0 @@ -#select -| MainActivity.java:17:20:17:39 | newInstance(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:17:20:17:39 | newInstance(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:18:23:18:55 | instantiate(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:18:23:18:55 | instantiate(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:19:23:19:61 | instantiate(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:19:23:19:61 | instantiate(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:20:23:20:28 | fClass | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:20:23:20:28 | fClass | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:21:23:21:42 | newInstance(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:21:23:21:42 | newInstance(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:22:23:22:42 | newInstance(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:22:23:22:42 | newInstance(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:23:27:23:32 | fClass | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:23:27:23:32 | fClass | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:24:27:24:46 | newInstance(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:24:27:24:46 | newInstance(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:25:27:25:32 | fClass | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:25:27:25:32 | fClass | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -| MainActivity.java:26:27:26:46 | newInstance(...) | MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:26:27:26:46 | newInstance(...) | Fragment depends on a $@, which may allow a malicious application to bypass access controls. | MainActivity.java:14:34:14:44 | getIntent(...) | user-provided value | -edges -| MainActivity.java:14:34:14:44 | getIntent(...) : Intent | MainActivity.java:14:34:14:68 | getStringExtra(...) : String | provenance | MaD:10 | -| MainActivity.java:14:34:14:68 | getStringExtra(...) : String | MainActivity.java:16:70:16:74 | fname : String | provenance | | -| MainActivity.java:16:38:16:75 | (...)... : Class | MainActivity.java:17:20:17:25 | fClass : Class | provenance | | -| MainActivity.java:16:56:16:75 | forName(...) : Class | MainActivity.java:16:38:16:75 | (...)... : Class | provenance | | -| MainActivity.java:16:70:16:74 | fname : String | MainActivity.java:16:56:16:75 | forName(...) : Class | provenance | Config | -| MainActivity.java:16:70:16:74 | fname : String | MainActivity.java:18:50:18:54 | fname : String | provenance | | -| MainActivity.java:17:20:17:25 | fClass : Class | MainActivity.java:17:20:17:39 | newInstance(...) | provenance | Config Sink:MaD:1 | -| MainActivity.java:17:20:17:25 | fClass : Class | MainActivity.java:20:23:20:28 | fClass | provenance | Sink:MaD:2 | -| MainActivity.java:17:20:17:25 | fClass : Class | MainActivity.java:21:23:21:28 | fClass : Class | provenance | | -| MainActivity.java:18:50:18:54 | fname : String | MainActivity.java:18:23:18:55 | instantiate(...) | provenance | Config Sink:MaD:4 | -| MainActivity.java:18:50:18:54 | fname : String | MainActivity.java:19:50:19:54 | fname : String | provenance | | -| MainActivity.java:19:50:19:54 | fname : String | MainActivity.java:19:23:19:61 | instantiate(...) | provenance | Config Sink:MaD:3 | -| MainActivity.java:21:23:21:28 | fClass : Class | MainActivity.java:21:23:21:42 | newInstance(...) | provenance | Config Sink:MaD:4 | -| MainActivity.java:21:23:21:28 | fClass : Class | MainActivity.java:22:23:22:28 | fClass : Class | provenance | | -| MainActivity.java:22:23:22:28 | fClass : Class | MainActivity.java:22:23:22:42 | newInstance(...) | provenance | Config Sink:MaD:5 | -| MainActivity.java:22:23:22:28 | fClass : Class | MainActivity.java:23:27:23:32 | fClass | provenance | Sink:MaD:6 | -| MainActivity.java:22:23:22:28 | fClass : Class | MainActivity.java:24:27:24:32 | fClass : Class | provenance | | -| MainActivity.java:24:27:24:32 | fClass : Class | MainActivity.java:24:27:24:46 | newInstance(...) | provenance | Config Sink:MaD:8 | -| MainActivity.java:24:27:24:32 | fClass : Class | MainActivity.java:25:27:25:32 | fClass | provenance | Sink:MaD:7 | -| MainActivity.java:24:27:24:32 | fClass : Class | MainActivity.java:26:27:26:32 | fClass : Class | provenance | | -| MainActivity.java:26:27:26:32 | fClass : Class | MainActivity.java:26:27:26:46 | newInstance(...) | provenance | Config Sink:MaD:9 | -models -| 1 | Sink: androidx.fragment.app; FragmentTransaction; true; add; (Fragment,String); ; Argument[0]; fragment-injection; manual | -| 2 | Sink: androidx.fragment.app; FragmentTransaction; true; add; (int,Class,Bundle,String); ; Argument[1]; fragment-injection; manual | -| 3 | Sink: androidx.fragment.app; FragmentTransaction; true; add; (int,Fragment); ; Argument[1]; fragment-injection; manual | -| 4 | Sink: androidx.fragment.app; FragmentTransaction; true; add; (int,Fragment,String); ; Argument[1]; fragment-injection; manual | -| 5 | Sink: androidx.fragment.app; FragmentTransaction; true; attach; (Fragment); ; Argument[0]; fragment-injection; manual | -| 6 | Sink: androidx.fragment.app; FragmentTransaction; true; replace; (int,Class,Bundle); ; Argument[1]; fragment-injection; manual | -| 7 | Sink: androidx.fragment.app; FragmentTransaction; true; replace; (int,Class,Bundle,String); ; Argument[1]; fragment-injection; manual | -| 8 | Sink: androidx.fragment.app; FragmentTransaction; true; replace; (int,Fragment); ; Argument[1]; fragment-injection; manual | -| 9 | Sink: androidx.fragment.app; FragmentTransaction; true; replace; (int,Fragment,String); ; Argument[1]; fragment-injection; manual | -| 10 | Summary: android.content; Intent; true; getStringExtra; (String); ; Argument[this].SyntheticField[android.content.Intent.extras].MapValue; ReturnValue; value; manual | -nodes -| MainActivity.java:14:34:14:44 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| MainActivity.java:14:34:14:68 | getStringExtra(...) : String | semmle.label | getStringExtra(...) : String | -| MainActivity.java:16:38:16:75 | (...)... : Class | semmle.label | (...)... : Class | -| MainActivity.java:16:56:16:75 | forName(...) : Class | semmle.label | forName(...) : Class | -| MainActivity.java:16:70:16:74 | fname : String | semmle.label | fname : String | -| MainActivity.java:17:20:17:25 | fClass : Class | semmle.label | fClass : Class | -| MainActivity.java:17:20:17:39 | newInstance(...) | semmle.label | newInstance(...) | -| MainActivity.java:18:23:18:55 | instantiate(...) | semmle.label | instantiate(...) | -| MainActivity.java:18:50:18:54 | fname : String | semmle.label | fname : String | -| MainActivity.java:19:23:19:61 | instantiate(...) | semmle.label | instantiate(...) | -| MainActivity.java:19:50:19:54 | fname : String | semmle.label | fname : String | -| MainActivity.java:20:23:20:28 | fClass | semmle.label | fClass | -| MainActivity.java:21:23:21:28 | fClass : Class | semmle.label | fClass : Class | -| MainActivity.java:21:23:21:42 | newInstance(...) | semmle.label | newInstance(...) | -| MainActivity.java:22:23:22:28 | fClass : Class | semmle.label | fClass : Class | -| MainActivity.java:22:23:22:42 | newInstance(...) | semmle.label | newInstance(...) | -| MainActivity.java:23:27:23:32 | fClass | semmle.label | fClass | -| MainActivity.java:24:27:24:32 | fClass : Class | semmle.label | fClass : Class | -| MainActivity.java:24:27:24:46 | newInstance(...) | semmle.label | newInstance(...) | -| MainActivity.java:25:27:25:32 | fClass | semmle.label | fClass | -| MainActivity.java:26:27:26:32 | fClass : Class | semmle.label | fClass : Class | -| MainActivity.java:26:27:26:46 | newInstance(...) | semmle.label | newInstance(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql new file mode 100644 index 000000000000..665d750ee204 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.ql @@ -0,0 +1,4 @@ +import java +import semmle.code.java.security.FragmentInjectionQuery +import utils.test.InlineFlowTest +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.qlref deleted file mode 100644 index f6d0df1bfcda..000000000000 --- a/java/ql/test/query-tests/security/CWE-470/FragmentInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-470/FragmentInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-470/MainActivity.java b/java/ql/test/query-tests/security/CWE-470/MainActivity.java index fccc2d21ff68..3773a9dbe37e 100644 --- a/java/ql/test/query-tests/security/CWE-470/MainActivity.java +++ b/java/ql/test/query-tests/security/CWE-470/MainActivity.java @@ -11,19 +11,19 @@ public class MainActivity extends FragmentActivity { public void onCreate(Bundle savedInstance) { try { super.onCreate(savedInstance); - final String fname = getIntent().getStringExtra("fname"); // $ Source + final String fname = getIntent().getStringExtra("fname"); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Class fClass = (Class) Class.forName(fname); - ft.add(fClass.newInstance(), ""); // $ Alert - ft.add(0, Fragment.instantiate(this, fname), null); // $ Alert - ft.add(0, Fragment.instantiate(this, fname, null)); // $ Alert - ft.add(0, fClass, null, ""); // $ Alert - ft.add(0, fClass.newInstance(), ""); // $ Alert - ft.attach(fClass.newInstance()); // $ Alert - ft.replace(0, fClass, null); // $ Alert - ft.replace(0, fClass.newInstance()); // $ Alert - ft.replace(0, fClass, null, ""); // $ Alert - ft.replace(0, fClass.newInstance(), ""); // $ Alert + ft.add(fClass.newInstance(), ""); // $ hasTaintFlow + ft.add(0, Fragment.instantiate(this, fname), null); // $ hasTaintFlow + ft.add(0, Fragment.instantiate(this, fname, null)); // $ hasTaintFlow + ft.add(0, fClass, null, ""); // $ hasTaintFlow + ft.add(0, fClass.newInstance(), ""); // $ hasTaintFlow + ft.attach(fClass.newInstance()); // $ hasTaintFlow + ft.replace(0, fClass, null); // $ hasTaintFlow + ft.replace(0, fClass.newInstance()); // $ hasTaintFlow + ft.replace(0, fClass, null, ""); // $ hasTaintFlow + ft.replace(0, fClass.newInstance(), ""); // $ hasTaintFlow ft.add(Fragment.class.newInstance(), ""); // Safe ft.attach(Fragment.class.newInstance()); // Safe diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/Test.java b/java/ql/test/query-tests/security/CWE-489/webview-debugging/Test.java index 378d5920cdd1..3fe75e893889 100644 --- a/java/ql/test/query-tests/security/CWE-489/webview-debugging/Test.java +++ b/java/ql/test/query-tests/security/CWE-489/webview-debugging/Test.java @@ -4,20 +4,20 @@ class Test { boolean DEBUG_BUILD; void test1() { - WebView.setWebContentsDebuggingEnabled(true); // $ Alert + WebView.setWebContentsDebuggingEnabled(true); // $hasValueFlow } void test2(){ if (DEBUG_BUILD) { - WebView.setWebContentsDebuggingEnabled(true); + WebView.setWebContentsDebuggingEnabled(true); } } void test3(boolean enabled){ - WebView.setWebContentsDebuggingEnabled(enabled); // $ Alert + WebView.setWebContentsDebuggingEnabled(enabled); // $hasValueFlow } void test4(){ - test3(true); // $ Source + test3(true); } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected index 040ae7e3f3f8..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected +++ b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.expected @@ -1,12 +0,0 @@ -#select -| Test.java:7:48:7:51 | true | Test.java:7:48:7:51 | true | Test.java:7:48:7:51 | true | Webview debugging is enabled. | -| Test.java:17:48:17:54 | enabled | Test.java:21:15:21:18 | true : Boolean | Test.java:17:48:17:54 | enabled | Webview debugging is enabled. | -edges -| Test.java:16:16:16:30 | enabled : Boolean | Test.java:17:48:17:54 | enabled | provenance | | -| Test.java:21:15:21:18 | true : Boolean | Test.java:16:16:16:30 | enabled : Boolean | provenance | | -nodes -| Test.java:7:48:7:51 | true | semmle.label | true | -| Test.java:16:16:16:30 | enabled : Boolean | semmle.label | enabled : Boolean | -| Test.java:17:48:17:54 | enabled | semmle.label | enabled | -| Test.java:21:15:21:18 | true : Boolean | semmle.label | true : Boolean | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql new file mode 100644 index 000000000000..f0b9cf08f820 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.WebviewDebuggingEnabledQuery +import ValueFlowTest diff --git a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.qlref b/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.qlref deleted file mode 100644 index 596b3c6d005c..000000000000 --- a/java/ql/test/query-tests/security/CWE-489/webview-debugging/WebviewDebuggingEnabled.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-489/WebviewDebuggingEnabled.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-502/A.java b/java/ql/test/query-tests/security/CWE-502/A.java index 81974edf283e..f3bd633f8804 100644 --- a/java/ql/test/query-tests/security/CWE-502/A.java +++ b/java/ql/test/query-tests/security/CWE-502/A.java @@ -11,15 +11,15 @@ public class A { public Object deserialize1(Socket sock) throws java.io.IOException, ClassNotFoundException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); ObjectInputStream in = new ObjectInputStream(inputStream); - return in.readObject(); // $ Alert + return in.readObject(); // $unsafeDeserialization } public Object deserialize2(Socket sock) throws java.io.IOException, ClassNotFoundException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); ObjectInputStream in = new ObjectInputStream(inputStream); - return in.readUnshared(); // $ Alert + return in.readUnshared(); // $unsafeDeserialization } public Object deserializeWithSerialKiller(Socket sock) throws java.io.IOException, ClassNotFoundException { @@ -29,24 +29,24 @@ public Object deserializeWithSerialKiller(Socket sock) throws java.io.IOExceptio } public Object deserialize3(Socket sock) throws java.io.IOException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); XMLDecoder d = new XMLDecoder(inputStream); - return d.readObject(); // $ Alert + return d.readObject(); // $unsafeDeserialization } public Object deserialize4(Socket sock) throws java.io.IOException { XStream xs = new XStream(); - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); Reader reader = new InputStreamReader(inputStream); - return xs.fromXML(reader); // $ Alert + return xs.fromXML(reader); // $unsafeDeserialization } public void deserialize5(Socket sock) throws java.io.IOException { Kryo kryo = new Kryo(); - Input input = new Input(sock.getInputStream()); // $ Source - A a1 = kryo.readObject(input, A.class); // $ Alert - A a2 = kryo.readObjectOrNull(input, A.class); // $ Alert - Object o = kryo.readClassAndObject(input); // $ Alert + Input input = new Input(sock.getInputStream()); + A a1 = kryo.readObject(input, A.class); // $unsafeDeserialization + A a2 = kryo.readObjectOrNull(input, A.class); // $unsafeDeserialization + Object o = kryo.readClassAndObject(input); // $unsafeDeserialization } private Kryo getSafeKryo() throws java.io.IOException { @@ -64,22 +64,22 @@ public void deserialize6(Socket sock) throws java.io.IOException { public void deserializeSnakeYaml(Socket sock) throws java.io.IOException { Yaml yaml = new Yaml(); - InputStream input = sock.getInputStream(); // $ Source - Object o = yaml.load(input); // $ Alert - Object o2 = yaml.loadAll(input); // $ Alert - Object o3 = yaml.parse(new InputStreamReader(input)); // $ Alert - A o4 = yaml.loadAs(input, A.class); // $ Alert - A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $ Alert + InputStream input = sock.getInputStream(); + Object o = yaml.load(input); // $unsafeDeserialization + Object o2 = yaml.loadAll(input); // $unsafeDeserialization + Object o3 = yaml.parse(new InputStreamReader(input)); // $unsafeDeserialization + A o4 = yaml.loadAs(input, A.class); // $unsafeDeserialization + A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $unsafeDeserialization } public void deserializeSnakeYaml2(Socket sock) throws java.io.IOException { Yaml yaml = new Yaml(new Constructor()); - InputStream input = sock.getInputStream(); // $ Source - Object o = yaml.load(input); // $ Alert - Object o2 = yaml.loadAll(input); // $ Alert - Object o3 = yaml.parse(new InputStreamReader(input)); // $ Alert - A o4 = yaml.loadAs(input, A.class); // $ Alert - A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $ Alert + InputStream input = sock.getInputStream(); + Object o = yaml.load(input); // $unsafeDeserialization + Object o2 = yaml.loadAll(input); // $unsafeDeserialization + Object o3 = yaml.parse(new InputStreamReader(input)); // $unsafeDeserialization + A o4 = yaml.loadAs(input, A.class); // $unsafeDeserialization + A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $unsafeDeserialization } public void deserializeSnakeYaml3(Socket sock) throws java.io.IOException { @@ -94,11 +94,11 @@ public void deserializeSnakeYaml3(Socket sock) throws java.io.IOException { public void deserializeSnakeYaml4(Socket sock) throws java.io.IOException { Yaml yaml = new Yaml(new Constructor(A.class)); - InputStream input = sock.getInputStream(); // $ Source - Object o = yaml.load(input); // $ Alert - Object o2 = yaml.loadAll(input); // $ Alert - Object o3 = yaml.parse(new InputStreamReader(input)); // $ Alert - A o4 = yaml.loadAs(input, A.class); // $ Alert - A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $ Alert + InputStream input = sock.getInputStream(); + Object o = yaml.load(input); // $unsafeDeserialization + Object o2 = yaml.loadAll(input); // $unsafeDeserialization + Object o3 = yaml.parse(new InputStreamReader(input)); // $unsafeDeserialization + A o4 = yaml.loadAs(input, A.class); // $unsafeDeserialization + A o5 = yaml.loadAs(new InputStreamReader(input), A.class); // $unsafeDeserialization } } diff --git a/java/ql/test/query-tests/security/CWE-502/B.java b/java/ql/test/query-tests/security/CWE-502/B.java index 803982081ad8..d97a44cfd58a 100644 --- a/java/ql/test/query-tests/security/CWE-502/B.java +++ b/java/ql/test/query-tests/security/CWE-502/B.java @@ -4,30 +4,30 @@ public class B { public Object deserializeJson1(Socket sock) throws java.io.IOException { - InputStream inputStream = sock.getInputStream(); // $ Source - return JSON.parseObject(inputStream, null); // $ Alert + InputStream inputStream = sock.getInputStream(); + return JSON.parseObject(inputStream, null); // $unsafeDeserialization } public Object deserializeJson2(Socket sock) throws java.io.IOException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); byte[] bytes = new byte[100]; inputStream.read(bytes); - return JSON.parse(bytes); // $ Alert + return JSON.parse(bytes); // $unsafeDeserialization } public Object deserializeJson3(Socket sock) throws java.io.IOException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); byte[] bytes = new byte[100]; inputStream.read(bytes); String s = new String(bytes); - return JSON.parseObject(s); // $ Alert + return JSON.parseObject(s); // $unsafeDeserialization } public Object deserializeJson4(Socket sock) throws java.io.IOException { - InputStream inputStream = sock.getInputStream(); // $ Source + InputStream inputStream = sock.getInputStream(); byte[] bytes = new byte[100]; inputStream.read(bytes); String s = new String(bytes); - return JSON.parse(s); // $ Alert + return JSON.parse(s); // $unsafeDeserialization } } diff --git a/java/ql/test/query-tests/security/CWE-502/C.java b/java/ql/test/query-tests/security/CWE-502/C.java index e63515b85bd5..e13ae98ead52 100644 --- a/java/ql/test/query-tests/security/CWE-502/C.java +++ b/java/ql/test/query-tests/security/CWE-502/C.java @@ -20,75 +20,75 @@ public class C { @GetMapping(value = "jyaml") public void bad1(HttpServletRequest request) throws Exception { - String data = request.getParameter("data"); // $ Source - Yaml.load(data); // $ Alert - Yaml.loadStream(data); // $ Alert - Yaml.loadStreamOfType(data, Object.class); // $ Alert - Yaml.loadType(data, Object.class); // $ Alert + String data = request.getParameter("data"); + Yaml.load(data); // $unsafeDeserialization + Yaml.loadStream(data); // $unsafeDeserialization + Yaml.loadStreamOfType(data, Object.class); // $unsafeDeserialization + Yaml.loadType(data, Object.class); // $unsafeDeserialization org.ho.yaml.YamlConfig yamlConfig = new YamlConfig(); - yamlConfig.load(data); // $ Alert - yamlConfig.loadStream(data); // $ Alert - yamlConfig.loadStreamOfType(data, Object.class); // $ Alert - yamlConfig.loadType(data, Object.class); // $ Alert + yamlConfig.load(data); // $unsafeDeserialization + yamlConfig.loadStream(data); // $unsafeDeserialization + yamlConfig.loadStreamOfType(data, Object.class); // $unsafeDeserialization + yamlConfig.loadType(data, Object.class); // $unsafeDeserialization } @GetMapping(value = "jsonio") public void bad2(HttpServletRequest request) { - String data = request.getParameter("data"); // $ Source + String data = request.getParameter("data"); HashMap hashMap = new HashMap(); hashMap.put("USE_MAPS", true); - JsonReader.jsonToJava(data); // $ Alert + JsonReader.jsonToJava(data); // $unsafeDeserialization JsonReader jr = new JsonReader(data, null); - jr.readObject(); // $ Alert + jr.readObject(); // $unsafeDeserialization } @GetMapping(value = "yamlbeans") public void bad3(HttpServletRequest request) throws Exception { - String data = request.getParameter("data"); // $ Source + String data = request.getParameter("data"); YamlReader r = new YamlReader(data); - r.read(); // $ Alert - r.read(Object.class); // $ Alert - r.read(Object.class, Object.class); // $ Alert + r.read(); // $unsafeDeserialization + r.read(Object.class); // $unsafeDeserialization + r.read(Object.class, Object.class); // $unsafeDeserialization } @GetMapping(value = "hessian") public void bad4(HttpServletRequest request) throws Exception { - byte[] bytes = request.getParameter("data").getBytes(); // $ Source + byte[] bytes = request.getParameter("data").getBytes(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); HessianInput hessianInput = new HessianInput(bis); - hessianInput.readObject(); // $ Alert - hessianInput.readObject(Object.class); // $ Alert + hessianInput.readObject(); // $unsafeDeserialization + hessianInput.readObject(Object.class); // $unsafeDeserialization } @GetMapping(value = "hessian2") public void bad5(HttpServletRequest request) throws Exception { - byte[] bytes = request.getParameter("data").getBytes(); // $ Source + byte[] bytes = request.getParameter("data").getBytes(); ByteArrayInputStream bis = new ByteArrayInputStream(bytes); Hessian2Input hessianInput = new Hessian2Input(bis); - hessianInput.readObject(); // $ Alert - hessianInput.readObject(Object.class); // $ Alert + hessianInput.readObject(); // $unsafeDeserialization + hessianInput.readObject(Object.class); // $unsafeDeserialization } @GetMapping(value = "castor") public void bad6(HttpServletRequest request) throws Exception { Unmarshaller unmarshaller = new Unmarshaller(); - unmarshaller.unmarshal(new StringReader(request.getParameter("data"))); // $ Alert + unmarshaller.unmarshal(new StringReader(request.getParameter("data"))); // $unsafeDeserialization } @GetMapping(value = "burlap") public void bad7(HttpServletRequest request) throws Exception { - byte[] serializedData = request.getParameter("data").getBytes(); // $ Source + byte[] serializedData = request.getParameter("data").getBytes(); ByteArrayInputStream is = new ByteArrayInputStream(serializedData); BurlapInput burlapInput = new BurlapInput(is); - burlapInput.readObject(); // $ Alert + burlapInput.readObject(); // $unsafeDeserialization BurlapInput burlapInput1 = new BurlapInput(); burlapInput1.init(is); - burlapInput1.readObject(); // $ Alert + burlapInput1.readObject(); // $unsafeDeserialization } @GetMapping(value = "jsonio1") diff --git a/java/ql/test/query-tests/security/CWE-502/FlexjsonServlet.java b/java/ql/test/query-tests/security/CWE-502/FlexjsonServlet.java index 1d47bd2b7fd2..c7e5c1ce5871 100644 --- a/java/ql/test/query-tests/security/CWE-502/FlexjsonServlet.java +++ b/java/ql/test/query-tests/security/CWE-502/FlexjsonServlet.java @@ -33,7 +33,7 @@ public void doHead(HttpServletRequest req, HttpServletResponse resp) throws IOEx // BAD: allow class name to be controlled by remote source public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { JSONDeserializer deserializer = new JSONDeserializer<>(); - User user = (User) deserializer.deserialize(req.getReader()); // $ Alert + User user = (User) deserializer.deserialize(req.getReader()); // $unsafeDeserialization } @@ -41,7 +41,7 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx // BAD: allow class name to be controlled by remote source public void doTrace(HttpServletRequest req, HttpServletResponse resp) throws IOException { JSONDeserializer deserializer = new JSONDeserializer<>(); - User user = (User) deserializer.deserialize(req.getReader()); // $ Alert + User user = (User) deserializer.deserialize(req.getReader()); // $unsafeDeserialization } @@ -49,7 +49,7 @@ public void doTrace(HttpServletRequest req, HttpServletResponse resp) throws IOE // BAD: specify overly generic class type public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException { JSONDeserializer deserializer = new JSONDeserializer(); - User user = (User) deserializer.deserialize(req.getReader(), Object.class); // $ Alert + User user = (User) deserializer.deserialize(req.getReader(), Object.class); // $unsafeDeserialization } private Person fromJsonToPerson(String json) { @@ -64,8 +64,8 @@ public void doPut2(HttpServletRequest req, HttpServletResponse resp) throws IOEx // BAD: Specify a concrete class type to `use` with `ObjectFactory` public void doPut3(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source - Person person = new JSONDeserializer().use(Person.class, new ExistingObjectFactory(new Person())).deserialize(json); // $ Alert + String json = req.getParameter("json"); + Person person = new JSONDeserializer().use(Person.class, new ExistingObjectFactory(new Person())).deserialize(json); // $unsafeDeserialization } // GOOD: Specify a null path to `use` with a concrete class type @@ -76,8 +76,8 @@ public void doPut4(HttpServletRequest req, HttpServletResponse resp) throws IOEx // BAD: Specify a non-null json path to `use` with a concrete class type public void doPut5(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source - Person person = new JSONDeserializer().use("abc", Person.class).deserialize(json); // $ Alert + String json = req.getParameter("json"); + Person person = new JSONDeserializer().use("abc", Person.class).deserialize(json); // $unsafeDeserialization } // GOOD: Specify a null json path to `use` with `ObjectFactory` @@ -116,11 +116,11 @@ public void doPut10(HttpServletRequest req, HttpServletResponse resp) throws IOE // BAD: Specify a non-null json path to `use` with a concrete class type, interwoven with irrelevant use directives, without using fluent method chaining public void doPut11(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); JSONDeserializer deserializer = new JSONDeserializer(); deserializer.use(Person.class, null); deserializer.use("someKey", Person.class); deserializer.use(String.class, null); - Person person = deserializer.deserialize(json); // $ Alert + Person person = deserializer.deserialize(json); // $unsafeDeserialization } } diff --git a/java/ql/test/query-tests/security/CWE-502/GsonActivity.java b/java/ql/test/query-tests/security/CWE-502/GsonActivity.java index 93e944118340..a080924c6cd4 100644 --- a/java/ql/test/query-tests/security/CWE-502/GsonActivity.java +++ b/java/ql/test/query-tests/security/CWE-502/GsonActivity.java @@ -5,13 +5,13 @@ import android.os.Parcel; import android.os.Parcelable; -import com.google.gson.Gson; +import com.google.gson.Gson; public class GsonActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(-1); - ParcelableEntity entity = (ParcelableEntity) getIntent().getParcelableExtra("jsonEntity"); // $ Source + ParcelableEntity entity = (ParcelableEntity) getIntent().getParcelableExtra("jsonEntity"); } } diff --git a/java/ql/test/query-tests/security/CWE-502/GsonServlet.java b/java/ql/test/query-tests/security/CWE-502/GsonServlet.java index 0ee62249031b..47534d2d7a09 100644 --- a/java/ql/test/query-tests/security/CWE-502/GsonServlet.java +++ b/java/ql/test/query-tests/security/CWE-502/GsonServlet.java @@ -36,12 +36,12 @@ public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOExc @Override // BAD: allow class name to be controlled by remote source public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); String clazz = req.getParameter("class"); try { Gson gson = new Gson(); - Object obj = gson.fromJson(json, Class.forName(clazz)); // $ Alert + Object obj = gson.fromJson(json, Class.forName(clazz)); // $unsafeDeserialization } catch (ClassNotFoundException cne) { throw new IOException(cne.getMessage()); } @@ -50,14 +50,14 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx @Override // BAD: allow class name to be controlled by remote source even with a type adapter factory public void doHead(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); String clazz = req.getParameter("class"); try { RuntimeTypeAdapterFactory runtimeTypeAdapterFactory = RuntimeTypeAdapterFactory .of(User.class, "type"); Gson gson = new GsonBuilder().registerTypeAdapterFactory(runtimeTypeAdapterFactory).create(); - Object obj = gson.fromJson(json, Class.forName(clazz)); // $ Alert + Object obj = gson.fromJson(json, Class.forName(clazz)); // $unsafeDeserialization } catch (ClassNotFoundException cne) { throw new IOException(cne.getMessage()); } @@ -74,4 +74,4 @@ public void doTrace(HttpServletRequest req, HttpServletResponse resp) throws IOE Gson gson = new GsonBuilder().registerTypeAdapterFactory(runtimeTypeAdapterFactory).create(); Person obj = gson.fromJson(json, Person.class); } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-502/JabsorbServlet.java b/java/ql/test/query-tests/security/CWE-502/JabsorbServlet.java index c5a072e65f1a..14e8d1819c6f 100644 --- a/java/ql/test/query-tests/security/CWE-502/JabsorbServlet.java +++ b/java/ql/test/query-tests/security/CWE-502/JabsorbServlet.java @@ -86,7 +86,7 @@ public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOEx @Override // BAD: allow class name to be controlled by remote source public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); String clazz = req.getParameter("class"); try { @@ -99,7 +99,7 @@ public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOExc serializer.setMarshallNullAttributes(true); SerializerState state = new SerializerState(); - User user = (User) serializer.unmarshall(state, Class.forName(clazz), jsonObject); // $ Alert + User user = (User) serializer.unmarshall(state, Class.forName(clazz), jsonObject); // $unsafeDeserialization } catch (Exception e) { throw new IOException(e.getMessage()); } @@ -107,15 +107,15 @@ public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOExc // BAD: allow explicit class type controlled by remote source in the format of "json={\"javaClass\":\"com.thirdparty.Attacker\", ...}" public void doPut2(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); try { JSONSerializer serializer = new JSONSerializer(); serializer.registerDefaultSerializers(); - User user = (User) serializer.fromJSON(json); // $ Alert + User user = (User) serializer.fromJSON(json); // $unsafeDeserialization } catch (Exception e) { throw new IOException(e.getMessage()); } } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-502/JacksonTest.java b/java/ql/test/query-tests/security/CWE-502/JacksonTest.java index 71be753b89a1..3520e4eaa116 100644 --- a/java/ql/test/query-tests/security/CWE-502/JacksonTest.java +++ b/java/ql/test/query-tests/security/CWE-502/JacksonTest.java @@ -17,7 +17,7 @@ public static void withSocket(Action action) throws Exception { try (ServerSocket serverSocket = new ServerSocket(0)) { try (Socket socket = serverSocket.accept()) { byte[] bytes = new byte[1024]; - int n = socket.getInputStream().read(bytes); // $ Source + int n = socket.getInputStream().read(bytes); String jexlExpr = new String(bytes, 0, n); action.run(jexlExpr); } @@ -73,7 +73,7 @@ class UnsafePersonDeserialization { private static void testUnsafeDeserialization() throws Exception { JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); - mapper.readValue(string, Person.class); // $ Alert + mapper.readValue(string, Person.class); // $unsafeDeserialization }); } @@ -82,7 +82,7 @@ private static void testUnsafeDeserialization() throws Exception { private static void testUnsafeDeserializationWithExtendedClass() throws Exception { JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); - mapper.readValue(string, Employee.class); // $ Alert + mapper.readValue(string, Employee.class); // $unsafeDeserialization }); } @@ -91,7 +91,7 @@ private static void testUnsafeDeserializationWithExtendedClass() throws Exceptio private static void testUnsafeDeserializationWithWrapper() throws Exception { JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); - mapper.readValue(string, Task.class); // $ Alert + mapper.readValue(string, Task.class); // $unsafeDeserialization }); } } @@ -102,7 +102,7 @@ class SaferPersonDeserialization { // has a validator private static void testSafeDeserializationWithValidator() throws Exception { JacksonTest.withSocket(string -> { - PolymorphicTypeValidator ptv = + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() .allowIfSubType("only.allowed.package") .build(); @@ -118,7 +118,7 @@ private static void testSafeDeserializationWithValidator() throws Exception { // has a validator private static void testSafeDeserializationWithValidatorAndBuilder() throws Exception { JacksonTest.withSocket(string -> { - PolymorphicTypeValidator ptv = + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() .allowIfSubType("only.allowed.package") .build(); @@ -139,7 +139,7 @@ private static void testUnsafeDeserialization() throws Exception { JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); // this enables polymorphic type handling - mapper.readValue(string, Cat.class); // $ Alert + mapper.readValue(string, Cat.class); // $unsafeDeserialization }); } @@ -148,7 +148,7 @@ private static void testUnsafeDeserializationWithObjectMapperReadValues() throws JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); - mapper.readValues(new JsonFactory().createParser(string), Cat.class).readAll(); // $ Alert + mapper.readValues(new JsonFactory().createParser(string), Cat.class).readAll(); // $unsafeDeserialization }); } @@ -157,7 +157,7 @@ private static void testUnsafeDeserializationWithObjectMapperTreeToValue() throw JacksonTest.withSocket(string -> { ObjectMapper mapper = new ObjectMapper(); mapper.enableDefaultTyping(); - mapper.treeToValue(mapper.readTree(string), Cat.class); // $ Alert + mapper.treeToValue(mapper.readTree(string), Cat.class); // $unsafeDeserialization }); } @@ -169,7 +169,7 @@ private static void testUnsafeDeserializationWithUnsafeClass() throws Exception String type = parts[1]; Class clazz = Class.forName(type); ObjectMapper mapper = new ObjectMapper(); - mapper.readValue(data, clazz); // $ Alert + mapper.readValue(data, clazz); // $unsafeDeserialization }); } @@ -180,7 +180,7 @@ private static void testUnsafeDeserializationWithUnsafeClassAndCustomTypeResolve String data = parts[0]; String type = parts[1]; ObjectMapper mapper = new ObjectMapper(); - mapper.readValue(data, resolveImpl(type, mapper)); // $ Alert + mapper.readValue(data, resolveImpl(type, mapper)); // $unsafeDeserialization }); } @@ -195,15 +195,15 @@ class SaferCatDeserialization { // has a validator private static void testUnsafeDeserialization() throws Exception { JacksonTest.withSocket(string -> { - PolymorphicTypeValidator ptv = + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() .allowIfSubType("only.allowed.pachage") .build(); - + ObjectMapper mapper = JsonMapper.builder().polymorphicTypeValidator(ptv).build(); mapper.enableDefaultTyping(); // this enables polymorphic type handling mapper.readValue(string, Cat.class); }); } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-502/JoddJsonServlet.java b/java/ql/test/query-tests/security/CWE-502/JoddJsonServlet.java index caeff0028f20..c10bfbc46b98 100644 --- a/java/ql/test/query-tests/security/CWE-502/JoddJsonServlet.java +++ b/java/ql/test/query-tests/security/CWE-502/JoddJsonServlet.java @@ -29,7 +29,7 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOExc // BAD: dangerously configured parser with no class restriction passed to `parse`, // using a few different possible call sequences. public void doHead(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); String clazz = req.getParameter("class"); int callOrder; try { @@ -42,25 +42,25 @@ public void doHead(HttpServletRequest req, HttpServletResponse resp) throws IOEx JsonParser parser = new JsonParser(); if(callOrder == 0) { parser.setClassMetadataName("class"); - User obj = parser.parse(json, null); // $ Alert + User obj = parser.parse(json, null); // $unsafeDeserialization } else if(callOrder == 1) { - parser.setClassMetadataName("class").parse(json, null); // $ Alert + parser.setClassMetadataName("class").parse(json, null); // $unsafeDeserialization } else if(callOrder == 2) { - parser.setClassMetadataName("class").lazy(true).parse(json, null); // $ Alert + parser.setClassMetadataName("class").lazy(true).parse(json, null); // $unsafeDeserialization } else if(callOrder == 3) { - parser.withClassMetadata(true).lazy(true).parse(json, null); // $ Alert + parser.withClassMetadata(true).lazy(true).parse(json, null); // $unsafeDeserialization } } @Override // BAD: allow class name to be controlled by remote source public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - String json = req.getParameter("json"); // $ Source + String json = req.getParameter("json"); String clazz = req.getParameter("class"); try { JsonParser parser = new JsonParser(); - Object obj = parser.parse(json, Class.forName(clazz)); // $ Alert + Object obj = parser.parse(json, Class.forName(clazz)); // $unsafeDeserialization } catch (ClassNotFoundException cne) { throw new IOException(cne.getMessage()); } @@ -99,4 +99,4 @@ public void doPut(HttpServletRequest req, HttpServletResponse resp) throws IOExc parser.withClassMetadata(true).setClassMetadataName(null).parse(json, null); } } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-502/ObjectMessageTest.java b/java/ql/test/query-tests/security/CWE-502/ObjectMessageTest.java index 2ccf7c282c21..15da41b93c8a 100644 --- a/java/ql/test/query-tests/security/CWE-502/ObjectMessageTest.java +++ b/java/ql/test/query-tests/security/CWE-502/ObjectMessageTest.java @@ -3,7 +3,7 @@ import javax.jms.ObjectMessage; public class ObjectMessageTest implements MessageListener { - public void onMessage(Message message) { // $ Source - ((ObjectMessage) message).getObject(); // $ Alert + public void onMessage(Message message) { + ((ObjectMessage) message).getObject(); // $ unsafeDeserialization } } diff --git a/java/ql/test/query-tests/security/CWE-502/ParcelableEntity.java b/java/ql/test/query-tests/security/CWE-502/ParcelableEntity.java index 33b43ce8d6df..a9cbcabd9d39 100644 --- a/java/ql/test/query-tests/security/CWE-502/ParcelableEntity.java +++ b/java/ql/test/query-tests/security/CWE-502/ParcelableEntity.java @@ -29,7 +29,7 @@ public void writeToParcel(Parcel parcel, int i) { public ParcelableEntity createFromParcel(Parcel parcel) { try { Class clazz = Class.forName(parcel.readString()); - Object obj = GSON.fromJson(parcel.readString(), clazz); // $ Alert + Object obj = GSON.fromJson(parcel.readString(), clazz); // $unsafeDeserialization return new ParcelableEntity(obj); } catch (ClassNotFoundException e) { diff --git a/java/ql/test/query-tests/security/CWE-502/TestMessageBodyReader.java b/java/ql/test/query-tests/security/CWE-502/TestMessageBodyReader.java index 54cc4f5d6146..2132041254da 100644 --- a/java/ql/test/query-tests/security/CWE-502/TestMessageBodyReader.java +++ b/java/ql/test/query-tests/security/CWE-502/TestMessageBodyReader.java @@ -17,12 +17,12 @@ public boolean isReadable(Class type, Type genericType, Annotation[] annotati @Override public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, - MultivaluedMap httpHeaders, InputStream entityStream) throws IOException { // $ Source + MultivaluedMap httpHeaders, InputStream entityStream) throws IOException { try { - return new ObjectInputStream(entityStream).readObject(); // $ Alert + return new ObjectInputStream(entityStream).readObject(); // $unsafeDeserialization } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected index b4064231bec6..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected +++ b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.expected @@ -1,411 +0,0 @@ -#select -| A.java:16:12:16:26 | readObject(...) | A.java:14:31:14:51 | getInputStream(...) : InputStream | A.java:16:12:16:13 | in | Unsafe deserialization depends on a $@. | A.java:14:31:14:51 | getInputStream(...) | user-provided value | -| A.java:22:12:22:28 | readUnshared(...) | A.java:20:31:20:51 | getInputStream(...) : InputStream | A.java:22:12:22:13 | in | Unsafe deserialization depends on a $@. | A.java:20:31:20:51 | getInputStream(...) | user-provided value | -| A.java:34:12:34:25 | readObject(...) | A.java:32:31:32:51 | getInputStream(...) : InputStream | A.java:34:12:34:12 | d | Unsafe deserialization depends on a $@. | A.java:32:31:32:51 | getInputStream(...) | user-provided value | -| A.java:41:12:41:29 | fromXML(...) | A.java:39:31:39:51 | getInputStream(...) : InputStream | A.java:41:23:41:28 | reader | Unsafe deserialization depends on a $@. | A.java:39:31:39:51 | getInputStream(...) | user-provided value | -| A.java:47:12:47:42 | readObject(...) | A.java:46:29:46:49 | getInputStream(...) : InputStream | A.java:47:28:47:32 | input | Unsafe deserialization depends on a $@. | A.java:46:29:46:49 | getInputStream(...) | user-provided value | -| A.java:48:12:48:48 | readObjectOrNull(...) | A.java:46:29:46:49 | getInputStream(...) : InputStream | A.java:48:34:48:38 | input | Unsafe deserialization depends on a $@. | A.java:46:29:46:49 | getInputStream(...) | user-provided value | -| A.java:49:16:49:45 | readClassAndObject(...) | A.java:46:29:46:49 | getInputStream(...) : InputStream | A.java:49:40:49:44 | input | Unsafe deserialization depends on a $@. | A.java:46:29:46:49 | getInputStream(...) | user-provided value | -| A.java:68:16:68:31 | load(...) | A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:68:26:68:30 | input | Unsafe deserialization depends on a $@. | A.java:67:25:67:45 | getInputStream(...) | user-provided value | -| A.java:69:17:69:35 | loadAll(...) | A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:69:30:69:34 | input | Unsafe deserialization depends on a $@. | A.java:67:25:67:45 | getInputStream(...) | user-provided value | -| A.java:70:17:70:56 | parse(...) | A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:70:28:70:55 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:67:25:67:45 | getInputStream(...) | user-provided value | -| A.java:71:12:71:38 | loadAs(...) | A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:71:24:71:28 | input | Unsafe deserialization depends on a $@. | A.java:67:25:67:45 | getInputStream(...) | user-provided value | -| A.java:72:12:72:61 | loadAs(...) | A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:72:24:72:51 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:67:25:67:45 | getInputStream(...) | user-provided value | -| A.java:78:16:78:31 | load(...) | A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:78:26:78:30 | input | Unsafe deserialization depends on a $@. | A.java:77:25:77:45 | getInputStream(...) | user-provided value | -| A.java:79:17:79:35 | loadAll(...) | A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:79:30:79:34 | input | Unsafe deserialization depends on a $@. | A.java:77:25:77:45 | getInputStream(...) | user-provided value | -| A.java:80:17:80:56 | parse(...) | A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:80:28:80:55 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:77:25:77:45 | getInputStream(...) | user-provided value | -| A.java:81:12:81:38 | loadAs(...) | A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:81:24:81:28 | input | Unsafe deserialization depends on a $@. | A.java:77:25:77:45 | getInputStream(...) | user-provided value | -| A.java:82:12:82:61 | loadAs(...) | A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:82:24:82:51 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:77:25:77:45 | getInputStream(...) | user-provided value | -| A.java:98:16:98:31 | load(...) | A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:98:26:98:30 | input | Unsafe deserialization depends on a $@. | A.java:97:25:97:45 | getInputStream(...) | user-provided value | -| A.java:99:17:99:35 | loadAll(...) | A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:99:30:99:34 | input | Unsafe deserialization depends on a $@. | A.java:97:25:97:45 | getInputStream(...) | user-provided value | -| A.java:100:17:100:56 | parse(...) | A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:100:28:100:55 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:97:25:97:45 | getInputStream(...) | user-provided value | -| A.java:101:12:101:38 | loadAs(...) | A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:101:24:101:28 | input | Unsafe deserialization depends on a $@. | A.java:97:25:97:45 | getInputStream(...) | user-provided value | -| A.java:102:12:102:61 | loadAs(...) | A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:102:24:102:51 | new InputStreamReader(...) | Unsafe deserialization depends on a $@. | A.java:97:25:97:45 | getInputStream(...) | user-provided value | -| B.java:8:12:8:46 | parseObject(...) | B.java:7:31:7:51 | getInputStream(...) : InputStream | B.java:8:29:8:39 | inputStream | Unsafe deserialization depends on a $@. | B.java:7:31:7:51 | getInputStream(...) | user-provided value | -| B.java:15:12:15:28 | parse(...) | B.java:12:31:12:51 | getInputStream(...) : InputStream | B.java:15:23:15:27 | bytes | Unsafe deserialization depends on a $@. | B.java:12:31:12:51 | getInputStream(...) | user-provided value | -| B.java:23:12:23:30 | parseObject(...) | B.java:19:31:19:51 | getInputStream(...) : InputStream | B.java:23:29:23:29 | s | Unsafe deserialization depends on a $@. | B.java:19:31:19:51 | getInputStream(...) | user-provided value | -| B.java:31:12:31:24 | parse(...) | B.java:27:31:27:51 | getInputStream(...) : InputStream | B.java:31:23:31:23 | s | Unsafe deserialization depends on a $@. | B.java:27:31:27:51 | getInputStream(...) | user-provided value | -| C.java:24:3:24:17 | load(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:24:13:24:16 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:25:3:25:23 | loadStream(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:25:19:25:22 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:26:3:26:43 | loadStreamOfType(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:26:25:26:28 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:27:3:27:35 | loadType(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:27:17:27:20 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:30:3:30:23 | load(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:30:19:30:22 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:31:3:31:29 | loadStream(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:31:25:31:28 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:32:3:32:49 | loadStreamOfType(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:32:31:32:34 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:33:3:33:41 | loadType(...) | C.java:23:17:23:44 | getParameter(...) : String | C.java:33:23:33:26 | data | Unsafe deserialization depends on a $@. | C.java:23:17:23:44 | getParameter(...) | user-provided value | -| C.java:43:3:43:29 | jsonToJava(...) | C.java:38:17:38:44 | getParameter(...) : String | C.java:43:25:43:28 | data | Unsafe deserialization depends on a $@. | C.java:38:17:38:44 | getParameter(...) | user-provided value | -| C.java:46:3:46:17 | readObject(...) | C.java:38:17:38:44 | getParameter(...) : String | C.java:46:3:46:4 | jr | Unsafe deserialization depends on a $@. | C.java:38:17:38:44 | getParameter(...) | user-provided value | -| C.java:53:3:53:10 | read(...) | C.java:51:17:51:44 | getParameter(...) : String | C.java:53:3:53:3 | r | Unsafe deserialization depends on a $@. | C.java:51:17:51:44 | getParameter(...) | user-provided value | -| C.java:54:3:54:22 | read(...) | C.java:51:17:51:44 | getParameter(...) : String | C.java:54:3:54:3 | r | Unsafe deserialization depends on a $@. | C.java:51:17:51:44 | getParameter(...) | user-provided value | -| C.java:55:3:55:36 | read(...) | C.java:51:17:51:44 | getParameter(...) : String | C.java:55:3:55:3 | r | Unsafe deserialization depends on a $@. | C.java:51:17:51:44 | getParameter(...) | user-provided value | -| C.java:63:3:63:27 | readObject(...) | C.java:60:18:60:45 | getParameter(...) : String | C.java:63:3:63:14 | hessianInput | Unsafe deserialization depends on a $@. | C.java:60:18:60:45 | getParameter(...) | user-provided value | -| C.java:64:3:64:39 | readObject(...) | C.java:60:18:60:45 | getParameter(...) : String | C.java:64:3:64:14 | hessianInput | Unsafe deserialization depends on a $@. | C.java:60:18:60:45 | getParameter(...) | user-provided value | -| C.java:72:3:72:27 | readObject(...) | C.java:69:18:69:45 | getParameter(...) : String | C.java:72:3:72:14 | hessianInput | Unsafe deserialization depends on a $@. | C.java:69:18:69:45 | getParameter(...) | user-provided value | -| C.java:73:3:73:39 | readObject(...) | C.java:69:18:69:45 | getParameter(...) : String | C.java:73:3:73:14 | hessianInput | Unsafe deserialization depends on a $@. | C.java:69:18:69:45 | getParameter(...) | user-provided value | -| C.java:79:3:79:72 | unmarshal(...) | C.java:79:43:79:70 | getParameter(...) : String | C.java:79:26:79:71 | new StringReader(...) | Unsafe deserialization depends on a $@. | C.java:79:43:79:70 | getParameter(...) | user-provided value | -| C.java:87:3:87:26 | readObject(...) | C.java:84:27:84:54 | getParameter(...) : String | C.java:87:3:87:13 | burlapInput | Unsafe deserialization depends on a $@. | C.java:84:27:84:54 | getParameter(...) | user-provided value | -| C.java:91:3:91:27 | readObject(...) | C.java:84:27:84:54 | getParameter(...) : String | C.java:91:3:91:14 | burlapInput1 | Unsafe deserialization depends on a $@. | C.java:84:27:84:54 | getParameter(...) | user-provided value | -| FlexjsonServlet.java:36:28:36:68 | deserialize(...) | FlexjsonServlet.java:36:53:36:67 | getReader(...) | FlexjsonServlet.java:36:53:36:67 | getReader(...) | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:36:53:36:67 | getReader(...) | user-provided value | -| FlexjsonServlet.java:44:28:44:68 | deserialize(...) | FlexjsonServlet.java:44:53:44:67 | getReader(...) | FlexjsonServlet.java:44:53:44:67 | getReader(...) | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:44:53:44:67 | getReader(...) | user-provided value | -| FlexjsonServlet.java:52:28:52:82 | deserialize(...) | FlexjsonServlet.java:52:53:52:67 | getReader(...) | FlexjsonServlet.java:52:53:52:67 | getReader(...) | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:52:53:52:67 | getReader(...) | user-provided value | -| FlexjsonServlet.java:68:25:68:131 | deserialize(...) | FlexjsonServlet.java:67:23:67:46 | getParameter(...) : String | FlexjsonServlet.java:68:127:68:130 | json | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:67:23:67:46 | getParameter(...) | user-provided value | -| FlexjsonServlet.java:80:25:80:97 | deserialize(...) | FlexjsonServlet.java:79:23:79:46 | getParameter(...) : String | FlexjsonServlet.java:80:93:80:96 | json | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:79:23:79:46 | getParameter(...) | user-provided value | -| FlexjsonServlet.java:124:25:124:54 | deserialize(...) | FlexjsonServlet.java:119:23:119:46 | getParameter(...) : String | FlexjsonServlet.java:124:50:124:53 | json | Unsafe deserialization depends on a $@. | FlexjsonServlet.java:119:23:119:46 | getParameter(...) | user-provided value | -| GsonServlet.java:44:26:44:66 | fromJson(...) | GsonServlet.java:39:23:39:46 | getParameter(...) : String | GsonServlet.java:44:40:44:43 | json | Unsafe deserialization depends on a $@. | GsonServlet.java:39:23:39:46 | getParameter(...) | user-provided value | -| GsonServlet.java:60:26:60:66 | fromJson(...) | GsonServlet.java:53:23:53:46 | getParameter(...) : String | GsonServlet.java:60:40:60:43 | json | Unsafe deserialization depends on a $@. | GsonServlet.java:53:23:53:46 | getParameter(...) | user-provided value | -| JabsorbServlet.java:102:32:102:93 | unmarshall(...) | JabsorbServlet.java:89:23:89:46 | getParameter(...) : String | JabsorbServlet.java:102:83:102:92 | jsonObject | Unsafe deserialization depends on a $@. | JabsorbServlet.java:89:23:89:46 | getParameter(...) | user-provided value | -| JabsorbServlet.java:116:32:116:56 | fromJSON(...) | JabsorbServlet.java:110:23:110:46 | getParameter(...) : String | JabsorbServlet.java:116:52:116:55 | json | Unsafe deserialization depends on a $@. | JabsorbServlet.java:110:23:110:46 | getParameter(...) | user-provided value | -| JacksonTest.java:76:13:76:50 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:76:30:76:35 | string | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:85:13:85:52 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:85:30:85:35 | string | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:94:13:94:48 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:94:30:94:35 | string | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:142:13:142:47 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:142:30:142:35 | string | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:151:13:151:80 | readValues(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:151:31:151:68 | createParser(...) | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:160:13:160:66 | treeToValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:160:32:160:54 | readTree(...) | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:172:13:172:41 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:172:30:172:33 | data | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JacksonTest.java:183:13:183:61 | readValue(...) | JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:183:30:183:33 | data | Unsafe deserialization depends on a $@. | JacksonTest.java:20:25:20:47 | getInputStream(...) | user-provided value | -| JoddJsonServlet.java:45:24:45:47 | parse(...) | JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:45:37:45:40 | json | Unsafe deserialization depends on a $@. | JoddJsonServlet.java:32:23:32:46 | getParameter(...) | user-provided value | -| JoddJsonServlet.java:47:13:47:66 | parse(...) | JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:47:56:47:59 | json | Unsafe deserialization depends on a $@. | JoddJsonServlet.java:32:23:32:46 | getParameter(...) | user-provided value | -| JoddJsonServlet.java:49:13:49:77 | parse(...) | JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:49:67:49:70 | json | Unsafe deserialization depends on a $@. | JoddJsonServlet.java:32:23:32:46 | getParameter(...) | user-provided value | -| JoddJsonServlet.java:51:13:51:71 | parse(...) | JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:51:61:51:64 | json | Unsafe deserialization depends on a $@. | JoddJsonServlet.java:32:23:32:46 | getParameter(...) | user-provided value | -| JoddJsonServlet.java:63:26:63:65 | parse(...) | JoddJsonServlet.java:58:23:58:46 | getParameter(...) : String | JoddJsonServlet.java:63:39:63:42 | json | Unsafe deserialization depends on a $@. | JoddJsonServlet.java:58:23:58:46 | getParameter(...) | user-provided value | -| ObjectMessageTest.java:7:9:7:45 | getObject(...) | ObjectMessageTest.java:6:27:6:41 | message : Message | ObjectMessageTest.java:7:26:7:32 | message | Unsafe deserialization depends on a $@. | ObjectMessageTest.java:6:27:6:41 | message | user-provided value | -| ParcelableEntity.java:32:30:32:70 | fromJson(...) | GsonActivity.java:15:54:15:64 | getIntent(...) : Intent | ParcelableEntity.java:32:44:32:62 | readString(...) | Unsafe deserialization depends on a $@. | GsonActivity.java:15:54:15:64 | getIntent(...) | user-provided value | -| TestMessageBodyReader.java:22:18:22:65 | readObject(...) | TestMessageBodyReader.java:20:55:20:78 | entityStream : InputStream | TestMessageBodyReader.java:22:18:22:52 | new ObjectInputStream(...) | Unsafe deserialization depends on a $@. | TestMessageBodyReader.java:20:55:20:78 | entityStream | user-provided value | -edges -| A.java:14:31:14:51 | getInputStream(...) : InputStream | A.java:15:50:15:60 | inputStream : InputStream | provenance | Src:MaD:1 | -| A.java:14:31:14:51 | getInputStream(...) : InputStream | A.java:16:12:16:13 | in | provenance | Src:MaD:1 inputStreamWrapper | -| A.java:15:28:15:61 | new ObjectInputStream(...) : ObjectInputStream | A.java:16:12:16:13 | in | provenance | | -| A.java:15:50:15:60 | inputStream : InputStream | A.java:15:28:15:61 | new ObjectInputStream(...) : ObjectInputStream | provenance | MaD:11 | -| A.java:20:31:20:51 | getInputStream(...) : InputStream | A.java:21:50:21:60 | inputStream : InputStream | provenance | Src:MaD:1 | -| A.java:20:31:20:51 | getInputStream(...) : InputStream | A.java:22:12:22:13 | in | provenance | Src:MaD:1 inputStreamWrapper | -| A.java:21:28:21:61 | new ObjectInputStream(...) : ObjectInputStream | A.java:22:12:22:13 | in | provenance | | -| A.java:21:50:21:60 | inputStream : InputStream | A.java:21:28:21:61 | new ObjectInputStream(...) : ObjectInputStream | provenance | MaD:11 | -| A.java:32:31:32:51 | getInputStream(...) : InputStream | A.java:33:35:33:45 | inputStream : InputStream | provenance | Src:MaD:1 | -| A.java:33:20:33:46 | new XMLDecoder(...) : XMLDecoder | A.java:34:12:34:12 | d | provenance | | -| A.java:33:35:33:45 | inputStream : InputStream | A.java:33:20:33:46 | new XMLDecoder(...) : XMLDecoder | provenance | MaD:7 | -| A.java:39:31:39:51 | getInputStream(...) : InputStream | A.java:40:43:40:53 | inputStream : InputStream | provenance | Src:MaD:1 | -| A.java:40:21:40:54 | new InputStreamReader(...) : InputStreamReader | A.java:41:23:41:28 | reader | provenance | | -| A.java:40:43:40:53 | inputStream : InputStream | A.java:40:21:40:54 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:10 | -| A.java:46:19:46:50 | new Input(...) : Input | A.java:47:28:47:32 | input | provenance | | -| A.java:46:19:46:50 | new Input(...) : Input | A.java:48:34:48:38 | input | provenance | | -| A.java:46:19:46:50 | new Input(...) : Input | A.java:49:40:49:44 | input | provenance | | -| A.java:46:29:46:49 | getInputStream(...) : InputStream | A.java:46:19:46:50 | new Input(...) : Input | provenance | Src:MaD:1 MaD:5 | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:68:26:68:30 | input | provenance | Src:MaD:1 | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:69:30:69:34 | input | provenance | Src:MaD:1 | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:70:50:70:54 | input : InputStream | provenance | Src:MaD:1 | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:71:24:71:28 | input | provenance | Src:MaD:1 | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | A.java:72:46:72:50 | input : InputStream | provenance | Src:MaD:1 | -| A.java:70:50:70:54 | input : InputStream | A.java:70:28:70:55 | new InputStreamReader(...) | provenance | MaD:10 | -| A.java:72:46:72:50 | input : InputStream | A.java:72:24:72:51 | new InputStreamReader(...) | provenance | MaD:10 | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:78:26:78:30 | input | provenance | Src:MaD:1 | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:79:30:79:34 | input | provenance | Src:MaD:1 | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:80:50:80:54 | input : InputStream | provenance | Src:MaD:1 | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:81:24:81:28 | input | provenance | Src:MaD:1 | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | A.java:82:46:82:50 | input : InputStream | provenance | Src:MaD:1 | -| A.java:80:50:80:54 | input : InputStream | A.java:80:28:80:55 | new InputStreamReader(...) | provenance | MaD:10 | -| A.java:82:46:82:50 | input : InputStream | A.java:82:24:82:51 | new InputStreamReader(...) | provenance | MaD:10 | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:98:26:98:30 | input | provenance | Src:MaD:1 | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:99:30:99:34 | input | provenance | Src:MaD:1 | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:100:50:100:54 | input : InputStream | provenance | Src:MaD:1 | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:101:24:101:28 | input | provenance | Src:MaD:1 | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | A.java:102:46:102:50 | input : InputStream | provenance | Src:MaD:1 | -| A.java:100:50:100:54 | input : InputStream | A.java:100:28:100:55 | new InputStreamReader(...) | provenance | MaD:10 | -| A.java:102:46:102:50 | input : InputStream | A.java:102:24:102:51 | new InputStreamReader(...) | provenance | MaD:10 | -| B.java:7:31:7:51 | getInputStream(...) : InputStream | B.java:8:29:8:39 | inputStream | provenance | Src:MaD:1 | -| B.java:12:31:12:51 | getInputStream(...) : InputStream | B.java:14:5:14:15 | inputStream : InputStream | provenance | Src:MaD:1 | -| B.java:14:5:14:15 | inputStream : InputStream | B.java:14:22:14:26 | bytes [post update] : byte[] | provenance | MaD:9 | -| B.java:14:22:14:26 | bytes [post update] : byte[] | B.java:15:23:15:27 | bytes | provenance | | -| B.java:19:31:19:51 | getInputStream(...) : InputStream | B.java:21:5:21:15 | inputStream : InputStream | provenance | Src:MaD:1 | -| B.java:21:5:21:15 | inputStream : InputStream | B.java:21:22:21:26 | bytes [post update] : byte[] | provenance | MaD:9 | -| B.java:21:22:21:26 | bytes [post update] : byte[] | B.java:22:27:22:31 | bytes : byte[] | provenance | | -| B.java:22:16:22:32 | new String(...) : String | B.java:23:29:23:29 | s | provenance | | -| B.java:22:27:22:31 | bytes : byte[] | B.java:22:16:22:32 | new String(...) : String | provenance | MaD:13 | -| B.java:27:31:27:51 | getInputStream(...) : InputStream | B.java:29:5:29:15 | inputStream : InputStream | provenance | Src:MaD:1 | -| B.java:29:5:29:15 | inputStream : InputStream | B.java:29:22:29:26 | bytes [post update] : byte[] | provenance | MaD:9 | -| B.java:29:22:29:26 | bytes [post update] : byte[] | B.java:30:27:30:31 | bytes : byte[] | provenance | | -| B.java:30:16:30:32 | new String(...) : String | B.java:31:23:31:23 | s | provenance | | -| B.java:30:27:30:31 | bytes : byte[] | B.java:30:16:30:32 | new String(...) : String | provenance | MaD:13 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:24:13:24:16 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:25:19:25:22 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:26:25:26:28 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:27:17:27:20 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:30:19:30:22 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:31:25:31:28 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:32:31:32:34 | data | provenance | Src:MaD:3 | -| C.java:23:17:23:44 | getParameter(...) : String | C.java:33:23:33:26 | data | provenance | Src:MaD:3 | -| C.java:38:17:38:44 | getParameter(...) : String | C.java:43:25:43:28 | data | provenance | Src:MaD:3 | -| C.java:38:17:38:44 | getParameter(...) : String | C.java:45:34:45:37 | data : String | provenance | Src:MaD:3 | -| C.java:45:19:45:44 | new JsonReader(...) : JsonReader | C.java:46:3:46:4 | jr | provenance | | -| C.java:45:34:45:37 | data : String | C.java:45:19:45:44 | new JsonReader(...) : JsonReader | provenance | Config | -| C.java:51:17:51:44 | getParameter(...) : String | C.java:52:33:52:36 | data : String | provenance | Src:MaD:3 | -| C.java:52:18:52:37 | new YamlReader(...) : YamlReader | C.java:53:3:53:3 | r | provenance | | -| C.java:52:18:52:37 | new YamlReader(...) : YamlReader | C.java:54:3:54:3 | r | provenance | | -| C.java:52:18:52:37 | new YamlReader(...) : YamlReader | C.java:55:3:55:3 | r | provenance | | -| C.java:52:33:52:36 | data : String | C.java:52:18:52:37 | new YamlReader(...) : YamlReader | provenance | Config | -| C.java:60:18:60:45 | getParameter(...) : String | C.java:60:18:60:56 | getBytes(...) : byte[] | provenance | Src:MaD:3 MaD:14 | -| C.java:60:18:60:56 | getBytes(...) : byte[] | C.java:61:55:61:59 | bytes : byte[] | provenance | | -| C.java:60:18:60:56 | getBytes(...) : byte[] | C.java:62:48:62:50 | bis : ByteArrayInputStream | provenance | inputStreamWrapper | -| C.java:61:30:61:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | C.java:62:48:62:50 | bis : ByteArrayInputStream | provenance | | -| C.java:61:55:61:59 | bytes : byte[] | C.java:61:30:61:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | provenance | MaD:8 | -| C.java:62:31:62:51 | new HessianInput(...) : HessianInput | C.java:63:3:63:14 | hessianInput | provenance | | -| C.java:62:31:62:51 | new HessianInput(...) : HessianInput | C.java:64:3:64:14 | hessianInput | provenance | | -| C.java:62:48:62:50 | bis : ByteArrayInputStream | C.java:62:31:62:51 | new HessianInput(...) : HessianInput | provenance | Config | -| C.java:69:18:69:45 | getParameter(...) : String | C.java:69:18:69:56 | getBytes(...) : byte[] | provenance | Src:MaD:3 MaD:14 | -| C.java:69:18:69:56 | getBytes(...) : byte[] | C.java:70:55:70:59 | bytes : byte[] | provenance | | -| C.java:69:18:69:56 | getBytes(...) : byte[] | C.java:71:50:71:52 | bis : ByteArrayInputStream | provenance | inputStreamWrapper | -| C.java:70:30:70:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | C.java:71:50:71:52 | bis : ByteArrayInputStream | provenance | | -| C.java:70:55:70:59 | bytes : byte[] | C.java:70:30:70:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | provenance | MaD:8 | -| C.java:71:32:71:53 | new Hessian2Input(...) : Hessian2Input | C.java:72:3:72:14 | hessianInput | provenance | | -| C.java:71:32:71:53 | new Hessian2Input(...) : Hessian2Input | C.java:73:3:73:14 | hessianInput | provenance | | -| C.java:71:50:71:52 | bis : ByteArrayInputStream | C.java:71:32:71:53 | new Hessian2Input(...) : Hessian2Input | provenance | Config | -| C.java:79:43:79:70 | getParameter(...) : String | C.java:79:26:79:71 | new StringReader(...) | provenance | Src:MaD:3 MaD:12 | -| C.java:84:27:84:54 | getParameter(...) : String | C.java:84:27:84:65 | getBytes(...) : byte[] | provenance | Src:MaD:3 MaD:14 | -| C.java:84:27:84:65 | getBytes(...) : byte[] | C.java:85:54:85:67 | serializedData : byte[] | provenance | | -| C.java:84:27:84:65 | getBytes(...) : byte[] | C.java:86:45:86:46 | is : ByteArrayInputStream | provenance | inputStreamWrapper | -| C.java:85:29:85:68 | new ByteArrayInputStream(...) : ByteArrayInputStream | C.java:86:45:86:46 | is : ByteArrayInputStream | provenance | | -| C.java:85:54:85:67 | serializedData : byte[] | C.java:85:29:85:68 | new ByteArrayInputStream(...) : ByteArrayInputStream | provenance | MaD:8 | -| C.java:86:29:86:47 | new BurlapInput(...) : BurlapInput | C.java:87:3:87:13 | burlapInput | provenance | | -| C.java:86:45:86:46 | is : ByteArrayInputStream | C.java:86:29:86:47 | new BurlapInput(...) : BurlapInput | provenance | Config | -| C.java:86:45:86:46 | is : ByteArrayInputStream | C.java:90:21:90:22 | is : ByteArrayInputStream | provenance | | -| C.java:90:3:90:14 | burlapInput1 : BurlapInput | C.java:91:3:91:14 | burlapInput1 | provenance | | -| C.java:90:21:90:22 | is : ByteArrayInputStream | C.java:90:3:90:14 | burlapInput1 : BurlapInput | provenance | Config | -| FlexjsonServlet.java:67:23:67:46 | getParameter(...) : String | FlexjsonServlet.java:68:127:68:130 | json | provenance | Src:MaD:3 | -| FlexjsonServlet.java:79:23:79:46 | getParameter(...) : String | FlexjsonServlet.java:80:93:80:96 | json | provenance | Src:MaD:3 | -| FlexjsonServlet.java:119:23:119:46 | getParameter(...) : String | FlexjsonServlet.java:124:50:124:53 | json | provenance | Src:MaD:3 | -| GsonActivity.java:15:54:15:64 | getIntent(...) : Intent | ParcelableEntity.java:29:50:29:62 | parcel : Parcel | provenance | Config | -| GsonServlet.java:39:23:39:46 | getParameter(...) : String | GsonServlet.java:44:40:44:43 | json | provenance | Src:MaD:3 | -| GsonServlet.java:53:23:53:46 | getParameter(...) : String | GsonServlet.java:60:40:60:43 | json | provenance | Src:MaD:3 | -| JabsorbServlet.java:89:23:89:46 | getParameter(...) : String | JabsorbServlet.java:93:48:93:51 | json : String | provenance | Src:MaD:3 | -| JabsorbServlet.java:93:33:93:52 | new JSONObject(...) : JSONObject | JabsorbServlet.java:102:83:102:92 | jsonObject | provenance | | -| JabsorbServlet.java:93:48:93:51 | json : String | JabsorbServlet.java:93:33:93:52 | new JSONObject(...) : JSONObject | provenance | MaD:16 | -| JabsorbServlet.java:110:23:110:46 | getParameter(...) : String | JabsorbServlet.java:116:52:116:55 | json | provenance | Src:MaD:3 | -| JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | JacksonTest.java:20:54:20:58 | bytes [post update] : byte[] | provenance | Src:MaD:1 MaD:9 | -| JacksonTest.java:20:54:20:58 | bytes [post update] : byte[] | JacksonTest.java:21:46:21:50 | bytes : byte[] | provenance | | -| JacksonTest.java:21:35:21:57 | new String(...) : String | JacksonTest.java:22:28:22:35 | jexlExpr : String | provenance | | -| JacksonTest.java:21:46:21:50 | bytes : byte[] | JacksonTest.java:21:35:21:57 | new String(...) : String | provenance | MaD:13 | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:74:32:74:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:83:32:83:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:92:32:92:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:139:32:139:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:148:32:148:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:157:32:157:37 | string : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:166:32:166:36 | input : String | provenance | | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | JacksonTest.java:178:32:178:36 | input : String | provenance | | -| JacksonTest.java:74:32:74:37 | string : String | JacksonTest.java:76:30:76:35 | string | provenance | | -| JacksonTest.java:83:32:83:37 | string : String | JacksonTest.java:85:30:85:35 | string | provenance | | -| JacksonTest.java:92:32:92:37 | string : String | JacksonTest.java:94:30:94:35 | string | provenance | | -| JacksonTest.java:139:32:139:37 | string : String | JacksonTest.java:142:30:142:35 | string | provenance | | -| JacksonTest.java:148:32:148:37 | string : String | JacksonTest.java:151:62:151:67 | string : String | provenance | | -| JacksonTest.java:151:62:151:67 | string : String | JacksonTest.java:151:31:151:68 | createParser(...) | provenance | Config | -| JacksonTest.java:151:62:151:67 | string : String | JacksonTest.java:151:31:151:68 | createParser(...) | provenance | MaD:6 | -| JacksonTest.java:157:32:157:37 | string : String | JacksonTest.java:160:48:160:53 | string : String | provenance | | -| JacksonTest.java:160:48:160:53 | string : String | JacksonTest.java:160:32:160:54 | readTree(...) | provenance | Config | -| JacksonTest.java:166:32:166:36 | input : String | JacksonTest.java:167:30:167:34 | input : String | provenance | | -| JacksonTest.java:167:30:167:34 | input : String | JacksonTest.java:167:30:167:45 | split(...) : String[] | provenance | MaD:15 | -| JacksonTest.java:167:30:167:45 | split(...) : String[] | JacksonTest.java:172:30:172:33 | data | provenance | | -| JacksonTest.java:178:32:178:36 | input : String | JacksonTest.java:179:30:179:34 | input : String | provenance | | -| JacksonTest.java:179:30:179:34 | input : String | JacksonTest.java:179:30:179:45 | split(...) : String[] | provenance | MaD:15 | -| JacksonTest.java:179:30:179:45 | split(...) : String[] | JacksonTest.java:183:30:183:33 | data | provenance | | -| JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:45:37:45:40 | json | provenance | Src:MaD:3 | -| JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:47:56:47:59 | json | provenance | Src:MaD:3 | -| JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:49:67:49:70 | json | provenance | Src:MaD:3 | -| JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | JoddJsonServlet.java:51:61:51:64 | json | provenance | Src:MaD:3 | -| JoddJsonServlet.java:58:23:58:46 | getParameter(...) : String | JoddJsonServlet.java:63:39:63:42 | json | provenance | Src:MaD:3 | -| ObjectMessageTest.java:6:27:6:41 | message : Message | ObjectMessageTest.java:7:26:7:32 | message | provenance | Src:MaD:2 | -| ParcelableEntity.java:29:50:29:62 | parcel : Parcel | ParcelableEntity.java:32:44:32:49 | parcel : Parcel | provenance | | -| ParcelableEntity.java:32:44:32:49 | parcel : Parcel | ParcelableEntity.java:32:44:32:62 | readString(...) | provenance | MaD:4 | -| TestMessageBodyReader.java:20:55:20:78 | entityStream : InputStream | TestMessageBodyReader.java:22:18:22:52 | new ObjectInputStream(...) | provenance | inputStreamWrapper | -| TestMessageBodyReader.java:20:55:20:78 | entityStream : InputStream | TestMessageBodyReader.java:22:40:22:51 | entityStream : InputStream | provenance | | -| TestMessageBodyReader.java:22:40:22:51 | entityStream : InputStream | TestMessageBodyReader.java:22:18:22:52 | new ObjectInputStream(...) | provenance | MaD:11 | -models -| 1 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 2 | Source: javax.jms; MessageListener; true; onMessage; (Message); ; Parameter[0]; remote; manual | -| 3 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 4 | Summary: android.os; Parcel; false; readString; ; ; Argument[this]; ReturnValue; taint; manual | -| 5 | Summary: com.esotericsoftware.kryo.io; Input; false; Input; ; ; Argument[0]; Argument[this]; taint; manual | -| 6 | Summary: com.fasterxml.jackson.core; JsonFactory; false; createParser; ; ; Argument[0]; ReturnValue; taint; manual | -| 7 | Summary: java.beans; XMLDecoder; false; XMLDecoder; ; ; Argument[0]; Argument[this]; taint; manual | -| 8 | Summary: java.io; ByteArrayInputStream; false; ByteArrayInputStream; ; ; Argument[0]; Argument[this]; taint; manual | -| 9 | Summary: java.io; InputStream; true; read; (byte[]); ; Argument[this]; Argument[0]; taint; manual | -| 10 | Summary: java.io; InputStreamReader; false; InputStreamReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 11 | Summary: java.io; ObjectInputStream; false; ObjectInputStream; ; ; Argument[0]; Argument[this]; taint; manual | -| 12 | Summary: java.io; StringReader; false; StringReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 13 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -| 14 | Summary: java.lang; String; false; getBytes; ; ; Argument[this]; ReturnValue; taint; manual | -| 15 | Summary: java.lang; String; false; split; ; ; Argument[this]; ReturnValue; taint; manual | -| 16 | Summary: org.json; JSONObject; false; JSONObject; (String); ; Argument[0]; Argument[this]; taint; manual | -nodes -| A.java:14:31:14:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:15:28:15:61 | new ObjectInputStream(...) : ObjectInputStream | semmle.label | new ObjectInputStream(...) : ObjectInputStream | -| A.java:15:50:15:60 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| A.java:16:12:16:13 | in | semmle.label | in | -| A.java:20:31:20:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:21:28:21:61 | new ObjectInputStream(...) : ObjectInputStream | semmle.label | new ObjectInputStream(...) : ObjectInputStream | -| A.java:21:50:21:60 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| A.java:22:12:22:13 | in | semmle.label | in | -| A.java:32:31:32:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:33:20:33:46 | new XMLDecoder(...) : XMLDecoder | semmle.label | new XMLDecoder(...) : XMLDecoder | -| A.java:33:35:33:45 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| A.java:34:12:34:12 | d | semmle.label | d | -| A.java:39:31:39:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:40:21:40:54 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| A.java:40:43:40:53 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| A.java:41:23:41:28 | reader | semmle.label | reader | -| A.java:46:19:46:50 | new Input(...) : Input | semmle.label | new Input(...) : Input | -| A.java:46:29:46:49 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:47:28:47:32 | input | semmle.label | input | -| A.java:48:34:48:38 | input | semmle.label | input | -| A.java:49:40:49:44 | input | semmle.label | input | -| A.java:67:25:67:45 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:68:26:68:30 | input | semmle.label | input | -| A.java:69:30:69:34 | input | semmle.label | input | -| A.java:70:28:70:55 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:70:50:70:54 | input : InputStream | semmle.label | input : InputStream | -| A.java:71:24:71:28 | input | semmle.label | input | -| A.java:72:24:72:51 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:72:46:72:50 | input : InputStream | semmle.label | input : InputStream | -| A.java:77:25:77:45 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:78:26:78:30 | input | semmle.label | input | -| A.java:79:30:79:34 | input | semmle.label | input | -| A.java:80:28:80:55 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:80:50:80:54 | input : InputStream | semmle.label | input : InputStream | -| A.java:81:24:81:28 | input | semmle.label | input | -| A.java:82:24:82:51 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:82:46:82:50 | input : InputStream | semmle.label | input : InputStream | -| A.java:97:25:97:45 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| A.java:98:26:98:30 | input | semmle.label | input | -| A.java:99:30:99:34 | input | semmle.label | input | -| A.java:100:28:100:55 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:100:50:100:54 | input : InputStream | semmle.label | input : InputStream | -| A.java:101:24:101:28 | input | semmle.label | input | -| A.java:102:24:102:51 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| A.java:102:46:102:50 | input : InputStream | semmle.label | input : InputStream | -| B.java:7:31:7:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| B.java:8:29:8:39 | inputStream | semmle.label | inputStream | -| B.java:12:31:12:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| B.java:14:5:14:15 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| B.java:14:22:14:26 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| B.java:15:23:15:27 | bytes | semmle.label | bytes | -| B.java:19:31:19:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| B.java:21:5:21:15 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| B.java:21:22:21:26 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| B.java:22:16:22:32 | new String(...) : String | semmle.label | new String(...) : String | -| B.java:22:27:22:31 | bytes : byte[] | semmle.label | bytes : byte[] | -| B.java:23:29:23:29 | s | semmle.label | s | -| B.java:27:31:27:51 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| B.java:29:5:29:15 | inputStream : InputStream | semmle.label | inputStream : InputStream | -| B.java:29:22:29:26 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| B.java:30:16:30:32 | new String(...) : String | semmle.label | new String(...) : String | -| B.java:30:27:30:31 | bytes : byte[] | semmle.label | bytes : byte[] | -| B.java:31:23:31:23 | s | semmle.label | s | -| C.java:23:17:23:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:24:13:24:16 | data | semmle.label | data | -| C.java:25:19:25:22 | data | semmle.label | data | -| C.java:26:25:26:28 | data | semmle.label | data | -| C.java:27:17:27:20 | data | semmle.label | data | -| C.java:30:19:30:22 | data | semmle.label | data | -| C.java:31:25:31:28 | data | semmle.label | data | -| C.java:32:31:32:34 | data | semmle.label | data | -| C.java:33:23:33:26 | data | semmle.label | data | -| C.java:38:17:38:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:43:25:43:28 | data | semmle.label | data | -| C.java:45:19:45:44 | new JsonReader(...) : JsonReader | semmle.label | new JsonReader(...) : JsonReader | -| C.java:45:34:45:37 | data : String | semmle.label | data : String | -| C.java:46:3:46:4 | jr | semmle.label | jr | -| C.java:51:17:51:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:52:18:52:37 | new YamlReader(...) : YamlReader | semmle.label | new YamlReader(...) : YamlReader | -| C.java:52:33:52:36 | data : String | semmle.label | data : String | -| C.java:53:3:53:3 | r | semmle.label | r | -| C.java:54:3:54:3 | r | semmle.label | r | -| C.java:55:3:55:3 | r | semmle.label | r | -| C.java:60:18:60:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:60:18:60:56 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | -| C.java:61:30:61:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | semmle.label | new ByteArrayInputStream(...) : ByteArrayInputStream | -| C.java:61:55:61:59 | bytes : byte[] | semmle.label | bytes : byte[] | -| C.java:62:31:62:51 | new HessianInput(...) : HessianInput | semmle.label | new HessianInput(...) : HessianInput | -| C.java:62:48:62:50 | bis : ByteArrayInputStream | semmle.label | bis : ByteArrayInputStream | -| C.java:63:3:63:14 | hessianInput | semmle.label | hessianInput | -| C.java:64:3:64:14 | hessianInput | semmle.label | hessianInput | -| C.java:69:18:69:45 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:69:18:69:56 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | -| C.java:70:30:70:60 | new ByteArrayInputStream(...) : ByteArrayInputStream | semmle.label | new ByteArrayInputStream(...) : ByteArrayInputStream | -| C.java:70:55:70:59 | bytes : byte[] | semmle.label | bytes : byte[] | -| C.java:71:32:71:53 | new Hessian2Input(...) : Hessian2Input | semmle.label | new Hessian2Input(...) : Hessian2Input | -| C.java:71:50:71:52 | bis : ByteArrayInputStream | semmle.label | bis : ByteArrayInputStream | -| C.java:72:3:72:14 | hessianInput | semmle.label | hessianInput | -| C.java:73:3:73:14 | hessianInput | semmle.label | hessianInput | -| C.java:79:26:79:71 | new StringReader(...) | semmle.label | new StringReader(...) | -| C.java:79:43:79:70 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:84:27:84:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| C.java:84:27:84:65 | getBytes(...) : byte[] | semmle.label | getBytes(...) : byte[] | -| C.java:85:29:85:68 | new ByteArrayInputStream(...) : ByteArrayInputStream | semmle.label | new ByteArrayInputStream(...) : ByteArrayInputStream | -| C.java:85:54:85:67 | serializedData : byte[] | semmle.label | serializedData : byte[] | -| C.java:86:29:86:47 | new BurlapInput(...) : BurlapInput | semmle.label | new BurlapInput(...) : BurlapInput | -| C.java:86:45:86:46 | is : ByteArrayInputStream | semmle.label | is : ByteArrayInputStream | -| C.java:87:3:87:13 | burlapInput | semmle.label | burlapInput | -| C.java:90:3:90:14 | burlapInput1 : BurlapInput | semmle.label | burlapInput1 : BurlapInput | -| C.java:90:21:90:22 | is : ByteArrayInputStream | semmle.label | is : ByteArrayInputStream | -| C.java:91:3:91:14 | burlapInput1 | semmle.label | burlapInput1 | -| FlexjsonServlet.java:36:53:36:67 | getReader(...) | semmle.label | getReader(...) | -| FlexjsonServlet.java:44:53:44:67 | getReader(...) | semmle.label | getReader(...) | -| FlexjsonServlet.java:52:53:52:67 | getReader(...) | semmle.label | getReader(...) | -| FlexjsonServlet.java:67:23:67:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FlexjsonServlet.java:68:127:68:130 | json | semmle.label | json | -| FlexjsonServlet.java:79:23:79:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FlexjsonServlet.java:80:93:80:96 | json | semmle.label | json | -| FlexjsonServlet.java:119:23:119:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| FlexjsonServlet.java:124:50:124:53 | json | semmle.label | json | -| GsonActivity.java:15:54:15:64 | getIntent(...) : Intent | semmle.label | getIntent(...) : Intent | -| GsonServlet.java:39:23:39:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GsonServlet.java:44:40:44:43 | json | semmle.label | json | -| GsonServlet.java:53:23:53:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| GsonServlet.java:60:40:60:43 | json | semmle.label | json | -| JabsorbServlet.java:89:23:89:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JabsorbServlet.java:93:33:93:52 | new JSONObject(...) : JSONObject | semmle.label | new JSONObject(...) : JSONObject | -| JabsorbServlet.java:93:48:93:51 | json : String | semmle.label | json : String | -| JabsorbServlet.java:102:83:102:92 | jsonObject | semmle.label | jsonObject | -| JabsorbServlet.java:110:23:110:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JabsorbServlet.java:116:52:116:55 | json | semmle.label | json | -| JacksonTest.java:20:25:20:47 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| JacksonTest.java:20:54:20:58 | bytes [post update] : byte[] | semmle.label | bytes [post update] : byte[] | -| JacksonTest.java:21:35:21:57 | new String(...) : String | semmle.label | new String(...) : String | -| JacksonTest.java:21:46:21:50 | bytes : byte[] | semmle.label | bytes : byte[] | -| JacksonTest.java:22:28:22:35 | jexlExpr : String | semmle.label | jexlExpr : String | -| JacksonTest.java:74:32:74:37 | string : String | semmle.label | string : String | -| JacksonTest.java:76:30:76:35 | string | semmle.label | string | -| JacksonTest.java:83:32:83:37 | string : String | semmle.label | string : String | -| JacksonTest.java:85:30:85:35 | string | semmle.label | string | -| JacksonTest.java:92:32:92:37 | string : String | semmle.label | string : String | -| JacksonTest.java:94:30:94:35 | string | semmle.label | string | -| JacksonTest.java:139:32:139:37 | string : String | semmle.label | string : String | -| JacksonTest.java:142:30:142:35 | string | semmle.label | string | -| JacksonTest.java:148:32:148:37 | string : String | semmle.label | string : String | -| JacksonTest.java:151:31:151:68 | createParser(...) | semmle.label | createParser(...) | -| JacksonTest.java:151:62:151:67 | string : String | semmle.label | string : String | -| JacksonTest.java:157:32:157:37 | string : String | semmle.label | string : String | -| JacksonTest.java:160:32:160:54 | readTree(...) | semmle.label | readTree(...) | -| JacksonTest.java:160:48:160:53 | string : String | semmle.label | string : String | -| JacksonTest.java:166:32:166:36 | input : String | semmle.label | input : String | -| JacksonTest.java:167:30:167:34 | input : String | semmle.label | input : String | -| JacksonTest.java:167:30:167:45 | split(...) : String[] | semmle.label | split(...) : String[] | -| JacksonTest.java:172:30:172:33 | data | semmle.label | data | -| JacksonTest.java:178:32:178:36 | input : String | semmle.label | input : String | -| JacksonTest.java:179:30:179:34 | input : String | semmle.label | input : String | -| JacksonTest.java:179:30:179:45 | split(...) : String[] | semmle.label | split(...) : String[] | -| JacksonTest.java:183:30:183:33 | data | semmle.label | data | -| JoddJsonServlet.java:32:23:32:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JoddJsonServlet.java:45:37:45:40 | json | semmle.label | json | -| JoddJsonServlet.java:47:56:47:59 | json | semmle.label | json | -| JoddJsonServlet.java:49:67:49:70 | json | semmle.label | json | -| JoddJsonServlet.java:51:61:51:64 | json | semmle.label | json | -| JoddJsonServlet.java:58:23:58:46 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JoddJsonServlet.java:63:39:63:42 | json | semmle.label | json | -| ObjectMessageTest.java:6:27:6:41 | message : Message | semmle.label | message : Message | -| ObjectMessageTest.java:7:26:7:32 | message | semmle.label | message | -| ParcelableEntity.java:29:50:29:62 | parcel : Parcel | semmle.label | parcel : Parcel | -| ParcelableEntity.java:32:44:32:49 | parcel : Parcel | semmle.label | parcel : Parcel | -| ParcelableEntity.java:32:44:32:62 | readString(...) | semmle.label | readString(...) | -| TestMessageBodyReader.java:20:55:20:78 | entityStream : InputStream | semmle.label | entityStream : InputStream | -| TestMessageBodyReader.java:22:18:22:52 | new ObjectInputStream(...) | semmle.label | new ObjectInputStream(...) | -| TestMessageBodyReader.java:22:40:22:51 | entityStream : InputStream | semmle.label | entityStream : InputStream | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql new file mode 100644 index 000000000000..f4570b64ef81 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.UnsafeDeserializationQuery +import utils.test.InlineExpectationsTest + +module UnsafeDeserializationTest implements TestSig { + string getARelevantTag() { result = "unsafeDeserialization" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "unsafeDeserialization" and + exists(DataFlow::Node sink | UnsafeDeserializationFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.qlref b/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.qlref deleted file mode 100644 index c0d276968341..000000000000 --- a/java/ql/test/query-tests/security/CWE-502/UnsafeDeserialization.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-502/UnsafeDeserialization.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.expected deleted file mode 100644 index 228de5b637a3..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.expected +++ /dev/null @@ -1,105 +0,0 @@ -#select -| InsecureBasicAuthTest.java:28:4:28:7 | post | InsecureBasicAuthTest.java:25:40:25:48 | "http://" : String | InsecureBasicAuthTest.java:28:4:28:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:25:40:25:48 | "http://" | HTTP URL | -| InsecureBasicAuthTest.java:46:4:46:6 | get | InsecureBasicAuthTest.java:43:20:43:65 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuthTest.java:46:4:46:6 | get | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:43:20:43:65 | "http://www.example.com:8000/payment/retrieve" | HTTP URL | -| InsecureBasicAuthTest.java:70:4:70:7 | post | InsecureBasicAuthTest.java:66:20:66:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:70:4:70:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:66:20:66:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuthTest.java:95:4:95:7 | post | InsecureBasicAuthTest.java:90:20:90:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:95:4:95:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:90:20:90:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuthTest.java:120:4:120:7 | post | InsecureBasicAuthTest.java:117:27:117:32 | "http" : String | InsecureBasicAuthTest.java:120:4:120:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:117:27:117:32 | "http" | HTTP URL | -| InsecureBasicAuthTest.java:143:4:143:7 | post | InsecureBasicAuthTest.java:139:20:139:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:143:4:143:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:139:20:139:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuthTest.java:167:4:167:7 | post | InsecureBasicAuthTest.java:162:20:162:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:167:4:167:7 | post | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:162:20:162:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuthTest.java:192:4:192:7 | conn | InsecureBasicAuthTest.java:187:20:187:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:192:4:192:7 | conn | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:187:20:187:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" | HTTP URL | -| InsecureBasicAuthTest.java:219:4:219:7 | conn | InsecureBasicAuthTest.java:214:22:214:27 | "http" : String | InsecureBasicAuthTest.java:219:4:219:7 | conn | Insecure basic authentication from a $@. | InsecureBasicAuthTest.java:214:22:214:27 | "http" | HTTP URL | -edges -| InsecureBasicAuthTest.java:25:27:25:87 | new HttpPost(...) : HttpPost | InsecureBasicAuthTest.java:28:4:28:7 | post | provenance | | -| InsecureBasicAuthTest.java:25:40:25:48 | "http://" : String | InsecureBasicAuthTest.java:25:40:25:86 | ... + ... : String | provenance | | -| InsecureBasicAuthTest.java:25:40:25:86 | ... + ... : String | InsecureBasicAuthTest.java:25:27:25:87 | new HttpPost(...) : HttpPost | provenance | Config | -| InsecureBasicAuthTest.java:43:20:43:65 | "http://www.example.com:8000/payment/retrieve" : String | InsecureBasicAuthTest.java:44:30:44:35 | urlStr : String | provenance | | -| InsecureBasicAuthTest.java:44:18:44:36 | new HttpGet(...) : HttpGet | InsecureBasicAuthTest.java:46:4:46:6 | get | provenance | | -| InsecureBasicAuthTest.java:44:30:44:35 | urlStr : String | InsecureBasicAuthTest.java:44:18:44:36 | new HttpGet(...) : HttpGet | provenance | Config | -| InsecureBasicAuthTest.java:66:20:66:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:67:51:67:56 | uriStr : String | provenance | | -| InsecureBasicAuthTest.java:67:27:67:58 | new HttpPost(...) : HttpPost | InsecureBasicAuthTest.java:70:4:70:7 | post | provenance | | -| InsecureBasicAuthTest.java:67:40:67:57 | create(...) : URI | InsecureBasicAuthTest.java:67:27:67:58 | new HttpPost(...) : HttpPost | provenance | Config | -| InsecureBasicAuthTest.java:67:51:67:56 | uriStr : String | InsecureBasicAuthTest.java:67:40:67:57 | create(...) : URI | provenance | MaD:2 | -| InsecureBasicAuthTest.java:90:20:90:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:91:22:91:27 | uriStr : String | provenance | | -| InsecureBasicAuthTest.java:91:14:91:28 | new URI(...) : URI | InsecureBasicAuthTest.java:92:40:92:42 | uri : URI | provenance | | -| InsecureBasicAuthTest.java:91:22:91:27 | uriStr : String | InsecureBasicAuthTest.java:91:14:91:28 | new URI(...) : URI | provenance | Config | -| InsecureBasicAuthTest.java:91:22:91:27 | uriStr : String | InsecureBasicAuthTest.java:91:14:91:28 | new URI(...) : URI | provenance | MaD:1 | -| InsecureBasicAuthTest.java:92:27:92:43 | new HttpPost(...) : HttpPost | InsecureBasicAuthTest.java:95:4:95:7 | post | provenance | | -| InsecureBasicAuthTest.java:92:40:92:42 | uri : URI | InsecureBasicAuthTest.java:92:27:92:43 | new HttpPost(...) : HttpPost | provenance | Config | -| InsecureBasicAuthTest.java:117:6:117:79 | new HttpPost(...) : HttpPost | InsecureBasicAuthTest.java:120:4:120:7 | post | provenance | | -| InsecureBasicAuthTest.java:117:19:117:78 | new URI(...) : URI | InsecureBasicAuthTest.java:117:6:117:79 | new HttpPost(...) : HttpPost | provenance | Config | -| InsecureBasicAuthTest.java:117:27:117:32 | "http" : String | InsecureBasicAuthTest.java:117:19:117:78 | new URI(...) : URI | provenance | Config | -| InsecureBasicAuthTest.java:139:20:139:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:140:57:140:62 | uriStr : String | provenance | | -| InsecureBasicAuthTest.java:140:28:140:63 | new BasicHttpRequest(...) : BasicHttpRequest | InsecureBasicAuthTest.java:143:4:143:7 | post | provenance | | -| InsecureBasicAuthTest.java:140:57:140:62 | uriStr : String | InsecureBasicAuthTest.java:140:28:140:63 | new BasicHttpRequest(...) : BasicHttpRequest | provenance | Config | -| InsecureBasicAuthTest.java:162:20:162:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:163:59:163:64 | uriStr : String | provenance | | -| InsecureBasicAuthTest.java:163:30:163:71 | new BasicRequestLine(...) : BasicRequestLine | InsecureBasicAuthTest.java:164:49:164:59 | requestLine : BasicRequestLine | provenance | | -| InsecureBasicAuthTest.java:163:59:163:64 | uriStr : String | InsecureBasicAuthTest.java:163:30:163:71 | new BasicRequestLine(...) : BasicRequestLine | provenance | MaD:4 | -| InsecureBasicAuthTest.java:164:28:164:60 | new BasicHttpRequest(...) : BasicHttpRequest | InsecureBasicAuthTest.java:167:4:167:7 | post | provenance | | -| InsecureBasicAuthTest.java:164:49:164:59 | requestLine : BasicRequestLine | InsecureBasicAuthTest.java:164:28:164:60 | new BasicHttpRequest(...) : BasicHttpRequest | provenance | Config | -| InsecureBasicAuthTest.java:187:20:187:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | InsecureBasicAuthTest.java:188:22:188:27 | urlStr : String | provenance | | -| InsecureBasicAuthTest.java:188:14:188:28 | new URL(...) : URL | InsecureBasicAuthTest.java:189:49:189:51 | url : URL | provenance | | -| InsecureBasicAuthTest.java:188:22:188:27 | urlStr : String | InsecureBasicAuthTest.java:188:14:188:28 | new URL(...) : URL | provenance | Config | -| InsecureBasicAuthTest.java:188:22:188:27 | urlStr : String | InsecureBasicAuthTest.java:188:14:188:28 | new URL(...) : URL | provenance | MaD:3 | -| InsecureBasicAuthTest.java:189:29:189:68 | (...)... : HttpURLConnection | InsecureBasicAuthTest.java:192:4:192:7 | conn | provenance | | -| InsecureBasicAuthTest.java:189:49:189:51 | url : URL | InsecureBasicAuthTest.java:189:49:189:68 | openConnection(...) : URLConnection | provenance | Config | -| InsecureBasicAuthTest.java:189:49:189:68 | openConnection(...) : URLConnection | InsecureBasicAuthTest.java:189:29:189:68 | (...)... : HttpURLConnection | provenance | | -| InsecureBasicAuthTest.java:214:22:214:27 | "http" : String | InsecureBasicAuthTest.java:215:22:215:29 | protocol : String | provenance | | -| InsecureBasicAuthTest.java:215:14:215:42 | new URL(...) : URL | InsecureBasicAuthTest.java:216:49:216:51 | url : URL | provenance | | -| InsecureBasicAuthTest.java:215:22:215:29 | protocol : String | InsecureBasicAuthTest.java:215:14:215:42 | new URL(...) : URL | provenance | Config | -| InsecureBasicAuthTest.java:216:29:216:68 | (...)... : HttpURLConnection | InsecureBasicAuthTest.java:219:4:219:7 | conn | provenance | | -| InsecureBasicAuthTest.java:216:49:216:51 | url : URL | InsecureBasicAuthTest.java:216:49:216:68 | openConnection(...) : URLConnection | provenance | Config | -| InsecureBasicAuthTest.java:216:49:216:68 | openConnection(...) : URLConnection | InsecureBasicAuthTest.java:216:29:216:68 | (...)... : HttpURLConnection | provenance | | -models -| 1 | Summary: java.net; URI; false; URI; (String); ; Argument[0]; Argument[this]; taint; manual | -| 2 | Summary: java.net; URI; false; create; ; ; Argument[0]; ReturnValue; taint; manual | -| 3 | Summary: java.net; URL; false; URL; (String); ; Argument[0]; Argument[this]; taint; manual | -| 4 | Summary: org.apache.http.message; BasicRequestLine; false; BasicRequestLine; ; ; Argument[1]; Argument[this]; taint; manual | -nodes -| InsecureBasicAuthTest.java:25:27:25:87 | new HttpPost(...) : HttpPost | semmle.label | new HttpPost(...) : HttpPost | -| InsecureBasicAuthTest.java:25:40:25:48 | "http://" : String | semmle.label | "http://" : String | -| InsecureBasicAuthTest.java:25:40:25:86 | ... + ... : String | semmle.label | ... + ... : String | -| InsecureBasicAuthTest.java:28:4:28:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:43:20:43:65 | "http://www.example.com:8000/payment/retrieve" : String | semmle.label | "http://www.example.com:8000/payment/retrieve" : String | -| InsecureBasicAuthTest.java:44:18:44:36 | new HttpGet(...) : HttpGet | semmle.label | new HttpGet(...) : HttpGet | -| InsecureBasicAuthTest.java:44:30:44:35 | urlStr : String | semmle.label | urlStr : String | -| InsecureBasicAuthTest.java:46:4:46:6 | get | semmle.label | get | -| InsecureBasicAuthTest.java:66:20:66:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuthTest.java:67:27:67:58 | new HttpPost(...) : HttpPost | semmle.label | new HttpPost(...) : HttpPost | -| InsecureBasicAuthTest.java:67:40:67:57 | create(...) : URI | semmle.label | create(...) : URI | -| InsecureBasicAuthTest.java:67:51:67:56 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuthTest.java:70:4:70:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:90:20:90:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuthTest.java:91:14:91:28 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| InsecureBasicAuthTest.java:91:22:91:27 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuthTest.java:92:27:92:43 | new HttpPost(...) : HttpPost | semmle.label | new HttpPost(...) : HttpPost | -| InsecureBasicAuthTest.java:92:40:92:42 | uri : URI | semmle.label | uri : URI | -| InsecureBasicAuthTest.java:95:4:95:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:117:6:117:79 | new HttpPost(...) : HttpPost | semmle.label | new HttpPost(...) : HttpPost | -| InsecureBasicAuthTest.java:117:19:117:78 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| InsecureBasicAuthTest.java:117:27:117:32 | "http" : String | semmle.label | "http" : String | -| InsecureBasicAuthTest.java:120:4:120:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:139:20:139:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuthTest.java:140:28:140:63 | new BasicHttpRequest(...) : BasicHttpRequest | semmle.label | new BasicHttpRequest(...) : BasicHttpRequest | -| InsecureBasicAuthTest.java:140:57:140:62 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuthTest.java:143:4:143:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:162:20:162:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuthTest.java:163:30:163:71 | new BasicRequestLine(...) : BasicRequestLine | semmle.label | new BasicRequestLine(...) : BasicRequestLine | -| InsecureBasicAuthTest.java:163:59:163:64 | uriStr : String | semmle.label | uriStr : String | -| InsecureBasicAuthTest.java:164:28:164:60 | new BasicHttpRequest(...) : BasicHttpRequest | semmle.label | new BasicHttpRequest(...) : BasicHttpRequest | -| InsecureBasicAuthTest.java:164:49:164:59 | requestLine : BasicRequestLine | semmle.label | requestLine : BasicRequestLine | -| InsecureBasicAuthTest.java:167:4:167:7 | post | semmle.label | post | -| InsecureBasicAuthTest.java:187:20:187:69 | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | semmle.label | "http://www.example.com/rest/getuser.do?uid=abcdx" : String | -| InsecureBasicAuthTest.java:188:14:188:28 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| InsecureBasicAuthTest.java:188:22:188:27 | urlStr : String | semmle.label | urlStr : String | -| InsecureBasicAuthTest.java:189:29:189:68 | (...)... : HttpURLConnection | semmle.label | (...)... : HttpURLConnection | -| InsecureBasicAuthTest.java:189:49:189:51 | url : URL | semmle.label | url : URL | -| InsecureBasicAuthTest.java:189:49:189:68 | openConnection(...) : URLConnection | semmle.label | openConnection(...) : URLConnection | -| InsecureBasicAuthTest.java:192:4:192:7 | conn | semmle.label | conn | -| InsecureBasicAuthTest.java:214:22:214:27 | "http" : String | semmle.label | "http" : String | -| InsecureBasicAuthTest.java:215:14:215:42 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| InsecureBasicAuthTest.java:215:22:215:29 | protocol : String | semmle.label | protocol : String | -| InsecureBasicAuthTest.java:216:29:216:68 | (...)... : HttpURLConnection | semmle.label | (...)... : HttpURLConnection | -| InsecureBasicAuthTest.java:216:49:216:51 | url : URL | semmle.label | url : URL | -| InsecureBasicAuthTest.java:216:49:216:68 | openConnection(...) : URLConnection | semmle.label | openConnection(...) : URLConnection | -| InsecureBasicAuthTest.java:219:4:219:7 | conn | semmle.label | conn | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.qlref b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.qlref deleted file mode 100644 index 053e0f22a26b..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-522/InsecureBasicAuth.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/options b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/options deleted file mode 100644 index 7eaf4cb235f4..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-http-4.4.13 diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.java b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java similarity index 96% rename from java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.java rename to java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java index c174c9643de4..2098dd4139cb 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuth/InsecureBasicAuthTest.java +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.java @@ -22,10 +22,10 @@ public void testApacheHttpRequest(String username, String password) { byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); { - HttpRequestBase post = new HttpPost("http://" + host + "/rest/getuser.do?uid=abcdx"); // $ Source + HttpRequestBase post = new HttpPost("http://" + host + "/rest/getuser.do?uid=abcdx"); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { HttpRequestBase post = new HttpPost("https://" + host + "/rest/getuser.do?uid=abcdx"); @@ -40,10 +40,10 @@ public void testApacheHttpRequest(String username, String password) { */ public void testApacheHttpRequest2(String url) throws java.io.IOException { { - String urlStr = "http://www.example.com:8000/payment/retrieve"; // $ Source + String urlStr = "http://www.example.com:8000/payment/retrieve"; HttpGet get = new HttpGet(urlStr); get.setHeader("Accept", "application/json"); - get.setHeader("Authorization", // $ Alert + get.setHeader("Authorization", // $hasInsecureBasicAuth "Basic " + new String(Base64.getEncoder().encode("admin:test".getBytes()))); } { @@ -63,11 +63,11 @@ public void testApacheHttpRequest3(String username, String password) { byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; // $ Source + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; HttpRequestBase post = new HttpPost(URI.create(uriStr)); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; @@ -87,12 +87,12 @@ public void testApacheHttpRequest4(String username, String password) throws Exce byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; // $ Source + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; URI uri = new URI(uriStr); HttpRequestBase post = new HttpPost(uri); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; @@ -114,10 +114,10 @@ public void testApacheHttpRequest5(String username, String password) throws Exce String authStringEnc = new String(authEncBytes); { HttpRequestBase post = - new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); // $ Source + new HttpPost(new URI("http", "www.example.com", "/test", "abc=123", null)); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { HttpRequestBase post = @@ -136,11 +136,11 @@ public void testApacheHttpRequest6(String username, String password) { byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; // $ Source + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; BasicHttpRequest post = new BasicHttpRequest("POST", uriStr); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; @@ -159,12 +159,12 @@ public void testApacheHttpRequest7(String username, String password) { byte[] authEncBytes = Base64.getEncoder().encode(authString.getBytes()); String authStringEnc = new String(authEncBytes); { - String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; // $ Source + String uriStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; RequestLine requestLine = new BasicRequestLine("POST", uriStr, null); BasicHttpRequest post = new BasicHttpRequest(requestLine); post.setHeader("Accept", "application/json"); post.setHeader("Content-type", "application/json"); - post.addHeader("Authorization", "Basic " + authStringEnc); // $ Alert + post.addHeader("Authorization", "Basic " + authStringEnc); // $hasInsecureBasicAuth } { String uriStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; @@ -184,12 +184,12 @@ public void testHttpUrlConnection(String username, String password) throws Excep String authString = username + ":" + password; String encoding = Base64.getEncoder().encodeToString(authString.getBytes("UTF-8")); { - String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; // $ Source + String urlStr = "http://www.example.com/rest/getuser.do?uid=abcdx"; URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); // $ Alert + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth } { String urlStr = "https://www.example.com/rest/getuser.do?uid=abcdx"; @@ -211,12 +211,12 @@ public void testHttpUrlConnection2(String username, String password) throws Exce String host = "www.example.com"; String path = "/rest/getuser.do?uid=abcdx"; { - String protocol = "http"; // $ Source + String protocol = "http"; URL url = new URL(protocol, host, path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); - conn.setRequestProperty("Authorization", "Basic " + encoding); // $ Alert + conn.setRequestProperty("Authorization", "Basic " + encoding); // $hasInsecureBasicAuth } { String protocol = "https"; diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql new file mode 100644 index 000000000000..d3e99009eeec --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-522/InsecureBasicAuthTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.InsecureBasicAuthQuery +import utils.test.InlineExpectationsTest + +module HasInsecureBasicAuthTest implements TestSig { + string getARelevantTag() { result = "hasInsecureBasicAuth" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasInsecureBasicAuth" and + exists(DataFlow::Node sink | InsecureBasicAuthFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuth.java b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth.java similarity index 94% rename from java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuth.java rename to java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth.java index 1ed8a7f35899..d769258a6119 100644 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuth.java +++ b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth.java @@ -8,7 +8,7 @@ public class InsecureLdapAuth { // BAD - Test LDAP authentication in cleartext using `DirContext`. public void testCleartextLdapAuth(String ldapUserName, String password) throws Exception { - String ldapUrl = "ldap://ad.your-server.com:389"; // $ Source + String ldapUrl = "ldap://ad.your-server.com:389"; Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); @@ -17,12 +17,12 @@ public void testCleartextLdapAuth(String ldapUserName, String password) throws E environment.put(Context.SECURITY_AUTHENTICATION, "simple"); environment.put(Context.SECURITY_PRINCIPAL, ldapUserName); environment.put(Context.SECURITY_CREDENTIALS, password); - DirContext dirContext = new InitialDirContext(environment); // $ Alert + DirContext dirContext = new InitialDirContext(environment); // $ hasInsecureLdapAuth } // BAD - Test LDAP authentication in cleartext using `DirContext`. public void testCleartextLdapAuth(String ldapUserName, String password, String serverName) throws Exception { - String ldapUrl = "ldap://"+serverName+":389"; // $ Source + String ldapUrl = "ldap://"+serverName+":389"; Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); @@ -31,7 +31,7 @@ public void testCleartextLdapAuth(String ldapUserName, String password, String s environment.put(Context.SECURITY_AUTHENTICATION, "simple"); environment.put(Context.SECURITY_PRINCIPAL, ldapUserName); environment.put(Context.SECURITY_CREDENTIALS, password); - DirContext dirContext = new InitialDirContext(environment); // $ Alert + DirContext dirContext = new InitialDirContext(environment); // $ hasInsecureLdapAuth } // GOOD - Test LDAP authentication over SSL. @@ -93,7 +93,7 @@ public void testCleartextLdapAuth2(String ldapUserName, String password) throws // BAD - Test LDAP authentication in cleartext using `InitialLdapContext`. public void testCleartextLdapAuth3(String ldapUserName, String password) throws Exception { - String ldapUrl = "ldap://ad.your-server.com:389"; // $ Source + String ldapUrl = "ldap://ad.your-server.com:389"; Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); @@ -102,13 +102,13 @@ public void testCleartextLdapAuth3(String ldapUserName, String password) throws environment.put(Context.SECURITY_AUTHENTICATION, "simple"); environment.put(Context.SECURITY_PRINCIPAL, ldapUserName); environment.put(Context.SECURITY_CREDENTIALS, password); - InitialLdapContext ldapContext = new InitialLdapContext(environment, null); // $ Alert + InitialLdapContext ldapContext = new InitialLdapContext(environment, null); // $ hasInsecureLdapAuth } // BAD - Test LDAP authentication in cleartext using `DirContext` and string literals. public void testCleartextLdapAuth4(String ldapUserName, String password) throws Exception { - String ldapUrl = "ldap://ad.your-server.com:389"; // $ Source + String ldapUrl = "ldap://ad.your-server.com:389"; Hashtable environment = new Hashtable(); environment.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory"); @@ -117,7 +117,7 @@ public void testCleartextLdapAuth4(String ldapUserName, String password) throws environment.put("java.naming.security.authentication", "simple"); environment.put("java.naming.security.principal", ldapUserName); environment.put("java.naming.security.credentials", password); - DirContext dirContext = new InitialDirContext(environment); // $ Alert + DirContext dirContext = new InitialDirContext(environment); // $ hasInsecureLdapAuth } private void setSSL(Hashtable env) { @@ -144,12 +144,12 @@ public void testCleartextLdapAuth5(String ldapUserName, String password, String // BAD - Test LDAP authentication with basic authentication. public void testCleartextLdapAuth6(String ldapUserName, String password, String serverName) throws Exception { - String ldapUrl = "ldap://"+serverName+":389"; // $ Source + String ldapUrl = "ldap://"+serverName+":389"; Hashtable environment = new Hashtable(); environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); environment.put(Context.PROVIDER_URL, ldapUrl); setBasicAuth(environment, ldapUserName, password); - DirContext dirContext = new InitialLdapContext(environment, null); // $ Alert + DirContext dirContext = new InitialLdapContext(environment, null); // $ hasInsecureLdapAuth } } diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.expected deleted file mode 100644 index 5df9a4f5c956..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.expected +++ /dev/null @@ -1,100 +0,0 @@ -#select -| InsecureLdapAuth.java:20:49:20:59 | environment | InsecureLdapAuth.java:11:20:11:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:20:49:20:59 | environment | Insecure LDAP authentication from $@. | InsecureLdapAuth.java:11:20:11:50 | "ldap://ad.your-server.com:389" | LDAP connection string | -| InsecureLdapAuth.java:34:49:34:59 | environment | InsecureLdapAuth.java:25:20:25:39 | ... + ... : String | InsecureLdapAuth.java:34:49:34:59 | environment | Insecure LDAP authentication from $@. | InsecureLdapAuth.java:25:20:25:39 | ... + ... | LDAP connection string | -| InsecureLdapAuth.java:105:59:105:69 | environment | InsecureLdapAuth.java:96:20:96:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:105:59:105:69 | environment | Insecure LDAP authentication from $@. | InsecureLdapAuth.java:96:20:96:50 | "ldap://ad.your-server.com:389" | LDAP connection string | -| InsecureLdapAuth.java:120:49:120:59 | environment | InsecureLdapAuth.java:111:20:111:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:120:49:120:59 | environment | Insecure LDAP authentication from $@. | InsecureLdapAuth.java:111:20:111:50 | "ldap://ad.your-server.com:389" | LDAP connection string | -| InsecureLdapAuth.java:153:50:153:60 | environment | InsecureLdapAuth.java:147:20:147:39 | ... + ... : String | InsecureLdapAuth.java:153:50:153:60 | environment | Insecure LDAP authentication from $@. | InsecureLdapAuth.java:147:20:147:39 | ... + ... | LDAP connection string | -edges -| InsecureLdapAuth.java:11:20:11:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:15:41:15:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:15:3:15:13 | environment : Hashtable | InsecureLdapAuth.java:20:49:20:59 | environment | provenance | | -| InsecureLdapAuth.java:15:3:15:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:20:49:20:59 | environment | provenance | | -| InsecureLdapAuth.java:15:41:15:47 | ldapUrl : String | InsecureLdapAuth.java:15:3:15:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:15:41:15:47 | ldapUrl : String | InsecureLdapAuth.java:15:3:15:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:15:41:15:47 | ldapUrl : String | InsecureLdapAuth.java:15:3:15:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:25:20:25:39 | ... + ... : String | InsecureLdapAuth.java:29:41:29:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:29:3:29:13 | environment : Hashtable | InsecureLdapAuth.java:34:49:34:59 | environment | provenance | | -| InsecureLdapAuth.java:29:3:29:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:34:49:34:59 | environment | provenance | | -| InsecureLdapAuth.java:29:41:29:47 | ldapUrl : String | InsecureLdapAuth.java:29:3:29:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:29:41:29:47 | ldapUrl : String | InsecureLdapAuth.java:29:3:29:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:29:41:29:47 | ldapUrl : String | InsecureLdapAuth.java:29:3:29:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:53:20:53:50 | "ldap://ad.your-server.com:636" : String | InsecureLdapAuth.java:57:41:57:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:57:3:57:13 | environment : Hashtable | InsecureLdapAuth.java:63:49:63:59 | environment | provenance | | -| InsecureLdapAuth.java:57:3:57:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:63:49:63:59 | environment | provenance | | -| InsecureLdapAuth.java:57:41:57:47 | ldapUrl : String | InsecureLdapAuth.java:57:3:57:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:57:41:57:47 | ldapUrl : String | InsecureLdapAuth.java:57:3:57:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:57:41:57:47 | ldapUrl : String | InsecureLdapAuth.java:57:3:57:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:68:20:68:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:72:41:72:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:72:3:72:13 | environment : Hashtable | InsecureLdapAuth.java:77:49:77:59 | environment | provenance | | -| InsecureLdapAuth.java:72:3:72:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:77:49:77:59 | environment | provenance | | -| InsecureLdapAuth.java:72:41:72:47 | ldapUrl : String | InsecureLdapAuth.java:72:3:72:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:72:41:72:47 | ldapUrl : String | InsecureLdapAuth.java:72:3:72:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:72:41:72:47 | ldapUrl : String | InsecureLdapAuth.java:72:3:72:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:96:20:96:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:100:41:100:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:100:3:100:13 | environment : Hashtable | InsecureLdapAuth.java:105:59:105:69 | environment | provenance | | -| InsecureLdapAuth.java:100:3:100:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:105:59:105:69 | environment | provenance | | -| InsecureLdapAuth.java:100:41:100:47 | ldapUrl : String | InsecureLdapAuth.java:100:3:100:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:100:41:100:47 | ldapUrl : String | InsecureLdapAuth.java:100:3:100:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:100:41:100:47 | ldapUrl : String | InsecureLdapAuth.java:100:3:100:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:111:20:111:50 | "ldap://ad.your-server.com:389" : String | InsecureLdapAuth.java:115:47:115:53 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:115:3:115:13 | environment : Hashtable | InsecureLdapAuth.java:120:49:120:59 | environment | provenance | | -| InsecureLdapAuth.java:115:3:115:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:120:49:120:59 | environment | provenance | | -| InsecureLdapAuth.java:115:47:115:53 | ldapUrl : String | InsecureLdapAuth.java:115:3:115:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:115:47:115:53 | ldapUrl : String | InsecureLdapAuth.java:115:3:115:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:115:47:115:53 | ldapUrl : String | InsecureLdapAuth.java:115:3:115:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:135:20:135:39 | ... + ... : String | InsecureLdapAuth.java:140:41:140:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:140:3:140:13 | environment : Hashtable | InsecureLdapAuth.java:142:50:142:60 | environment | provenance | | -| InsecureLdapAuth.java:140:3:140:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:142:50:142:60 | environment | provenance | | -| InsecureLdapAuth.java:140:41:140:47 | ldapUrl : String | InsecureLdapAuth.java:140:3:140:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:140:41:140:47 | ldapUrl : String | InsecureLdapAuth.java:140:3:140:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:140:41:140:47 | ldapUrl : String | InsecureLdapAuth.java:140:3:140:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -| InsecureLdapAuth.java:147:20:147:39 | ... + ... : String | InsecureLdapAuth.java:151:41:151:47 | ldapUrl : String | provenance | | -| InsecureLdapAuth.java:151:3:151:13 | environment : Hashtable | InsecureLdapAuth.java:153:50:153:60 | environment | provenance | | -| InsecureLdapAuth.java:151:3:151:13 | environment [post update] : Hashtable [] : String | InsecureLdapAuth.java:153:50:153:60 | environment | provenance | | -| InsecureLdapAuth.java:151:41:151:47 | ldapUrl : String | InsecureLdapAuth.java:151:3:151:13 | environment : Hashtable | provenance | Config | -| InsecureLdapAuth.java:151:41:151:47 | ldapUrl : String | InsecureLdapAuth.java:151:3:151:13 | environment [post update] : Hashtable [] : String | provenance | MaD:1 | -| InsecureLdapAuth.java:151:41:151:47 | ldapUrl : String | InsecureLdapAuth.java:151:3:151:13 | environment [post update] : Hashtable [] : String | provenance | MaD:2 | -models -| 1 | Summary: java.util; Dictionary; true; put; (Object,Object); ; Argument[1]; Argument[this].MapValue; value; manual | -| 2 | Summary: java.util; Map; true; put; (Object,Object); ; Argument[1]; Argument[this].MapValue; value; manual | -nodes -| InsecureLdapAuth.java:11:20:11:50 | "ldap://ad.your-server.com:389" : String | semmle.label | "ldap://ad.your-server.com:389" : String | -| InsecureLdapAuth.java:15:3:15:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:15:3:15:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:15:41:15:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:20:49:20:59 | environment | semmle.label | environment | -| InsecureLdapAuth.java:25:20:25:39 | ... + ... : String | semmle.label | ... + ... : String | -| InsecureLdapAuth.java:29:3:29:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:29:3:29:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:29:41:29:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:34:49:34:59 | environment | semmle.label | environment | -| InsecureLdapAuth.java:53:20:53:50 | "ldap://ad.your-server.com:636" : String | semmle.label | "ldap://ad.your-server.com:636" : String | -| InsecureLdapAuth.java:57:3:57:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:57:3:57:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:57:41:57:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:63:49:63:59 | environment | semmle.label | environment | -| InsecureLdapAuth.java:68:20:68:50 | "ldap://ad.your-server.com:389" : String | semmle.label | "ldap://ad.your-server.com:389" : String | -| InsecureLdapAuth.java:72:3:72:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:72:3:72:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:72:41:72:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:77:49:77:59 | environment | semmle.label | environment | -| InsecureLdapAuth.java:96:20:96:50 | "ldap://ad.your-server.com:389" : String | semmle.label | "ldap://ad.your-server.com:389" : String | -| InsecureLdapAuth.java:100:3:100:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:100:3:100:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:100:41:100:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:105:59:105:69 | environment | semmle.label | environment | -| InsecureLdapAuth.java:111:20:111:50 | "ldap://ad.your-server.com:389" : String | semmle.label | "ldap://ad.your-server.com:389" : String | -| InsecureLdapAuth.java:115:3:115:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:115:3:115:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:115:47:115:53 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:120:49:120:59 | environment | semmle.label | environment | -| InsecureLdapAuth.java:135:20:135:39 | ... + ... : String | semmle.label | ... + ... : String | -| InsecureLdapAuth.java:140:3:140:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:140:3:140:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:140:41:140:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:142:50:142:60 | environment | semmle.label | environment | -| InsecureLdapAuth.java:147:20:147:39 | ... + ... : String | semmle.label | ... + ... : String | -| InsecureLdapAuth.java:151:3:151:13 | environment : Hashtable | semmle.label | environment : Hashtable | -| InsecureLdapAuth.java:151:3:151:13 | environment [post update] : Hashtable [] : String | semmle.label | environment [post update] : Hashtable [] : String | -| InsecureLdapAuth.java:151:41:151:47 | ldapUrl : String | semmle.label | ldapUrl : String | -| InsecureLdapAuth.java:153:50:153:60 | environment | semmle.label | environment | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.qlref b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.qlref deleted file mode 100644 index 0ef383243379..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/InsecureLdapAuthTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-522/InsecureLdapAuth.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/options b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/options deleted file mode 100644 index 7eaf4cb235f4..000000000000 --- a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuth/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/apache-http-4.4.13 diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql new file mode 100644 index 000000000000..7c75f5192ed3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-522/InsecureLdapAuthTest.ql @@ -0,0 +1,20 @@ +import java +import semmle.code.java.security.InsecureLdapAuthQuery +import utils.test.InlineExpectationsTest + +module InsecureLdapAuthenticationTest implements TestSig { + string getARelevantTag() { result = "hasInsecureLdapAuth" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasInsecureLdapAuth" and + exists(DataFlow::Node sink | InsecureLdapUrlFlow::flowTo(sink) | + BasicAuthFlow::flowTo(sink) and + not RequiresSslFlow::flowTo(sink) and + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-522/options b/java/ql/test/query-tests/security/CWE-522/options new file mode 100644 index 000000000000..2e6054aac456 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-522/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/apache-http-4.4.13 diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected index 8beed804aca0..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.expected @@ -1,127 +0,0 @@ -#select -| UrlForwardTest.java:29:27:29:29 | url | UrlForwardTest.java:28:27:28:36 | url : String | UrlForwardTest.java:29:27:29:29 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:28:27:28:36 | url | user-provided value | -| UrlForwardTest.java:35:28:35:30 | url | UrlForwardTest.java:33:27:33:36 | url : String | UrlForwardTest.java:35:28:35:30 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:33:27:33:36 | url | user-provided value | -| UrlForwardTest.java:42:23:42:25 | url | UrlForwardTest.java:41:21:41:30 | url : String | UrlForwardTest.java:42:23:42:25 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:41:21:41:30 | url | user-provided value | -| UrlForwardTest.java:47:48:47:63 | ... + ... | UrlForwardTest.java:46:27:46:36 | url : String | UrlForwardTest.java:47:48:47:63 | ... + ... | Untrusted URL forward depends on a $@. | UrlForwardTest.java:46:27:46:36 | url | user-provided value | -| UrlForwardTest.java:47:61:47:63 | url | UrlForwardTest.java:46:27:46:36 | url : String | UrlForwardTest.java:47:61:47:63 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:46:27:46:36 | url | user-provided value | -| UrlForwardTest.java:63:33:63:35 | url | UrlForwardTest.java:61:19:61:28 | url : String | UrlForwardTest.java:63:33:63:35 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:61:19:61:28 | url | user-provided value | -| UrlForwardTest.java:74:33:74:62 | ... + ... | UrlForwardTest.java:72:19:72:28 | url : String | UrlForwardTest.java:74:33:74:62 | ... + ... | Untrusted URL forward depends on a $@. | UrlForwardTest.java:72:19:72:28 | url | user-provided value | -| UrlForwardTest.java:85:33:85:62 | ... + ... | UrlForwardTest.java:83:19:83:28 | url : String | UrlForwardTest.java:85:33:85:62 | ... + ... | Untrusted URL forward depends on a $@. | UrlForwardTest.java:83:19:83:28 | url | user-provided value | -| UrlForwardTest.java:109:33:109:35 | url | UrlForwardTest.java:106:19:106:32 | urlPath : String | UrlForwardTest.java:109:33:109:35 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:106:19:106:32 | urlPath | user-provided value | -| UrlForwardTest.java:148:33:148:36 | path | UrlForwardTest.java:145:17:145:63 | getServletPath(...) : String | UrlForwardTest.java:148:33:148:36 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:145:17:145:63 | getServletPath(...) | user-provided value | -| UrlForwardTest.java:161:33:161:36 | path | UrlForwardTest.java:158:17:158:63 | getServletPath(...) : String | UrlForwardTest.java:161:33:161:36 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:158:17:158:63 | getServletPath(...) | user-provided value | -| UrlForwardTest.java:193:51:193:59 | returnURL | UrlForwardTest.java:184:22:184:54 | getParameter(...) : String | UrlForwardTest.java:193:51:193:59 | returnURL | Untrusted URL forward depends on a $@. | UrlForwardTest.java:184:22:184:54 | getParameter(...) | user-provided value | -| UrlForwardTest.java:209:56:209:64 | returnURL | UrlForwardTest.java:203:22:203:54 | getParameter(...) : String | UrlForwardTest.java:209:56:209:64 | returnURL | Untrusted URL forward depends on a $@. | UrlForwardTest.java:203:22:203:54 | getParameter(...) | user-provided value | -| UrlForwardTest.java:236:53:236:56 | path | UrlForwardTest.java:232:17:232:44 | getParameter(...) : String | UrlForwardTest.java:236:53:236:56 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:232:17:232:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:247:53:247:56 | path | UrlForwardTest.java:244:17:244:44 | getParameter(...) : String | UrlForwardTest.java:247:53:247:56 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:244:17:244:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:261:53:261:76 | toString(...) | UrlForwardTest.java:255:17:255:44 | getParameter(...) : String | UrlForwardTest.java:261:53:261:76 | toString(...) | Untrusted URL forward depends on a $@. | UrlForwardTest.java:255:17:255:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:273:53:273:76 | toString(...) | UrlForwardTest.java:268:17:268:44 | getParameter(...) : String | UrlForwardTest.java:273:53:273:76 | toString(...) | Untrusted URL forward depends on a $@. | UrlForwardTest.java:268:17:268:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:284:53:284:56 | path | UrlForwardTest.java:280:17:280:44 | getParameter(...) : String | UrlForwardTest.java:284:53:284:56 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:280:17:280:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:322:54:322:57 | path | UrlForwardTest.java:319:17:319:44 | getParameter(...) : String | UrlForwardTest.java:322:54:322:57 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:319:17:319:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:365:53:365:56 | path | UrlForwardTest.java:355:17:355:44 | getParameter(...) : String | UrlForwardTest.java:365:53:365:56 | path | Untrusted URL forward depends on a $@. | UrlForwardTest.java:355:17:355:44 | getParameter(...) | user-provided value | -| UrlForwardTest.java:372:20:372:22 | url | UrlForwardTest.java:371:16:371:41 | getParameter(...) : String | UrlForwardTest.java:372:20:372:22 | url | Untrusted URL forward depends on a $@. | UrlForwardTest.java:371:16:371:41 | getParameter(...) | user-provided value | -| UrlForwardTest.java:384:27:384:56 | getParameter(...) | UrlForwardTest.java:384:27:384:56 | getParameter(...) | UrlForwardTest.java:384:27:384:56 | getParameter(...) | Untrusted URL forward depends on a $@. | UrlForwardTest.java:384:27:384:56 | getParameter(...) | user-provided value | -edges -| UrlForwardTest.java:28:27:28:36 | url : String | UrlForwardTest.java:29:27:29:29 | url | provenance | Sink:MaD:4 | -| UrlForwardTest.java:33:27:33:36 | url : String | UrlForwardTest.java:35:28:35:30 | url | provenance | Sink:MaD:5 | -| UrlForwardTest.java:41:21:41:30 | url : String | UrlForwardTest.java:42:23:42:25 | url | provenance | | -| UrlForwardTest.java:46:27:46:36 | url : String | UrlForwardTest.java:47:48:47:63 | ... + ... | provenance | Sink:MaD:4 | -| UrlForwardTest.java:46:27:46:36 | url : String | UrlForwardTest.java:47:61:47:63 | url | provenance | | -| UrlForwardTest.java:61:19:61:28 | url : String | UrlForwardTest.java:63:33:63:35 | url | provenance | Sink:MaD:2 | -| UrlForwardTest.java:72:19:72:28 | url : String | UrlForwardTest.java:74:33:74:62 | ... + ... | provenance | Sink:MaD:2 | -| UrlForwardTest.java:83:19:83:28 | url : String | UrlForwardTest.java:85:33:85:62 | ... + ... | provenance | Sink:MaD:2 | -| UrlForwardTest.java:106:19:106:32 | urlPath : String | UrlForwardTest.java:109:33:109:35 | url | provenance | Sink:MaD:2 | -| UrlForwardTest.java:145:17:145:63 | getServletPath(...) : String | UrlForwardTest.java:148:33:148:36 | path | provenance | Src:MaD:6 Sink:MaD:2 | -| UrlForwardTest.java:158:17:158:63 | getServletPath(...) : String | UrlForwardTest.java:161:33:161:36 | path | provenance | Src:MaD:6 Sink:MaD:2 | -| UrlForwardTest.java:184:22:184:54 | getParameter(...) : String | UrlForwardTest.java:193:51:193:59 | returnURL | provenance | Src:MaD:7 Sink:MaD:1 | -| UrlForwardTest.java:203:22:203:54 | getParameter(...) : String | UrlForwardTest.java:209:56:209:64 | returnURL | provenance | Src:MaD:7 Sink:MaD:2 | -| UrlForwardTest.java:232:17:232:44 | getParameter(...) : String | UrlForwardTest.java:236:53:236:56 | path | provenance | Src:MaD:7 Sink:MaD:1 | -| UrlForwardTest.java:244:17:244:44 | getParameter(...) : String | UrlForwardTest.java:247:53:247:56 | path | provenance | Src:MaD:7 Sink:MaD:1 | -| UrlForwardTest.java:255:17:255:44 | getParameter(...) : String | UrlForwardTest.java:258:53:258:56 | path : String | provenance | Src:MaD:7 | -| UrlForwardTest.java:258:24:258:57 | resolve(...) : Path | UrlForwardTest.java:258:24:258:69 | normalize(...) : Path | provenance | MaD:9 | -| UrlForwardTest.java:258:24:258:69 | normalize(...) : Path | UrlForwardTest.java:261:53:261:65 | requestedPath : Path | provenance | | -| UrlForwardTest.java:258:53:258:56 | path : String | UrlForwardTest.java:258:24:258:57 | resolve(...) : Path | provenance | MaD:10 | -| UrlForwardTest.java:261:53:261:65 | requestedPath : Path | UrlForwardTest.java:261:53:261:76 | toString(...) | provenance | MaD:11 Sink:MaD:1 | -| UrlForwardTest.java:268:17:268:44 | getParameter(...) : String | UrlForwardTest.java:270:53:270:56 | path : String | provenance | Src:MaD:7 | -| UrlForwardTest.java:270:24:270:57 | resolve(...) : Path | UrlForwardTest.java:270:24:270:69 | normalize(...) : Path | provenance | MaD:9 | -| UrlForwardTest.java:270:24:270:69 | normalize(...) : Path | UrlForwardTest.java:273:53:273:65 | requestedPath : Path | provenance | | -| UrlForwardTest.java:270:53:270:56 | path : String | UrlForwardTest.java:270:24:270:57 | resolve(...) : Path | provenance | MaD:10 | -| UrlForwardTest.java:273:53:273:65 | requestedPath : Path | UrlForwardTest.java:273:53:273:76 | toString(...) | provenance | MaD:11 Sink:MaD:1 | -| UrlForwardTest.java:280:17:280:44 | getParameter(...) : String | UrlForwardTest.java:281:28:281:31 | path : String | provenance | Src:MaD:7 | -| UrlForwardTest.java:281:10:281:41 | decode(...) : String | UrlForwardTest.java:284:53:284:56 | path | provenance | Sink:MaD:1 | -| UrlForwardTest.java:281:28:281:31 | path : String | UrlForwardTest.java:281:10:281:41 | decode(...) : String | provenance | MaD:8 | -| UrlForwardTest.java:319:17:319:44 | getParameter(...) : String | UrlForwardTest.java:322:54:322:57 | path | provenance | Src:MaD:7 Sink:MaD:1 | -| UrlForwardTest.java:355:17:355:44 | getParameter(...) : String | UrlForwardTest.java:360:29:360:32 | path : String | provenance | Src:MaD:7 | -| UrlForwardTest.java:355:17:355:44 | getParameter(...) : String | UrlForwardTest.java:365:53:365:56 | path | provenance | Src:MaD:7 Sink:MaD:1 | -| UrlForwardTest.java:360:11:360:42 | decode(...) : String | UrlForwardTest.java:360:29:360:32 | path : String | provenance | | -| UrlForwardTest.java:360:11:360:42 | decode(...) : String | UrlForwardTest.java:365:53:365:56 | path | provenance | Sink:MaD:1 | -| UrlForwardTest.java:360:29:360:32 | path : String | UrlForwardTest.java:360:11:360:42 | decode(...) : String | provenance | MaD:8 | -| UrlForwardTest.java:371:16:371:41 | getParameter(...) : String | UrlForwardTest.java:372:20:372:22 | url | provenance | Src:MaD:7 Sink:MaD:3 | -models -| 1 | Sink: javax.servlet; ServletContext; true; getRequestDispatcher; (String); ; Argument[0]; url-forward; manual | -| 2 | Sink: javax.servlet; ServletRequest; true; getRequestDispatcher; (String); ; Argument[0]; url-forward; manual | -| 3 | Sink: org.kohsuke.stapler; StaplerResponse; true; forward; (Object,String,StaplerRequest); ; Argument[1]; url-forward; manual | -| 4 | Sink: org.springframework.web.servlet; ModelAndView; false; ModelAndView; ; ; Argument[0]; url-forward; manual | -| 5 | Sink: org.springframework.web.servlet; ModelAndView; false; setViewName; ; ; Argument[0]; url-forward; manual | -| 6 | Source: javax.servlet.http; HttpServletRequest; false; getServletPath; (); ; ReturnValue; remote; manual | -| 7 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 8 | Summary: java.net; URLDecoder; false; decode; ; ; Argument[0]; ReturnValue; taint; manual | -| 9 | Summary: java.nio.file; Path; true; normalize; ; ; Argument[this]; ReturnValue; taint; manual | -| 10 | Summary: java.nio.file; Path; true; resolve; ; ; Argument[0]; ReturnValue; taint; manual | -| 11 | Summary: java.nio.file; Path; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | -nodes -| UrlForwardTest.java:28:27:28:36 | url : String | semmle.label | url : String | -| UrlForwardTest.java:29:27:29:29 | url | semmle.label | url | -| UrlForwardTest.java:33:27:33:36 | url : String | semmle.label | url : String | -| UrlForwardTest.java:35:28:35:30 | url | semmle.label | url | -| UrlForwardTest.java:41:21:41:30 | url : String | semmle.label | url : String | -| UrlForwardTest.java:42:23:42:25 | url | semmle.label | url | -| UrlForwardTest.java:46:27:46:36 | url : String | semmle.label | url : String | -| UrlForwardTest.java:47:48:47:63 | ... + ... | semmle.label | ... + ... | -| UrlForwardTest.java:47:61:47:63 | url | semmle.label | url | -| UrlForwardTest.java:61:19:61:28 | url : String | semmle.label | url : String | -| UrlForwardTest.java:63:33:63:35 | url | semmle.label | url | -| UrlForwardTest.java:72:19:72:28 | url : String | semmle.label | url : String | -| UrlForwardTest.java:74:33:74:62 | ... + ... | semmle.label | ... + ... | -| UrlForwardTest.java:83:19:83:28 | url : String | semmle.label | url : String | -| UrlForwardTest.java:85:33:85:62 | ... + ... | semmle.label | ... + ... | -| UrlForwardTest.java:106:19:106:32 | urlPath : String | semmle.label | urlPath : String | -| UrlForwardTest.java:109:33:109:35 | url | semmle.label | url | -| UrlForwardTest.java:145:17:145:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | -| UrlForwardTest.java:148:33:148:36 | path | semmle.label | path | -| UrlForwardTest.java:158:17:158:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | -| UrlForwardTest.java:161:33:161:36 | path | semmle.label | path | -| UrlForwardTest.java:184:22:184:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:193:51:193:59 | returnURL | semmle.label | returnURL | -| UrlForwardTest.java:203:22:203:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:209:56:209:64 | returnURL | semmle.label | returnURL | -| UrlForwardTest.java:232:17:232:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:236:53:236:56 | path | semmle.label | path | -| UrlForwardTest.java:244:17:244:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:247:53:247:56 | path | semmle.label | path | -| UrlForwardTest.java:255:17:255:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:258:24:258:57 | resolve(...) : Path | semmle.label | resolve(...) : Path | -| UrlForwardTest.java:258:24:258:69 | normalize(...) : Path | semmle.label | normalize(...) : Path | -| UrlForwardTest.java:258:53:258:56 | path : String | semmle.label | path : String | -| UrlForwardTest.java:261:53:261:65 | requestedPath : Path | semmle.label | requestedPath : Path | -| UrlForwardTest.java:261:53:261:76 | toString(...) | semmle.label | toString(...) | -| UrlForwardTest.java:268:17:268:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:270:24:270:57 | resolve(...) : Path | semmle.label | resolve(...) : Path | -| UrlForwardTest.java:270:24:270:69 | normalize(...) : Path | semmle.label | normalize(...) : Path | -| UrlForwardTest.java:270:53:270:56 | path : String | semmle.label | path : String | -| UrlForwardTest.java:273:53:273:65 | requestedPath : Path | semmle.label | requestedPath : Path | -| UrlForwardTest.java:273:53:273:76 | toString(...) | semmle.label | toString(...) | -| UrlForwardTest.java:280:17:280:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:281:10:281:41 | decode(...) : String | semmle.label | decode(...) : String | -| UrlForwardTest.java:281:28:281:31 | path : String | semmle.label | path : String | -| UrlForwardTest.java:284:53:284:56 | path | semmle.label | path | -| UrlForwardTest.java:319:17:319:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:322:54:322:57 | path | semmle.label | path | -| UrlForwardTest.java:355:17:355:44 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:360:11:360:42 | decode(...) : String | semmle.label | decode(...) : String | -| UrlForwardTest.java:360:29:360:32 | path : String | semmle.label | path : String | -| UrlForwardTest.java:365:53:365:56 | path | semmle.label | path | -| UrlForwardTest.java:371:16:371:41 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UrlForwardTest.java:372:20:372:22 | url | semmle.label | url | -| UrlForwardTest.java:384:27:384:56 | getParameter(...) | semmle.label | getParameter(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java index 72ccf2c3b54e..a1437a692a2f 100644 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.java @@ -25,26 +25,26 @@ public class UrlForwardTest extends HttpServlet implements Filter { // Spring `ModelAndView` test cases @GetMapping("/bad1") - public ModelAndView bad1(String url) { // $ Source - return new ModelAndView(url); // $ Alert + public ModelAndView bad1(String url) { + return new ModelAndView(url); // $ hasTaintFlow } @GetMapping("/bad2") - public ModelAndView bad2(String url) { // $ Source + public ModelAndView bad2(String url) { ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName(url); // $ Alert + modelAndView.setViewName(url); // $ hasTaintFlow return modelAndView; } // Spring `"forward:"` prefix test cases @GetMapping("/bad3") - public String bad3(String url) { // $ Source - return "forward:" + url + "/swagger-ui/index.html"; // $ Alert + public String bad3(String url) { + return "forward:" + url + "/swagger-ui/index.html"; // $ hasTaintFlow } @GetMapping("/bad4") - public ModelAndView bad4(String url) { // $ Source - ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ Alert + public ModelAndView bad4(String url) { + ModelAndView modelAndView = new ModelAndView("forward:" + url); // $ hasTaintFlow return modelAndView; } @@ -58,9 +58,9 @@ public ModelAndView redirect(String url) { // `RequestDispatcher` test cases from a Spring `GetMapping` entry point @GetMapping("/bad5") - public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { // $ Source + public void bad5(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher(url).include(request, response); // $ Alert + request.getRequestDispatcher(url).include(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -69,9 +69,9 @@ public void bad5(String url, HttpServletRequest request, HttpServletResponse res } @GetMapping("/bad6") - public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { // $ Source + public void bad6(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ Alert + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").include(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -80,9 +80,9 @@ public void bad6(String url, HttpServletRequest request, HttpServletResponse res } @GetMapping("/bad7") - public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { // $ Source + public void bad7(String url, HttpServletRequest request, HttpServletResponse response) { try { - request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ Alert + request.getRequestDispatcher("/WEB-INF/jsp/" + url + ".jsp").forward(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -103,10 +103,10 @@ public void good1(String url, HttpServletRequest request, HttpServletResponse re // BAD: appended to a prefix without path sanitization @GetMapping("/bad8") - public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) { // $ Source + public void bad8(String urlPath, HttpServletRequest request, HttpServletResponse response) { try { String url = "/pages" + urlPath; - request.getRequestDispatcher(url).forward(request, response); // $ Alert + request.getRequestDispatcher(url).forward(request, response); // $ hasTaintFlow } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { @@ -142,10 +142,10 @@ public void good2(String urlPath, HttpServletRequest request, HttpServletRespons // BAD: Request dispatcher from servlet path without check public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); // $ Source + String path = ((HttpServletRequest) request).getServletPath(); // A sample payload "/%57EB-INF/web.xml" can bypass this `startsWith` check if (path != null && !path.startsWith("/WEB-INF")) { - request.getRequestDispatcher(path).forward(request, response); // $ Alert + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow } else { chain.doFilter(request, response); } @@ -155,10 +155,10 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". public void doFilter2(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - String path = ((HttpServletRequest) request).getServletPath(); // $ Source + String path = ((HttpServletRequest) request).getServletPath(); if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getRequestDispatcher(path).forward(request, response); // $ Alert + request.getRequestDispatcher(path).forward(request, response); // $ hasTaintFlow } else { chain.doFilter(request, response); } @@ -181,7 +181,7 @@ public void doFilter3(ServletRequest request, ServletResponse response, FilterCh protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); // $ Source + String returnURL = request.getParameter("returnURL"); ServletConfig cfg = getServletConfig(); if (action.equals("Login")) { @@ -190,7 +190,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) rd.forward(request, response); } else { ServletContext sc = cfg.getServletContext(); - RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ Alert + RequestDispatcher rd = sc.getRequestDispatcher(returnURL); // $ hasTaintFlow rd.forward(request, response); } } @@ -200,13 +200,13 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); - String returnURL = request.getParameter("returnURL"); // $ Source + String returnURL = request.getParameter("returnURL"); if (action.equals("Login")) { RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp"); rd.forward(request, response); } else { - RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ Alert + RequestDispatcher rd = request.getRequestDispatcher(returnURL); // $ hasTaintFlow rd.forward(request, response); } } @@ -229,11 +229,11 @@ protected void doPut(HttpServletRequest request, HttpServletResponse response) // BAD: Request dispatcher without path traversal check protected void doHead1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); // A sample payload "/pages/welcome.jsp/../WEB-INF/web.xml" can bypass the `startsWith` check if (path.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -241,10 +241,10 @@ protected void doHead1(HttpServletRequest request, HttpServletResponse response) // the user-supplied path; could bypass check with ".." encoded as "%2e%2e". protected void doHead2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); if (path.startsWith(BASE_PATH) && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -252,36 +252,36 @@ protected void doHead2(HttpServletRequest request, HttpServletResponse response) // does not decode before normalization. protected void doHead3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); // Since not decoded before normalization, "%2e%2e" can remain in the path Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (requestedPath.startsWith(BASE_PATH)) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow } } // BAD: Request dispatcher with negation check and path normalization, but without URL decoding. protected void doHead4(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); // Since not decoded before normalization, "/%57EB-INF" can remain in the path and pass the `startsWith` check. Path requestedPath = Paths.get(BASE_PATH).resolve(path).normalize(); if (!requestedPath.startsWith("/WEB-INF") && !requestedPath.startsWith("/META-INF")) { - request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(requestedPath.toString()).forward(request, response); // $ hasTaintFlow } } // BAD: Request dispatcher with path traversal check and single URL decoding; may be vulnerable to double-encoding protected void doHead5(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); path = URLDecoder.decode(path, "UTF-8"); if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } @@ -316,10 +316,10 @@ protected void doHead7(HttpServletRequest request, HttpServletResponse response) // BAD: Request dispatcher without URL decoding before WEB-INF and path traversal checks protected void doHead8(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); if (path.contains("%")){ // incorrect check if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ Alert + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ hasTaintFlow } } } @@ -352,7 +352,7 @@ protected void doHead10(HttpServletRequest request, HttpServletResponse response // GOOD: Request dispatcher with path traversal check and URL decoding in a loop to avoid double-encoding bypass protected void doHead11(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String path = request.getParameter("path"); // $ Source + String path = request.getParameter("path"); // FP: we don't currently handle the scenario where the // `path.contains("%")` check is stored in a variable. boolean hasEncoding = path.contains("%"); @@ -362,14 +362,14 @@ protected void doHead11(HttpServletRequest request, HttpServletResponse response } if (!path.startsWith("/WEB-INF/") && !path.contains("..")) { - request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: Alert + request.getServletContext().getRequestDispatcher(path).include(request, response); // $ SPURIOUS: hasTaintFlow } } // BAD: `StaplerResponse.forward` without any checks public void generateResponse(StaplerRequest req, StaplerResponse rsp, Object obj) throws IOException, ServletException { - String url = req.getParameter("target"); // $ Source - rsp.forward(obj, url, req); // $ Alert + String url = req.getParameter("target"); + rsp.forward(obj, url, req); // $ hasTaintFlow } // QHelp example @@ -381,7 +381,7 @@ protected void doGet2(HttpServletRequest request, HttpServletResponse response) ServletContext sc = cfg.getServletContext(); // BAD: a request parameter is incorporated without validation into a URL forward - sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ Alert + sc.getRequestDispatcher(request.getParameter("target")).forward(request, response); // $ hasTaintFlow // GOOD: the request parameter is validated against a known fixed string if (VALID_FORWARD.equals(request.getParameter("target"))) { diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql new file mode 100644 index 000000000000..f7240bf0c303 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.UrlForwardQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.qlref b/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.qlref deleted file mode 100644 index 1e8912766b2c..000000000000 --- a/java/ql/test/query-tests/security/CWE-552/UrlForwardTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-552/UrlForward.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-611/CdaUtilTests.java b/java/ql/test/query-tests/security/CWE-611/CdaUtilTests.java index ca74ae93521b..6c19a8424722 100644 --- a/java/ql/test/query-tests/security/CWE-611/CdaUtilTests.java +++ b/java/ql/test/query-tests/security/CWE-611/CdaUtilTests.java @@ -7,17 +7,17 @@ public class CdaUtilTests { public void test(Socket sock) throws Exception { - InputStream is = sock.getInputStream(); // $ Source + InputStream is = sock.getInputStream(); InputSource iSrc = new InputSource(new InputStreamReader(is)); - CDAUtil.load(is); // $ Alert - CDAUtil.load(iSrc); // $ Alert - CDAUtil.load(is, (CDAUtil.ValidationHandler) null); // $ Alert - CDAUtil.load(is, (CDAUtil.LoadHandler) null); // $ Alert - CDAUtil.load(null, null, is, null); // $ Alert - CDAUtil.load(iSrc, (CDAUtil.ValidationHandler) null); // $ Alert - CDAUtil.load(iSrc, (CDAUtil.LoadHandler) null); // $ Alert - CDAUtil.load(null, null, iSrc, null); // $ Alert - CDAUtil.loadAs(is, null); // $ Alert - CDAUtil.loadAs(is, null, null); // $ Alert + CDAUtil.load(is); // $ hasTaintFlow + CDAUtil.load(iSrc); // $ hasTaintFlow + CDAUtil.load(is, (CDAUtil.ValidationHandler) null); // $ hasTaintFlow + CDAUtil.load(is, (CDAUtil.LoadHandler) null); // $ hasTaintFlow + CDAUtil.load(null, null, is, null); // $ hasTaintFlow + CDAUtil.load(iSrc, (CDAUtil.ValidationHandler) null); // $ hasTaintFlow + CDAUtil.load(iSrc, (CDAUtil.LoadHandler) null); // $ hasTaintFlow + CDAUtil.load(null, null, iSrc, null); // $ hasTaintFlow + CDAUtil.loadAs(is, null); // $ hasTaintFlow + CDAUtil.loadAs(is, null, null); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/DigesterTests.java b/java/ql/test/query-tests/security/CWE-611/DigesterTests.java index fbb3afbdd042..bace07a9b303 100644 --- a/java/ql/test/query-tests/security/CWE-611/DigesterTests.java +++ b/java/ql/test/query-tests/security/CWE-611/DigesterTests.java @@ -11,9 +11,9 @@ public class DigesterTests { @PostMapping(value = "bad") public void bad1(HttpServletRequest request, HttpServletResponse response) throws Exception { - ServletInputStream servletInputStream = request.getInputStream(); // $ Source + ServletInputStream servletInputStream = request.getInputStream(); Digester digester = new Digester(); - digester.parse(servletInputStream); // $ Alert + digester.parse(servletInputStream); // $ hasTaintFlow } @PostMapping(value = "good") diff --git a/java/ql/test/query-tests/security/CWE-611/DocumentBuilderTests.java b/java/ql/test/query-tests/security/CWE-611/DocumentBuilderTests.java index f6a8f94cbb0c..98d95686301c 100644 --- a/java/ql/test/query-tests/security/CWE-611/DocumentBuilderTests.java +++ b/java/ql/test/query-tests/security/CWE-611/DocumentBuilderTests.java @@ -11,7 +11,7 @@ class DocumentBuilderTests { public void unconfiguredParse(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void disableDTD(Socket sock) throws Exception { @@ -25,7 +25,7 @@ public void enableSecurityFeature(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert -- secure-processing by itself is + builder.parse(sock.getInputStream()); // $ hasTaintFlow -- secure-processing by itself is // insufficient } @@ -33,7 +33,7 @@ public void enableSecurityFeature2(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert -- secure-processing by itself is + builder.parse(sock.getInputStream()); // $ hasTaintFlow -- secure-processing by itself is // insufficient } @@ -41,14 +41,14 @@ public void enableDTD(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void disableSecurityFeature(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", false); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void disableExternalEntities(Socket sock) throws Exception { @@ -63,14 +63,14 @@ public void partialDisableExternalEntities(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void partialDisableExternalEntities2(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("http://xml.org/sax/features/external-general-entities", false); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void misConfigureExternalEntities1(Socket sock) throws Exception { @@ -78,7 +78,7 @@ public void misConfigureExternalEntities1(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", true); factory.setFeature("http://xml.org/sax/features/external-general-entities", false); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void misConfigureExternalEntities2(Socket sock) throws Exception { @@ -86,22 +86,22 @@ public void misConfigureExternalEntities2(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setFeature("http://xml.org/sax/features/external-general-entities", true); DocumentBuilder builder = factory.newDocumentBuilder(); - builder.parse(sock.getInputStream()); // $ Alert + builder.parse(sock.getInputStream()); // $ hasTaintFlow } public void taintedSAXInputSource1(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); - SAXSource source = new SAXSource(new InputSource(sock.getInputStream())); // $ Source - builder.parse(source.getInputSource()); // $ Alert + SAXSource source = new SAXSource(new InputSource(sock.getInputStream())); + builder.parse(source.getInputSource()); // $ hasTaintFlow } public void taintedSAXInputSource2(Socket sock) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); - StreamSource source = new StreamSource(sock.getInputStream()); // $ Source - builder.parse(SAXSource.sourceToInputSource(source)); // $ Alert - builder.parse(source.getInputStream()); // $ Alert + StreamSource source = new StreamSource(sock.getInputStream()); + builder.parse(SAXSource.sourceToInputSource(source)); // $ hasTaintFlow + builder.parse(source.getInputStream()); // $ hasTaintFlow } private static DocumentBuilderFactory getDocumentBuilderFactory() throws Exception { diff --git a/java/ql/test/query-tests/security/CWE-611/ParserHelperTests.java b/java/ql/test/query-tests/security/CWE-611/ParserHelperTests.java index 94aef644106a..6b43c224d94f 100644 --- a/java/ql/test/query-tests/security/CWE-611/ParserHelperTests.java +++ b/java/ql/test/query-tests/security/CWE-611/ParserHelperTests.java @@ -9,6 +9,6 @@ public class ParserHelperTests { @PostMapping(value = "bad4") public void bad4(HttpServletRequest request) throws Exception { - Document document = ParserHelper.loadDocument(request.getInputStream()); // $ Alert + Document document = ParserHelper.loadDocument(request.getInputStream()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/SAXBuilderTests.java b/java/ql/test/query-tests/security/CWE-611/SAXBuilderTests.java index 8458d7a5bc20..2b25540b85b6 100644 --- a/java/ql/test/query-tests/security/CWE-611/SAXBuilderTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SAXBuilderTests.java @@ -5,7 +5,7 @@ public class SAXBuilderTests { public void unconfiguredSAXBuilder(Socket sock) throws Exception { SAXBuilder builder = new SAXBuilder(); - builder.build(sock.getInputStream()); // $ Alert + builder.build(sock.getInputStream()); // $ hasTaintFlow } public void safeBuilder(Socket sock) throws Exception { @@ -17,6 +17,6 @@ public void safeBuilder(Socket sock) throws Exception { public void misConfiguredBuilder(Socket sock) throws Exception { SAXBuilder builder = new SAXBuilder(); builder.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); - builder.build(sock.getInputStream()); // $ Alert + builder.build(sock.getInputStream()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/SAXParserTests.java b/java/ql/test/query-tests/security/CWE-611/SAXParserTests.java index f726fa367017..a6de7709aed8 100644 --- a/java/ql/test/query-tests/security/CWE-611/SAXParserTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SAXParserTests.java @@ -10,7 +10,7 @@ public class SAXParserTests { public void unconfiguredParser(Socket sock) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void safeParser(Socket sock) throws Exception { @@ -27,7 +27,7 @@ public void partialConfiguredParser1(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-general-entities", false); factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void partialConfiguredParser2(Socket sock) throws Exception { @@ -35,7 +35,7 @@ public void partialConfiguredParser2(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void partialConfiguredParser3(Socket sock) throws Exception { @@ -43,7 +43,7 @@ public void partialConfiguredParser3(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-general-entities", false); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void misConfiguredParser1(Socket sock) throws Exception { @@ -52,7 +52,7 @@ public void misConfiguredParser1(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void misConfiguredParser2(Socket sock) throws Exception { @@ -61,7 +61,7 @@ public void misConfiguredParser2(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", true); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void misConfiguredParser3(Socket sock) throws Exception { @@ -70,7 +70,7 @@ public void misConfiguredParser3(Socket sock) throws Exception { factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false); factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true); SAXParser parser = factory.newSAXParser(); - parser.parse(sock.getInputStream(), new DefaultHandler()); // $ Alert + parser.parse(sock.getInputStream(), new DefaultHandler()); // $ hasTaintFlow } public void safeParser2(Socket sock) throws Exception { diff --git a/java/ql/test/query-tests/security/CWE-611/SAXReaderTests.java b/java/ql/test/query-tests/security/CWE-611/SAXReaderTests.java index c30a68c896e0..f436074f65f5 100644 --- a/java/ql/test/query-tests/security/CWE-611/SAXReaderTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SAXReaderTests.java @@ -5,7 +5,7 @@ public class SAXReaderTests { public void unconfiguredReader(Socket sock) throws Exception { SAXReader reader = new SAXReader(); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void safeReader(Socket sock) throws Exception { @@ -20,21 +20,21 @@ public void partialConfiguredReader1(Socket sock) throws Exception { SAXReader reader = new SAXReader(); reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void partialConfiguredReader2(Socket sock) throws Exception { SAXReader reader = new SAXReader(); reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void partialConfiguredReader3(Socket sock) throws Exception { SAXReader reader = new SAXReader(); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredReader1(Socket sock) throws Exception { @@ -42,7 +42,7 @@ public void misConfiguredReader1(Socket sock) throws Exception { reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); reader.setFeature("http://xml.org/sax/features/external-general-entities", true); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredReader2(Socket sock) throws Exception { @@ -50,7 +50,7 @@ public void misConfiguredReader2(Socket sock) throws Exception { reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredReader3(Socket sock) throws Exception { @@ -58,6 +58,6 @@ public void misConfiguredReader3(Socket sock) throws Exception { reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", true); - reader.read(sock.getInputStream()); // $ Alert + reader.read(sock.getInputStream()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/SAXSourceTests.java b/java/ql/test/query-tests/security/CWE-611/SAXSourceTests.java index 1bb67b310c75..721f596457de 100644 --- a/java/ql/test/query-tests/security/CWE-611/SAXSourceTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SAXSourceTests.java @@ -14,10 +14,10 @@ public class SAXSourceTests { public void unsafeSource(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); - SAXSource source = new SAXSource(reader, new InputSource(sock.getInputStream())); // $ Source + SAXSource source = new SAXSource(reader, new InputSource(sock.getInputStream())); JAXBContext jc = JAXBContext.newInstance(Object.class); Unmarshaller um = jc.createUnmarshaller(); - um.unmarshal(source); // $ Alert + um.unmarshal(source); // $ hasTaintFlow } public void explicitlySafeSource1(Socket sock) throws Exception { diff --git a/java/ql/test/query-tests/security/CWE-611/SchemaTests.java b/java/ql/test/query-tests/security/CWE-611/SchemaTests.java index 9ed251363930..d98aeb4a3bac 100644 --- a/java/ql/test/query-tests/security/CWE-611/SchemaTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SchemaTests.java @@ -9,7 +9,7 @@ public class SchemaTests { public void unconfiguredSchemaFactory(Socket sock) throws Exception { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); - Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ Alert + Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void safeSchemaFactory(Socket sock) throws Exception { @@ -22,26 +22,26 @@ public void safeSchemaFactory(Socket sock) throws Exception { public void partialConfiguredSchemaFactory1(Socket sock) throws Exception { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); - Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ Alert + Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void partialConfiguredSchemaFactory2(Socket sock) throws Exception { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); - Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ Alert + Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredSchemaFactory1(Socket sock) throws Exception { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "ab"); - Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ Alert + Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredSchemaFactory2(Socket sock) throws Exception { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "cd"); factory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); - Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ Alert + Schema schema = factory.newSchema(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/SimpleXMLTests.java b/java/ql/test/query-tests/security/CWE-611/SimpleXMLTests.java index d28ec2ca66dc..65c759acbf4a 100644 --- a/java/ql/test/query-tests/security/CWE-611/SimpleXMLTests.java +++ b/java/ql/test/query-tests/security/CWE-611/SimpleXMLTests.java @@ -11,145 +11,145 @@ public class SimpleXMLTests { public void persisterValidate1(Socket sock) throws Exception { Persister persister = new Persister(); - persister.validate(this.getClass(), sock.getInputStream()); // $ Alert + persister.validate(this.getClass(), sock.getInputStream()); // $ hasTaintFlow } public void persisterValidate2(Socket sock) throws Exception { Persister persister = new Persister(); - persister.validate(this.getClass(), sock.getInputStream(), true); // $ Alert + persister.validate(this.getClass(), sock.getInputStream(), true); // $ hasTaintFlow } public void persisterValidate3(Socket sock) throws Exception { Persister persister = new Persister(); - persister.validate(this.getClass(), new InputStreamReader(sock.getInputStream())); // $ Alert + persister.validate(this.getClass(), new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void persisterValidate4(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.validate(this.getClass(), new String(b)); // $ Alert + sock.getInputStream().read(b); + persister.validate(this.getClass(), new String(b)); // $ hasTaintFlow } public void persisterValidate5(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.validate(this.getClass(), new String(b), true); // $ Alert + sock.getInputStream().read(b); + persister.validate(this.getClass(), new String(b), true); // $ hasTaintFlow } public void persisterValidate6(Socket sock) throws Exception { Persister persister = new Persister(); - persister.validate(this.getClass(), new InputStreamReader(sock.getInputStream()), true); // $ Alert + persister.validate(this.getClass(), new InputStreamReader(sock.getInputStream()), true); // $ hasTaintFlow } public void persisterRead1(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this.getClass(), sock.getInputStream()); // $ Alert + persister.read(this.getClass(), sock.getInputStream()); // $ hasTaintFlow } public void persisterRead2(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this.getClass(), sock.getInputStream(), true); // $ Alert + persister.read(this.getClass(), sock.getInputStream(), true); // $ hasTaintFlow } public void persisterRead3(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this, sock.getInputStream()); // $ Alert + persister.read(this, sock.getInputStream()); // $ hasTaintFlow } public void persisterRead4(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this, sock.getInputStream(), true); // $ Alert + persister.read(this, sock.getInputStream(), true); // $ hasTaintFlow } public void persisterRead5(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this.getClass(), new InputStreamReader(sock.getInputStream())); // $ Alert + persister.read(this.getClass(), new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void persisterRead6(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this.getClass(), new InputStreamReader(sock.getInputStream()), true); // $ Alert + persister.read(this.getClass(), new InputStreamReader(sock.getInputStream()), true); // $ hasTaintFlow } public void persisterRead7(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this, new InputStreamReader(sock.getInputStream())); // $ Alert + persister.read(this, new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void persisterRead8(Socket sock) throws Exception { Persister persister = new Persister(); - persister.read(this, new InputStreamReader(sock.getInputStream()), true); // $ Alert + persister.read(this, new InputStreamReader(sock.getInputStream()), true); // $ hasTaintFlow } public void persisterRead9(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.read(this.getClass(), new String(b)); // $ Alert + sock.getInputStream().read(b); + persister.read(this.getClass(), new String(b)); // $ hasTaintFlow } public void persisterRead10(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.read(this.getClass(), new String(b), true); // $ Alert + sock.getInputStream().read(b); + persister.read(this.getClass(), new String(b), true); // $ hasTaintFlow } public void persisterRead11(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.read(this, new String(b)); // $ Alert + sock.getInputStream().read(b); + persister.read(this, new String(b)); // $ hasTaintFlow } public void persisterRead12(Socket sock) throws Exception { Persister persister = new Persister(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - persister.read(this, new String(b), true); // $ Alert + sock.getInputStream().read(b); + persister.read(this, new String(b), true); // $ hasTaintFlow } public void nodeBuilderRead1(Socket sock) throws Exception { - NodeBuilder.read(sock.getInputStream()); // $ Alert + NodeBuilder.read(sock.getInputStream()); // $ hasTaintFlow } public void nodeBuilderRead2(Socket sock) throws Exception { - NodeBuilder.read(new InputStreamReader(sock.getInputStream())); // $ Alert + NodeBuilder.read(new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void documentProviderProvide1(Socket sock) throws Exception { DocumentProvider provider = new DocumentProvider(); - provider.provide(sock.getInputStream()); // $ Alert + provider.provide(sock.getInputStream()); // $ hasTaintFlow } public void documentProviderProvide2(Socket sock) throws Exception { DocumentProvider provider = new DocumentProvider(); - provider.provide(new InputStreamReader(sock.getInputStream())); // $ Alert + provider.provide(new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void streamProviderProvide1(Socket sock) throws Exception { StreamProvider provider = new StreamProvider(); - provider.provide(sock.getInputStream()); // $ Alert + provider.provide(sock.getInputStream()); // $ hasTaintFlow } public void streamProviderProvide2(Socket sock) throws Exception { StreamProvider provider = new StreamProvider(); - provider.provide(new InputStreamReader(sock.getInputStream())); // $ Alert + provider.provide(new InputStreamReader(sock.getInputStream())); // $ hasTaintFlow } public void formatterFormat1(Socket sock) throws Exception { Formatter formatter = new Formatter(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - formatter.format(new String(b), null); // $ Alert + sock.getInputStream().read(b); + formatter.format(new String(b), null); // $ hasTaintFlow } public void formatterFormat2(Socket sock) throws Exception { Formatter formatter = new Formatter(); byte[] b = new byte[] {}; - sock.getInputStream().read(b); // $ Source - formatter.format(new String(b)); // $ Alert + sock.getInputStream().read(b); + formatter.format(new String(b)); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/TransformerTests.java b/java/ql/test/query-tests/security/CWE-611/TransformerTests.java index 2ad0a29b358f..afba1790f0cd 100644 --- a/java/ql/test/query-tests/security/CWE-611/TransformerTests.java +++ b/java/ql/test/query-tests/security/CWE-611/TransformerTests.java @@ -17,8 +17,8 @@ public class TransformerTests { public void unconfiguredTransformerFactory(Socket sock) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); - transformer.transform(new StreamSource(sock.getInputStream()), null); // $ Alert - tf.newTransformer(new StreamSource(sock.getInputStream())); // $ Alert + transformer.transform(new StreamSource(sock.getInputStream()), null); // $ hasTaintFlow + tf.newTransformer(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void safeTransformerFactory1(Socket sock) throws Exception { @@ -68,16 +68,16 @@ public void partialConfiguredTransformerFactory1(Socket sock) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); Transformer transformer = tf.newTransformer(); - transformer.transform(new StreamSource(sock.getInputStream()), null); // $ Alert - tf.newTransformer(new StreamSource(sock.getInputStream())); // $ Alert + transformer.transform(new StreamSource(sock.getInputStream()), null); // $ hasTaintFlow + tf.newTransformer(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void partialConfiguredTransformerFactory2(Socket sock) throws Exception { TransformerFactory tf = TransformerFactory.newInstance(); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); Transformer transformer = tf.newTransformer(); - transformer.transform(new StreamSource(sock.getInputStream()), null); // $ Alert - tf.newTransformer(new StreamSource(sock.getInputStream())); // $ Alert + transformer.transform(new StreamSource(sock.getInputStream()), null); // $ hasTaintFlow + tf.newTransformer(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredTransformerFactory1(Socket sock) throws Exception { @@ -85,8 +85,8 @@ public void misConfiguredTransformerFactory1(Socket sock) throws Exception { Transformer transformer = tf.newTransformer(); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "ab"); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - transformer.transform(new StreamSource(sock.getInputStream()), null); // $ Alert - tf.newTransformer(new StreamSource(sock.getInputStream())); // $ Alert + transformer.transform(new StreamSource(sock.getInputStream()), null); // $ hasTaintFlow + tf.newTransformer(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredTransformerFactory2(Socket sock) throws Exception { @@ -94,13 +94,13 @@ public void misConfiguredTransformerFactory2(Socket sock) throws Exception { Transformer transformer = tf.newTransformer(); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "cd"); - transformer.transform(new StreamSource(sock.getInputStream()), null); // $ Alert - tf.newTransformer(new StreamSource(sock.getInputStream())); // $ Alert + transformer.transform(new StreamSource(sock.getInputStream()), null); // $ hasTaintFlow + tf.newTransformer(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void unconfiguredSAXTransformerFactory(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); - sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ Alert + sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void safeSAXTransformerFactory(Socket sock) throws Exception { @@ -113,31 +113,31 @@ public void safeSAXTransformerFactory(Socket sock) throws Exception { public void partialConfiguredSAXTransformerFactory1(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); - sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ Alert + sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void partialConfiguredSAXTransformerFactory2(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ Alert + sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredSAXTransformerFactory1(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "ab"); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); - sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ Alert + sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredSAXTransformerFactory2(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); sf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "cd"); - sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ Alert + sf.newXMLFilter(new StreamSource(sock.getInputStream())); // $ hasTaintFlow } public void taintedSAXSource(Socket sock) throws Exception { SAXTransformerFactory sf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); - sf.newXMLFilter(new SAXSource(new InputSource(sock.getInputStream()))); // $ Alert + sf.newXMLFilter(new SAXSource(new InputSource(sock.getInputStream()))); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/UnmarshallerTests.java b/java/ql/test/query-tests/security/CWE-611/UnmarshallerTests.java index 7516c08c7d39..54efa567aa3b 100644 --- a/java/ql/test/query-tests/security/CWE-611/UnmarshallerTests.java +++ b/java/ql/test/query-tests/security/CWE-611/UnmarshallerTests.java @@ -26,6 +26,6 @@ public void unsafeUnmarshal(Socket sock) throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); JAXBContext jc = JAXBContext.newInstance(Object.class); Unmarshaller um = jc.createUnmarshaller(); - um.unmarshal(sock.getInputStream()); // $ Alert + um.unmarshal(sock.getInputStream()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/ValidatorTests.java b/java/ql/test/query-tests/security/CWE-611/ValidatorTests.java index 1464b9c5fc60..091be21676aa 100644 --- a/java/ql/test/query-tests/security/CWE-611/ValidatorTests.java +++ b/java/ql/test/query-tests/security/CWE-611/ValidatorTests.java @@ -14,12 +14,12 @@ public class ValidatorTests { @PostMapping(value = "bad") public void bad2(HttpServletRequest request) throws Exception { - ServletInputStream servletInputStream = request.getInputStream(); // $ Source + ServletInputStream servletInputStream = request.getInputStream(); SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); Schema schema = factory.newSchema(); Validator validator = schema.newValidator(); StreamSource source = new StreamSource(servletInputStream); - validator.validate(source); // $ Alert + validator.validate(source); // $ hasTaintFlow } @PostMapping(value = "good") diff --git a/java/ql/test/query-tests/security/CWE-611/XMLDecoderTests.java b/java/ql/test/query-tests/security/CWE-611/XMLDecoderTests.java index a9ced49512e0..8e75ebc14017 100644 --- a/java/ql/test/query-tests/security/CWE-611/XMLDecoderTests.java +++ b/java/ql/test/query-tests/security/CWE-611/XMLDecoderTests.java @@ -13,9 +13,9 @@ public class XMLDecoderTests { @PostMapping(value = "bad") public void bad3(HttpServletRequest request) throws Exception { - ServletInputStream servletInputStream = request.getInputStream(); // $ Source + ServletInputStream servletInputStream = request.getInputStream(); XMLDecoder xmlDecoder = new XMLDecoder(servletInputStream); - xmlDecoder.readObject(); // $ Alert + xmlDecoder.readObject(); // $ hasTaintFlow } @PostMapping(value = "good") diff --git a/java/ql/test/query-tests/security/CWE-611/XMLReaderTests.java b/java/ql/test/query-tests/security/CWE-611/XMLReaderTests.java index 7cc09df77639..15536b766b72 100644 --- a/java/ql/test/query-tests/security/CWE-611/XMLReaderTests.java +++ b/java/ql/test/query-tests/security/CWE-611/XMLReaderTests.java @@ -13,7 +13,7 @@ public class XMLReaderTests { public void unconfiguredReader(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void safeReaderFromConfig1(Socket sock) throws Exception { @@ -53,21 +53,21 @@ public void partialConfiguredXMLReader1(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void partialConfiguredXMLReader2(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void partilaConfiguredXMLReader3(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredXMLReader1(Socket sock) throws Exception { @@ -75,7 +75,7 @@ public void misConfiguredXMLReader1(Socket sock) throws Exception { reader.setFeature("http://xml.org/sax/features/external-general-entities", true); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredXMLReader2(Socket sock) throws Exception { @@ -83,7 +83,7 @@ public void misConfiguredXMLReader2(Socket sock) throws Exception { reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", true); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredXMLReader3(Socket sock) throws Exception { @@ -91,12 +91,12 @@ public void misConfiguredXMLReader3(Socket sock) throws Exception { reader.setFeature("http://xml.org/sax/features/external-general-entities", false); reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void misConfiguredXMLReader4(Socket sock) throws Exception { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false); - reader.parse(new InputSource(sock.getInputStream())); // $ Alert + reader.parse(new InputSource(sock.getInputStream())); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/XPathExpressionTests.java b/java/ql/test/query-tests/security/CWE-611/XPathExpressionTests.java index 646222545d72..088fdb9afd6e 100644 --- a/java/ql/test/query-tests/security/CWE-611/XPathExpressionTests.java +++ b/java/ql/test/query-tests/security/CWE-611/XPathExpressionTests.java @@ -24,7 +24,7 @@ public void unsafeExpressionTests(Socket sock) throws Exception { XPathFactory xFactory = XPathFactory.newInstance(); XPath path = xFactory.newXPath(); XPathExpression expr = path.compile(""); - expr.evaluate(new InputSource(sock.getInputStream())); // $ Alert + expr.evaluate(new InputSource(sock.getInputStream())); // $ hasTaintFlow } public void safeXPathEvaluateTest(Socket sock) throws Exception { @@ -39,6 +39,6 @@ public void safeXPathEvaluateTest(Socket sock) throws Exception { public void unsafeXPathEvaluateTest(Socket sock) throws Exception { XPathFactory xFactory = XPathFactory.newInstance(); XPath path = xFactory.newXPath(); - path.evaluate("", new InputSource(sock.getInputStream())); // $ Alert + path.evaluate("", new InputSource(sock.getInputStream())); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.expected b/java/ql/test/query-tests/security/CWE-611/XXE.expected index 463ea4ec8728..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-611/XXE.expected +++ b/java/ql/test/query-tests/security/CWE-611/XXE.expected @@ -1,428 +0,0 @@ -#select -| CdaUtilTests.java:12:22:12:23 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:12:22:12:23 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:13:22:13:25 | iSrc | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:13:22:13:25 | iSrc | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:14:22:14:23 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:14:22:14:23 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:15:22:15:23 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:15:22:15:23 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:16:34:16:35 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:16:34:16:35 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:17:22:17:25 | iSrc | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:17:22:17:25 | iSrc | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:18:22:18:25 | iSrc | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:18:22:18:25 | iSrc | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:19:34:19:37 | iSrc | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:19:34:19:37 | iSrc | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:20:24:20:25 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:20:24:20:25 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| CdaUtilTests.java:21:24:21:25 | is | CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:21:24:21:25 | is | XML parsing depends on a $@ without guarding against external entity expansion. | CdaUtilTests.java:10:26:10:46 | getInputStream(...) | user-provided value | -| DigesterTests.java:16:24:16:41 | servletInputStream | DigesterTests.java:14:49:14:72 | getInputStream(...) : ServletInputStream | DigesterTests.java:16:24:16:41 | servletInputStream | XML parsing depends on a $@ without guarding against external entity expansion. | DigesterTests.java:14:49:14:72 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:14:19:14:39 | getInputStream(...) | DocumentBuilderTests.java:14:19:14:39 | getInputStream(...) | DocumentBuilderTests.java:14:19:14:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:14:19:14:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:28:19:28:39 | getInputStream(...) | DocumentBuilderTests.java:28:19:28:39 | getInputStream(...) | DocumentBuilderTests.java:28:19:28:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:28:19:28:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:36:19:36:39 | getInputStream(...) | DocumentBuilderTests.java:36:19:36:39 | getInputStream(...) | DocumentBuilderTests.java:36:19:36:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:36:19:36:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:44:19:44:39 | getInputStream(...) | DocumentBuilderTests.java:44:19:44:39 | getInputStream(...) | DocumentBuilderTests.java:44:19:44:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:44:19:44:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:51:19:51:39 | getInputStream(...) | DocumentBuilderTests.java:51:19:51:39 | getInputStream(...) | DocumentBuilderTests.java:51:19:51:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:51:19:51:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:66:19:66:39 | getInputStream(...) | DocumentBuilderTests.java:66:19:66:39 | getInputStream(...) | DocumentBuilderTests.java:66:19:66:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:66:19:66:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:73:19:73:39 | getInputStream(...) | DocumentBuilderTests.java:73:19:73:39 | getInputStream(...) | DocumentBuilderTests.java:73:19:73:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:73:19:73:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:81:19:81:39 | getInputStream(...) | DocumentBuilderTests.java:81:19:81:39 | getInputStream(...) | DocumentBuilderTests.java:81:19:81:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:81:19:81:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:89:19:89:39 | getInputStream(...) | DocumentBuilderTests.java:89:19:89:39 | getInputStream(...) | DocumentBuilderTests.java:89:19:89:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:89:19:89:39 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:96:19:96:41 | getInputSource(...) | DocumentBuilderTests.java:95:54:95:74 | getInputStream(...) : InputStream | DocumentBuilderTests.java:96:19:96:41 | getInputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:95:54:95:74 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:103:19:103:55 | sourceToInputSource(...) | DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) : InputStream | DocumentBuilderTests.java:103:19:103:55 | sourceToInputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) | user-provided value | -| DocumentBuilderTests.java:104:19:104:41 | getInputStream(...) | DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) : InputStream | DocumentBuilderTests.java:104:19:104:41 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) | user-provided value | -| ParserHelperTests.java:12:55:12:78 | getInputStream(...) | ParserHelperTests.java:12:55:12:78 | getInputStream(...) | ParserHelperTests.java:12:55:12:78 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | ParserHelperTests.java:12:55:12:78 | getInputStream(...) | user-provided value | -| SAXBuilderTests.java:8:19:8:39 | getInputStream(...) | SAXBuilderTests.java:8:19:8:39 | getInputStream(...) | SAXBuilderTests.java:8:19:8:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXBuilderTests.java:8:19:8:39 | getInputStream(...) | user-provided value | -| SAXBuilderTests.java:20:19:20:39 | getInputStream(...) | SAXBuilderTests.java:20:19:20:39 | getInputStream(...) | SAXBuilderTests.java:20:19:20:39 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXBuilderTests.java:20:19:20:39 | getInputStream(...) | user-provided value | -| SAXParserTests.java:13:18:13:38 | getInputStream(...) | SAXParserTests.java:13:18:13:38 | getInputStream(...) | SAXParserTests.java:13:18:13:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:13:18:13:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:30:18:30:38 | getInputStream(...) | SAXParserTests.java:30:18:30:38 | getInputStream(...) | SAXParserTests.java:30:18:30:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:30:18:30:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:38:18:38:38 | getInputStream(...) | SAXParserTests.java:38:18:38:38 | getInputStream(...) | SAXParserTests.java:38:18:38:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:38:18:38:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:46:18:46:38 | getInputStream(...) | SAXParserTests.java:46:18:46:38 | getInputStream(...) | SAXParserTests.java:46:18:46:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:46:18:46:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:55:18:55:38 | getInputStream(...) | SAXParserTests.java:55:18:55:38 | getInputStream(...) | SAXParserTests.java:55:18:55:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:55:18:55:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:64:18:64:38 | getInputStream(...) | SAXParserTests.java:64:18:64:38 | getInputStream(...) | SAXParserTests.java:64:18:64:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:64:18:64:38 | getInputStream(...) | user-provided value | -| SAXParserTests.java:73:18:73:38 | getInputStream(...) | SAXParserTests.java:73:18:73:38 | getInputStream(...) | SAXParserTests.java:73:18:73:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXParserTests.java:73:18:73:38 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:8:17:8:37 | getInputStream(...) | SAXReaderTests.java:8:17:8:37 | getInputStream(...) | SAXReaderTests.java:8:17:8:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:8:17:8:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:23:17:23:37 | getInputStream(...) | SAXReaderTests.java:23:17:23:37 | getInputStream(...) | SAXReaderTests.java:23:17:23:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:23:17:23:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:30:17:30:37 | getInputStream(...) | SAXReaderTests.java:30:17:30:37 | getInputStream(...) | SAXReaderTests.java:30:17:30:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:30:17:30:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:37:17:37:37 | getInputStream(...) | SAXReaderTests.java:37:17:37:37 | getInputStream(...) | SAXReaderTests.java:37:17:37:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:37:17:37:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:45:17:45:37 | getInputStream(...) | SAXReaderTests.java:45:17:45:37 | getInputStream(...) | SAXReaderTests.java:45:17:45:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:45:17:45:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:53:17:53:37 | getInputStream(...) | SAXReaderTests.java:53:17:53:37 | getInputStream(...) | SAXReaderTests.java:53:17:53:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:53:17:53:37 | getInputStream(...) | user-provided value | -| SAXReaderTests.java:61:17:61:37 | getInputStream(...) | SAXReaderTests.java:61:17:61:37 | getInputStream(...) | SAXReaderTests.java:61:17:61:37 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SAXReaderTests.java:61:17:61:37 | getInputStream(...) | user-provided value | -| SAXSourceTests.java:20:18:20:23 | source | SAXSourceTests.java:17:62:17:82 | getInputStream(...) : InputStream | SAXSourceTests.java:20:18:20:23 | source | XML parsing depends on a $@ without guarding against external entity expansion. | SAXSourceTests.java:17:62:17:82 | getInputStream(...) | user-provided value | -| SchemaTests.java:12:39:12:77 | new StreamSource(...) | SchemaTests.java:12:56:12:76 | getInputStream(...) : InputStream | SchemaTests.java:12:39:12:77 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SchemaTests.java:12:56:12:76 | getInputStream(...) | user-provided value | -| SchemaTests.java:25:39:25:77 | new StreamSource(...) | SchemaTests.java:25:56:25:76 | getInputStream(...) : InputStream | SchemaTests.java:25:39:25:77 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SchemaTests.java:25:56:25:76 | getInputStream(...) | user-provided value | -| SchemaTests.java:31:39:31:77 | new StreamSource(...) | SchemaTests.java:31:56:31:76 | getInputStream(...) : InputStream | SchemaTests.java:31:39:31:77 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SchemaTests.java:31:56:31:76 | getInputStream(...) | user-provided value | -| SchemaTests.java:38:39:38:77 | new StreamSource(...) | SchemaTests.java:38:56:38:76 | getInputStream(...) : InputStream | SchemaTests.java:38:39:38:77 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SchemaTests.java:38:56:38:76 | getInputStream(...) | user-provided value | -| SchemaTests.java:45:39:45:77 | new StreamSource(...) | SchemaTests.java:45:56:45:76 | getInputStream(...) : InputStream | SchemaTests.java:45:39:45:77 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SchemaTests.java:45:56:45:76 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:14:41:14:61 | getInputStream(...) | SimpleXMLTests.java:14:41:14:61 | getInputStream(...) | SimpleXMLTests.java:14:41:14:61 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:14:41:14:61 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:19:41:19:61 | getInputStream(...) | SimpleXMLTests.java:19:41:19:61 | getInputStream(...) | SimpleXMLTests.java:19:41:19:61 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:19:41:19:61 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:24:41:24:84 | new InputStreamReader(...) | SimpleXMLTests.java:24:63:24:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:24:41:24:84 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:24:63:24:83 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:31:41:31:53 | new String(...) | SimpleXMLTests.java:30:5:30:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:31:41:31:53 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:30:5:30:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:38:41:38:53 | new String(...) | SimpleXMLTests.java:37:5:37:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:38:41:38:53 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:37:5:37:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | SimpleXMLTests.java:43:63:43:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:43:63:43:83 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:53:37:53:57 | getInputStream(...) | SimpleXMLTests.java:53:37:53:57 | getInputStream(...) | SimpleXMLTests.java:53:37:53:57 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:53:37:53:57 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:58:26:58:46 | getInputStream(...) | SimpleXMLTests.java:58:26:58:46 | getInputStream(...) | SimpleXMLTests.java:58:26:58:46 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:58:26:58:46 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:63:26:63:46 | getInputStream(...) | SimpleXMLTests.java:63:26:63:46 | getInputStream(...) | SimpleXMLTests.java:63:26:63:46 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:63:26:63:46 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:68:37:68:80 | new InputStreamReader(...) | SimpleXMLTests.java:68:59:68:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:68:37:68:80 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:68:59:68:79 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:73:37:73:80 | new InputStreamReader(...) | SimpleXMLTests.java:73:59:73:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:73:37:73:80 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:73:59:73:79 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:78:26:78:69 | new InputStreamReader(...) | SimpleXMLTests.java:78:48:78:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:78:26:78:69 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:78:48:78:68 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:83:26:83:69 | new InputStreamReader(...) | SimpleXMLTests.java:83:48:83:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:83:26:83:69 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:83:48:83:68 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:90:37:90:49 | new String(...) | SimpleXMLTests.java:89:5:89:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:90:37:90:49 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:89:5:89:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:97:37:97:49 | new String(...) | SimpleXMLTests.java:96:5:96:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:97:37:97:49 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:96:5:96:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:104:26:104:38 | new String(...) | SimpleXMLTests.java:103:5:103:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:104:26:104:38 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:103:5:103:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:111:26:111:38 | new String(...) | SimpleXMLTests.java:110:5:110:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:111:26:111:38 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:110:5:110:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | SimpleXMLTests.java:119:44:119:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:119:44:119:64 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:124:22:124:42 | getInputStream(...) | SimpleXMLTests.java:124:22:124:42 | getInputStream(...) | SimpleXMLTests.java:124:22:124:42 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:124:22:124:42 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:129:22:129:65 | new InputStreamReader(...) | SimpleXMLTests.java:129:44:129:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:129:22:129:65 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:129:44:129:64 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:134:22:134:42 | getInputStream(...) | SimpleXMLTests.java:134:22:134:42 | getInputStream(...) | SimpleXMLTests.java:134:22:134:42 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:134:22:134:42 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:139:22:139:65 | new InputStreamReader(...) | SimpleXMLTests.java:139:44:139:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:139:22:139:65 | new InputStreamReader(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:139:44:139:64 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:146:22:146:34 | new String(...) | SimpleXMLTests.java:145:5:145:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:146:22:146:34 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:145:5:145:25 | getInputStream(...) | user-provided value | -| SimpleXMLTests.java:153:22:153:34 | new String(...) | SimpleXMLTests.java:152:5:152:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:153:22:153:34 | new String(...) | XML parsing depends on a $@ without guarding against external entity expansion. | SimpleXMLTests.java:152:5:152:25 | getInputStream(...) | user-provided value | -| TransformerTests.java:20:27:20:65 | new StreamSource(...) | TransformerTests.java:20:44:20:64 | getInputStream(...) : InputStream | TransformerTests.java:20:27:20:65 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:20:44:20:64 | getInputStream(...) | user-provided value | -| TransformerTests.java:21:23:21:61 | new StreamSource(...) | TransformerTests.java:21:40:21:60 | getInputStream(...) : InputStream | TransformerTests.java:21:23:21:61 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:21:40:21:60 | getInputStream(...) | user-provided value | -| TransformerTests.java:71:27:71:65 | new StreamSource(...) | TransformerTests.java:71:44:71:64 | getInputStream(...) : InputStream | TransformerTests.java:71:27:71:65 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:71:44:71:64 | getInputStream(...) | user-provided value | -| TransformerTests.java:72:23:72:61 | new StreamSource(...) | TransformerTests.java:72:40:72:60 | getInputStream(...) : InputStream | TransformerTests.java:72:23:72:61 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:72:40:72:60 | getInputStream(...) | user-provided value | -| TransformerTests.java:79:27:79:65 | new StreamSource(...) | TransformerTests.java:79:44:79:64 | getInputStream(...) : InputStream | TransformerTests.java:79:27:79:65 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:79:44:79:64 | getInputStream(...) | user-provided value | -| TransformerTests.java:80:23:80:61 | new StreamSource(...) | TransformerTests.java:80:40:80:60 | getInputStream(...) : InputStream | TransformerTests.java:80:23:80:61 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:80:40:80:60 | getInputStream(...) | user-provided value | -| TransformerTests.java:88:27:88:65 | new StreamSource(...) | TransformerTests.java:88:44:88:64 | getInputStream(...) : InputStream | TransformerTests.java:88:27:88:65 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:88:44:88:64 | getInputStream(...) | user-provided value | -| TransformerTests.java:89:23:89:61 | new StreamSource(...) | TransformerTests.java:89:40:89:60 | getInputStream(...) : InputStream | TransformerTests.java:89:23:89:61 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:89:40:89:60 | getInputStream(...) | user-provided value | -| TransformerTests.java:97:27:97:65 | new StreamSource(...) | TransformerTests.java:97:44:97:64 | getInputStream(...) : InputStream | TransformerTests.java:97:27:97:65 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:97:44:97:64 | getInputStream(...) | user-provided value | -| TransformerTests.java:98:23:98:61 | new StreamSource(...) | TransformerTests.java:98:40:98:60 | getInputStream(...) : InputStream | TransformerTests.java:98:23:98:61 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:98:40:98:60 | getInputStream(...) | user-provided value | -| TransformerTests.java:103:21:103:59 | new StreamSource(...) | TransformerTests.java:103:38:103:58 | getInputStream(...) : InputStream | TransformerTests.java:103:21:103:59 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:103:38:103:58 | getInputStream(...) | user-provided value | -| TransformerTests.java:116:21:116:59 | new StreamSource(...) | TransformerTests.java:116:38:116:58 | getInputStream(...) : InputStream | TransformerTests.java:116:21:116:59 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:116:38:116:58 | getInputStream(...) | user-provided value | -| TransformerTests.java:122:21:122:59 | new StreamSource(...) | TransformerTests.java:122:38:122:58 | getInputStream(...) : InputStream | TransformerTests.java:122:21:122:59 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:122:38:122:58 | getInputStream(...) | user-provided value | -| TransformerTests.java:129:21:129:59 | new StreamSource(...) | TransformerTests.java:129:38:129:58 | getInputStream(...) : InputStream | TransformerTests.java:129:21:129:59 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:129:38:129:58 | getInputStream(...) | user-provided value | -| TransformerTests.java:136:21:136:59 | new StreamSource(...) | TransformerTests.java:136:38:136:58 | getInputStream(...) : InputStream | TransformerTests.java:136:21:136:59 | new StreamSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:136:38:136:58 | getInputStream(...) | user-provided value | -| TransformerTests.java:141:21:141:73 | new SAXSource(...) | TransformerTests.java:141:51:141:71 | getInputStream(...) : InputStream | TransformerTests.java:141:21:141:73 | new SAXSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | TransformerTests.java:141:51:141:71 | getInputStream(...) | user-provided value | -| UnmarshallerTests.java:29:18:29:38 | getInputStream(...) | UnmarshallerTests.java:29:18:29:38 | getInputStream(...) | UnmarshallerTests.java:29:18:29:38 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | UnmarshallerTests.java:29:18:29:38 | getInputStream(...) | user-provided value | -| ValidatorTests.java:22:28:22:33 | source | ValidatorTests.java:17:49:17:72 | getInputStream(...) : ServletInputStream | ValidatorTests.java:22:28:22:33 | source | XML parsing depends on a $@ without guarding against external entity expansion. | ValidatorTests.java:17:49:17:72 | getInputStream(...) | user-provided value | -| XMLDecoderTests.java:18:9:18:18 | xmlDecoder | XMLDecoderTests.java:16:49:16:72 | getInputStream(...) : ServletInputStream | XMLDecoderTests.java:18:9:18:18 | xmlDecoder | XML parsing depends on a $@ without guarding against external entity expansion. | XMLDecoderTests.java:16:49:16:72 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:16:18:16:55 | new InputSource(...) | XMLReaderTests.java:16:34:16:54 | getInputStream(...) : InputStream | XMLReaderTests.java:16:18:16:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:16:34:16:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:56:18:56:55 | new InputSource(...) | XMLReaderTests.java:56:34:56:54 | getInputStream(...) : InputStream | XMLReaderTests.java:56:18:56:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:56:34:56:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:63:18:63:55 | new InputSource(...) | XMLReaderTests.java:63:34:63:54 | getInputStream(...) : InputStream | XMLReaderTests.java:63:18:63:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:63:34:63:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:70:18:70:55 | new InputSource(...) | XMLReaderTests.java:70:34:70:54 | getInputStream(...) : InputStream | XMLReaderTests.java:70:18:70:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:70:34:70:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:78:18:78:55 | new InputSource(...) | XMLReaderTests.java:78:34:78:54 | getInputStream(...) : InputStream | XMLReaderTests.java:78:18:78:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:78:34:78:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:86:18:86:55 | new InputSource(...) | XMLReaderTests.java:86:34:86:54 | getInputStream(...) : InputStream | XMLReaderTests.java:86:18:86:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:86:34:86:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:94:18:94:55 | new InputSource(...) | XMLReaderTests.java:94:34:94:54 | getInputStream(...) : InputStream | XMLReaderTests.java:94:18:94:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:94:34:94:54 | getInputStream(...) | user-provided value | -| XMLReaderTests.java:100:18:100:55 | new InputSource(...) | XMLReaderTests.java:100:34:100:54 | getInputStream(...) : InputStream | XMLReaderTests.java:100:18:100:55 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XMLReaderTests.java:100:34:100:54 | getInputStream(...) | user-provided value | -| XPathExpressionTests.java:27:19:27:56 | new InputSource(...) | XPathExpressionTests.java:27:35:27:55 | getInputStream(...) : InputStream | XPathExpressionTests.java:27:19:27:56 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XPathExpressionTests.java:27:35:27:55 | getInputStream(...) | user-provided value | -| XPathExpressionTests.java:42:23:42:60 | new InputSource(...) | XPathExpressionTests.java:42:39:42:59 | getInputStream(...) : InputStream | XPathExpressionTests.java:42:23:42:60 | new InputSource(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XPathExpressionTests.java:42:39:42:59 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:9:35:9:55 | getInputStream(...) | XmlInputFactoryTests.java:9:35:9:55 | getInputStream(...) | XmlInputFactoryTests.java:9:35:9:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:9:35:9:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:10:34:10:54 | getInputStream(...) | XmlInputFactoryTests.java:10:34:10:54 | getInputStream(...) | XmlInputFactoryTests.java:10:34:10:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:10:34:10:54 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:24:35:24:55 | getInputStream(...) | XmlInputFactoryTests.java:24:35:24:55 | getInputStream(...) | XmlInputFactoryTests.java:24:35:24:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:24:35:24:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:25:34:25:54 | getInputStream(...) | XmlInputFactoryTests.java:25:34:25:54 | getInputStream(...) | XmlInputFactoryTests.java:25:34:25:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:25:34:25:54 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:31:35:31:55 | getInputStream(...) | XmlInputFactoryTests.java:31:35:31:55 | getInputStream(...) | XmlInputFactoryTests.java:31:35:31:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:31:35:31:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:32:34:32:54 | getInputStream(...) | XmlInputFactoryTests.java:32:34:32:54 | getInputStream(...) | XmlInputFactoryTests.java:32:34:32:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:32:34:32:54 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:39:35:39:55 | getInputStream(...) | XmlInputFactoryTests.java:39:35:39:55 | getInputStream(...) | XmlInputFactoryTests.java:39:35:39:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:39:35:39:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:40:34:40:54 | getInputStream(...) | XmlInputFactoryTests.java:40:34:40:54 | getInputStream(...) | XmlInputFactoryTests.java:40:34:40:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:40:34:40:54 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:47:35:47:55 | getInputStream(...) | XmlInputFactoryTests.java:47:35:47:55 | getInputStream(...) | XmlInputFactoryTests.java:47:35:47:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:47:35:47:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:48:34:48:54 | getInputStream(...) | XmlInputFactoryTests.java:48:34:48:54 | getInputStream(...) | XmlInputFactoryTests.java:48:34:48:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:48:34:48:54 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:55:35:55:55 | getInputStream(...) | XmlInputFactoryTests.java:55:35:55:55 | getInputStream(...) | XmlInputFactoryTests.java:55:35:55:55 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:55:35:55:55 | getInputStream(...) | user-provided value | -| XmlInputFactoryTests.java:56:34:56:54 | getInputStream(...) | XmlInputFactoryTests.java:56:34:56:54 | getInputStream(...) | XmlInputFactoryTests.java:56:34:56:54 | getInputStream(...) | XML parsing depends on a $@ without guarding against external entity expansion. | XmlInputFactoryTests.java:56:34:56:54 | getInputStream(...) | user-provided value | -edges -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:11:66:11:67 | is : InputStream | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:12:22:12:23 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:14:22:14:23 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:15:22:15:23 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:16:34:16:35 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:20:24:20:25 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | CdaUtilTests.java:21:24:21:25 | is | provenance | Src:MaD:1 | -| CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | CdaUtilTests.java:13:22:13:25 | iSrc | provenance | | -| CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | CdaUtilTests.java:17:22:17:25 | iSrc | provenance | | -| CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | CdaUtilTests.java:18:22:18:25 | iSrc | provenance | | -| CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | CdaUtilTests.java:19:34:19:37 | iSrc | provenance | | -| CdaUtilTests.java:11:44:11:68 | new InputStreamReader(...) : InputStreamReader | CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | provenance | MaD:13 | -| CdaUtilTests.java:11:66:11:67 | is : InputStream | CdaUtilTests.java:11:44:11:68 | new InputStreamReader(...) : InputStreamReader | provenance | MaD:5 | -| DigesterTests.java:14:49:14:72 | getInputStream(...) : ServletInputStream | DigesterTests.java:16:24:16:41 | servletInputStream | provenance | Src:MaD:2 | -| DocumentBuilderTests.java:95:24:95:76 | new SAXSource(...) : SAXSource | DocumentBuilderTests.java:96:19:96:24 | source : SAXSource | provenance | | -| DocumentBuilderTests.java:95:38:95:75 | new InputSource(...) : InputSource | DocumentBuilderTests.java:95:24:95:76 | new SAXSource(...) : SAXSource | provenance | MaD:7 | -| DocumentBuilderTests.java:95:54:95:74 | getInputStream(...) : InputStream | DocumentBuilderTests.java:95:38:95:75 | new InputSource(...) : InputSource | provenance | Src:MaD:1 MaD:13 | -| DocumentBuilderTests.java:96:19:96:24 | source : SAXSource | DocumentBuilderTests.java:96:19:96:41 | getInputSource(...) | provenance | MaD:9 | -| DocumentBuilderTests.java:102:27:102:65 | new StreamSource(...) : StreamSource | DocumentBuilderTests.java:103:49:103:54 | source : StreamSource | provenance | | -| DocumentBuilderTests.java:102:27:102:65 | new StreamSource(...) : StreamSource | DocumentBuilderTests.java:104:19:104:24 | source : StreamSource | provenance | | -| DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) : InputStream | DocumentBuilderTests.java:102:27:102:65 | new StreamSource(...) : StreamSource | provenance | Src:MaD:1 MaD:11 | -| DocumentBuilderTests.java:103:49:103:54 | source : StreamSource | DocumentBuilderTests.java:103:19:103:55 | sourceToInputSource(...) | provenance | MaD:10 | -| DocumentBuilderTests.java:104:19:104:24 | source : StreamSource | DocumentBuilderTests.java:104:19:104:41 | getInputStream(...) | provenance | MaD:12 | -| SAXSourceTests.java:17:24:17:84 | new SAXSource(...) : SAXSource | SAXSourceTests.java:20:18:20:23 | source | provenance | | -| SAXSourceTests.java:17:46:17:83 | new InputSource(...) : InputSource | SAXSourceTests.java:17:24:17:84 | new SAXSource(...) : SAXSource | provenance | MaD:8 | -| SAXSourceTests.java:17:62:17:82 | getInputStream(...) : InputStream | SAXSourceTests.java:17:46:17:83 | new InputSource(...) : InputSource | provenance | Src:MaD:1 MaD:13 | -| SchemaTests.java:12:56:12:76 | getInputStream(...) : InputStream | SchemaTests.java:12:39:12:77 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| SchemaTests.java:25:56:25:76 | getInputStream(...) : InputStream | SchemaTests.java:25:39:25:77 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| SchemaTests.java:31:56:31:76 | getInputStream(...) : InputStream | SchemaTests.java:31:39:31:77 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| SchemaTests.java:38:56:38:76 | getInputStream(...) : InputStream | SchemaTests.java:38:39:38:77 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| SchemaTests.java:45:56:45:76 | getInputStream(...) : InputStream | SchemaTests.java:45:39:45:77 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| SimpleXMLTests.java:24:63:24:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:24:41:24:84 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:30:5:30:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | SimpleXMLTests.java:31:52:31:52 | b : byte[] | provenance | | -| SimpleXMLTests.java:31:52:31:52 | b : byte[] | SimpleXMLTests.java:31:41:31:53 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:37:5:37:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | SimpleXMLTests.java:38:52:38:52 | b : byte[] | provenance | | -| SimpleXMLTests.java:38:52:38:52 | b : byte[] | SimpleXMLTests.java:38:41:38:53 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:43:63:43:83 | getInputStream(...) : InputStream | SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:68:59:68:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:68:37:68:80 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:73:59:73:79 | getInputStream(...) : InputStream | SimpleXMLTests.java:73:37:73:80 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:78:48:78:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:78:26:78:69 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:83:48:83:68 | getInputStream(...) : InputStream | SimpleXMLTests.java:83:26:83:69 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:89:5:89:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | SimpleXMLTests.java:90:48:90:48 | b : byte[] | provenance | | -| SimpleXMLTests.java:90:48:90:48 | b : byte[] | SimpleXMLTests.java:90:37:90:49 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:96:5:96:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | SimpleXMLTests.java:97:48:97:48 | b : byte[] | provenance | | -| SimpleXMLTests.java:97:48:97:48 | b : byte[] | SimpleXMLTests.java:97:37:97:49 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:103:5:103:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | SimpleXMLTests.java:104:37:104:37 | b : byte[] | provenance | | -| SimpleXMLTests.java:104:37:104:37 | b : byte[] | SimpleXMLTests.java:104:26:104:38 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:110:5:110:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | SimpleXMLTests.java:111:37:111:37 | b : byte[] | provenance | | -| SimpleXMLTests.java:111:37:111:37 | b : byte[] | SimpleXMLTests.java:111:26:111:38 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:119:44:119:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:129:44:129:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:129:22:129:65 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:139:44:139:64 | getInputStream(...) : InputStream | SimpleXMLTests.java:139:22:139:65 | new InputStreamReader(...) | provenance | Src:MaD:1 MaD:5 | -| SimpleXMLTests.java:145:5:145:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | SimpleXMLTests.java:146:33:146:33 | b : byte[] | provenance | | -| SimpleXMLTests.java:146:33:146:33 | b : byte[] | SimpleXMLTests.java:146:22:146:34 | new String(...) | provenance | MaD:6 | -| SimpleXMLTests.java:152:5:152:25 | getInputStream(...) : InputStream | SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | provenance | Src:MaD:1 MaD:4 | -| SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | SimpleXMLTests.java:153:33:153:33 | b : byte[] | provenance | | -| SimpleXMLTests.java:153:33:153:33 | b : byte[] | SimpleXMLTests.java:153:22:153:34 | new String(...) | provenance | MaD:6 | -| TransformerTests.java:20:44:20:64 | getInputStream(...) : InputStream | TransformerTests.java:20:27:20:65 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:21:40:21:60 | getInputStream(...) : InputStream | TransformerTests.java:21:23:21:61 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:71:44:71:64 | getInputStream(...) : InputStream | TransformerTests.java:71:27:71:65 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:72:40:72:60 | getInputStream(...) : InputStream | TransformerTests.java:72:23:72:61 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:79:44:79:64 | getInputStream(...) : InputStream | TransformerTests.java:79:27:79:65 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:80:40:80:60 | getInputStream(...) : InputStream | TransformerTests.java:80:23:80:61 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:88:44:88:64 | getInputStream(...) : InputStream | TransformerTests.java:88:27:88:65 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:89:40:89:60 | getInputStream(...) : InputStream | TransformerTests.java:89:23:89:61 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:97:44:97:64 | getInputStream(...) : InputStream | TransformerTests.java:97:27:97:65 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:98:40:98:60 | getInputStream(...) : InputStream | TransformerTests.java:98:23:98:61 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:103:38:103:58 | getInputStream(...) : InputStream | TransformerTests.java:103:21:103:59 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:116:38:116:58 | getInputStream(...) : InputStream | TransformerTests.java:116:21:116:59 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:122:38:122:58 | getInputStream(...) : InputStream | TransformerTests.java:122:21:122:59 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:129:38:129:58 | getInputStream(...) : InputStream | TransformerTests.java:129:21:129:59 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:136:38:136:58 | getInputStream(...) : InputStream | TransformerTests.java:136:21:136:59 | new StreamSource(...) | provenance | Src:MaD:1 MaD:11 | -| TransformerTests.java:141:35:141:72 | new InputSource(...) : InputSource | TransformerTests.java:141:21:141:73 | new SAXSource(...) | provenance | MaD:7 | -| TransformerTests.java:141:51:141:71 | getInputStream(...) : InputStream | TransformerTests.java:141:35:141:72 | new InputSource(...) : InputSource | provenance | Src:MaD:1 MaD:13 | -| ValidatorTests.java:17:49:17:72 | getInputStream(...) : ServletInputStream | ValidatorTests.java:21:48:21:65 | servletInputStream : ServletInputStream | provenance | Src:MaD:2 | -| ValidatorTests.java:21:31:21:66 | new StreamSource(...) : StreamSource | ValidatorTests.java:22:28:22:33 | source | provenance | | -| ValidatorTests.java:21:48:21:65 | servletInputStream : ServletInputStream | ValidatorTests.java:21:31:21:66 | new StreamSource(...) : StreamSource | provenance | MaD:11 | -| XMLDecoderTests.java:16:49:16:72 | getInputStream(...) : ServletInputStream | XMLDecoderTests.java:17:48:17:65 | servletInputStream : ServletInputStream | provenance | Src:MaD:2 | -| XMLDecoderTests.java:17:33:17:66 | new XMLDecoder(...) : XMLDecoder | XMLDecoderTests.java:18:9:18:18 | xmlDecoder | provenance | | -| XMLDecoderTests.java:17:48:17:65 | servletInputStream : ServletInputStream | XMLDecoderTests.java:17:33:17:66 | new XMLDecoder(...) : XMLDecoder | provenance | MaD:3 | -| XMLReaderTests.java:16:34:16:54 | getInputStream(...) : InputStream | XMLReaderTests.java:16:18:16:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:56:34:56:54 | getInputStream(...) : InputStream | XMLReaderTests.java:56:18:56:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:63:34:63:54 | getInputStream(...) : InputStream | XMLReaderTests.java:63:18:63:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:70:34:70:54 | getInputStream(...) : InputStream | XMLReaderTests.java:70:18:70:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:78:34:78:54 | getInputStream(...) : InputStream | XMLReaderTests.java:78:18:78:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:86:34:86:54 | getInputStream(...) : InputStream | XMLReaderTests.java:86:18:86:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:94:34:94:54 | getInputStream(...) : InputStream | XMLReaderTests.java:94:18:94:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XMLReaderTests.java:100:34:100:54 | getInputStream(...) : InputStream | XMLReaderTests.java:100:18:100:55 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XPathExpressionTests.java:27:35:27:55 | getInputStream(...) : InputStream | XPathExpressionTests.java:27:19:27:56 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -| XPathExpressionTests.java:42:39:42:59 | getInputStream(...) : InputStream | XPathExpressionTests.java:42:23:42:60 | new InputSource(...) | provenance | Src:MaD:1 MaD:13 | -models -| 1 | Source: java.net; Socket; false; getInputStream; (); ; ReturnValue; remote; manual | -| 2 | Source: javax.servlet; ServletRequest; false; getInputStream; (); ; ReturnValue; remote; manual | -| 3 | Summary: java.beans; XMLDecoder; false; XMLDecoder; ; ; Argument[0]; Argument[this]; taint; manual | -| 4 | Summary: java.io; InputStream; true; read; (byte[]); ; Argument[this]; Argument[0]; taint; manual | -| 5 | Summary: java.io; InputStreamReader; false; InputStreamReader; ; ; Argument[0]; Argument[this]; taint; manual | -| 6 | Summary: java.lang; String; false; String; ; ; Argument[0]; Argument[this]; taint; manual | -| 7 | Summary: javax.xml.transform.sax; SAXSource; false; SAXSource; (InputSource); ; Argument[0]; Argument[this]; taint; manual | -| 8 | Summary: javax.xml.transform.sax; SAXSource; false; SAXSource; (XMLReader,InputSource); ; Argument[1]; Argument[this]; taint; manual | -| 9 | Summary: javax.xml.transform.sax; SAXSource; false; getInputSource; ; ; Argument[this]; ReturnValue; taint; manual | -| 10 | Summary: javax.xml.transform.sax; SAXSource; false; sourceToInputSource; ; ; Argument[0]; ReturnValue; taint; manual | -| 11 | Summary: javax.xml.transform.stream; StreamSource; false; StreamSource; ; ; Argument[0]; Argument[this]; taint; manual | -| 12 | Summary: javax.xml.transform.stream; StreamSource; false; getInputStream; ; ; Argument[this]; ReturnValue; taint; manual | -| 13 | Summary: org.xml.sax; InputSource; false; InputSource; ; ; Argument[0]; Argument[this]; taint; manual | -nodes -| CdaUtilTests.java:10:26:10:46 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| CdaUtilTests.java:11:28:11:69 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| CdaUtilTests.java:11:44:11:68 | new InputStreamReader(...) : InputStreamReader | semmle.label | new InputStreamReader(...) : InputStreamReader | -| CdaUtilTests.java:11:66:11:67 | is : InputStream | semmle.label | is : InputStream | -| CdaUtilTests.java:12:22:12:23 | is | semmle.label | is | -| CdaUtilTests.java:13:22:13:25 | iSrc | semmle.label | iSrc | -| CdaUtilTests.java:14:22:14:23 | is | semmle.label | is | -| CdaUtilTests.java:15:22:15:23 | is | semmle.label | is | -| CdaUtilTests.java:16:34:16:35 | is | semmle.label | is | -| CdaUtilTests.java:17:22:17:25 | iSrc | semmle.label | iSrc | -| CdaUtilTests.java:18:22:18:25 | iSrc | semmle.label | iSrc | -| CdaUtilTests.java:19:34:19:37 | iSrc | semmle.label | iSrc | -| CdaUtilTests.java:20:24:20:25 | is | semmle.label | is | -| CdaUtilTests.java:21:24:21:25 | is | semmle.label | is | -| DigesterTests.java:14:49:14:72 | getInputStream(...) : ServletInputStream | semmle.label | getInputStream(...) : ServletInputStream | -| DigesterTests.java:16:24:16:41 | servletInputStream | semmle.label | servletInputStream | -| DocumentBuilderTests.java:14:19:14:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:28:19:28:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:36:19:36:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:44:19:44:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:51:19:51:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:66:19:66:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:73:19:73:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:81:19:81:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:89:19:89:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| DocumentBuilderTests.java:95:24:95:76 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| DocumentBuilderTests.java:95:38:95:75 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| DocumentBuilderTests.java:95:54:95:74 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| DocumentBuilderTests.java:96:19:96:24 | source : SAXSource | semmle.label | source : SAXSource | -| DocumentBuilderTests.java:96:19:96:41 | getInputSource(...) | semmle.label | getInputSource(...) | -| DocumentBuilderTests.java:102:27:102:65 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| DocumentBuilderTests.java:102:44:102:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| DocumentBuilderTests.java:103:19:103:55 | sourceToInputSource(...) | semmle.label | sourceToInputSource(...) | -| DocumentBuilderTests.java:103:49:103:54 | source : StreamSource | semmle.label | source : StreamSource | -| DocumentBuilderTests.java:104:19:104:24 | source : StreamSource | semmle.label | source : StreamSource | -| DocumentBuilderTests.java:104:19:104:41 | getInputStream(...) | semmle.label | getInputStream(...) | -| ParserHelperTests.java:12:55:12:78 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXBuilderTests.java:8:19:8:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXBuilderTests.java:20:19:20:39 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:13:18:13:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:30:18:30:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:38:18:38:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:46:18:46:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:55:18:55:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:64:18:64:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXParserTests.java:73:18:73:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:8:17:8:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:23:17:23:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:30:17:30:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:37:17:37:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:45:17:45:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:53:17:53:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXReaderTests.java:61:17:61:37 | getInputStream(...) | semmle.label | getInputStream(...) | -| SAXSourceTests.java:17:24:17:84 | new SAXSource(...) : SAXSource | semmle.label | new SAXSource(...) : SAXSource | -| SAXSourceTests.java:17:46:17:83 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| SAXSourceTests.java:17:62:17:82 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SAXSourceTests.java:20:18:20:23 | source | semmle.label | source | -| SchemaTests.java:12:39:12:77 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| SchemaTests.java:12:56:12:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SchemaTests.java:25:39:25:77 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| SchemaTests.java:25:56:25:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SchemaTests.java:31:39:31:77 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| SchemaTests.java:31:56:31:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SchemaTests.java:38:39:38:77 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| SchemaTests.java:38:56:38:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SchemaTests.java:45:39:45:77 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| SchemaTests.java:45:56:45:76 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:14:41:14:61 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:19:41:19:61 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:24:41:24:84 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:24:63:24:83 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:30:5:30:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:30:32:30:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:31:41:31:53 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:31:52:31:52 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:37:5:37:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:37:32:37:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:38:41:38:53 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:38:52:38:52 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:43:41:43:84 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:43:63:43:83 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:48:37:48:57 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:53:37:53:57 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:58:26:58:46 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:63:26:63:46 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:68:37:68:80 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:68:59:68:79 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:73:37:73:80 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:73:59:73:79 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:78:26:78:69 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:78:48:78:68 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:83:26:83:69 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:83:48:83:68 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:89:5:89:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:89:32:89:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:90:37:90:49 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:90:48:90:48 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:96:5:96:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:96:32:96:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:97:37:97:49 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:97:48:97:48 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:103:5:103:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:103:32:103:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:104:26:104:38 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:104:37:104:37 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:110:5:110:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:110:32:110:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:111:26:111:38 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:111:37:111:37 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:115:22:115:42 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:119:22:119:65 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:119:44:119:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:124:22:124:42 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:129:22:129:65 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:129:44:129:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:134:22:134:42 | getInputStream(...) | semmle.label | getInputStream(...) | -| SimpleXMLTests.java:139:22:139:65 | new InputStreamReader(...) | semmle.label | new InputStreamReader(...) | -| SimpleXMLTests.java:139:44:139:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:145:5:145:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:145:32:145:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:146:22:146:34 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:146:33:146:33 | b : byte[] | semmle.label | b : byte[] | -| SimpleXMLTests.java:152:5:152:25 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| SimpleXMLTests.java:152:32:152:32 | b [post update] : byte[] | semmle.label | b [post update] : byte[] | -| SimpleXMLTests.java:153:22:153:34 | new String(...) | semmle.label | new String(...) | -| SimpleXMLTests.java:153:33:153:33 | b : byte[] | semmle.label | b : byte[] | -| TransformerTests.java:20:27:20:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:20:44:20:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:21:23:21:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:21:40:21:60 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:71:27:71:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:71:44:71:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:72:23:72:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:72:40:72:60 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:79:27:79:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:79:44:79:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:80:23:80:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:80:40:80:60 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:88:27:88:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:88:44:88:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:89:23:89:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:89:40:89:60 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:97:27:97:65 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:97:44:97:64 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:98:23:98:61 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:98:40:98:60 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:103:21:103:59 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:103:38:103:58 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:116:21:116:59 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:116:38:116:58 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:122:21:122:59 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:122:38:122:58 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:129:21:129:59 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:129:38:129:58 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:136:21:136:59 | new StreamSource(...) | semmle.label | new StreamSource(...) | -| TransformerTests.java:136:38:136:58 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| TransformerTests.java:141:21:141:73 | new SAXSource(...) | semmle.label | new SAXSource(...) | -| TransformerTests.java:141:35:141:72 | new InputSource(...) : InputSource | semmle.label | new InputSource(...) : InputSource | -| TransformerTests.java:141:51:141:71 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| UnmarshallerTests.java:29:18:29:38 | getInputStream(...) | semmle.label | getInputStream(...) | -| ValidatorTests.java:17:49:17:72 | getInputStream(...) : ServletInputStream | semmle.label | getInputStream(...) : ServletInputStream | -| ValidatorTests.java:21:31:21:66 | new StreamSource(...) : StreamSource | semmle.label | new StreamSource(...) : StreamSource | -| ValidatorTests.java:21:48:21:65 | servletInputStream : ServletInputStream | semmle.label | servletInputStream : ServletInputStream | -| ValidatorTests.java:22:28:22:33 | source | semmle.label | source | -| XMLDecoderTests.java:16:49:16:72 | getInputStream(...) : ServletInputStream | semmle.label | getInputStream(...) : ServletInputStream | -| XMLDecoderTests.java:17:33:17:66 | new XMLDecoder(...) : XMLDecoder | semmle.label | new XMLDecoder(...) : XMLDecoder | -| XMLDecoderTests.java:17:48:17:65 | servletInputStream : ServletInputStream | semmle.label | servletInputStream : ServletInputStream | -| XMLDecoderTests.java:18:9:18:18 | xmlDecoder | semmle.label | xmlDecoder | -| XMLReaderTests.java:16:18:16:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:16:34:16:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:56:18:56:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:56:34:56:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:63:18:63:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:63:34:63:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:70:18:70:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:70:34:70:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:78:18:78:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:78:34:78:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:86:18:86:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:86:34:86:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:94:18:94:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:94:34:94:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XMLReaderTests.java:100:18:100:55 | new InputSource(...) | semmle.label | new InputSource(...) | -| XMLReaderTests.java:100:34:100:54 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XPathExpressionTests.java:27:19:27:56 | new InputSource(...) | semmle.label | new InputSource(...) | -| XPathExpressionTests.java:27:35:27:55 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XPathExpressionTests.java:42:23:42:60 | new InputSource(...) | semmle.label | new InputSource(...) | -| XPathExpressionTests.java:42:39:42:59 | getInputStream(...) : InputStream | semmle.label | getInputStream(...) : InputStream | -| XmlInputFactoryTests.java:9:35:9:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:10:34:10:54 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:24:35:24:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:25:34:25:54 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:31:35:31:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:32:34:32:54 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:39:35:39:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:40:34:40:54 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:47:35:47:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:48:34:48:54 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:55:35:55:55 | getInputStream(...) | semmle.label | getInputStream(...) | -| XmlInputFactoryTests.java:56:34:56:54 | getInputStream(...) | semmle.label | getInputStream(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.ql b/java/ql/test/query-tests/security/CWE-611/XXE.ql new file mode 100644 index 000000000000..21483d8f658d --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-611/XXE.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.XxeRemoteQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-611/XXE.qlref b/java/ql/test/query-tests/security/CWE-611/XXE.qlref deleted file mode 100644 index 29f544d9a457..000000000000 --- a/java/ql/test/query-tests/security/CWE-611/XXE.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-611/XXE.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-611/XmlInputFactoryTests.java b/java/ql/test/query-tests/security/CWE-611/XmlInputFactoryTests.java index 343b8ec3df06..a75bcde8c1fe 100644 --- a/java/ql/test/query-tests/security/CWE-611/XmlInputFactoryTests.java +++ b/java/ql/test/query-tests/security/CWE-611/XmlInputFactoryTests.java @@ -6,8 +6,8 @@ public class XmlInputFactoryTests { public void unconfigureFactory(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } public void safeFactory(Socket sock) throws Exception { @@ -21,38 +21,38 @@ public void safeFactory(Socket sock) throws Exception { public void misConfiguredFactory(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty("javax.xml.stream.isSupportingExternalEntities", false); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredFactory2(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredFactory3(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty("javax.xml.stream.isSupportingExternalEntities", true); factory.setProperty(XMLInputFactory.SUPPORT_DTD, true); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredFactory4(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty("javax.xml.stream.isSupportingExternalEntities", false); factory.setProperty(XMLInputFactory.SUPPORT_DTD, true); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } public void misConfiguredFactory5(Socket sock) throws Exception { XMLInputFactory factory = XMLInputFactory.newFactory(); factory.setProperty("javax.xml.stream.isSupportingExternalEntities", true); factory.setProperty(XMLInputFactory.SUPPORT_DTD, false); - factory.createXMLStreamReader(sock.getInputStream()); // $ Alert - factory.createXMLEventReader(sock.getInputStream()); // $ Alert + factory.createXMLStreamReader(sock.getInputStream()); // $ hasTaintFlow + factory.createXMLEventReader(sock.getInputStream()); // $ hasTaintFlow } } diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected index 5a460dbde52b..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.expected @@ -1,197 +0,0 @@ -#select -| XPathInjectionTest.java:91:24:91:33 | expression | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:91:24:91:33 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:91:24:91:33 | expression | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:91:24:91:33 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:92:34:92:43 | expression | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:92:34:92:43 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:92:34:92:43 | expression | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:92:34:92:43 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:93:23:93:82 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:93:23:93:82 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:93:23:93:82 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:93:23:93:82 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:96:28:96:37 | expression | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:96:28:96:37 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:96:28:96:37 | expression | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:96:28:96:37 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:97:38:97:47 | expression | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:97:38:97:47 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:97:38:97:47 | expression | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:97:38:97:47 | expression | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:98:27:98:86 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:98:27:98:86 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:98:27:98:86 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:98:27:98:86 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:107:23:107:27 | query | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:107:23:107:27 | query | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:107:23:107:27 | query | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:107:23:107:27 | query | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:108:27:108:31 | query | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:108:27:108:31 | query | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:108:27:108:31 | query | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:108:27:108:31 | query | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:125:31:125:90 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:125:31:125:90 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:125:31:125:90 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:125:31:125:90 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:126:30:126:89 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:126:30:126:89 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:126:30:126:89 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:126:30:126:89 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:127:59:127:93 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:127:59:127:93 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:128:35:128:94 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:128:35:128:94 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:128:35:128:94 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:128:35:128:94 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:129:26:129:85 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:129:26:129:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:129:26:129:85 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:129:26:129:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:130:32:130:91 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:130:32:130:91 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:130:32:130:91 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:130:32:130:91 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:131:26:131:85 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:131:26:131:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:131:26:131:85 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:131:26:131:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:132:30:132:89 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:132:30:132:89 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:132:30:132:89 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:132:30:132:89 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:134:26:134:85 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:134:26:134:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:134:26:134:85 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:134:26:134:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:135:26:135:85 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:135:26:135:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:135:26:135:85 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:135:26:135:85 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:139:34:139:93 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:139:34:139:93 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:139:34:139:93 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:139:34:139:93 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:140:32:140:91 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:140:32:140:91 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:140:32:140:91 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:140:32:140:91 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:141:38:141:97 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:141:38:141:97 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:141:38:141:97 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:141:38:141:97 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:143:38:143:97 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:143:38:143:97 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:143:38:143:97 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:143:38:143:97 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:144:36:144:95 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:144:36:144:95 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:144:36:144:95 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:144:36:144:95 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:145:42:145:101 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:145:42:145:101 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:145:42:145:101 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:145:42:145:101 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:146:36:146:95 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:146:36:146:95 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:146:36:146:95 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:146:36:146:95 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:147:52:147:111 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:147:52:147:111 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:147:52:147:111 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:147:52:147:111 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:150:39:150:98 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:150:39:150:98 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:150:39:150:98 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:150:39:150:98 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:151:37:151:96 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:151:37:151:96 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:151:37:151:96 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:151:37:151:96 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:152:43:152:102 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:152:43:152:102 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:152:43:152:102 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:152:43:152:102 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:155:33:155:92 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:155:33:155:92 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:155:33:155:92 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:155:33:155:92 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:156:37:156:96 | ... + ... | XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:156:37:156:96 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:77:23:77:50 | getParameter(...) | user-provided value | -| XPathInjectionTest.java:156:37:156:96 | ... + ... | XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:156:37:156:96 | ... + ... | XPath expression depends on a $@. | XPathInjectionTest.java:78:23:78:50 | getParameter(...) | user-provided value | -edges -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:91:24:91:33 | expression | provenance | Src:MaD:24 Sink:MaD:2 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:92:34:92:43 | expression | provenance | Src:MaD:24 Sink:MaD:3 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:93:23:93:82 | ... + ... | provenance | Src:MaD:24 Sink:MaD:1 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:96:28:96:37 | expression | provenance | Src:MaD:24 Sink:MaD:2 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:97:38:97:47 | expression | provenance | Src:MaD:24 Sink:MaD:3 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:98:27:98:86 | ... + ... | provenance | Src:MaD:24 Sink:MaD:1 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:101:19:101:22 | user : String | provenance | Src:MaD:24 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:125:31:125:90 | ... + ... | provenance | Src:MaD:24 Sink:MaD:21 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:126:30:126:89 | ... + ... | provenance | Src:MaD:24 Sink:MaD:20 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:128:35:128:94 | ... + ... | provenance | Src:MaD:24 Sink:MaD:22 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:129:26:129:85 | ... + ... | provenance | Src:MaD:24 Sink:MaD:23 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:130:32:130:91 | ... + ... | provenance | Src:MaD:24 Sink:MaD:19 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:131:26:131:85 | ... + ... | provenance | Src:MaD:24 Sink:MaD:18 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:132:30:132:89 | ... + ... | provenance | Src:MaD:24 Sink:MaD:17 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:134:26:134:85 | ... + ... | provenance | Src:MaD:24 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:135:26:135:85 | ... + ... | provenance | Src:MaD:24 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:139:34:139:93 | ... + ... | provenance | Src:MaD:24 Sink:MaD:9 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:140:32:140:91 | ... + ... | provenance | Src:MaD:24 Sink:MaD:10 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:141:38:141:97 | ... + ... | provenance | Src:MaD:24 Sink:MaD:11 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:143:38:143:97 | ... + ... | provenance | Src:MaD:24 Sink:MaD:12 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:144:36:144:95 | ... + ... | provenance | Src:MaD:24 Sink:MaD:13 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:145:42:145:101 | ... + ... | provenance | Src:MaD:24 Sink:MaD:14 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:146:36:146:95 | ... + ... | provenance | Src:MaD:24 Sink:MaD:15 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:147:52:147:111 | ... + ... | provenance | Src:MaD:24 Sink:MaD:16 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:150:39:150:98 | ... + ... | provenance | Src:MaD:24 Sink:MaD:6 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:151:37:151:96 | ... + ... | provenance | Src:MaD:24 Sink:MaD:7 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:152:43:152:102 | ... + ... | provenance | Src:MaD:24 Sink:MaD:8 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:155:33:155:92 | ... + ... | provenance | Src:MaD:24 Sink:MaD:4 | -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | XPathInjectionTest.java:156:37:156:96 | ... + ... | provenance | Src:MaD:24 Sink:MaD:5 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:91:24:91:33 | expression | provenance | Src:MaD:24 Sink:MaD:2 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:92:34:92:43 | expression | provenance | Src:MaD:24 Sink:MaD:3 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:93:23:93:82 | ... + ... | provenance | Src:MaD:24 Sink:MaD:1 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:96:28:96:37 | expression | provenance | Src:MaD:24 Sink:MaD:2 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:97:38:97:47 | expression | provenance | Src:MaD:24 Sink:MaD:3 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:98:27:98:86 | ... + ... | provenance | Src:MaD:24 Sink:MaD:1 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:103:19:103:22 | pass : String | provenance | Src:MaD:24 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:125:31:125:90 | ... + ... | provenance | Src:MaD:24 Sink:MaD:21 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:126:30:126:89 | ... + ... | provenance | Src:MaD:24 Sink:MaD:20 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:127:59:127:93 | ... + ... | provenance | Src:MaD:24 Sink:MaD:20 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:128:35:128:94 | ... + ... | provenance | Src:MaD:24 Sink:MaD:22 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:129:26:129:85 | ... + ... | provenance | Src:MaD:24 Sink:MaD:23 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:130:32:130:91 | ... + ... | provenance | Src:MaD:24 Sink:MaD:19 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:131:26:131:85 | ... + ... | provenance | Src:MaD:24 Sink:MaD:18 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:132:30:132:89 | ... + ... | provenance | Src:MaD:24 Sink:MaD:17 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:134:26:134:85 | ... + ... | provenance | Src:MaD:24 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:135:26:135:85 | ... + ... | provenance | Src:MaD:24 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:139:34:139:93 | ... + ... | provenance | Src:MaD:24 Sink:MaD:9 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:140:32:140:91 | ... + ... | provenance | Src:MaD:24 Sink:MaD:10 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:141:38:141:97 | ... + ... | provenance | Src:MaD:24 Sink:MaD:11 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:143:38:143:97 | ... + ... | provenance | Src:MaD:24 Sink:MaD:12 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:144:36:144:95 | ... + ... | provenance | Src:MaD:24 Sink:MaD:13 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:145:42:145:101 | ... + ... | provenance | Src:MaD:24 Sink:MaD:14 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:146:36:146:95 | ... + ... | provenance | Src:MaD:24 Sink:MaD:15 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:147:52:147:111 | ... + ... | provenance | Src:MaD:24 Sink:MaD:16 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:150:39:150:98 | ... + ... | provenance | Src:MaD:24 Sink:MaD:6 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:151:37:151:96 | ... + ... | provenance | Src:MaD:24 Sink:MaD:7 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:152:43:152:102 | ... + ... | provenance | Src:MaD:24 Sink:MaD:8 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:155:33:155:92 | ... + ... | provenance | Src:MaD:24 Sink:MaD:4 | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | XPathInjectionTest.java:156:37:156:96 | ... + ... | provenance | Src:MaD:24 Sink:MaD:5 | -| XPathInjectionTest.java:101:9:101:10 | sb [post update] : StringBuffer | XPathInjectionTest.java:105:24:105:25 | sb : StringBuffer | provenance | | -| XPathInjectionTest.java:101:19:101:22 | user : String | XPathInjectionTest.java:101:9:101:10 | sb [post update] : StringBuffer | provenance | MaD:25 | -| XPathInjectionTest.java:103:9:103:10 | sb [post update] : StringBuffer | XPathInjectionTest.java:105:24:105:25 | sb : StringBuffer | provenance | | -| XPathInjectionTest.java:103:19:103:22 | pass : String | XPathInjectionTest.java:103:9:103:10 | sb [post update] : StringBuffer | provenance | MaD:25 | -| XPathInjectionTest.java:105:24:105:25 | sb : StringBuffer | XPathInjectionTest.java:105:24:105:36 | toString(...) : String | provenance | MaD:26 | -| XPathInjectionTest.java:105:24:105:36 | toString(...) : String | XPathInjectionTest.java:107:23:107:27 | query | provenance | Sink:MaD:1 | -| XPathInjectionTest.java:105:24:105:36 | toString(...) : String | XPathInjectionTest.java:108:27:108:31 | query | provenance | Sink:MaD:1 | -models -| 1 | Sink: javax.xml.xpath; XPath; true; compile; ; ; Argument[0]; xpath-injection; manual | -| 2 | Sink: javax.xml.xpath; XPath; true; evaluate; ; ; Argument[0]; xpath-injection; manual | -| 3 | Sink: javax.xml.xpath; XPath; true; evaluateExpression; ; ; Argument[0]; xpath-injection; manual | -| 4 | Sink: org.dom4j.tree; AbstractNode; true; createPattern; ; ; Argument[0]; xpath-injection; manual | -| 5 | Sink: org.dom4j.tree; AbstractNode; true; createXPathFilter; ; ; Argument[0]; xpath-injection; manual | -| 6 | Sink: org.dom4j.util; ProxyDocumentFactory; true; createPattern; ; ; Argument[0]; xpath-injection; manual | -| 7 | Sink: org.dom4j.util; ProxyDocumentFactory; true; createXPath; ; ; Argument[0]; xpath-injection; manual | -| 8 | Sink: org.dom4j.util; ProxyDocumentFactory; true; createXPathFilter; ; ; Argument[0]; xpath-injection; manual | -| 9 | Sink: org.dom4j; DocumentFactory; true; createPattern; ; ; Argument[0]; xpath-injection; manual | -| 10 | Sink: org.dom4j; DocumentFactory; true; createXPath; ; ; Argument[0]; xpath-injection; manual | -| 11 | Sink: org.dom4j; DocumentFactory; true; createXPathFilter; ; ; Argument[0]; xpath-injection; manual | -| 12 | Sink: org.dom4j; DocumentHelper; false; createPattern; ; ; Argument[0]; xpath-injection; manual | -| 13 | Sink: org.dom4j; DocumentHelper; false; createXPath; ; ; Argument[0]; xpath-injection; manual | -| 14 | Sink: org.dom4j; DocumentHelper; false; createXPathFilter; ; ; Argument[0]; xpath-injection; manual | -| 15 | Sink: org.dom4j; DocumentHelper; false; selectNodes; ; ; Argument[0]; xpath-injection; manual | -| 16 | Sink: org.dom4j; DocumentHelper; false; sort; ; ; Argument[1]; xpath-injection; manual | -| 17 | Sink: org.dom4j; Node; true; createXPath; ; ; Argument[0]; xpath-injection; manual | -| 18 | Sink: org.dom4j; Node; true; matches; ; ; Argument[0]; xpath-injection; manual | -| 19 | Sink: org.dom4j; Node; true; numberValueOf; ; ; Argument[0]; xpath-injection; manual | -| 20 | Sink: org.dom4j; Node; true; selectNodes; ; ; Argument[0..1]; xpath-injection; manual | -| 21 | Sink: org.dom4j; Node; true; selectObject; ; ; Argument[0]; xpath-injection; manual | -| 22 | Sink: org.dom4j; Node; true; selectSingleNode; ; ; Argument[0]; xpath-injection; manual | -| 23 | Sink: org.dom4j; Node; true; valueOf; ; ; Argument[0]; xpath-injection; manual | -| 24 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 25 | Summary: java.lang; AbstractStringBuilder; true; append; ; ; Argument[0]; Argument[this]; taint; manual | -| 26 | Summary: java.lang; CharSequence; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | -nodes -| XPathInjectionTest.java:77:23:77:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| XPathInjectionTest.java:78:23:78:50 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| XPathInjectionTest.java:91:24:91:33 | expression | semmle.label | expression | -| XPathInjectionTest.java:92:34:92:43 | expression | semmle.label | expression | -| XPathInjectionTest.java:93:23:93:82 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:96:28:96:37 | expression | semmle.label | expression | -| XPathInjectionTest.java:97:38:97:47 | expression | semmle.label | expression | -| XPathInjectionTest.java:98:27:98:86 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:101:9:101:10 | sb [post update] : StringBuffer | semmle.label | sb [post update] : StringBuffer | -| XPathInjectionTest.java:101:19:101:22 | user : String | semmle.label | user : String | -| XPathInjectionTest.java:103:9:103:10 | sb [post update] : StringBuffer | semmle.label | sb [post update] : StringBuffer | -| XPathInjectionTest.java:103:19:103:22 | pass : String | semmle.label | pass : String | -| XPathInjectionTest.java:105:24:105:25 | sb : StringBuffer | semmle.label | sb : StringBuffer | -| XPathInjectionTest.java:105:24:105:36 | toString(...) : String | semmle.label | toString(...) : String | -| XPathInjectionTest.java:107:23:107:27 | query | semmle.label | query | -| XPathInjectionTest.java:108:27:108:31 | query | semmle.label | query | -| XPathInjectionTest.java:125:31:125:90 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:126:30:126:89 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:127:59:127:93 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:128:35:128:94 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:129:26:129:85 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:130:32:130:91 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:131:26:131:85 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:132:30:132:89 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:134:26:134:85 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:135:26:135:85 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:139:34:139:93 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:140:32:140:91 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:141:38:141:97 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:143:38:143:97 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:144:36:144:95 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:145:42:145:101 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:146:36:146:95 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:147:52:147:111 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:150:39:150:98 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:151:37:151:96 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:152:43:152:102 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:155:33:155:92 | ... + ... | semmle.label | ... + ... | -| XPathInjectionTest.java:156:37:156:96 | ... + ... | semmle.label | ... + ... | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.java b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.java index af5d2c11e5ff..5631f3a4ae9e 100644 --- a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.java +++ b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.java @@ -74,8 +74,8 @@ public String getText() { } public void handle(HttpServletRequest request) throws Exception { - String user = request.getParameter("user"); // $ Source - String pass = request.getParameter("pass"); // $ Source + String user = request.getParameter("user"); + String pass = request.getParameter("pass"); String expression = "/users/user[@name='" + user + "' and @pass='" + pass + "']"; final String xmlStr = "" + " " @@ -88,14 +88,14 @@ public void handle(HttpServletRequest request) throws Exception { XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); - xpath.evaluate(expression, doc, XPathConstants.BOOLEAN); // $ Alert - xpath.evaluateExpression(expression, xmlSource); // $ Alert - xpath.compile("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + xpath.evaluate(expression, doc, XPathConstants.BOOLEAN); // $hasXPathInjection + xpath.evaluateExpression(expression, xmlSource); // $hasXPathInjection + xpath.compile("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection XPathImplStub xpathStub = XPathImplStub.getInstance(); - xpathStub.evaluate(expression, doc, XPathConstants.BOOLEAN); // $ Alert - xpathStub.evaluateExpression(expression, xmlSource); // $ Alert - xpathStub.compile("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + xpathStub.evaluate(expression, doc, XPathConstants.BOOLEAN); // $hasXPathInjection + xpathStub.evaluateExpression(expression, xmlSource); // $hasXPathInjection + xpathStub.compile("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection StringBuffer sb = new StringBuffer("/users/user[@name="); sb.append(user); @@ -104,8 +104,8 @@ public void handle(HttpServletRequest request) throws Exception { sb.append("']"); String query = sb.toString(); - xpath.compile(query); // $ Alert - xpathStub.compile(query); // $ Alert + xpath.compile(query); // $hasXPathInjection + xpathStub.compile(query); // $hasXPathInjection String expression4 = "/users/user[@name=$user and @pass=$pass]"; xpath.setXPathVariableResolver(v -> { @@ -122,38 +122,38 @@ public void handle(HttpServletRequest request) throws Exception { SAXReader reader = new SAXReader(); org.dom4j.Document document = reader.read(new ByteArrayInputStream(xmlStr.getBytes())); - document.selectObject("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.selectNodes("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.selectNodes("/users/user[@name='test']", "/users/user[@pass='" + pass + "']"); // $ Alert - document.selectSingleNode("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.valueOf("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.numberValueOf("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.matches("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - document.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - - new DefaultXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - new XPathPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + document.selectObject("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.selectNodes("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.selectNodes("/users/user[@name='test']", "/users/user[@pass='" + pass + "']"); // $hasXPathInjection + document.selectSingleNode("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.valueOf("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.numberValueOf("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.matches("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + document.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + + new DefaultXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + new XPathPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection new XPathPattern(new PatternStub(user)); // $ MISSING: hasXPathInjection // Jaxen is not modeled yet DocumentFactory docFactory = DocumentFactory.getInstance(); - docFactory.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - docFactory.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - docFactory.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + docFactory.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + docFactory.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + docFactory.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection - DocumentHelper.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - DocumentHelper.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - DocumentHelper.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - DocumentHelper.selectNodes("/users/user[@name='" + user + "' and @pass='" + pass + "']", new ArrayList()); // $ Alert - DocumentHelper.sort(new ArrayList(), "/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + DocumentHelper.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + DocumentHelper.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + DocumentHelper.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + DocumentHelper.selectNodes("/users/user[@name='" + user + "' and @pass='" + pass + "']", new ArrayList()); // $hasXPathInjection + DocumentHelper.sort(new ArrayList(), "/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection ProxyDocumentFactoryStub proxyDocFactory = new ProxyDocumentFactoryStub(); - proxyDocFactory.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - proxyDocFactory.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - proxyDocFactory.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + proxyDocFactory.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + proxyDocFactory.createXPath("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + proxyDocFactory.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection Namespace namespace = new Namespace("prefix", "http://some.uri.io"); - namespace.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert - namespace.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $ Alert + namespace.createPattern("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection + namespace.createXPathFilter("/users/user[@name='" + user + "' and @pass='" + pass + "']"); // $hasXPathInjection org.jaxen.SimpleVariableContext svc = new org.jaxen.SimpleVariableContext(); svc.setVariableValue("user", user); diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql new file mode 100644 index 000000000000..3c7110d8011f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.ql @@ -0,0 +1,19 @@ +import java +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.security.XPathInjectionQuery +import utils.test.InlineExpectationsTest + +module HasXPathInjectionTest implements TestSig { + string getARelevantTag() { result = "hasXPathInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasXPathInjection" and + exists(DataFlow::Node sink | XPathInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.qlref deleted file mode 100644 index 0ea1a794f4c5..000000000000 --- a/java/ql/test/query-tests/security/CWE-643/XPathInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-643/XPathInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedos/options b/java/ql/test/query-tests/security/CWE-730/ExpRedos/options deleted file mode 100644 index 591d7fd827b6..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/ExpRedos/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/guava-30.0:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/apache-commons-lang3-3.7 diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedos/ExpRedosTest.java b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java similarity index 100% rename from java/ql/test/query-tests/security/CWE-730/ExpRedos/ExpRedosTest.java rename to java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolyRedosTest.java deleted file mode 100644 index 34e527456c53..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolyRedosTest.java +++ /dev/null @@ -1,84 +0,0 @@ -import java.util.regex.Pattern; -import java.util.function.Predicate; -import javax.servlet.http.HttpServletRequest; -import com.google.common.base.Splitter; - -class PolyRedosTest { - void test(HttpServletRequest request) { - String tainted = request.getParameter("inp"); // $ Source - String reg = "0\\.\\d+E?\\d+!"; - Predicate dummyPred = (s -> s.length() % 7 == 0); - - tainted.matches(reg); // $ Alert - tainted.split(reg); // $ Alert - tainted.split(reg, 7); // $ Alert - tainted.replaceAll(reg, "a"); // $ Alert - tainted.replaceFirst(reg, "a"); // $ Alert - Pattern.matches(reg, tainted); // $ Alert - Pattern.compile(reg).matcher(tainted).matches(); // $ Alert - Pattern.compile(reg).split(tainted); // $ Alert - Pattern.compile(reg, Pattern.DOTALL).split(tainted); // $ Alert - Pattern.compile(reg).split(tainted, 7); // $ Alert - Pattern.compile(reg).splitAsStream(tainted); // $ Alert - Pattern.compile(reg).asPredicate().test(tainted); // $ Alert - Pattern.compile(reg).asMatchPredicate().negate().and(dummyPred).or(dummyPred).test(tainted); // $ Alert - Predicate.not(dummyPred.and(dummyPred.or(Pattern.compile(reg).asPredicate()))).test(tainted); // $ Alert - - Splitter.on(Pattern.compile(reg)).split(tainted); // $ Alert - Splitter.on(reg).split(tainted); - Splitter.onPattern(reg).split(tainted); // $ Alert - Splitter.onPattern(reg).splitToList(tainted); // $ Alert - Splitter.onPattern(reg).limit(7).omitEmptyStrings().trimResults().split(tainted); // $ Alert - Splitter.onPattern(reg).withKeyValueSeparator(" => ").split(tainted); // $ Alert - Splitter.on(";").withKeyValueSeparator(reg).split(tainted); - Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ Alert - - } - - void test2(HttpServletRequest request) { - String tainted = request.getParameter("inp"); // $ Source - - Pattern p1 = Pattern.compile(".*a"); - Pattern p2 = Pattern.compile(".*b"); - - p1.matcher(tainted).matches(); - p2.matcher(tainted).find(); // $ Alert - } - - void test3(HttpServletRequest request) { - String tainted = request.getParameter("inp"); // $ Source - - Pattern p1 = Pattern.compile("ab*b*"); - Pattern p2 = Pattern.compile("cd*d*"); - - p1.matcher(tainted).matches(); // $ Alert - p2.matcher(tainted).find(); - } - - void test4(HttpServletRequest request) { - String tainted = request.getParameter("inp"); // $ Source - - tainted.matches(".*a"); - tainted.replaceAll(".*b", "c"); // $ Alert - } - - static Pattern p3 = Pattern.compile(".*a"); - static Pattern p4 = Pattern.compile(".*b"); - - - void test5(HttpServletRequest request) { - String tainted = request.getParameter("inp"); // $ Source - - p3.asMatchPredicate().test(tainted); - p4.asPredicate().test(tainted); // $ Alert - } - - void test6(HttpServletRequest request) { - Pattern p = Pattern.compile("^a*a*$"); - - p.matcher(request.getParameter("inp")).matches(); // $ Alert - p.matcher(request.getHeader("If-None-Match")).matches(); - p.matcher(request.getRequestURI()).matches(); - p.matcher(request.getCookies()[0].getName()).matches(); - } -} diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.expected b/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.expected deleted file mode 100644 index baac0e0596a0..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.expected +++ /dev/null @@ -1,85 +0,0 @@ -#select -| PolyRedosTest.java:12:9:12:15 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:12:9:12:15 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:13:9:13:15 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:13:9:13:15 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:14:9:14:15 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:14:9:14:15 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:15:9:15:15 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:15:9:15:15 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:16:9:16:15 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:16:9:16:15 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:17:30:17:36 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:17:30:17:36 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:18:38:18:44 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:18:38:18:44 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:19:36:19:42 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:19:36:19:42 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:20:52:20:58 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:20:52:20:58 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:21:36:21:42 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:21:36:21:42 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:22:44:22:50 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:22:44:22:50 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:23:49:23:55 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:23:49:23:55 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:24:92:24:98 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:24:92:24:98 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:25:93:25:99 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:25:93:25:99 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:27:49:27:55 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:27:49:27:55 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:29:39:29:45 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:29:39:29:45 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:30:45:30:51 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:30:45:30:51 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:31:81:31:87 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:31:81:31:87 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:32:69:32:75 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:32:69:32:75 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:34:79:34:85 | tainted | PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:34:79:34:85 | tainted | This $@ that depends on a $@ may run slow on strings starting with '0.9' and with many repetitions of '99'. | PolyRedosTest.java:9:33:9:36 | \\d+ | regular expression | PolyRedosTest.java:8:26:8:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:45:20:45:26 | tainted | PolyRedosTest.java:39:26:39:52 | getParameter(...) : String | PolyRedosTest.java:45:20:45:26 | tainted | This $@ that depends on a $@ may run slow on strings with many repetitions of 'a'. | PolyRedosTest.java:42:39:42:40 | .* | regular expression | PolyRedosTest.java:39:26:39:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:54:20:54:26 | tainted | PolyRedosTest.java:49:26:49:52 | getParameter(...) : String | PolyRedosTest.java:54:20:54:26 | tainted | This $@ that depends on a $@ may run slow on strings starting with 'a' and with many repetitions of 'b'. | PolyRedosTest.java:51:42:51:43 | b* | regular expression | PolyRedosTest.java:49:26:49:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:62:9:62:15 | tainted | PolyRedosTest.java:59:26:59:52 | getParameter(...) : String | PolyRedosTest.java:62:9:62:15 | tainted | This $@ that depends on a $@ may run slow on strings with many repetitions of 'a'. | PolyRedosTest.java:62:29:62:30 | .* | regular expression | PolyRedosTest.java:59:26:59:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:73:31:73:37 | tainted | PolyRedosTest.java:70:26:70:52 | getParameter(...) : String | PolyRedosTest.java:73:31:73:37 | tainted | This $@ that depends on a $@ may run slow on strings with many repetitions of 'a'. | PolyRedosTest.java:66:42:66:43 | .* | regular expression | PolyRedosTest.java:70:26:70:52 | getParameter(...) | user-provided value | -| PolyRedosTest.java:79:19:79:45 | getParameter(...) | PolyRedosTest.java:79:19:79:45 | getParameter(...) | PolyRedosTest.java:79:19:79:45 | getParameter(...) | This $@ that depends on a $@ may run slow on strings with many repetitions of 'a'. | PolyRedosTest.java:77:41:77:42 | a* | regular expression | PolyRedosTest.java:79:19:79:45 | getParameter(...) | user-provided value | -edges -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:12:9:12:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:13:9:13:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:14:9:14:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:15:9:15:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:16:9:16:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:17:30:17:36 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:18:38:18:44 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:19:36:19:42 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:20:52:20:58 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:21:36:21:42 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:22:44:22:50 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:23:49:23:55 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:24:92:24:98 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:25:93:25:99 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:27:49:27:55 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:29:39:29:45 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:30:45:30:51 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:31:81:31:87 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:32:69:32:75 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | PolyRedosTest.java:34:79:34:85 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:39:26:39:52 | getParameter(...) : String | PolyRedosTest.java:45:20:45:26 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:49:26:49:52 | getParameter(...) : String | PolyRedosTest.java:54:20:54:26 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:59:26:59:52 | getParameter(...) : String | PolyRedosTest.java:62:9:62:15 | tainted | provenance | Src:MaD:1 | -| PolyRedosTest.java:70:26:70:52 | getParameter(...) : String | PolyRedosTest.java:73:31:73:37 | tainted | provenance | Src:MaD:1 | -models -| 1 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -nodes -| PolyRedosTest.java:8:26:8:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PolyRedosTest.java:12:9:12:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:13:9:13:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:14:9:14:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:15:9:15:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:16:9:16:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:17:30:17:36 | tainted | semmle.label | tainted | -| PolyRedosTest.java:18:38:18:44 | tainted | semmle.label | tainted | -| PolyRedosTest.java:19:36:19:42 | tainted | semmle.label | tainted | -| PolyRedosTest.java:20:52:20:58 | tainted | semmle.label | tainted | -| PolyRedosTest.java:21:36:21:42 | tainted | semmle.label | tainted | -| PolyRedosTest.java:22:44:22:50 | tainted | semmle.label | tainted | -| PolyRedosTest.java:23:49:23:55 | tainted | semmle.label | tainted | -| PolyRedosTest.java:24:92:24:98 | tainted | semmle.label | tainted | -| PolyRedosTest.java:25:93:25:99 | tainted | semmle.label | tainted | -| PolyRedosTest.java:27:49:27:55 | tainted | semmle.label | tainted | -| PolyRedosTest.java:29:39:29:45 | tainted | semmle.label | tainted | -| PolyRedosTest.java:30:45:30:51 | tainted | semmle.label | tainted | -| PolyRedosTest.java:31:81:31:87 | tainted | semmle.label | tainted | -| PolyRedosTest.java:32:69:32:75 | tainted | semmle.label | tainted | -| PolyRedosTest.java:34:79:34:85 | tainted | semmle.label | tainted | -| PolyRedosTest.java:39:26:39:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PolyRedosTest.java:45:20:45:26 | tainted | semmle.label | tainted | -| PolyRedosTest.java:49:26:49:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PolyRedosTest.java:54:20:54:26 | tainted | semmle.label | tainted | -| PolyRedosTest.java:59:26:59:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PolyRedosTest.java:62:9:62:15 | tainted | semmle.label | tainted | -| PolyRedosTest.java:70:26:70:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| PolyRedosTest.java:73:31:73:37 | tainted | semmle.label | tainted | -| PolyRedosTest.java:79:19:79:45 | getParameter(...) | semmle.label | getParameter(...) | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.qlref b/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.qlref deleted file mode 100644 index f5dd1d5ca3aa..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedos/PolynomialReDoS.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-730/PolynomialReDoS.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedos/options b/java/ql/test/query-tests/security/CWE-730/PolyRedos/options deleted file mode 100644 index 591d7fd827b6..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedos/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/guava-30.0:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/apache-commons-lang3-3.7 diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java new file mode 100644 index 000000000000..449311904605 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -0,0 +1,84 @@ +import java.util.regex.Pattern; +import java.util.function.Predicate; +import javax.servlet.http.HttpServletRequest; +import com.google.common.base.Splitter; + +class PolyRedosTest { + void test(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + String reg = "0\\.\\d+E?\\d+!"; + Predicate dummyPred = (s -> s.length() % 7 == 0); + + tainted.matches(reg); // $ hasPolyRedos + tainted.split(reg); // $ hasPolyRedos + tainted.split(reg, 7); // $ hasPolyRedos + tainted.replaceAll(reg, "a"); // $ hasPolyRedos + tainted.replaceFirst(reg, "a"); // $ hasPolyRedos + Pattern.matches(reg, tainted); // $ hasPolyRedos + Pattern.compile(reg).matcher(tainted).matches(); // $ hasPolyRedos + Pattern.compile(reg).split(tainted); // $ hasPolyRedos + Pattern.compile(reg, Pattern.DOTALL).split(tainted); // $ hasPolyRedos + Pattern.compile(reg).split(tainted, 7); // $ hasPolyRedos + Pattern.compile(reg).splitAsStream(tainted); // $ hasPolyRedos + Pattern.compile(reg).asPredicate().test(tainted); // $ hasPolyRedos + Pattern.compile(reg).asMatchPredicate().negate().and(dummyPred).or(dummyPred).test(tainted); // $ hasPolyRedos + Predicate.not(dummyPred.and(dummyPred.or(Pattern.compile(reg).asPredicate()))).test(tainted); // $ hasPolyRedos + + Splitter.on(Pattern.compile(reg)).split(tainted); // $ hasPolyRedos + Splitter.on(reg).split(tainted); + Splitter.onPattern(reg).split(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).splitToList(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).limit(7).omitEmptyStrings().trimResults().split(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).withKeyValueSeparator(" => ").split(tainted); // $ hasPolyRedos + Splitter.on(";").withKeyValueSeparator(reg).split(tainted); + Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ hasPolyRedos + + } + + void test2(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + Pattern p1 = Pattern.compile(".*a"); + Pattern p2 = Pattern.compile(".*b"); + + p1.matcher(tainted).matches(); + p2.matcher(tainted).find(); // $ hasPolyRedos + } + + void test3(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + Pattern p1 = Pattern.compile("ab*b*"); + Pattern p2 = Pattern.compile("cd*d*"); + + p1.matcher(tainted).matches(); // $ hasPolyRedos + p2.matcher(tainted).find(); + } + + void test4(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + tainted.matches(".*a"); + tainted.replaceAll(".*b", "c"); // $ hasPolyRedos + } + + static Pattern p3 = Pattern.compile(".*a"); + static Pattern p4 = Pattern.compile(".*b"); + + + void test5(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + p3.asMatchPredicate().test(tainted); + p4.asPredicate().test(tainted); // $ hasPolyRedos + } + + void test6(HttpServletRequest request) { + Pattern p = Pattern.compile("^a*a*$"); + + p.matcher(request.getParameter("inp")).matches(); // $ hasPolyRedos + p.matcher(request.getHeader("If-None-Match")).matches(); + p.matcher(request.getRequestURI()).matches(); + p.matcher(request.getCookies()[0].getName()).matches(); + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql new file mode 100644 index 000000000000..d8c1a790e70a --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -0,0 +1,18 @@ +import utils.test.InlineExpectationsTest +import semmle.code.java.security.regexp.PolynomialReDoSQuery + +module HasPolyRedos implements TestSig { + string getARelevantTag() { result = "hasPolyRedos" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasPolyRedos" and + exists(DataFlow::Node sink | + PolynomialRedosFlow::flowTo(sink) and + location = sink.getLocation() and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-730/ReDoS.expected b/java/ql/test/query-tests/security/CWE-730/ReDoS.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedos/ReDoS.ql b/java/ql/test/query-tests/security/CWE-730/ReDoS.ql similarity index 100% rename from java/ql/test/query-tests/security/CWE-730/ExpRedos/ReDoS.ql rename to java/ql/test/query-tests/security/CWE-730/ReDoS.ql diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.expected b/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.expected deleted file mode 100644 index 9d0c7ec5c8b3..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.expected +++ /dev/null @@ -1,102 +0,0 @@ -#select -| RegexInjectionTest.java:17:26:17:47 | ... + ... | RegexInjectionTest.java:14:22:14:52 | getParameter(...) : String | RegexInjectionTest.java:17:26:17:47 | ... + ... | This regular expression is constructed from a $@. | RegexInjectionTest.java:14:22:14:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:24:24:24:30 | pattern | RegexInjectionTest.java:21:22:21:52 | getParameter(...) : String | RegexInjectionTest.java:24:24:24:30 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:21:22:21:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:31:24:31:30 | pattern | RegexInjectionTest.java:28:22:28:52 | getParameter(...) : String | RegexInjectionTest.java:31:24:31:30 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:28:22:28:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:38:31:38:37 | pattern | RegexInjectionTest.java:35:22:35:52 | getParameter(...) : String | RegexInjectionTest.java:38:31:38:37 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:35:22:35:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:45:29:45:35 | pattern | RegexInjectionTest.java:42:22:42:52 | getParameter(...) : String | RegexInjectionTest.java:45:29:45:35 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:42:22:42:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:52:34:52:40 | pattern | RegexInjectionTest.java:49:22:49:52 | getParameter(...) : String | RegexInjectionTest.java:52:34:52:40 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:49:22:49:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:62:28:62:34 | pattern | RegexInjectionTest.java:59:22:59:52 | getParameter(...) : String | RegexInjectionTest.java:62:28:62:34 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:59:22:59:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:69:28:69:34 | pattern | RegexInjectionTest.java:66:22:66:52 | getParameter(...) : String | RegexInjectionTest.java:69:28:69:34 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:66:22:66:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:76:28:76:34 | pattern | RegexInjectionTest.java:73:22:73:52 | getParameter(...) : String | RegexInjectionTest.java:76:28:76:34 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:73:22:73:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:83:26:83:52 | ... + ... | RegexInjectionTest.java:80:22:80:52 | getParameter(...) : String | RegexInjectionTest.java:83:26:83:52 | ... + ... | This regular expression is constructed from a $@. | RegexInjectionTest.java:80:22:80:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:94:40:94:46 | pattern | RegexInjectionTest.java:91:22:91:52 | getParameter(...) : String | RegexInjectionTest.java:94:40:94:46 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:91:22:91:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:101:42:101:48 | pattern | RegexInjectionTest.java:98:22:98:52 | getParameter(...) : String | RegexInjectionTest.java:101:42:101:48 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:98:22:98:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:108:44:108:50 | pattern | RegexInjectionTest.java:105:22:105:52 | getParameter(...) : String | RegexInjectionTest.java:108:44:108:50 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:105:22:105:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:115:41:115:47 | pattern | RegexInjectionTest.java:112:22:112:52 | getParameter(...) : String | RegexInjectionTest.java:115:41:115:47 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:112:22:112:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:122:43:122:49 | pattern | RegexInjectionTest.java:119:22:119:52 | getParameter(...) : String | RegexInjectionTest.java:122:43:122:49 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:119:22:119:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:137:45:137:51 | pattern | RegexInjectionTest.java:134:22:134:52 | getParameter(...) : String | RegexInjectionTest.java:137:45:137:51 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:134:22:134:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:158:31:158:37 | pattern | RegexInjectionTest.java:157:22:157:52 | getParameter(...) : String | RegexInjectionTest.java:158:31:158:37 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:157:22:157:52 | getParameter(...) | user-provided value | -| RegexInjectionTest.java:164:41:164:47 | pattern | RegexInjectionTest.java:162:22:162:52 | getParameter(...) : String | RegexInjectionTest.java:164:41:164:47 | pattern | This regular expression is constructed from a $@. | RegexInjectionTest.java:162:22:162:52 | getParameter(...) | user-provided value | -edges -| RegexInjectionTest.java:14:22:14:52 | getParameter(...) : String | RegexInjectionTest.java:17:26:17:47 | ... + ... | provenance | Src:MaD:16 Sink:MaD:2 | -| RegexInjectionTest.java:21:22:21:52 | getParameter(...) : String | RegexInjectionTest.java:24:24:24:30 | pattern | provenance | Src:MaD:16 Sink:MaD:5 | -| RegexInjectionTest.java:28:22:28:52 | getParameter(...) : String | RegexInjectionTest.java:31:24:31:30 | pattern | provenance | Src:MaD:16 Sink:MaD:6 | -| RegexInjectionTest.java:35:22:35:52 | getParameter(...) : String | RegexInjectionTest.java:38:31:38:37 | pattern | provenance | Src:MaD:16 Sink:MaD:4 | -| RegexInjectionTest.java:42:22:42:52 | getParameter(...) : String | RegexInjectionTest.java:45:29:45:35 | pattern | provenance | Src:MaD:16 Sink:MaD:3 | -| RegexInjectionTest.java:49:22:49:52 | getParameter(...) : String | RegexInjectionTest.java:52:34:52:40 | pattern | provenance | Src:MaD:16 Sink:MaD:7 | -| RegexInjectionTest.java:59:22:59:52 | getParameter(...) : String | RegexInjectionTest.java:62:28:62:34 | pattern | provenance | Src:MaD:16 Sink:MaD:7 | -| RegexInjectionTest.java:66:22:66:52 | getParameter(...) : String | RegexInjectionTest.java:69:28:69:34 | pattern | provenance | Src:MaD:16 Sink:MaD:8 | -| RegexInjectionTest.java:73:22:73:52 | getParameter(...) : String | RegexInjectionTest.java:76:28:76:34 | pattern | provenance | Src:MaD:16 Sink:MaD:9 | -| RegexInjectionTest.java:80:22:80:52 | getParameter(...) : String | RegexInjectionTest.java:83:36:83:42 | pattern : String | provenance | Src:MaD:16 | -| RegexInjectionTest.java:83:32:83:43 | foo(...) : String | RegexInjectionTest.java:83:26:83:52 | ... + ... | provenance | Sink:MaD:2 | -| RegexInjectionTest.java:83:36:83:42 | pattern : String | RegexInjectionTest.java:83:32:83:43 | foo(...) : String | provenance | | -| RegexInjectionTest.java:83:36:83:42 | pattern : String | RegexInjectionTest.java:86:14:86:23 | str : String | provenance | | -| RegexInjectionTest.java:86:14:86:23 | str : String | RegexInjectionTest.java:87:12:87:14 | str : String | provenance | | -| RegexInjectionTest.java:91:22:91:52 | getParameter(...) : String | RegexInjectionTest.java:94:40:94:46 | pattern | provenance | Src:MaD:16 Sink:MaD:10 | -| RegexInjectionTest.java:98:22:98:52 | getParameter(...) : String | RegexInjectionTest.java:101:42:101:48 | pattern | provenance | Src:MaD:16 Sink:MaD:11 | -| RegexInjectionTest.java:105:22:105:52 | getParameter(...) : String | RegexInjectionTest.java:108:44:108:50 | pattern | provenance | Src:MaD:16 Sink:MaD:12 | -| RegexInjectionTest.java:112:22:112:52 | getParameter(...) : String | RegexInjectionTest.java:115:41:115:47 | pattern | provenance | Src:MaD:16 Sink:MaD:13 | -| RegexInjectionTest.java:119:22:119:52 | getParameter(...) : String | RegexInjectionTest.java:122:43:122:49 | pattern | provenance | Src:MaD:16 Sink:MaD:14 | -| RegexInjectionTest.java:134:22:134:52 | getParameter(...) : String | RegexInjectionTest.java:137:45:137:51 | pattern | provenance | Src:MaD:16 Sink:MaD:15 | -| RegexInjectionTest.java:157:22:157:52 | getParameter(...) : String | RegexInjectionTest.java:158:31:158:37 | pattern | provenance | Src:MaD:16 Sink:MaD:1 | -| RegexInjectionTest.java:162:22:162:52 | getParameter(...) : String | RegexInjectionTest.java:164:41:164:47 | pattern | provenance | Src:MaD:16 Sink:MaD:7 | -models -| 1 | Sink: com.google.common.base; Splitter; false; onPattern; (String); ; Argument[0]; regex-use[]; manual | -| 2 | Sink: java.lang; String; false; matches; (String); ; Argument[0]; regex-use[f-1]; manual | -| 3 | Sink: java.lang; String; false; replaceAll; (String,String); ; Argument[0]; regex-use[-1]; manual | -| 4 | Sink: java.lang; String; false; replaceFirst; (String,String); ; Argument[0]; regex-use[-1]; manual | -| 5 | Sink: java.lang; String; false; split; (String); ; Argument[0]; regex-use[-1]; manual | -| 6 | Sink: java.lang; String; false; split; (String,int); ; Argument[0]; regex-use[-1]; manual | -| 7 | Sink: java.util.regex; Pattern; false; compile; (String); ; Argument[0]; regex-use[]; manual | -| 8 | Sink: java.util.regex; Pattern; false; compile; (String,int); ; Argument[0]; regex-use[]; manual | -| 9 | Sink: java.util.regex; Pattern; false; matches; (String,CharSequence); ; Argument[0]; regex-use[f1]; manual | -| 10 | Sink: org.apache.commons.lang3; RegExUtils; false; removeAll; (String,String); ; Argument[1]; regex-use; manual | -| 11 | Sink: org.apache.commons.lang3; RegExUtils; false; removeFirst; (String,String); ; Argument[1]; regex-use; manual | -| 12 | Sink: org.apache.commons.lang3; RegExUtils; false; removePattern; (String,String); ; Argument[1]; regex-use; manual | -| 13 | Sink: org.apache.commons.lang3; RegExUtils; false; replaceAll; (String,String,String); ; Argument[1]; regex-use; manual | -| 14 | Sink: org.apache.commons.lang3; RegExUtils; false; replaceFirst; (String,String,String); ; Argument[1]; regex-use; manual | -| 15 | Sink: org.apache.commons.lang3; RegExUtils; false; replacePattern; (String,String,String); ; Argument[1]; regex-use; manual | -| 16 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -nodes -| RegexInjectionTest.java:14:22:14:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:17:26:17:47 | ... + ... | semmle.label | ... + ... | -| RegexInjectionTest.java:21:22:21:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:24:24:24:30 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:28:22:28:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:31:24:31:30 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:35:22:35:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:38:31:38:37 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:42:22:42:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:45:29:45:35 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:49:22:49:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:52:34:52:40 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:59:22:59:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:62:28:62:34 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:66:22:66:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:69:28:69:34 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:73:22:73:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:76:28:76:34 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:80:22:80:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:83:26:83:52 | ... + ... | semmle.label | ... + ... | -| RegexInjectionTest.java:83:32:83:43 | foo(...) : String | semmle.label | foo(...) : String | -| RegexInjectionTest.java:83:36:83:42 | pattern : String | semmle.label | pattern : String | -| RegexInjectionTest.java:86:14:86:23 | str : String | semmle.label | str : String | -| RegexInjectionTest.java:87:12:87:14 | str : String | semmle.label | str : String | -| RegexInjectionTest.java:91:22:91:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:94:40:94:46 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:98:22:98:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:101:42:101:48 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:105:22:105:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:108:44:108:50 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:112:22:112:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:115:41:115:47 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:119:22:119:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:122:43:122:49 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:134:22:134:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:137:45:137:51 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:157:22:157:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:158:31:158:37 | pattern | semmle.label | pattern | -| RegexInjectionTest.java:162:22:162:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| RegexInjectionTest.java:164:41:164:47 | pattern | semmle.label | pattern | -subpaths -| RegexInjectionTest.java:83:36:83:42 | pattern : String | RegexInjectionTest.java:86:14:86:23 | str : String | RegexInjectionTest.java:87:12:87:14 | str : String | RegexInjectionTest.java:83:32:83:43 | foo(...) : String | diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.java b/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.java deleted file mode 100644 index c4643de9a779..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.java +++ /dev/null @@ -1,166 +0,0 @@ -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletException; - -import org.apache.commons.lang3.RegExUtils; -import com.google.common.base.Splitter; - -public class RegexInjectionTest extends HttpServlet { - public boolean string1(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.matches("^" + pattern + "=.*$"); // $ Alert - } - - public boolean string2(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.split(pattern).length > 0; // $ Alert - } - - public boolean string3(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.split(pattern, 0).length > 0; // $ Alert - } - - public boolean string4(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.replaceFirst(pattern, "").length() > 0; // $ Alert - } - - public boolean string5(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.replaceAll(pattern, "").length() > 0; // $ Alert - } - - public boolean pattern1(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - Pattern pt = Pattern.compile(pattern); // $ Alert - Matcher matcher = pt.matcher(input); - - return matcher.find(); - } - - public boolean pattern2(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return Pattern.compile(pattern).matcher(input).matches(); // $ Alert - } - - public boolean pattern3(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return Pattern.compile(pattern, 0).matcher(input).matches(); // $ Alert - } - - public boolean pattern4(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return Pattern.matches(pattern, input); // $ Alert - } - - public boolean pattern5(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return input.matches("^" + foo(pattern) + "=.*$"); // $ Alert - } - - String foo(String str) { - return str; - } - - public boolean apache1(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.removeAll(input, pattern).length() > 0; // $ Alert - } - - public boolean apache2(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.removeFirst(input, pattern).length() > 0; // $ Alert - } - - public boolean apache3(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.removePattern(input, pattern).length() > 0; // $ Alert - } - - public boolean apache4(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.replaceAll(input, pattern, "").length() > 0; // $ Alert - } - - public boolean apache5(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.replaceFirst(input, pattern, "").length() > 0; // $ Alert - } - - public boolean apache6(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); - String input = request.getParameter("input"); - - Pattern pt = (Pattern)(Object) pattern; - return RegExUtils.replaceFirst(input, pt, "").length() > 0; // Safe: Pattern compile is the sink instead - } - - public boolean apache7(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - String input = request.getParameter("input"); - - return RegExUtils.replacePattern(input, pattern, "").length() > 0; // $ Alert - } - - // test `Pattern.quote` sanitizer - public boolean quoteTest(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); - String input = request.getParameter("input"); - - return input.matches(Pattern.quote(pattern)); // Safe - } - - // test `Pattern.LITERAL` sanitizer - public boolean literalTest(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); - String input = request.getParameter("input"); - - return Pattern.compile(pattern, Pattern.LITERAL).matcher(input).matches(); // Safe - } - - public Splitter guava1(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - return Splitter.onPattern(pattern); // $ Alert - } - - public Splitter guava2(javax.servlet.http.HttpServletRequest request) { - String pattern = request.getParameter("pattern"); // $ Source - // sink is `Pattern.compile` - return Splitter.on(Pattern.compile(pattern)); // $ Alert - } -} diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.qlref deleted file mode 100644 index 613229f956b6..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjection/RegexInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-730/RegexInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjection/options b/java/ql/test/query-tests/security/CWE-730/RegexInjection/options deleted file mode 100644 index 591d7fd827b6..000000000000 --- a/java/ql/test/query-tests/security/CWE-730/RegexInjection/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/guava-30.0:${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/apache-commons-lang3-3.7 diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.java b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.java new file mode 100644 index 000000000000..5c7a3ca05746 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.java @@ -0,0 +1,166 @@ +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletException; + +import org.apache.commons.lang3.RegExUtils; +import com.google.common.base.Splitter; + +public class RegexInjectionTest extends HttpServlet { + public boolean string1(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.matches("^" + pattern + "=.*$"); // $ hasRegexInjection + } + + public boolean string2(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.split(pattern).length > 0; // $ hasRegexInjection + } + + public boolean string3(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.split(pattern, 0).length > 0; // $ hasRegexInjection + } + + public boolean string4(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.replaceFirst(pattern, "").length() > 0; // $ hasRegexInjection + } + + public boolean string5(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.replaceAll(pattern, "").length() > 0; // $ hasRegexInjection + } + + public boolean pattern1(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + Pattern pt = Pattern.compile(pattern); // $ hasRegexInjection + Matcher matcher = pt.matcher(input); + + return matcher.find(); + } + + public boolean pattern2(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return Pattern.compile(pattern).matcher(input).matches(); // $ hasRegexInjection + } + + public boolean pattern3(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return Pattern.compile(pattern, 0).matcher(input).matches(); // $ hasRegexInjection + } + + public boolean pattern4(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return Pattern.matches(pattern, input); // $ hasRegexInjection + } + + public boolean pattern5(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.matches("^" + foo(pattern) + "=.*$"); // $ hasRegexInjection + } + + String foo(String str) { + return str; + } + + public boolean apache1(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.removeAll(input, pattern).length() > 0; // $ hasRegexInjection + } + + public boolean apache2(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.removeFirst(input, pattern).length() > 0; // $ hasRegexInjection + } + + public boolean apache3(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.removePattern(input, pattern).length() > 0; // $ hasRegexInjection + } + + public boolean apache4(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.replaceAll(input, pattern, "").length() > 0; // $ hasRegexInjection + } + + public boolean apache5(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.replaceFirst(input, pattern, "").length() > 0; // $ hasRegexInjection + } + + public boolean apache6(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + Pattern pt = (Pattern)(Object) pattern; + return RegExUtils.replaceFirst(input, pt, "").length() > 0; // Safe: Pattern compile is the sink instead + } + + public boolean apache7(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return RegExUtils.replacePattern(input, pattern, "").length() > 0; // $ hasRegexInjection + } + + // test `Pattern.quote` sanitizer + public boolean quoteTest(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return input.matches(Pattern.quote(pattern)); // Safe + } + + // test `Pattern.LITERAL` sanitizer + public boolean literalTest(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + String input = request.getParameter("input"); + + return Pattern.compile(pattern, Pattern.LITERAL).matcher(input).matches(); // Safe + } + + public Splitter guava1(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + return Splitter.onPattern(pattern); // $ hasRegexInjection + } + + public Splitter guava2(javax.servlet.http.HttpServletRequest request) { + String pattern = request.getParameter("pattern"); + // sink is `Pattern.compile` + return Splitter.on(Pattern.compile(pattern)); // $ hasRegexInjection + } +} diff --git a/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql new file mode 100644 index 000000000000..cba14c212e98 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/RegexInjectionTest.ql @@ -0,0 +1,18 @@ +import java +import utils.test.InlineExpectationsTest +import semmle.code.java.security.regexp.RegexInjectionQuery + +module RegexInjectionTest implements TestSig { + string getARelevantTag() { result = "hasRegexInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasRegexInjection" and + exists(RegexInjectionFlow::PathNode sink | RegexInjectionFlow::flowPath(_, sink) | + location = sink.getNode().getLocation() and + element = sink.getNode().toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-730/options b/java/ql/test/query-tests/security/CWE-730/options new file mode 100644 index 000000000000..884cb21114c3 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/guava-30.0:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/apache-commons-lang3-3.7 diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected index 3509f576dfa3..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected +++ b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.expected @@ -1,12 +0,0 @@ -#select -| RsaWithoutOaepTest.java:5:44:5:62 | "RSA/ECB/NoPadding" | RsaWithoutOaepTest.java:5:44:5:62 | "RSA/ECB/NoPadding" | RsaWithoutOaepTest.java:5:44:5:62 | "RSA/ECB/NoPadding" | This specification is used to $@ without OAEP padding. | RsaWithoutOaepTest.java:5:44:5:62 | "RSA/ECB/NoPadding" | initialize an RSA cipher | -| RsaWithoutOaepTest.java:15:32:15:50 | "RSA/ECB/NoPadding" : String | RsaWithoutOaepTest.java:15:32:15:50 | "RSA/ECB/NoPadding" : String | RsaWithoutOaepTest.java:11:35:11:38 | spec | This specification is used to $@ without OAEP padding. | RsaWithoutOaepTest.java:11:35:11:38 | spec | initialize an RSA cipher | -edges -| RsaWithoutOaepTest.java:10:29:10:39 | spec : String | RsaWithoutOaepTest.java:11:35:11:38 | spec | provenance | | -| RsaWithoutOaepTest.java:15:32:15:50 | "RSA/ECB/NoPadding" : String | RsaWithoutOaepTest.java:10:29:10:39 | spec : String | provenance | | -nodes -| RsaWithoutOaepTest.java:5:44:5:62 | "RSA/ECB/NoPadding" | semmle.label | "RSA/ECB/NoPadding" | -| RsaWithoutOaepTest.java:10:29:10:39 | spec : String | semmle.label | spec : String | -| RsaWithoutOaepTest.java:11:35:11:38 | spec | semmle.label | spec | -| RsaWithoutOaepTest.java:15:32:15:50 | "RSA/ECB/NoPadding" : String | semmle.label | "RSA/ECB/NoPadding" : String | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.java b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.java index d953522d76be..b8a1c73110c5 100644 --- a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.java +++ b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.java @@ -2,16 +2,16 @@ class RsaWithoutOaep { public void test() throws Exception { - Cipher rsaBad = Cipher.getInstance("RSA/ECB/NoPadding"); // $ Alert + Cipher rsaBad = Cipher.getInstance("RSA/ECB/NoPadding"); // $hasTaintFlow - Cipher rsaGood = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); + Cipher rsaGood = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); } public Cipher getCipher(String spec) throws Exception { - return Cipher.getInstance(spec); // $ Sink + return Cipher.getInstance(spec); // $hasTaintFlow } public void test2() throws Exception { - Cipher rsa = getCipher("RSA/ECB/NoPadding"); // $ Alert + Cipher rsa = getCipher("RSA/ECB/NoPadding"); } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql new file mode 100644 index 000000000000..b91765e6b7cc --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.ql @@ -0,0 +1,4 @@ +import java +import utils.test.InlineFlowTest +import semmle.code.java.security.RsaWithoutOaepQuery +import TaintFlowTest diff --git a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.qlref b/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.qlref deleted file mode 100644 index 72ada3ecfc25..000000000000 --- a/java/ql/test/query-tests/security/CWE-780/RsaWithoutOaepTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-780/RsaWithoutOaep.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjection.java b/java/ql/test/query-tests/security/CWE-917/OgnlInjection.java index 99f641f11d46..777bbcb06aac 100644 --- a/java/ql/test/query-tests/security/CWE-917/OgnlInjection.java +++ b/java/ql/test/query-tests/security/CWE-917/OgnlInjection.java @@ -13,61 +13,61 @@ @Controller public class OgnlInjection { @RequestMapping - public void testOgnlParseExpression(@RequestParam String expr) throws Exception { // $ Source + public void testOgnlParseExpression(@RequestParam String expr) throws Exception { Object tree = Ognl.parseExpression(expr); - Ognl.getValue(tree, new HashMap<>(), new Object()); // $ Alert - Ognl.setValue(tree, new HashMap<>(), new Object()); // $ Alert + Ognl.getValue(tree, new HashMap<>(), new Object()); // $hasOgnlInjection + Ognl.setValue(tree, new HashMap<>(), new Object()); // $hasOgnlInjection Node node = (Node) tree; - node.getValue(null, new Object()); // $ Alert - node.setValue(null, new Object(), new Object()); // $ Alert + node.getValue(null, new Object()); // $hasOgnlInjection + node.setValue(null, new Object(), new Object()); // $hasOgnlInjection } @RequestMapping - public void testOgnlCompileExpression(@RequestParam String expr) throws Exception { // $ Source + public void testOgnlCompileExpression(@RequestParam String expr) throws Exception { Node tree = Ognl.compileExpression(null, new Object(), expr); - Ognl.getValue(tree, new HashMap<>(), new Object()); // $ Alert - Ognl.setValue(tree, new HashMap<>(), new Object()); // $ Alert + Ognl.getValue(tree, new HashMap<>(), new Object()); // $hasOgnlInjection + Ognl.setValue(tree, new HashMap<>(), new Object()); // $hasOgnlInjection - tree.getValue(null, new Object()); // $ Alert - tree.setValue(null, new Object(), new Object()); // $ Alert + tree.getValue(null, new Object()); // $hasOgnlInjection + tree.setValue(null, new Object(), new Object()); // $hasOgnlInjection } @RequestMapping - public void testOgnlDirectlyToGetSet(@RequestParam String expr) throws Exception { // $ Source - Ognl.getValue(expr, new Object()); // $ Alert - Ognl.setValue(expr, new Object(), new Object()); // $ Alert + public void testOgnlDirectlyToGetSet(@RequestParam String expr) throws Exception { + Ognl.getValue(expr, new Object()); // $hasOgnlInjection + Ognl.setValue(expr, new Object(), new Object()); // $hasOgnlInjection } @RequestMapping - public void testStruts(@RequestParam String expr) throws Exception { // $ Source + public void testStruts(@RequestParam String expr) throws Exception { OgnlUtil ognl = new OgnlUtil(); - ognl.getValue(expr, new HashMap<>(), new Object()); // $ Alert - ognl.setValue(expr, new HashMap<>(), new Object(), new Object()); // $ Alert - new OgnlUtil().callMethod(expr, new HashMap<>(), new Object()); // $ Alert + ognl.getValue(expr, new HashMap<>(), new Object()); // $hasOgnlInjection + ognl.setValue(expr, new HashMap<>(), new Object(), new Object()); // $hasOgnlInjection + new OgnlUtil().callMethod(expr, new HashMap<>(), new Object()); // $hasOgnlInjection } @RequestMapping - public void testExpressionAccessor(@RequestParam String expr) throws Exception { // $ Source + public void testExpressionAccessor(@RequestParam String expr) throws Exception { Node tree = Ognl.compileExpression(null, new Object(), expr); ExpressionAccessor accessor = tree.getAccessor(); - accessor.get(null, new Object()); // $ Alert - accessor.set(null, new Object(), new Object()); // $ Alert + accessor.get(null, new Object()); // $hasOgnlInjection + accessor.set(null, new Object(), new Object()); // $hasOgnlInjection - Ognl.getValue(accessor, null, new Object()); // $ Alert - Ognl.setValue(accessor, null, new Object()); // $ Alert + Ognl.getValue(accessor, null, new Object()); // $hasOgnlInjection + Ognl.setValue(accessor, null, new Object()); // $hasOgnlInjection } @RequestMapping - public void testExpressionAccessorSetExpression(@RequestParam String expr) throws Exception { // $ Source + public void testExpressionAccessorSetExpression(@RequestParam String expr) throws Exception { Node tree = Ognl.compileExpression(null, new Object(), "\"some safe expression\".toString()"); ExpressionAccessor accessor = tree.getAccessor(); Node taintedTree = Ognl.compileExpression(null, new Object(), expr); accessor.setExpression(taintedTree); - accessor.get(null, new Object()); // $ Alert - accessor.set(null, new Object(), new Object()); // $ Alert + accessor.get(null, new Object()); // $hasOgnlInjection + accessor.set(null, new Object(), new Object()); // $hasOgnlInjection - Ognl.getValue(accessor, null, new Object()); // $ Alert - Ognl.setValue(accessor, null, new Object()); // $ Alert + Ognl.getValue(accessor, null, new Object()); // $hasOgnlInjection + Ognl.setValue(accessor, null, new Object()); // $hasOgnlInjection } } diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected index bcdf14e0c2ba..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected +++ b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.expected @@ -1,109 +0,0 @@ -#select -| OgnlInjection.java:18:19:18:22 | tree | OgnlInjection.java:16:39:16:63 | expr : String | OgnlInjection.java:18:19:18:22 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:16:39:16:63 | expr | user-provided value | -| OgnlInjection.java:19:19:19:22 | tree | OgnlInjection.java:16:39:16:63 | expr : String | OgnlInjection.java:19:19:19:22 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:16:39:16:63 | expr | user-provided value | -| OgnlInjection.java:22:5:22:8 | node | OgnlInjection.java:16:39:16:63 | expr : String | OgnlInjection.java:22:5:22:8 | node | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:16:39:16:63 | expr | user-provided value | -| OgnlInjection.java:23:5:23:8 | node | OgnlInjection.java:16:39:16:63 | expr : String | OgnlInjection.java:23:5:23:8 | node | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:16:39:16:63 | expr | user-provided value | -| OgnlInjection.java:29:19:29:22 | tree | OgnlInjection.java:27:41:27:65 | expr : String | OgnlInjection.java:29:19:29:22 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:27:41:27:65 | expr | user-provided value | -| OgnlInjection.java:30:19:30:22 | tree | OgnlInjection.java:27:41:27:65 | expr : String | OgnlInjection.java:30:19:30:22 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:27:41:27:65 | expr | user-provided value | -| OgnlInjection.java:32:5:32:8 | tree | OgnlInjection.java:27:41:27:65 | expr : String | OgnlInjection.java:32:5:32:8 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:27:41:27:65 | expr | user-provided value | -| OgnlInjection.java:33:5:33:8 | tree | OgnlInjection.java:27:41:27:65 | expr : String | OgnlInjection.java:33:5:33:8 | tree | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:27:41:27:65 | expr | user-provided value | -| OgnlInjection.java:38:19:38:22 | expr | OgnlInjection.java:37:40:37:64 | expr : String | OgnlInjection.java:38:19:38:22 | expr | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:37:40:37:64 | expr | user-provided value | -| OgnlInjection.java:39:19:39:22 | expr | OgnlInjection.java:37:40:37:64 | expr : String | OgnlInjection.java:39:19:39:22 | expr | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:37:40:37:64 | expr | user-provided value | -| OgnlInjection.java:45:19:45:22 | expr | OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:45:19:45:22 | expr | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:43:26:43:50 | expr | user-provided value | -| OgnlInjection.java:46:19:46:22 | expr | OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:46:19:46:22 | expr | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:43:26:43:50 | expr | user-provided value | -| OgnlInjection.java:47:31:47:34 | expr | OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:47:31:47:34 | expr | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:43:26:43:50 | expr | user-provided value | -| OgnlInjection.java:54:5:54:12 | accessor | OgnlInjection.java:51:38:51:62 | expr : String | OgnlInjection.java:54:5:54:12 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:51:38:51:62 | expr | user-provided value | -| OgnlInjection.java:55:5:55:12 | accessor | OgnlInjection.java:51:38:51:62 | expr : String | OgnlInjection.java:55:5:55:12 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:51:38:51:62 | expr | user-provided value | -| OgnlInjection.java:57:19:57:26 | accessor | OgnlInjection.java:51:38:51:62 | expr : String | OgnlInjection.java:57:19:57:26 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:51:38:51:62 | expr | user-provided value | -| OgnlInjection.java:58:19:58:26 | accessor | OgnlInjection.java:51:38:51:62 | expr : String | OgnlInjection.java:58:19:58:26 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:51:38:51:62 | expr | user-provided value | -| OgnlInjection.java:67:5:67:12 | accessor | OgnlInjection.java:62:51:62:75 | expr : String | OgnlInjection.java:67:5:67:12 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:62:51:62:75 | expr | user-provided value | -| OgnlInjection.java:68:5:68:12 | accessor | OgnlInjection.java:62:51:62:75 | expr : String | OgnlInjection.java:68:5:68:12 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:62:51:62:75 | expr | user-provided value | -| OgnlInjection.java:70:19:70:26 | accessor | OgnlInjection.java:62:51:62:75 | expr : String | OgnlInjection.java:70:19:70:26 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:62:51:62:75 | expr | user-provided value | -| OgnlInjection.java:71:19:71:26 | accessor | OgnlInjection.java:62:51:62:75 | expr : String | OgnlInjection.java:71:19:71:26 | accessor | OGNL Expression Language statement depends on a $@. | OgnlInjection.java:62:51:62:75 | expr | user-provided value | -edges -| OgnlInjection.java:16:39:16:63 | expr : String | OgnlInjection.java:17:40:17:43 | expr : String | provenance | | -| OgnlInjection.java:17:19:17:44 | parseExpression(...) : Object | OgnlInjection.java:18:19:18:22 | tree | provenance | Sink:MaD:8 | -| OgnlInjection.java:17:19:17:44 | parseExpression(...) : Object | OgnlInjection.java:19:19:19:22 | tree | provenance | Sink:MaD:9 | -| OgnlInjection.java:17:19:17:44 | parseExpression(...) : Object | OgnlInjection.java:21:17:21:27 | (...)... : Object | provenance | | -| OgnlInjection.java:17:40:17:43 | expr : String | OgnlInjection.java:17:19:17:44 | parseExpression(...) : Object | provenance | Config | -| OgnlInjection.java:21:17:21:27 | (...)... : Object | OgnlInjection.java:22:5:22:8 | node | provenance | Sink:MaD:6 | -| OgnlInjection.java:21:17:21:27 | (...)... : Object | OgnlInjection.java:23:5:23:8 | node | provenance | Sink:MaD:7 | -| OgnlInjection.java:27:41:27:65 | expr : String | OgnlInjection.java:28:60:28:63 | expr : String | provenance | | -| OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | OgnlInjection.java:29:19:29:22 | tree | provenance | Sink:MaD:8 | -| OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | OgnlInjection.java:30:19:30:22 | tree | provenance | Sink:MaD:9 | -| OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | OgnlInjection.java:32:5:32:8 | tree | provenance | Sink:MaD:6 | -| OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | OgnlInjection.java:33:5:33:8 | tree | provenance | Sink:MaD:7 | -| OgnlInjection.java:28:60:28:63 | expr : String | OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | provenance | Config | -| OgnlInjection.java:37:40:37:64 | expr : String | OgnlInjection.java:38:19:38:22 | expr | provenance | Sink:MaD:8 | -| OgnlInjection.java:37:40:37:64 | expr : String | OgnlInjection.java:39:19:39:22 | expr | provenance | Sink:MaD:9 | -| OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:45:19:45:22 | expr | provenance | Sink:MaD:2 | -| OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:46:19:46:22 | expr | provenance | Sink:MaD:3 | -| OgnlInjection.java:43:26:43:50 | expr : String | OgnlInjection.java:47:31:47:34 | expr | provenance | Sink:MaD:1 | -| OgnlInjection.java:51:38:51:62 | expr : String | OgnlInjection.java:52:60:52:63 | expr : String | provenance | | -| OgnlInjection.java:52:17:52:64 | compileExpression(...) : Node | OgnlInjection.java:53:35:53:38 | tree : Node | provenance | | -| OgnlInjection.java:52:60:52:63 | expr : String | OgnlInjection.java:52:17:52:64 | compileExpression(...) : Node | provenance | Config | -| OgnlInjection.java:53:35:53:38 | tree : Node | OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | provenance | Config | -| OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | OgnlInjection.java:54:5:54:12 | accessor | provenance | Sink:MaD:4 | -| OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | OgnlInjection.java:55:5:55:12 | accessor | provenance | Sink:MaD:5 | -| OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | OgnlInjection.java:57:19:57:26 | accessor | provenance | Sink:MaD:8 | -| OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | OgnlInjection.java:58:19:58:26 | accessor | provenance | Sink:MaD:9 | -| OgnlInjection.java:62:51:62:75 | expr : String | OgnlInjection.java:65:67:65:70 | expr : String | provenance | | -| OgnlInjection.java:65:24:65:71 | compileExpression(...) : Node | OgnlInjection.java:66:28:66:38 | taintedTree : Node | provenance | | -| OgnlInjection.java:65:67:65:70 | expr : String | OgnlInjection.java:65:24:65:71 | compileExpression(...) : Node | provenance | Config | -| OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | OgnlInjection.java:67:5:67:12 | accessor | provenance | Sink:MaD:4 | -| OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | OgnlInjection.java:68:5:68:12 | accessor | provenance | Sink:MaD:5 | -| OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | OgnlInjection.java:70:19:70:26 | accessor | provenance | Sink:MaD:8 | -| OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | OgnlInjection.java:71:19:71:26 | accessor | provenance | Sink:MaD:9 | -| OgnlInjection.java:66:28:66:38 | taintedTree : Node | OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | provenance | Config | -models -| 1 | Sink: com.opensymphony.xwork2.ognl; OgnlUtil; false; callMethod; ; ; Argument[0]; ognl-injection; manual | -| 2 | Sink: com.opensymphony.xwork2.ognl; OgnlUtil; false; getValue; ; ; Argument[0]; ognl-injection; manual | -| 3 | Sink: com.opensymphony.xwork2.ognl; OgnlUtil; false; setValue; ; ; Argument[0]; ognl-injection; manual | -| 4 | Sink: ognl.enhance; ExpressionAccessor; true; get; ; ; Argument[this]; ognl-injection; manual | -| 5 | Sink: ognl.enhance; ExpressionAccessor; true; set; ; ; Argument[this]; ognl-injection; manual | -| 6 | Sink: ognl; Node; false; getValue; ; ; Argument[this]; ognl-injection; manual | -| 7 | Sink: ognl; Node; false; setValue; ; ; Argument[this]; ognl-injection; manual | -| 8 | Sink: ognl; Ognl; false; getValue; ; ; Argument[0]; ognl-injection; manual | -| 9 | Sink: ognl; Ognl; false; setValue; ; ; Argument[0]; ognl-injection; manual | -nodes -| OgnlInjection.java:16:39:16:63 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:17:19:17:44 | parseExpression(...) : Object | semmle.label | parseExpression(...) : Object | -| OgnlInjection.java:17:40:17:43 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:18:19:18:22 | tree | semmle.label | tree | -| OgnlInjection.java:19:19:19:22 | tree | semmle.label | tree | -| OgnlInjection.java:21:17:21:27 | (...)... : Object | semmle.label | (...)... : Object | -| OgnlInjection.java:22:5:22:8 | node | semmle.label | node | -| OgnlInjection.java:23:5:23:8 | node | semmle.label | node | -| OgnlInjection.java:27:41:27:65 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:28:17:28:64 | compileExpression(...) : Node | semmle.label | compileExpression(...) : Node | -| OgnlInjection.java:28:60:28:63 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:29:19:29:22 | tree | semmle.label | tree | -| OgnlInjection.java:30:19:30:22 | tree | semmle.label | tree | -| OgnlInjection.java:32:5:32:8 | tree | semmle.label | tree | -| OgnlInjection.java:33:5:33:8 | tree | semmle.label | tree | -| OgnlInjection.java:37:40:37:64 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:38:19:38:22 | expr | semmle.label | expr | -| OgnlInjection.java:39:19:39:22 | expr | semmle.label | expr | -| OgnlInjection.java:43:26:43:50 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:45:19:45:22 | expr | semmle.label | expr | -| OgnlInjection.java:46:19:46:22 | expr | semmle.label | expr | -| OgnlInjection.java:47:31:47:34 | expr | semmle.label | expr | -| OgnlInjection.java:51:38:51:62 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:52:17:52:64 | compileExpression(...) : Node | semmle.label | compileExpression(...) : Node | -| OgnlInjection.java:52:60:52:63 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:53:35:53:38 | tree : Node | semmle.label | tree : Node | -| OgnlInjection.java:53:35:53:52 | getAccessor(...) : ExpressionAccessor | semmle.label | getAccessor(...) : ExpressionAccessor | -| OgnlInjection.java:54:5:54:12 | accessor | semmle.label | accessor | -| OgnlInjection.java:55:5:55:12 | accessor | semmle.label | accessor | -| OgnlInjection.java:57:19:57:26 | accessor | semmle.label | accessor | -| OgnlInjection.java:58:19:58:26 | accessor | semmle.label | accessor | -| OgnlInjection.java:62:51:62:75 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:65:24:65:71 | compileExpression(...) : Node | semmle.label | compileExpression(...) : Node | -| OgnlInjection.java:65:67:65:70 | expr : String | semmle.label | expr : String | -| OgnlInjection.java:66:5:66:12 | accessor [post update] : ExpressionAccessor | semmle.label | accessor [post update] : ExpressionAccessor | -| OgnlInjection.java:66:28:66:38 | taintedTree : Node | semmle.label | taintedTree : Node | -| OgnlInjection.java:67:5:67:12 | accessor | semmle.label | accessor | -| OgnlInjection.java:68:5:68:12 | accessor | semmle.label | accessor | -| OgnlInjection.java:70:19:70:26 | accessor | semmle.label | accessor | -| OgnlInjection.java:71:19:71:26 | accessor | semmle.label | accessor | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql new file mode 100644 index 000000000000..5957bdf5fa28 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.OgnlInjectionQuery +import utils.test.InlineExpectationsTest + +module OgnlInjectionTest implements TestSig { + string getARelevantTag() { result = "hasOgnlInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasOgnlInjection" and + exists(DataFlow::Node sink | OgnlInjectionFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.qlref b/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.qlref deleted file mode 100644 index f27fdc29657f..000000000000 --- a/java/ql/test/query-tests/security/CWE-917/OgnlInjectionTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-917/OgnlInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRF.java b/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRF.java index 0fcb3c129754..a3f476ccfec4 100644 --- a/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRF.java @@ -24,38 +24,38 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String sink = request.getParameter("uri"); // $ Source + String sink = request.getParameter("uri"); URI uri = new URI(sink); - HttpGet httpGet = new HttpGet(uri); // $ Alert + HttpGet httpGet = new HttpGet(uri); // $ SSRF HttpGet httpGet2 = new HttpGet(); - httpGet2.setURI(uri); // $ Alert + httpGet2.setURI(uri); // $ SSRF - new HttpHead(uri); // $ Alert - new HttpPost(uri); // $ Alert - new HttpPut(uri); // $ Alert - new HttpDelete(uri); // $ Alert - new HttpOptions(uri); // $ Alert - new HttpTrace(uri); // $ Alert - new HttpPatch(uri); // $ Alert + new HttpHead(uri); // $ SSRF + new HttpPost(uri); // $ SSRF + new HttpPut(uri); // $ SSRF + new HttpDelete(uri); // $ SSRF + new HttpOptions(uri); // $ SSRF + new HttpTrace(uri); // $ SSRF + new HttpPatch(uri); // $ SSRF - new BasicHttpRequest(new BasicRequestLine("GET", uri.toString(), null)); // $ Alert - new BasicHttpRequest("GET", uri.toString()); // $ Alert - new BasicHttpRequest("GET", uri.toString(), null); // $ Alert + new BasicHttpRequest(new BasicRequestLine("GET", uri.toString(), null)); // $ SSRF + new BasicHttpRequest("GET", uri.toString()); // $ SSRF + new BasicHttpRequest("GET", uri.toString(), null); // $ SSRF - new BasicHttpEntityEnclosingRequest(new BasicRequestLine("GET", uri.toString(), null)); // $ Alert - new BasicHttpEntityEnclosingRequest("GET", uri.toString()); // $ Alert - new BasicHttpEntityEnclosingRequest("GET", uri.toString(), null); // $ Alert + new BasicHttpEntityEnclosingRequest(new BasicRequestLine("GET", uri.toString(), null)); // $ SSRF + new BasicHttpEntityEnclosingRequest("GET", uri.toString()); // $ SSRF + new BasicHttpEntityEnclosingRequest("GET", uri.toString(), null); // $ SSRF - RequestBuilder.get(uri); // $ Alert - RequestBuilder.post(uri); // $ Alert - RequestBuilder.put(uri); // $ Alert - RequestBuilder.delete(uri); // $ Alert - RequestBuilder.options(uri); // $ Alert - RequestBuilder.head(uri); // $ Alert - RequestBuilder.trace(uri); // $ Alert - RequestBuilder.patch(uri); // $ Alert - RequestBuilder.get("").setUri(uri); // $ Alert + RequestBuilder.get(uri); // $ SSRF + RequestBuilder.post(uri); // $ SSRF + RequestBuilder.put(uri); // $ SSRF + RequestBuilder.delete(uri); // $ SSRF + RequestBuilder.options(uri); // $ SSRF + RequestBuilder.head(uri); // $ SSRF + RequestBuilder.trace(uri); // $ SSRF + RequestBuilder.patch(uri); // $ SSRF + RequestBuilder.get("").setUri(uri); // $ SSRF } catch (Exception e) { // TODO: handle exception diff --git a/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRFVersion5.java b/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRFVersion5.java index ad9bf4546a98..de22dd02fac0 100644 --- a/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRFVersion5.java +++ b/java/ql/test/query-tests/security/CWE-918/ApacheHttpSSRFVersion5.java @@ -38,134 +38,134 @@ protected void doGet1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); - String hostSink = request.getParameter("host"); // $ Source + String hostSink = request.getParameter("host"); HttpHost host = new HttpHost(hostSink); // org.apache.hc.client5.http.async.methods.BasicHttpRequests - BasicHttpRequests.create(Method.CONNECT, host, "path"); // $ Alert - BasicHttpRequests.create(Method.CONNECT, uri.toString()); // $ Alert - BasicHttpRequests.create(Method.CONNECT, uri); // $ Alert - BasicHttpRequests.create("method", uri.toString()); // $ Alert - BasicHttpRequests.create("method", uri); // $ Alert + BasicHttpRequests.create(Method.CONNECT, host, "path"); // $ SSRF + BasicHttpRequests.create(Method.CONNECT, uri.toString()); // $ SSRF + BasicHttpRequests.create(Method.CONNECT, uri); // $ SSRF + BasicHttpRequests.create("method", uri.toString()); // $ SSRF + BasicHttpRequests.create("method", uri); // $ SSRF - BasicHttpRequests.delete(host, "path"); // $ Alert - BasicHttpRequests.delete(uri.toString()); // $ Alert - BasicHttpRequests.delete(uri); // $ Alert + BasicHttpRequests.delete(host, "path"); // $ SSRF + BasicHttpRequests.delete(uri.toString()); // $ SSRF + BasicHttpRequests.delete(uri); // $ SSRF - BasicHttpRequests.get(host, "path"); // $ Alert - BasicHttpRequests.get(uri.toString()); // $ Alert - BasicHttpRequests.get(uri); // $ Alert + BasicHttpRequests.get(host, "path"); // $ SSRF + BasicHttpRequests.get(uri.toString()); // $ SSRF + BasicHttpRequests.get(uri); // $ SSRF - BasicHttpRequests.head(host, "path"); // $ Alert - BasicHttpRequests.head(uri.toString()); // $ Alert - BasicHttpRequests.head(uri); // $ Alert + BasicHttpRequests.head(host, "path"); // $ SSRF + BasicHttpRequests.head(uri.toString()); // $ SSRF + BasicHttpRequests.head(uri); // $ SSRF - BasicHttpRequests.options(host, "path"); // $ Alert - BasicHttpRequests.options(uri.toString()); // $ Alert - BasicHttpRequests.options(uri); // $ Alert + BasicHttpRequests.options(host, "path"); // $ SSRF + BasicHttpRequests.options(uri.toString()); // $ SSRF + BasicHttpRequests.options(uri); // $ SSRF - BasicHttpRequests.patch(host, "path"); // $ Alert - BasicHttpRequests.patch(uri.toString()); // $ Alert - BasicHttpRequests.patch(uri); // $ Alert + BasicHttpRequests.patch(host, "path"); // $ SSRF + BasicHttpRequests.patch(uri.toString()); // $ SSRF + BasicHttpRequests.patch(uri); // $ SSRF - BasicHttpRequests.post(host, "path"); // $ Alert - BasicHttpRequests.post(uri.toString()); // $ Alert - BasicHttpRequests.post(uri); // $ Alert + BasicHttpRequests.post(host, "path"); // $ SSRF + BasicHttpRequests.post(uri.toString()); // $ SSRF + BasicHttpRequests.post(uri); // $ SSRF - BasicHttpRequests.put(host, "path"); // $ Alert - BasicHttpRequests.put(uri.toString()); // $ Alert - BasicHttpRequests.put(uri); // $ Alert + BasicHttpRequests.put(host, "path"); // $ SSRF + BasicHttpRequests.put(uri.toString()); // $ SSRF + BasicHttpRequests.put(uri); // $ SSRF - BasicHttpRequests.trace(host, "path"); // $ Alert - BasicHttpRequests.trace(uri.toString()); // $ Alert - BasicHttpRequests.trace(uri); // $ Alert + BasicHttpRequests.trace(host, "path"); // $ SSRF + BasicHttpRequests.trace(uri.toString()); // $ SSRF + BasicHttpRequests.trace(uri); // $ SSRF // org.apache.hc.client5.http.async.methods.ConfigurableHttpRequest - new ConfigurableHttpRequest("method", host, "path"); // $ Alert - new ConfigurableHttpRequest("method", uri); // $ Alert + new ConfigurableHttpRequest("method", host, "path"); // $ SSRF + new ConfigurableHttpRequest("method", uri); // $ SSRF // org.apache.hc.client5.http.async.methods.SimpleHttpRequest - new SimpleHttpRequest(Method.CONNECT, host, "path"); // $ Alert - new SimpleHttpRequest(Method.CONNECT, uri); // $ Alert - new SimpleHttpRequest("method", host, "path"); // $ Alert - new SimpleHttpRequest("method", uri); // $ Alert + new SimpleHttpRequest(Method.CONNECT, host, "path"); // $ SSRF + new SimpleHttpRequest(Method.CONNECT, uri); // $ SSRF + new SimpleHttpRequest("method", host, "path"); // $ SSRF + new SimpleHttpRequest("method", uri); // $ SSRF - SimpleHttpRequest.create(Method.CONNECT, host, "path"); // $ Alert - SimpleHttpRequest.create(Method.CONNECT, uri); // $ Alert - SimpleHttpRequest.create("method", uri.toString()); // $ Alert - SimpleHttpRequest.create("method", uri); // $ Alert + SimpleHttpRequest.create(Method.CONNECT, host, "path"); // $ SSRF + SimpleHttpRequest.create(Method.CONNECT, uri); // $ SSRF + SimpleHttpRequest.create("method", uri.toString()); // $ SSRF + SimpleHttpRequest.create("method", uri); // $ SSRF // org.apache.hc.client5.http.async.methods.SimpleHttpRequests - SimpleHttpRequests.create(Method.CONNECT, host, "path"); // $ Alert - SimpleHttpRequests.create(Method.CONNECT, uri.toString()); // $ Alert - SimpleHttpRequests.create(Method.CONNECT, uri); // $ Alert - SimpleHttpRequests.create("method", uri.toString()); // $ Alert - SimpleHttpRequests.create("method", uri); // $ Alert + SimpleHttpRequests.create(Method.CONNECT, host, "path"); // $ SSRF + SimpleHttpRequests.create(Method.CONNECT, uri.toString()); // $ SSRF + SimpleHttpRequests.create(Method.CONNECT, uri); // $ SSRF + SimpleHttpRequests.create("method", uri.toString()); // $ SSRF + SimpleHttpRequests.create("method", uri); // $ SSRF - SimpleHttpRequests.delete(host, "path"); // $ Alert - SimpleHttpRequests.delete(uri.toString()); // $ Alert - SimpleHttpRequests.delete(uri); // $ Alert + SimpleHttpRequests.delete(host, "path"); // $ SSRF + SimpleHttpRequests.delete(uri.toString()); // $ SSRF + SimpleHttpRequests.delete(uri); // $ SSRF - SimpleHttpRequests.get(host, "path"); // $ Alert - SimpleHttpRequests.get(uri.toString()); // $ Alert - SimpleHttpRequests.get(uri); // $ Alert + SimpleHttpRequests.get(host, "path"); // $ SSRF + SimpleHttpRequests.get(uri.toString()); // $ SSRF + SimpleHttpRequests.get(uri); // $ SSRF - SimpleHttpRequests.head(host, "path"); // $ Alert - SimpleHttpRequests.head(uri.toString()); // $ Alert - SimpleHttpRequests.head(uri); // $ Alert + SimpleHttpRequests.head(host, "path"); // $ SSRF + SimpleHttpRequests.head(uri.toString()); // $ SSRF + SimpleHttpRequests.head(uri); // $ SSRF - SimpleHttpRequests.options(host, "path"); // $ Alert - SimpleHttpRequests.options(uri.toString()); // $ Alert - SimpleHttpRequests.options(uri); // $ Alert + SimpleHttpRequests.options(host, "path"); // $ SSRF + SimpleHttpRequests.options(uri.toString()); // $ SSRF + SimpleHttpRequests.options(uri); // $ SSRF - SimpleHttpRequests.patch(host, "path"); // $ Alert - SimpleHttpRequests.patch(uri.toString()); // $ Alert - SimpleHttpRequests.patch(uri); // $ Alert + SimpleHttpRequests.patch(host, "path"); // $ SSRF + SimpleHttpRequests.patch(uri.toString()); // $ SSRF + SimpleHttpRequests.patch(uri); // $ SSRF - SimpleHttpRequests.post(host, "path"); // $ Alert - SimpleHttpRequests.post(uri.toString()); // $ Alert - SimpleHttpRequests.post(uri); // $ Alert + SimpleHttpRequests.post(host, "path"); // $ SSRF + SimpleHttpRequests.post(uri.toString()); // $ SSRF + SimpleHttpRequests.post(uri); // $ SSRF - SimpleHttpRequests.put(host, "path"); // $ Alert - SimpleHttpRequests.put(uri.toString()); // $ Alert - SimpleHttpRequests.put(uri); // $ Alert + SimpleHttpRequests.put(host, "path"); // $ SSRF + SimpleHttpRequests.put(uri.toString()); // $ SSRF + SimpleHttpRequests.put(uri); // $ SSRF - SimpleHttpRequests.trace(host, "path"); // $ Alert - SimpleHttpRequests.trace(uri.toString()); // $ Alert - SimpleHttpRequests.trace(uri); // $ Alert + SimpleHttpRequests.trace(host, "path"); // $ SSRF + SimpleHttpRequests.trace(uri.toString()); // $ SSRF + SimpleHttpRequests.trace(uri); // $ SSRF // org.apache.hc.client5.http.async.methods.SimpleRequestBuilder - SimpleRequestBuilder.delete(uri.toString()); // $ Alert - SimpleRequestBuilder.delete(uri); // $ Alert + SimpleRequestBuilder.delete(uri.toString()); // $ SSRF + SimpleRequestBuilder.delete(uri); // $ SSRF - SimpleRequestBuilder.get(uri.toString()); // $ Alert - SimpleRequestBuilder.get(uri); // $ Alert + SimpleRequestBuilder.get(uri.toString()); // $ SSRF + SimpleRequestBuilder.get(uri); // $ SSRF - SimpleRequestBuilder.head(uri.toString()); // $ Alert - SimpleRequestBuilder.head(uri); // $ Alert + SimpleRequestBuilder.head(uri.toString()); // $ SSRF + SimpleRequestBuilder.head(uri); // $ SSRF - SimpleRequestBuilder.options(uri.toString()); // $ Alert - SimpleRequestBuilder.options(uri); // $ Alert + SimpleRequestBuilder.options(uri.toString()); // $ SSRF + SimpleRequestBuilder.options(uri); // $ SSRF - SimpleRequestBuilder.patch(uri.toString()); // $ Alert - SimpleRequestBuilder.patch(uri); // $ Alert + SimpleRequestBuilder.patch(uri.toString()); // $ SSRF + SimpleRequestBuilder.patch(uri); // $ SSRF - SimpleRequestBuilder.post(uri.toString()); // $ Alert - SimpleRequestBuilder.post(uri); // $ Alert + SimpleRequestBuilder.post(uri.toString()); // $ SSRF + SimpleRequestBuilder.post(uri); // $ SSRF - SimpleRequestBuilder.put(uri.toString()); // $ Alert - SimpleRequestBuilder.put(uri); // $ Alert + SimpleRequestBuilder.put(uri.toString()); // $ SSRF + SimpleRequestBuilder.put(uri); // $ SSRF - SimpleRequestBuilder.get().setHttpHost(host); // $ Alert + SimpleRequestBuilder.get().setHttpHost(host); // $ SSRF - SimpleRequestBuilder.get().setUri(uri.toString()); // $ Alert - SimpleRequestBuilder.get().setUri(uri); // $ Alert + SimpleRequestBuilder.get().setUri(uri.toString()); // $ SSRF + SimpleRequestBuilder.get().setUri(uri); // $ SSRF - SimpleRequestBuilder.trace(uri.toString()); // $ Alert - SimpleRequestBuilder.trace(uri); // $ Alert + SimpleRequestBuilder.trace(uri.toString()); // $ SSRF + SimpleRequestBuilder.trace(uri); // $ SSRF } catch (Exception e) { // TODO: handle exception @@ -177,66 +177,66 @@ protected void doGet2(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); // org.apache.hc.client5.http.classic.methods.ClassicHttpRequests - ClassicHttpRequests.create(Method.CONNECT, uri.toString()); // $ Alert - ClassicHttpRequests.create(Method.CONNECT, uri); // $ Alert - ClassicHttpRequests.create("method", uri.toString()); // $ Alert - ClassicHttpRequests.create("method", uri); // $ Alert + ClassicHttpRequests.create(Method.CONNECT, uri.toString()); // $ SSRF + ClassicHttpRequests.create(Method.CONNECT, uri); // $ SSRF + ClassicHttpRequests.create("method", uri.toString()); // $ SSRF + ClassicHttpRequests.create("method", uri); // $ SSRF - ClassicHttpRequests.delete(uri.toString()); // $ Alert - ClassicHttpRequests.delete(uri); // $ Alert + ClassicHttpRequests.delete(uri.toString()); // $ SSRF + ClassicHttpRequests.delete(uri); // $ SSRF - ClassicHttpRequests.get(uri.toString()); // $ Alert - ClassicHttpRequests.get(uri); // $ Alert + ClassicHttpRequests.get(uri.toString()); // $ SSRF + ClassicHttpRequests.get(uri); // $ SSRF - ClassicHttpRequests.head(uri.toString()); // $ Alert - ClassicHttpRequests.head(uri); // $ Alert + ClassicHttpRequests.head(uri.toString()); // $ SSRF + ClassicHttpRequests.head(uri); // $ SSRF - ClassicHttpRequests.options(uri.toString()); // $ Alert - ClassicHttpRequests.options(uri); // $ Alert + ClassicHttpRequests.options(uri.toString()); // $ SSRF + ClassicHttpRequests.options(uri); // $ SSRF - ClassicHttpRequests.patch(uri.toString()); // $ Alert - ClassicHttpRequests.patch(uri); // $ Alert + ClassicHttpRequests.patch(uri.toString()); // $ SSRF + ClassicHttpRequests.patch(uri); // $ SSRF - ClassicHttpRequests.post(uri.toString()); // $ Alert - ClassicHttpRequests.post(uri); // $ Alert + ClassicHttpRequests.post(uri.toString()); // $ SSRF + ClassicHttpRequests.post(uri); // $ SSRF - ClassicHttpRequests.put(uri.toString()); // $ Alert - ClassicHttpRequests.put(uri); // $ Alert + ClassicHttpRequests.put(uri.toString()); // $ SSRF + ClassicHttpRequests.put(uri); // $ SSRF - ClassicHttpRequests.trace(uri.toString()); // $ Alert - ClassicHttpRequests.trace(uri); // $ Alert + ClassicHttpRequests.trace(uri.toString()); // $ SSRF + ClassicHttpRequests.trace(uri); // $ SSRF // org.apache.hc.client5.http.classic.methods.HttpDelete through HttpTrace - new HttpDelete(uri.toString()); // $ Alert - new HttpDelete(uri); // $ Alert + new HttpDelete(uri.toString()); // $ SSRF + new HttpDelete(uri); // $ SSRF - new HttpGet(uri.toString()); // $ Alert - new HttpGet(uri); // $ Alert + new HttpGet(uri.toString()); // $ SSRF + new HttpGet(uri); // $ SSRF - new HttpHead(uri.toString()); // $ Alert - new HttpHead(uri); // $ Alert + new HttpHead(uri.toString()); // $ SSRF + new HttpHead(uri); // $ SSRF - new HttpOptions(uri.toString()); // $ Alert - new HttpOptions(uri); // $ Alert + new HttpOptions(uri.toString()); // $ SSRF + new HttpOptions(uri); // $ SSRF - new HttpPatch(uri.toString()); // $ Alert - new HttpPatch(uri); // $ Alert + new HttpPatch(uri.toString()); // $ SSRF + new HttpPatch(uri); // $ SSRF - new HttpPost(uri.toString()); // $ Alert - new HttpPost(uri); // $ Alert + new HttpPost(uri.toString()); // $ SSRF + new HttpPost(uri); // $ SSRF - new HttpPut(uri.toString()); // $ Alert - new HttpPut(uri); // $ Alert + new HttpPut(uri.toString()); // $ SSRF + new HttpPut(uri); // $ SSRF - new HttpTrace(uri.toString()); // $ Alert - new HttpTrace(uri); // $ Alert + new HttpTrace(uri.toString()); // $ SSRF + new HttpTrace(uri); // $ SSRF // org.apache.hc.client5.http.classic.methods.HttpUriRequestBase - new HttpUriRequestBase("method", uri); // $ Alert + new HttpUriRequestBase("method", uri); // $ SSRF } catch (Exception e) { // TODO: handle exception @@ -248,37 +248,37 @@ protected void doGet3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); // org.apache.hc.client5.http.fluent.Request - Request.create(Method.CONNECT, uri); // $ Alert - Request.create("method", uri.toString()); // $ Alert - Request.create("method", uri); // $ Alert + Request.create(Method.CONNECT, uri); // $ SSRF + Request.create("method", uri.toString()); // $ SSRF + Request.create("method", uri); // $ SSRF - Request.delete(uri.toString()); // $ Alert - Request.delete(uri); // $ Alert + Request.delete(uri.toString()); // $ SSRF + Request.delete(uri); // $ SSRF - Request.get(uri.toString()); // $ Alert - Request.get(uri); // $ Alert + Request.get(uri.toString()); // $ SSRF + Request.get(uri); // $ SSRF - Request.head(uri.toString()); // $ Alert - Request.head(uri); // $ Alert + Request.head(uri.toString()); // $ SSRF + Request.head(uri); // $ SSRF - Request.options(uri.toString()); // $ Alert - Request.options(uri); // $ Alert + Request.options(uri.toString()); // $ SSRF + Request.options(uri); // $ SSRF - Request.patch(uri.toString()); // $ Alert - Request.patch(uri); // $ Alert + Request.patch(uri.toString()); // $ SSRF + Request.patch(uri); // $ SSRF - Request.post(uri.toString()); // $ Alert - Request.post(uri); // $ Alert + Request.post(uri.toString()); // $ SSRF + Request.post(uri); // $ SSRF - Request.put(uri.toString()); // $ Alert - Request.put(uri); // $ Alert + Request.put(uri.toString()); // $ SSRF + Request.put(uri); // $ SSRF - Request.trace(uri.toString()); // $ Alert - Request.trace(uri); // $ Alert + Request.trace(uri.toString()); // $ SSRF + Request.trace(uri); // $ SSRF } catch (Exception e) { // TODO: handle exception @@ -292,26 +292,26 @@ protected void doGet4(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); - String hostSink = request.getParameter("host"); // $ Source + String hostSink = request.getParameter("host"); HttpHost host = new HttpHost(hostSink); // org.apache.hc.core5.http.impl.bootstrap HttpAsyncRequester httpAsyncReq = new HttpAsyncRequester(null, null, null, null, null, null); - httpAsyncReq.connect(host, null); // $ Alert - httpAsyncReq.connect(host, null, null, null); // $ Alert + httpAsyncReq.connect(host, null); // $ SSRF + httpAsyncReq.connect(host, null, null, null); // $ SSRF // org.apache.hc.core5.http.impl.io DefaultClassicHttpRequestFactory defClassicHttpReqFact = new DefaultClassicHttpRequestFactory(); - defClassicHttpReqFact.newHttpRequest("method", uri.toString()); // $ Alert - defClassicHttpReqFact.newHttpRequest("method", uri); // $ Alert + defClassicHttpReqFact.newHttpRequest("method", uri.toString()); // $ SSRF + defClassicHttpReqFact.newHttpRequest("method", uri); // $ SSRF // org.apache.hc.core5.http.impl.nio DefaultHttpRequestFactory defHttpReqFact = new DefaultHttpRequestFactory(); - defHttpReqFact.newHttpRequest("method", uri.toString()); // $ Alert - defHttpReqFact.newHttpRequest("method", uri); // $ Alert + defHttpReqFact.newHttpRequest("method", uri.toString()); // $ SSRF + defHttpReqFact.newHttpRequest("method", uri); // $ SSRF } catch (Exception e) { // TODO: handle exception @@ -323,41 +323,41 @@ protected void doGet5(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); - String hostSink = request.getParameter("host"); // $ Source + String hostSink = request.getParameter("host"); HttpHost host = new HttpHost(hostSink); // org.apache.hc.core5.http.io.support.ClassicRequestBuilder - ClassicRequestBuilder.delete(uri.toString()); // $ Alert - ClassicRequestBuilder.delete(uri); // $ Alert + ClassicRequestBuilder.delete(uri.toString()); // $ SSRF + ClassicRequestBuilder.delete(uri); // $ SSRF - ClassicRequestBuilder.get(uri.toString()); // $ Alert - ClassicRequestBuilder.get(uri); // $ Alert + ClassicRequestBuilder.get(uri.toString()); // $ SSRF + ClassicRequestBuilder.get(uri); // $ SSRF - ClassicRequestBuilder.head(uri.toString()); // $ Alert - ClassicRequestBuilder.head(uri); // $ Alert + ClassicRequestBuilder.head(uri.toString()); // $ SSRF + ClassicRequestBuilder.head(uri); // $ SSRF - ClassicRequestBuilder.options(uri.toString()); // $ Alert - ClassicRequestBuilder.options(uri); // $ Alert + ClassicRequestBuilder.options(uri.toString()); // $ SSRF + ClassicRequestBuilder.options(uri); // $ SSRF - ClassicRequestBuilder.patch(uri.toString()); // $ Alert - ClassicRequestBuilder.patch(uri); // $ Alert + ClassicRequestBuilder.patch(uri.toString()); // $ SSRF + ClassicRequestBuilder.patch(uri); // $ SSRF - ClassicRequestBuilder.post(uri.toString()); // $ Alert - ClassicRequestBuilder.post(uri); // $ Alert + ClassicRequestBuilder.post(uri.toString()); // $ SSRF + ClassicRequestBuilder.post(uri); // $ SSRF - ClassicRequestBuilder.put(uri.toString()); // $ Alert - ClassicRequestBuilder.put(uri); // $ Alert + ClassicRequestBuilder.put(uri.toString()); // $ SSRF + ClassicRequestBuilder.put(uri); // $ SSRF - ClassicRequestBuilder.get().setHttpHost(host); // $ Alert + ClassicRequestBuilder.get().setHttpHost(host); // $ SSRF - ClassicRequestBuilder.get().setUri(uri.toString()); // $ Alert - ClassicRequestBuilder.get().setUri(uri); // $ Alert + ClassicRequestBuilder.get().setUri(uri.toString()); // $ SSRF + ClassicRequestBuilder.get().setUri(uri); // $ SSRF - ClassicRequestBuilder.trace(uri.toString()); // $ Alert - ClassicRequestBuilder.trace(uri); // $ Alert + ClassicRequestBuilder.trace(uri.toString()); // $ SSRF + ClassicRequestBuilder.trace(uri); // $ SSRF } catch (Exception e) { // TODO: handle exception @@ -369,29 +369,29 @@ protected void doGet6(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String uriSink = request.getParameter("uri"); // $ Source + String uriSink = request.getParameter("uri"); URI uri = new URI(uriSink); - String hostSink = request.getParameter("host"); // $ Source + String hostSink = request.getParameter("host"); HttpHost host = new HttpHost(hostSink); // BasicClassicHttpRequest - new BasicClassicHttpRequest(Method.CONNECT, host, "path"); // $ Alert - new BasicClassicHttpRequest(Method.CONNECT, uri); // $ Alert - new BasicClassicHttpRequest("method", host, "path"); // $ Alert - new BasicClassicHttpRequest("method", uri); // $ Alert + new BasicClassicHttpRequest(Method.CONNECT, host, "path"); // $ SSRF + new BasicClassicHttpRequest(Method.CONNECT, uri); // $ SSRF + new BasicClassicHttpRequest("method", host, "path"); // $ SSRF + new BasicClassicHttpRequest("method", uri); // $ SSRF // BasicHttpRequest - new BasicHttpRequest(Method.CONNECT, host, "path"); // $ Alert - new BasicHttpRequest(Method.CONNECT, uri); // $ Alert - new BasicHttpRequest("method", host, "path"); // $ Alert - new BasicHttpRequest("method", uri); // $ Alert + new BasicHttpRequest(Method.CONNECT, host, "path"); // $ SSRF + new BasicHttpRequest(Method.CONNECT, uri); // $ SSRF + new BasicHttpRequest("method", host, "path"); // $ SSRF + new BasicHttpRequest("method", uri); // $ SSRF BasicHttpRequest bhr = new BasicHttpRequest("method", "path"); - bhr.setUri(uri); // $ Alert + bhr.setUri(uri); // $ SSRF // HttpRequestWrapper HttpRequestWrapper hrw = new HttpRequestWrapper(null); - hrw.setUri(uri); // $ Alert + hrw.setUri(uri); // $ SSRF } catch (Exception e) { // TODO: handle exception diff --git a/java/ql/test/query-tests/security/CWE-918/JakartaWsSSRF.java b/java/ql/test/query-tests/security/CWE-918/JakartaWsSSRF.java index 37bf91d81fd2..ced253652111 100644 --- a/java/ql/test/query-tests/security/CWE-918/JakartaWsSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/JakartaWsSSRF.java @@ -11,8 +11,8 @@ public class JakartaWsSSRF extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Client client = ClientBuilder.newClient(); - String url = request.getParameter("url"); // $ Source - client.target(url); // $ Alert + String url = request.getParameter("url"); + client.target(url); // $ SSRF } } diff --git a/java/ql/test/query-tests/security/CWE-918/JavaNetHttpSSRF.java b/java/ql/test/query-tests/security/CWE-918/JavaNetHttpSSRF.java index 7181d426ffba..7cc5578ebf33 100644 --- a/java/ql/test/query-tests/security/CWE-918/JavaNetHttpSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/JavaNetHttpSSRF.java @@ -22,21 +22,21 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String sink = request.getParameter("uri"); // $ Source + String sink = request.getParameter("uri"); URI uri = new URI(sink); URI uri2 = new URI("http", sink, "fragement"); URL url1 = new URL(sink); - URLConnection c1 = url1.openConnection(); // $ Alert + URLConnection c1 = url1.openConnection(); // $ SSRF SocketAddress sa = new SocketAddress() { }; - URLConnection c2 = url1.openConnection(new Proxy(Type.HTTP, sa)); // $ Alert - InputStream c3 = url1.openStream(); // $ Alert + URLConnection c2 = url1.openConnection(new Proxy(Type.HTTP, sa)); // $ SSRF + InputStream c3 = url1.openStream(); // $ SSRF // java.net.http HttpClient client = HttpClient.newHttpClient(); - HttpRequest request2 = HttpRequest.newBuilder().uri(uri2).build(); // $ Alert - HttpRequest request3 = HttpRequest.newBuilder(uri).build(); // $ Alert + HttpRequest request2 = HttpRequest.newBuilder().uri(uri2).build(); // $ SSRF + HttpRequest request3 = HttpRequest.newBuilder(uri).build(); // $ SSRF } catch (Exception e) { // TODO: handle exception diff --git a/java/ql/test/query-tests/security/CWE-918/JaxWsSSRF.java b/java/ql/test/query-tests/security/CWE-918/JaxWsSSRF.java index 97602b29b553..da650e2de6cb 100644 --- a/java/ql/test/query-tests/security/CWE-918/JaxWsSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/JaxWsSSRF.java @@ -11,8 +11,8 @@ public class JaxWsSSRF extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Client client = ClientBuilder.newClient(); - String url = request.getParameter("url"); // $ Source - client.target(url); // $ Alert + String url = request.getParameter("url"); + client.target(url); // $ SSRF } } diff --git a/java/ql/test/query-tests/security/CWE-918/JdbcUrlSSRF.java b/java/ql/test/query-tests/security/CWE-918/JdbcUrlSSRF.java index 859b998c9ea4..94704c3d8621 100644 --- a/java/ql/test/query-tests/security/CWE-918/JdbcUrlSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/JdbcUrlSSRF.java @@ -17,75 +17,75 @@ public class JdbcUrlSSRF extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - String jdbcUrl = request.getParameter("jdbcUrl"); // $ Source + + String jdbcUrl = request.getParameter("jdbcUrl"); Driver driver = new org.postgresql.Driver(); DataSourceBuilder dsBuilder = DataSourceBuilder.create(); - + try { - driver.connect(jdbcUrl, null); // $ Alert + driver.connect(jdbcUrl, null); // $ SSRF - DriverManager.getConnection(jdbcUrl); // $ Alert - DriverManager.getConnection(jdbcUrl, "user", "password"); // $ Alert - DriverManager.getConnection(jdbcUrl, null); // $ Alert + DriverManager.getConnection(jdbcUrl); // $ SSRF + DriverManager.getConnection(jdbcUrl, "user", "password"); // $ SSRF + DriverManager.getConnection(jdbcUrl, null); // $ SSRF - dsBuilder.url(jdbcUrl); // $ Alert + dsBuilder.url(jdbcUrl); // $ SSRF } catch(SQLException e) {} } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - String jdbcUrl = request.getParameter("jdbcUrl"); // $ Source + + String jdbcUrl = request.getParameter("jdbcUrl"); HikariConfig config = new HikariConfig(); - config.setJdbcUrl(jdbcUrl); // $ Alert + config.setJdbcUrl(jdbcUrl); // $ SSRF config.setUsername("database_username"); config.setPassword("database_password"); HikariDataSource ds = new HikariDataSource(); - ds.setJdbcUrl(jdbcUrl); // $ Alert + ds.setJdbcUrl(jdbcUrl); // $ SSRF Properties props = new Properties(); props.setProperty("driverClassName", "org.postgresql.Driver"); props.setProperty("jdbcUrl", jdbcUrl); - HikariConfig config2 = new HikariConfig(props); // $ Alert + HikariConfig config2 = new HikariConfig(props); // $ SSRF } protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String jdbcUrl = request.getParameter("jdbcUrl"); // $ Source - + String jdbcUrl = request.getParameter("jdbcUrl"); + DriverManagerDataSource dataSource = new DriverManagerDataSource(); - + dataSource.setDriverClassName("org.postgresql.Driver"); - dataSource.setUrl(jdbcUrl); // $ Alert + dataSource.setUrl(jdbcUrl); // $ SSRF - DriverManagerDataSource dataSource2 = new DriverManagerDataSource(jdbcUrl); // $ Alert + DriverManagerDataSource dataSource2 = new DriverManagerDataSource(jdbcUrl); // $ SSRF dataSource2.setDriverClassName("org.postgresql.Driver"); - DriverManagerDataSource dataSource3 = new DriverManagerDataSource(jdbcUrl, "user", "pass"); // $ Alert + DriverManagerDataSource dataSource3 = new DriverManagerDataSource(jdbcUrl, "user", "pass"); // $ SSRF dataSource3.setDriverClassName("org.postgresql.Driver"); - DriverManagerDataSource dataSource4 = new DriverManagerDataSource(jdbcUrl, null); // $ Alert + DriverManagerDataSource dataSource4 = new DriverManagerDataSource(jdbcUrl, null); // $ SSRF dataSource4.setDriverClassName("org.postgresql.Driver"); } protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - String jdbcUrl = request.getParameter("jdbcUrl"); // $ Source + String jdbcUrl = request.getParameter("jdbcUrl"); - Jdbi.create(jdbcUrl); // $ Alert - Jdbi.create(jdbcUrl, null); // $ Alert - Jdbi.create(jdbcUrl, "user", "pass"); // $ Alert + Jdbi.create(jdbcUrl); // $ SSRF + Jdbi.create(jdbcUrl, null); // $ SSRF + Jdbi.create(jdbcUrl, "user", "pass"); // $ SSRF - Jdbi.open(jdbcUrl); // $ Alert - Jdbi.open(jdbcUrl, null); // $ Alert - Jdbi.open(jdbcUrl, "user", "pass"); // $ Alert + Jdbi.open(jdbcUrl); // $ SSRF + Jdbi.open(jdbcUrl, null); // $ SSRF + Jdbi.open(jdbcUrl, "user", "pass"); // $ SSRF } - -} + +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-918/ReactiveWebClientSSRF.java b/java/ql/test/query-tests/security/CWE-918/ReactiveWebClientSSRF.java index e7e350b054af..00d707f71e47 100644 --- a/java/ql/test/query-tests/security/CWE-918/ReactiveWebClientSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/ReactiveWebClientSSRF.java @@ -12,8 +12,8 @@ public class ReactiveWebClientSSRF extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source - WebClient webClient = WebClient.create(url); // $ Alert + String url = request.getParameter("uri"); + WebClient webClient = WebClient.create(url); // $ SSRF Mono result = webClient.get() .uri("/") @@ -29,10 +29,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); WebClient webClient = WebClient.builder() .defaultHeader("User-Agent", "Java") - .baseUrl(url) // $ Alert + .baseUrl(url) // $ SSRF .build(); @@ -46,4 +46,4 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) // Ignore } } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected index b08273da0ca9..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.expected @@ -1,1825 +0,0 @@ -#select -| ApacheHttpSSRF.java:30:43:30:45 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:30:43:30:45 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:32:29:32:31 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:32:29:32:31 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:34:26:34:28 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:34:26:34:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:35:26:35:28 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:35:26:35:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:36:25:36:27 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:36:25:36:27 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:37:28:37:30 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:37:28:37:30 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:38:29:38:31 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:38:29:38:31 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:39:27:39:29 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:39:27:39:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:40:27:40:29 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:40:27:40:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:42:34:42:82 | new BasicRequestLine(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:42:34:42:82 | new BasicRequestLine(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:43:41:43:54 | toString(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:43:41:43:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:44:41:44:54 | toString(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:44:41:44:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:46:49:46:97 | new BasicRequestLine(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:46:49:46:97 | new BasicRequestLine(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:47:56:47:69 | toString(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:47:56:47:69 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:48:56:48:69 | toString(...) | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:48:56:48:69 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:50:32:50:34 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:50:32:50:34 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:51:33:51:35 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:51:33:51:35 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:52:32:52:34 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:52:32:52:34 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:53:35:53:37 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:53:35:53:37 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:54:36:54:38 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:54:36:54:38 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:55:33:55:35 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:55:33:55:35 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:56:34:56:36 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:56:34:56:36 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:57:34:57:36 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:57:34:57:36 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRF.java:58:43:58:45 | uri | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:58:43:58:45 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:48:54:48:57 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:48:54:48:57 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:49:54:49:67 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:49:54:49:67 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:50:54:50:56 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:50:54:50:56 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:51:48:51:61 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:51:48:51:61 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:52:48:52:50 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:52:48:52:50 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:54:38:54:41 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:54:38:54:41 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:55:38:55:51 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:55:38:55:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:56:38:56:40 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:56:38:56:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:58:35:58:38 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:58:35:58:38 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:59:35:59:48 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:59:35:59:48 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:60:35:60:37 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:60:35:60:37 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:62:36:62:39 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:62:36:62:39 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:63:36:63:49 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:63:36:63:49 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:64:36:64:38 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:64:36:64:38 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:66:39:66:42 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:66:39:66:42 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:67:39:67:52 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:67:39:67:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:68:39:68:41 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:68:39:68:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:70:37:70:40 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:70:37:70:40 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:71:37:71:50 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:71:37:71:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:72:37:72:39 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:72:37:72:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:74:36:74:39 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:74:36:74:39 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:75:36:75:49 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:75:36:75:49 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:76:36:76:38 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:76:36:76:38 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:78:35:78:38 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:78:35:78:38 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:79:35:79:48 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:79:35:79:48 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:80:35:80:37 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:80:35:80:37 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:82:37:82:40 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:82:37:82:40 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:83:37:83:50 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:83:37:83:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:84:37:84:39 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:84:37:84:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:87:51:87:54 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:87:51:87:54 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:88:51:88:53 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:88:51:88:53 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:91:51:91:54 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:91:51:91:54 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:92:51:92:53 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:92:51:92:53 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:93:45:93:48 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:93:45:93:48 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:94:45:94:47 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:94:45:94:47 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:96:54:96:57 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:96:54:96:57 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:97:54:97:56 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:97:54:97:56 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:98:48:98:61 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:98:48:98:61 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:99:48:99:50 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:99:48:99:50 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:102:55:102:58 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:102:55:102:58 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:103:55:103:68 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:103:55:103:68 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:104:55:104:57 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:104:55:104:57 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:105:49:105:62 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:105:49:105:62 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:106:49:106:51 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:106:49:106:51 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:108:39:108:42 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:108:39:108:42 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:109:39:109:52 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:109:39:109:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:110:39:110:41 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:110:39:110:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:112:36:112:39 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:112:36:112:39 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:113:36:113:49 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:113:36:113:49 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:114:36:114:38 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:114:36:114:38 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:116:37:116:40 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:116:37:116:40 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:117:37:117:50 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:117:37:117:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:118:37:118:39 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:118:37:118:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:120:40:120:43 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:120:40:120:43 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:121:40:121:53 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:121:40:121:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:122:40:122:42 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:122:40:122:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:124:38:124:41 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:124:38:124:41 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:125:38:125:51 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:125:38:125:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:126:38:126:40 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:126:38:126:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:128:37:128:40 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:128:37:128:40 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:129:37:129:50 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:129:37:129:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:130:37:130:39 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:130:37:130:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:132:36:132:39 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:132:36:132:39 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:133:36:133:49 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:133:36:133:49 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:134:36:134:38 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:134:36:134:38 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:136:38:136:41 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:136:38:136:41 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:137:38:137:51 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:137:38:137:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:138:38:138:40 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:138:38:138:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:141:41:141:54 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:141:41:141:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:142:41:142:43 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:142:41:142:43 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:144:38:144:51 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:144:38:144:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:145:38:145:40 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:145:38:145:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:147:39:147:52 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:147:39:147:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:148:39:148:41 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:148:39:148:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:150:42:150:55 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:150:42:150:55 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:151:42:151:44 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:151:42:151:44 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:153:40:153:53 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:153:40:153:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:154:40:154:42 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:154:40:154:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:156:39:156:52 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:156:39:156:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:157:39:157:41 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:157:39:157:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:159:38:159:51 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:159:38:159:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:160:38:160:40 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:160:38:160:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:162:52:162:55 | host | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:162:52:162:55 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:164:47:164:60 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:164:47:164:60 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:165:47:165:49 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:165:47:165:49 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:167:40:167:53 | toString(...) | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:167:40:167:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:168:40:168:42 | uri | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:168:40:168:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:184:56:184:69 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:184:56:184:69 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:185:56:185:58 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:185:56:185:58 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:186:50:186:63 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:186:50:186:63 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:187:50:187:52 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:187:50:187:52 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:189:40:189:53 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:189:40:189:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:190:40:190:42 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:190:40:190:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:192:37:192:50 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:192:37:192:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:193:37:193:39 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:193:37:193:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:195:38:195:51 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:195:38:195:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:196:38:196:40 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:196:38:196:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:198:41:198:54 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:198:41:198:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:199:41:199:43 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:199:41:199:43 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:201:39:201:52 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:201:39:201:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:202:39:202:41 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:202:39:202:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:204:38:204:51 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:204:38:204:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:205:38:205:40 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:205:38:205:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:207:37:207:50 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:207:37:207:50 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:208:37:208:39 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:208:37:208:39 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:210:39:210:52 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:210:39:210:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:211:39:211:41 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:211:39:211:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:214:28:214:41 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:214:28:214:41 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:215:28:215:30 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:215:28:215:30 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:217:25:217:38 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:217:25:217:38 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:218:25:218:27 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:218:25:218:27 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:220:26:220:39 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:220:26:220:39 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:221:26:221:28 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:221:26:221:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:223:29:223:42 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:223:29:223:42 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:224:29:224:31 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:224:29:224:31 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:226:27:226:40 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:226:27:226:40 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:227:27:227:29 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:227:27:227:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:229:26:229:39 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:229:26:229:39 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:230:26:230:28 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:230:26:230:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:232:25:232:38 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:232:25:232:38 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:233:25:233:27 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:233:25:233:27 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:235:27:235:40 | toString(...) | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:235:27:235:40 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:236:27:236:29 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:236:27:236:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:239:46:239:48 | uri | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:239:46:239:48 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:255:44:255:46 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:255:44:255:46 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:256:38:256:51 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:256:38:256:51 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:257:38:257:40 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:257:38:257:40 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:259:28:259:41 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:259:28:259:41 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:260:28:260:30 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:260:28:260:30 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:262:25:262:38 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:262:25:262:38 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:263:25:263:27 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:263:25:263:27 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:265:26:265:39 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:265:26:265:39 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:266:26:266:28 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:266:26:266:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:268:29:268:42 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:268:29:268:42 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:269:29:269:31 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:269:29:269:31 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:271:27:271:40 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:271:27:271:40 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:272:27:272:29 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:272:27:272:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:274:26:274:39 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:274:26:274:39 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:275:26:275:28 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:275:26:275:28 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:277:25:277:38 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:277:25:277:38 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:278:25:278:27 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:278:25:278:27 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:280:27:280:40 | toString(...) | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:280:27:280:40 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:281:27:281:29 | uri | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:281:27:281:29 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:303:34:303:37 | host | ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:303:34:303:37 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:304:34:304:37 | host | ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:304:34:304:37 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:308:60:308:73 | toString(...) | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:308:60:308:73 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:309:60:309:62 | uri | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:309:60:309:62 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:313:53:313:66 | toString(...) | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:313:53:313:66 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:314:53:314:55 | uri | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:314:53:314:55 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:333:42:333:55 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:333:42:333:55 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:334:42:334:44 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:334:42:334:44 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:336:39:336:52 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:336:39:336:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:337:39:337:41 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:337:39:337:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:339:40:339:53 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:339:40:339:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:340:40:340:42 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:340:40:340:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:342:43:342:56 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:342:43:342:56 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:343:43:343:45 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:343:43:343:45 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:345:41:345:54 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:345:41:345:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:346:41:346:43 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:346:41:346:43 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:348:40:348:53 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:348:40:348:53 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:349:40:349:42 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:349:40:349:42 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:351:39:351:52 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:351:39:351:52 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:352:39:352:41 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:352:39:352:41 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:354:53:354:56 | host | ApacheHttpSSRFVersion5.java:329:31:329:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:354:53:354:56 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:329:31:329:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:356:48:356:61 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:356:48:356:61 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:357:48:357:50 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:357:48:357:50 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:359:41:359:54 | toString(...) | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:359:41:359:54 | toString(...) | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:360:41:360:43 | uri | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:360:41:360:43 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:379:57:379:60 | host | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:379:57:379:60 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:380:57:380:59 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:380:57:380:59 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:381:51:381:54 | host | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:381:51:381:54 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:382:51:382:53 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:382:51:382:53 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:385:50:385:53 | host | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:385:50:385:53 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:386:50:386:52 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:386:50:386:52 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:387:44:387:47 | host | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:387:44:387:47 | host | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:388:44:388:46 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:388:44:388:46 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:390:24:390:26 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:390:24:390:26 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| ApacheHttpSSRFVersion5.java:394:24:394:26 | uri | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:394:24:394:26 | uri | Potential server-side request forgery due to a $@. | ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) | user-provided value | -| JakartaWsSSRF.java:15:23:15:25 | url | JakartaWsSSRF.java:14:22:14:48 | getParameter(...) : String | JakartaWsSSRF.java:15:23:15:25 | url | Potential server-side request forgery due to a $@. | JakartaWsSSRF.java:14:22:14:48 | getParameter(...) | user-provided value | -| JavaNetHttpSSRF.java:30:32:30:35 | url1 | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:30:32:30:35 | url1 | Potential server-side request forgery due to a $@. | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) | user-provided value | -| JavaNetHttpSSRF.java:33:32:33:35 | url1 | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:33:32:33:35 | url1 | Potential server-side request forgery due to a $@. | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) | user-provided value | -| JavaNetHttpSSRF.java:34:30:34:33 | url1 | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:34:30:34:33 | url1 | Potential server-side request forgery due to a $@. | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) | user-provided value | -| JavaNetHttpSSRF.java:38:65:38:68 | uri2 | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:38:65:38:68 | uri2 | Potential server-side request forgery due to a $@. | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) | user-provided value | -| JavaNetHttpSSRF.java:39:59:39:61 | uri | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:39:59:39:61 | uri | Potential server-side request forgery due to a $@. | JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) | user-provided value | -| JaxWsSSRF.java:15:23:15:25 | url | JaxWsSSRF.java:14:22:14:48 | getParameter(...) : String | JaxWsSSRF.java:15:23:15:25 | url | Potential server-side request forgery due to a $@. | JaxWsSSRF.java:14:22:14:48 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:26:28:26:34 | jdbcUrl | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:26:28:26:34 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:28:41:28:47 | jdbcUrl | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:28:41:28:47 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:29:41:29:47 | jdbcUrl | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:29:41:29:47 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:30:41:30:47 | jdbcUrl | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:30:41:30:47 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:32:27:32:33 | jdbcUrl | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:32:27:32:33 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:43:27:43:33 | jdbcUrl | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:43:27:43:33 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:48:23:48:29 | jdbcUrl | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:48:23:48:29 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:54:49:54:53 | props | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:54:49:54:53 | props | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:65:27:65:33 | jdbcUrl | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:65:27:65:33 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:67:75:67:81 | jdbcUrl | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:67:75:67:81 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:70:75:70:81 | jdbcUrl | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:70:75:70:81 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:73:75:73:81 | jdbcUrl | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:73:75:73:81 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:82:21:82:27 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:82:21:82:27 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:83:21:83:27 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:83:21:83:27 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:84:21:84:27 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:84:21:84:27 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:86:19:86:25 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:86:19:86:25 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:87:19:87:25 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:87:19:87:25 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | Potential server-side request forgery due to a $@. | JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) | user-provided value | -| ReactiveWebClientSSRF.java:16:52:16:54 | url | ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:16:52:16:54 | url | Potential server-side request forgery due to a $@. | ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) | user-provided value | -| ReactiveWebClientSSRF.java:35:30:35:32 | url | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:35:30:35:32 | url | Potential server-side request forgery due to a $@. | ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) | user-provided value | -| SanitizationTests.java:22:52:22:54 | uri | SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:22:52:22:54 | uri | Potential server-side request forgery due to a $@. | SanitizationTests.java:19:31:19:57 | getParameter(...) | user-provided value | -| SanitizationTests.java:23:25:23:25 | r | SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:23:25:23:25 | r | Potential server-side request forgery due to a $@. | SanitizationTests.java:19:31:19:57 | getParameter(...) | user-provided value | -| SanitizationTests.java:76:59:76:77 | new URI(...) | SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:76:59:76:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:75:33:75:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:77:25:77:32 | unsafer3 | SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:77:25:77:32 | unsafer3 | Potential server-side request forgery due to a $@. | SanitizationTests.java:75:33:75:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:80:59:80:77 | new URI(...) | SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:80:59:80:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:79:49:79:79 | getParameter(...) | user-provided value | -| SanitizationTests.java:81:25:81:32 | unsafer4 | SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:81:25:81:32 | unsafer4 | Potential server-side request forgery due to a $@. | SanitizationTests.java:79:49:79:79 | getParameter(...) | user-provided value | -| SanitizationTests.java:85:59:85:88 | new URI(...) | SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:84:31:84:61 | getParameter(...) | user-provided value | -| SanitizationTests.java:86:25:86:32 | unsafer5 | SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:86:25:86:32 | unsafer5 | Potential server-side request forgery due to a $@. | SanitizationTests.java:84:31:84:61 | getParameter(...) | user-provided value | -| SanitizationTests.java:90:60:90:89 | new URI(...) | SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:88:58:88:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:91:25:91:33 | unsafer5a | SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:91:25:91:33 | unsafer5a | Potential server-side request forgery due to a $@. | SanitizationTests.java:88:58:88:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:95:60:95:90 | new URI(...) | SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:93:60:93:88 | getParameter(...) | user-provided value | -| SanitizationTests.java:96:25:96:33 | unsafer5b | SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:96:25:96:33 | unsafer5b | Potential server-side request forgery due to a $@. | SanitizationTests.java:93:60:93:88 | getParameter(...) | user-provided value | -| SanitizationTests.java:100:60:100:90 | new URI(...) | SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:98:77:98:105 | getParameter(...) | user-provided value | -| SanitizationTests.java:101:25:101:33 | unsafer5c | SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:101:25:101:33 | unsafer5c | Potential server-side request forgery due to a $@. | SanitizationTests.java:98:77:98:105 | getParameter(...) | user-provided value | -| SanitizationTests.java:104:59:104:77 | new URI(...) | SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:104:59:104:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:103:73:103:103 | getParameter(...) | user-provided value | -| SanitizationTests.java:105:25:105:32 | unsafer6 | SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:105:25:105:32 | unsafer6 | Potential server-side request forgery due to a $@. | SanitizationTests.java:103:73:103:103 | getParameter(...) | user-provided value | -| SanitizationTests.java:108:59:108:77 | new URI(...) | SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:108:59:108:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:107:56:107:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:109:25:109:32 | unsafer7 | SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:109:25:109:32 | unsafer7 | Potential server-side request forgery due to a $@. | SanitizationTests.java:107:56:107:86 | getParameter(...) | user-provided value | -| SanitizationTests.java:112:59:112:77 | new URI(...) | SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:112:59:112:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:111:55:111:85 | getParameter(...) | user-provided value | -| SanitizationTests.java:113:25:113:32 | unsafer8 | SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:113:25:113:32 | unsafer8 | Potential server-side request forgery due to a $@. | SanitizationTests.java:111:55:111:85 | getParameter(...) | user-provided value | -| SanitizationTests.java:116:59:116:77 | new URI(...) | SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:116:59:116:77 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:115:33:115:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:117:25:117:32 | unsafer9 | SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:117:25:117:32 | unsafer9 | Potential server-side request forgery due to a $@. | SanitizationTests.java:115:33:115:63 | getParameter(...) | user-provided value | -| SanitizationTests.java:120:60:120:79 | new URI(...) | SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:120:60:120:79 | new URI(...) | Potential server-side request forgery due to a $@. | SanitizationTests.java:119:94:119:125 | getParameter(...) | user-provided value | -| SanitizationTests.java:121:25:121:33 | unsafer10 | SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:121:25:121:33 | unsafer10 | Potential server-side request forgery due to a $@. | SanitizationTests.java:119:94:119:125 | getParameter(...) | user-provided value | -| SpringSSRF.java:32:39:32:59 | ... + ... | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:33:35:33:48 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:34:34:34:47 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:35:39:35:52 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:39:35:52 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:36:69:36:82 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:36:69:36:82 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:37:73:37:86 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:37:73:37:86 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:40:69:40:97 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:69:40:97 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:42:69:42:119 | of(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:42:69:42:119 | of(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:44:41:44:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:41:44:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:45:40:45:62 | new URI(...) | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:40:45:62 | new URI(...) | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:46:42:46:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:46:42:46:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:47:40:47:53 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:47:40:47:53 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:48:30:48:43 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:48:30:48:43 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:49:33:49:46 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:49:33:49:46 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:50:41:50:54 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:50:41:50:54 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:51:42:51:55 | fooResourceUrl | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:51:42:51:55 | fooResourceUrl | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:56:44:56:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:56:44:56:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:58:35:58:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:58:35:58:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:59:35:59:37 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:59:35:59:37 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:60:38:60:40 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:60:38:60:40 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:61:39:61:41 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:61:39:61:41 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:62:37:62:39 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:62:37:62:39 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:63:36:63:38 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:63:36:63:38 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:64:44:64:46 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:64:44:64:46 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:70:49:70:51 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:70:49:70:51 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:71:58:71:60 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:71:58:71:60 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:72:57:72:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:72:57:72:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:73:66:73:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:73:66:73:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:74:57:74:59 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:74:57:74:59 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| SpringSSRF.java:75:66:75:68 | uri | SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:75:66:75:68 | uri | Potential server-side request forgery due to a $@. | SpringSSRF.java:28:33:28:60 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) : String | URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) : String | URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:56:72:56:93 | new URL[] | URLClassLoaderSSRF.java:54:26:54:52 | getParameter(...) : String | URLClassLoaderSSRF.java:56:72:56:93 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:54:26:54:52 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:70:21:70:42 | new URL[] | URLClassLoaderSSRF.java:66:26:66:52 | getParameter(...) : String | URLClassLoaderSSRF.java:70:21:70:42 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:66:26:66:52 | getParameter(...) | user-provided value | -| URLClassLoaderSSRF.java:89:21:89:42 | new URL[] | URLClassLoaderSSRF.java:83:26:83:52 | getParameter(...) : String | URLClassLoaderSSRF.java:89:21:89:42 | new URL[] | Potential server-side request forgery due to a $@. | URLClassLoaderSSRF.java:83:26:83:52 | getParameter(...) | user-provided value | -| mad/Test.java:31:24:31:47 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:31:24:31:47 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:36:10:36:23 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:36:10:36:23 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:38:28:38:43 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:38:28:38:43 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:40:10:40:23 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:40:10:40:23 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:45:32:45:47 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:45:32:45:47 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:47:32:47:47 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:47:32:47:47 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:49:28:49:43 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:49:28:49:43 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:51:28:51:43 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:51:28:51:43 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:53:28:53:43 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:53:28:53:43 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:55:36:55:51 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:55:36:55:51 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:57:32:57:45 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:57:32:57:45 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:59:38:59:51 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:59:38:59:51 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:61:47:61:60 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:61:47:61:60 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:63:26:63:39 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:63:26:63:39 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:65:38:65:51 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:65:38:65:51 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:67:26:67:39 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:67:26:67:39 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:69:27:69:40 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:69:27:69:40 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:71:47:71:60 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:71:47:71:60 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:74:50:74:65 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:74:50:74:65 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:76:50:76:69 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:76:50:76:69 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:78:43:78:59 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:78:43:78:59 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:80:25:80:41 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:80:25:80:41 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:82:31:82:47 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:82:31:82:47 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:84:31:84:47 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:84:31:84:47 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:86:41:86:57 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:86:41:86:57 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:92:24:92:40 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:92:24:92:40 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:97:29:97:42 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:97:29:97:42 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:102:26:102:39 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:102:26:102:39 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:107:15:107:31 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:107:15:107:31 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -| mad/Test.java:112:15:112:31 | (...)... | mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:112:15:112:31 | (...)... | Potential server-side request forgery due to a $@. | mad/Test.java:26:16:26:41 | getParameter(...) | user-provided value | -edges -| ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | ApacheHttpSSRF.java:28:31:28:34 | sink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:30:43:30:45 | uri | provenance | Sink:MaD:211 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:32:29:32:31 | uri | provenance | Sink:MaD:217 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:34:26:34:28 | uri | provenance | Sink:MaD:212 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:35:26:35:28 | uri | provenance | Sink:MaD:215 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:36:25:36:27 | uri | provenance | Sink:MaD:216 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:37:28:37:30 | uri | provenance | Sink:MaD:210 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:38:29:38:31 | uri | provenance | Sink:MaD:213 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:39:27:39:29 | uri | provenance | Sink:MaD:218 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:40:27:40:29 | uri | provenance | Sink:MaD:214 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:42:62:42:64 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:43:41:43:43 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:44:41:44:43 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:46:77:46:79 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:47:56:47:58 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:48:56:48:58 | uri : URI | provenance | | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:50:32:50:34 | uri | provenance | Sink:MaD:220 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:51:33:51:35 | uri | provenance | Sink:MaD:224 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:52:32:52:34 | uri | provenance | Sink:MaD:225 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:53:35:53:37 | uri | provenance | Sink:MaD:219 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:54:36:54:38 | uri | provenance | Sink:MaD:222 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:55:33:55:35 | uri | provenance | Sink:MaD:221 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:56:34:56:36 | uri | provenance | Sink:MaD:227 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:57:34:57:36 | uri | provenance | Sink:MaD:223 | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | ApacheHttpSSRF.java:58:43:58:45 | uri | provenance | Sink:MaD:226 | -| ApacheHttpSSRF.java:28:31:28:34 | sink : String | ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRF.java:28:31:28:34 | sink : String | ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRF.java:42:62:42:64 | uri : URI | ApacheHttpSSRF.java:42:62:42:75 | toString(...) : String | provenance | MaD:286 | -| ApacheHttpSSRF.java:42:62:42:75 | toString(...) : String | ApacheHttpSSRF.java:42:34:42:82 | new BasicRequestLine(...) | provenance | MaD:293 Sink:MaD:231 | -| ApacheHttpSSRF.java:43:41:43:43 | uri : URI | ApacheHttpSSRF.java:43:41:43:54 | toString(...) | provenance | MaD:286 Sink:MaD:232 | -| ApacheHttpSSRF.java:44:41:44:43 | uri : URI | ApacheHttpSSRF.java:44:41:44:54 | toString(...) | provenance | MaD:286 Sink:MaD:233 | -| ApacheHttpSSRF.java:46:77:46:79 | uri : URI | ApacheHttpSSRF.java:46:77:46:90 | toString(...) : String | provenance | MaD:286 | -| ApacheHttpSSRF.java:46:77:46:90 | toString(...) : String | ApacheHttpSSRF.java:46:49:46:97 | new BasicRequestLine(...) | provenance | MaD:293 Sink:MaD:228 | -| ApacheHttpSSRF.java:47:56:47:58 | uri : URI | ApacheHttpSSRF.java:47:56:47:69 | toString(...) | provenance | MaD:286 Sink:MaD:229 | -| ApacheHttpSSRF.java:48:56:48:58 | uri : URI | ApacheHttpSSRF.java:48:56:48:69 | toString(...) | provenance | MaD:286 Sink:MaD:230 | -| ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:42:31:42:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:49:54:49:56 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:50:54:50:56 | uri | provenance | Sink:MaD:40 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:51:48:51:50 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:52:48:52:50 | uri | provenance | Sink:MaD:42 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:55:38:55:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:56:38:56:40 | uri | provenance | Sink:MaD:45 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:59:35:59:37 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:60:35:60:37 | uri | provenance | Sink:MaD:48 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:63:36:63:38 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:64:36:64:38 | uri | provenance | Sink:MaD:51 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:67:39:67:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:68:39:68:41 | uri | provenance | Sink:MaD:54 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:71:37:71:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:72:37:72:39 | uri | provenance | Sink:MaD:57 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:75:36:75:38 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:76:36:76:38 | uri | provenance | Sink:MaD:60 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:79:35:79:37 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:80:35:80:37 | uri | provenance | Sink:MaD:63 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:83:37:83:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:84:37:84:39 | uri | provenance | Sink:MaD:66 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:88:51:88:53 | uri | provenance | Sink:MaD:68 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:92:51:92:53 | uri | provenance | Sink:MaD:70 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:94:45:94:47 | uri | provenance | Sink:MaD:72 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:97:54:97:56 | uri | provenance | Sink:MaD:74 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:98:48:98:50 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:99:48:99:50 | uri | provenance | Sink:MaD:76 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:103:55:103:57 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:104:55:104:57 | uri | provenance | Sink:MaD:79 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:105:49:105:51 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:106:49:106:51 | uri | provenance | Sink:MaD:81 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:109:39:109:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:110:39:110:41 | uri | provenance | Sink:MaD:84 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:113:36:113:38 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:114:36:114:38 | uri | provenance | Sink:MaD:87 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:117:37:117:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:118:37:118:39 | uri | provenance | Sink:MaD:90 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:121:40:121:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:122:40:122:42 | uri | provenance | Sink:MaD:93 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:125:38:125:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:126:38:126:40 | uri | provenance | Sink:MaD:96 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:129:37:129:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:130:37:130:39 | uri | provenance | Sink:MaD:99 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:133:36:133:38 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:134:36:134:38 | uri | provenance | Sink:MaD:102 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:137:38:137:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:138:38:138:40 | uri | provenance | Sink:MaD:105 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:141:41:141:43 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:142:41:142:43 | uri | provenance | Sink:MaD:107 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:144:38:144:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:145:38:145:40 | uri | provenance | Sink:MaD:109 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:147:39:147:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:148:39:148:41 | uri | provenance | Sink:MaD:111 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:150:42:150:44 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:151:42:151:44 | uri | provenance | Sink:MaD:113 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:153:40:153:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:154:40:154:42 | uri | provenance | Sink:MaD:115 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:156:39:156:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:157:39:157:41 | uri | provenance | Sink:MaD:117 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:159:38:159:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:160:38:160:40 | uri | provenance | Sink:MaD:119 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:164:47:164:49 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:165:47:165:49 | uri | provenance | Sink:MaD:206 | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:167:40:167:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:168:40:168:42 | uri | provenance | Sink:MaD:121 | -| ApacheHttpSSRFVersion5.java:42:31:42:37 | uriSink : String | ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:42:31:42:37 | uriSink : String | ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:45:42:45:49 | hostSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:48:54:48:57 | host | provenance | Sink:MaD:38 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:54:38:54:41 | host | provenance | Sink:MaD:43 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:58:35:58:38 | host | provenance | Sink:MaD:46 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:62:36:62:39 | host | provenance | Sink:MaD:49 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:66:39:66:42 | host | provenance | Sink:MaD:52 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:70:37:70:40 | host | provenance | Sink:MaD:55 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:74:36:74:39 | host | provenance | Sink:MaD:58 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:78:35:78:38 | host | provenance | Sink:MaD:61 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:82:37:82:40 | host | provenance | Sink:MaD:64 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:87:51:87:54 | host | provenance | Sink:MaD:67 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:91:51:91:54 | host | provenance | Sink:MaD:69 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:93:45:93:48 | host | provenance | Sink:MaD:71 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:96:54:96:57 | host | provenance | Sink:MaD:73 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:102:55:102:58 | host | provenance | Sink:MaD:77 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:108:39:108:42 | host | provenance | Sink:MaD:82 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:112:36:112:39 | host | provenance | Sink:MaD:85 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:116:37:116:40 | host | provenance | Sink:MaD:88 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:120:40:120:43 | host | provenance | Sink:MaD:91 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:124:38:124:41 | host | provenance | Sink:MaD:94 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:128:37:128:40 | host | provenance | Sink:MaD:97 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:132:36:132:39 | host | provenance | Sink:MaD:100 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:136:38:136:41 | host | provenance | Sink:MaD:103 | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:162:52:162:55 | host | provenance | Sink:MaD:204 | -| ApacheHttpSSRFVersion5.java:45:42:45:49 | hostSink : String | ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | provenance | MaD:292 | -| ApacheHttpSSRFVersion5.java:49:54:49:56 | uri : URI | ApacheHttpSSRFVersion5.java:49:54:49:67 | toString(...) | provenance | MaD:286 Sink:MaD:39 | -| ApacheHttpSSRFVersion5.java:51:48:51:50 | uri : URI | ApacheHttpSSRFVersion5.java:51:48:51:61 | toString(...) | provenance | MaD:286 Sink:MaD:41 | -| ApacheHttpSSRFVersion5.java:55:38:55:40 | uri : URI | ApacheHttpSSRFVersion5.java:55:38:55:51 | toString(...) | provenance | MaD:286 Sink:MaD:44 | -| ApacheHttpSSRFVersion5.java:59:35:59:37 | uri : URI | ApacheHttpSSRFVersion5.java:59:35:59:48 | toString(...) | provenance | MaD:286 Sink:MaD:47 | -| ApacheHttpSSRFVersion5.java:63:36:63:38 | uri : URI | ApacheHttpSSRFVersion5.java:63:36:63:49 | toString(...) | provenance | MaD:286 Sink:MaD:50 | -| ApacheHttpSSRFVersion5.java:67:39:67:41 | uri : URI | ApacheHttpSSRFVersion5.java:67:39:67:52 | toString(...) | provenance | MaD:286 Sink:MaD:53 | -| ApacheHttpSSRFVersion5.java:71:37:71:39 | uri : URI | ApacheHttpSSRFVersion5.java:71:37:71:50 | toString(...) | provenance | MaD:286 Sink:MaD:56 | -| ApacheHttpSSRFVersion5.java:75:36:75:38 | uri : URI | ApacheHttpSSRFVersion5.java:75:36:75:49 | toString(...) | provenance | MaD:286 Sink:MaD:59 | -| ApacheHttpSSRFVersion5.java:79:35:79:37 | uri : URI | ApacheHttpSSRFVersion5.java:79:35:79:48 | toString(...) | provenance | MaD:286 Sink:MaD:62 | -| ApacheHttpSSRFVersion5.java:83:37:83:39 | uri : URI | ApacheHttpSSRFVersion5.java:83:37:83:50 | toString(...) | provenance | MaD:286 Sink:MaD:65 | -| ApacheHttpSSRFVersion5.java:98:48:98:50 | uri : URI | ApacheHttpSSRFVersion5.java:98:48:98:61 | toString(...) | provenance | MaD:286 Sink:MaD:75 | -| ApacheHttpSSRFVersion5.java:103:55:103:57 | uri : URI | ApacheHttpSSRFVersion5.java:103:55:103:68 | toString(...) | provenance | MaD:286 Sink:MaD:78 | -| ApacheHttpSSRFVersion5.java:105:49:105:51 | uri : URI | ApacheHttpSSRFVersion5.java:105:49:105:62 | toString(...) | provenance | MaD:286 Sink:MaD:80 | -| ApacheHttpSSRFVersion5.java:109:39:109:41 | uri : URI | ApacheHttpSSRFVersion5.java:109:39:109:52 | toString(...) | provenance | MaD:286 Sink:MaD:83 | -| ApacheHttpSSRFVersion5.java:113:36:113:38 | uri : URI | ApacheHttpSSRFVersion5.java:113:36:113:49 | toString(...) | provenance | MaD:286 Sink:MaD:86 | -| ApacheHttpSSRFVersion5.java:117:37:117:39 | uri : URI | ApacheHttpSSRFVersion5.java:117:37:117:50 | toString(...) | provenance | MaD:286 Sink:MaD:89 | -| ApacheHttpSSRFVersion5.java:121:40:121:42 | uri : URI | ApacheHttpSSRFVersion5.java:121:40:121:53 | toString(...) | provenance | MaD:286 Sink:MaD:92 | -| ApacheHttpSSRFVersion5.java:125:38:125:40 | uri : URI | ApacheHttpSSRFVersion5.java:125:38:125:51 | toString(...) | provenance | MaD:286 Sink:MaD:95 | -| ApacheHttpSSRFVersion5.java:129:37:129:39 | uri : URI | ApacheHttpSSRFVersion5.java:129:37:129:50 | toString(...) | provenance | MaD:286 Sink:MaD:98 | -| ApacheHttpSSRFVersion5.java:133:36:133:38 | uri : URI | ApacheHttpSSRFVersion5.java:133:36:133:49 | toString(...) | provenance | MaD:286 Sink:MaD:101 | -| ApacheHttpSSRFVersion5.java:137:38:137:40 | uri : URI | ApacheHttpSSRFVersion5.java:137:38:137:51 | toString(...) | provenance | MaD:286 Sink:MaD:104 | -| ApacheHttpSSRFVersion5.java:141:41:141:43 | uri : URI | ApacheHttpSSRFVersion5.java:141:41:141:54 | toString(...) | provenance | MaD:286 Sink:MaD:106 | -| ApacheHttpSSRFVersion5.java:144:38:144:40 | uri : URI | ApacheHttpSSRFVersion5.java:144:38:144:51 | toString(...) | provenance | MaD:286 Sink:MaD:108 | -| ApacheHttpSSRFVersion5.java:147:39:147:41 | uri : URI | ApacheHttpSSRFVersion5.java:147:39:147:52 | toString(...) | provenance | MaD:286 Sink:MaD:110 | -| ApacheHttpSSRFVersion5.java:150:42:150:44 | uri : URI | ApacheHttpSSRFVersion5.java:150:42:150:55 | toString(...) | provenance | MaD:286 Sink:MaD:112 | -| ApacheHttpSSRFVersion5.java:153:40:153:42 | uri : URI | ApacheHttpSSRFVersion5.java:153:40:153:53 | toString(...) | provenance | MaD:286 Sink:MaD:114 | -| ApacheHttpSSRFVersion5.java:156:39:156:41 | uri : URI | ApacheHttpSSRFVersion5.java:156:39:156:52 | toString(...) | provenance | MaD:286 Sink:MaD:116 | -| ApacheHttpSSRFVersion5.java:159:38:159:40 | uri : URI | ApacheHttpSSRFVersion5.java:159:38:159:51 | toString(...) | provenance | MaD:286 Sink:MaD:118 | -| ApacheHttpSSRFVersion5.java:164:47:164:49 | uri : URI | ApacheHttpSSRFVersion5.java:164:47:164:60 | toString(...) | provenance | MaD:286 Sink:MaD:205 | -| ApacheHttpSSRFVersion5.java:167:40:167:42 | uri : URI | ApacheHttpSSRFVersion5.java:167:40:167:53 | toString(...) | provenance | MaD:286 Sink:MaD:120 | -| ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:181:31:181:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:184:56:184:58 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:185:56:185:58 | uri | provenance | Sink:MaD:123 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:186:50:186:52 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:187:50:187:52 | uri | provenance | Sink:MaD:125 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:189:40:189:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:190:40:190:42 | uri | provenance | Sink:MaD:127 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:192:37:192:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:193:37:193:39 | uri | provenance | Sink:MaD:129 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:195:38:195:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:196:38:196:40 | uri | provenance | Sink:MaD:131 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:198:41:198:43 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:199:41:199:43 | uri | provenance | Sink:MaD:133 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:201:39:201:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:202:39:202:41 | uri | provenance | Sink:MaD:135 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:204:38:204:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:205:38:205:40 | uri | provenance | Sink:MaD:137 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:207:37:207:39 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:208:37:208:39 | uri | provenance | Sink:MaD:139 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:210:39:210:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:211:39:211:41 | uri | provenance | Sink:MaD:141 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:214:28:214:30 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:215:28:215:30 | uri | provenance | Sink:MaD:143 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:217:25:217:27 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:218:25:218:27 | uri | provenance | Sink:MaD:145 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:220:26:220:28 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:221:26:221:28 | uri | provenance | Sink:MaD:147 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:223:29:223:31 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:224:29:224:31 | uri | provenance | Sink:MaD:149 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:226:27:226:29 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:227:27:227:29 | uri | provenance | Sink:MaD:151 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:229:26:229:28 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:230:26:230:28 | uri | provenance | Sink:MaD:153 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:232:25:232:27 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:233:25:233:27 | uri | provenance | Sink:MaD:155 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:235:27:235:29 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:236:27:236:29 | uri | provenance | Sink:MaD:157 | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:239:46:239:48 | uri | provenance | Sink:MaD:158 | -| ApacheHttpSSRFVersion5.java:181:31:181:37 | uriSink : String | ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:181:31:181:37 | uriSink : String | ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:184:56:184:58 | uri : URI | ApacheHttpSSRFVersion5.java:184:56:184:69 | toString(...) | provenance | MaD:286 Sink:MaD:122 | -| ApacheHttpSSRFVersion5.java:186:50:186:52 | uri : URI | ApacheHttpSSRFVersion5.java:186:50:186:63 | toString(...) | provenance | MaD:286 Sink:MaD:124 | -| ApacheHttpSSRFVersion5.java:189:40:189:42 | uri : URI | ApacheHttpSSRFVersion5.java:189:40:189:53 | toString(...) | provenance | MaD:286 Sink:MaD:126 | -| ApacheHttpSSRFVersion5.java:192:37:192:39 | uri : URI | ApacheHttpSSRFVersion5.java:192:37:192:50 | toString(...) | provenance | MaD:286 Sink:MaD:128 | -| ApacheHttpSSRFVersion5.java:195:38:195:40 | uri : URI | ApacheHttpSSRFVersion5.java:195:38:195:51 | toString(...) | provenance | MaD:286 Sink:MaD:130 | -| ApacheHttpSSRFVersion5.java:198:41:198:43 | uri : URI | ApacheHttpSSRFVersion5.java:198:41:198:54 | toString(...) | provenance | MaD:286 Sink:MaD:132 | -| ApacheHttpSSRFVersion5.java:201:39:201:41 | uri : URI | ApacheHttpSSRFVersion5.java:201:39:201:52 | toString(...) | provenance | MaD:286 Sink:MaD:134 | -| ApacheHttpSSRFVersion5.java:204:38:204:40 | uri : URI | ApacheHttpSSRFVersion5.java:204:38:204:51 | toString(...) | provenance | MaD:286 Sink:MaD:136 | -| ApacheHttpSSRFVersion5.java:207:37:207:39 | uri : URI | ApacheHttpSSRFVersion5.java:207:37:207:50 | toString(...) | provenance | MaD:286 Sink:MaD:138 | -| ApacheHttpSSRFVersion5.java:210:39:210:41 | uri : URI | ApacheHttpSSRFVersion5.java:210:39:210:52 | toString(...) | provenance | MaD:286 Sink:MaD:140 | -| ApacheHttpSSRFVersion5.java:214:28:214:30 | uri : URI | ApacheHttpSSRFVersion5.java:214:28:214:41 | toString(...) | provenance | MaD:286 Sink:MaD:142 | -| ApacheHttpSSRFVersion5.java:217:25:217:27 | uri : URI | ApacheHttpSSRFVersion5.java:217:25:217:38 | toString(...) | provenance | MaD:286 Sink:MaD:144 | -| ApacheHttpSSRFVersion5.java:220:26:220:28 | uri : URI | ApacheHttpSSRFVersion5.java:220:26:220:39 | toString(...) | provenance | MaD:286 Sink:MaD:146 | -| ApacheHttpSSRFVersion5.java:223:29:223:31 | uri : URI | ApacheHttpSSRFVersion5.java:223:29:223:42 | toString(...) | provenance | MaD:286 Sink:MaD:148 | -| ApacheHttpSSRFVersion5.java:226:27:226:29 | uri : URI | ApacheHttpSSRFVersion5.java:226:27:226:40 | toString(...) | provenance | MaD:286 Sink:MaD:150 | -| ApacheHttpSSRFVersion5.java:229:26:229:28 | uri : URI | ApacheHttpSSRFVersion5.java:229:26:229:39 | toString(...) | provenance | MaD:286 Sink:MaD:152 | -| ApacheHttpSSRFVersion5.java:232:25:232:27 | uri : URI | ApacheHttpSSRFVersion5.java:232:25:232:38 | toString(...) | provenance | MaD:286 Sink:MaD:154 | -| ApacheHttpSSRFVersion5.java:235:27:235:29 | uri : URI | ApacheHttpSSRFVersion5.java:235:27:235:40 | toString(...) | provenance | MaD:286 Sink:MaD:156 | -| ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:252:31:252:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:255:44:255:46 | uri | provenance | Sink:MaD:159 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:256:38:256:40 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:257:38:257:40 | uri | provenance | Sink:MaD:161 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:259:28:259:30 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:260:28:260:30 | uri | provenance | Sink:MaD:163 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:262:25:262:27 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:263:25:263:27 | uri | provenance | Sink:MaD:165 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:265:26:265:28 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:266:26:266:28 | uri | provenance | Sink:MaD:167 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:268:29:268:31 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:269:29:269:31 | uri | provenance | Sink:MaD:169 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:271:27:271:29 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:272:27:272:29 | uri | provenance | Sink:MaD:171 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:274:26:274:28 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:275:26:275:28 | uri | provenance | Sink:MaD:173 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:277:25:277:27 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:278:25:278:27 | uri | provenance | Sink:MaD:175 | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:280:27:280:29 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:281:27:281:29 | uri | provenance | Sink:MaD:177 | -| ApacheHttpSSRFVersion5.java:252:31:252:37 | uriSink : String | ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:252:31:252:37 | uriSink : String | ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:256:38:256:40 | uri : URI | ApacheHttpSSRFVersion5.java:256:38:256:51 | toString(...) | provenance | MaD:286 Sink:MaD:160 | -| ApacheHttpSSRFVersion5.java:259:28:259:30 | uri : URI | ApacheHttpSSRFVersion5.java:259:28:259:41 | toString(...) | provenance | MaD:286 Sink:MaD:162 | -| ApacheHttpSSRFVersion5.java:262:25:262:27 | uri : URI | ApacheHttpSSRFVersion5.java:262:25:262:38 | toString(...) | provenance | MaD:286 Sink:MaD:164 | -| ApacheHttpSSRFVersion5.java:265:26:265:28 | uri : URI | ApacheHttpSSRFVersion5.java:265:26:265:39 | toString(...) | provenance | MaD:286 Sink:MaD:166 | -| ApacheHttpSSRFVersion5.java:268:29:268:31 | uri : URI | ApacheHttpSSRFVersion5.java:268:29:268:42 | toString(...) | provenance | MaD:286 Sink:MaD:168 | -| ApacheHttpSSRFVersion5.java:271:27:271:29 | uri : URI | ApacheHttpSSRFVersion5.java:271:27:271:40 | toString(...) | provenance | MaD:286 Sink:MaD:170 | -| ApacheHttpSSRFVersion5.java:274:26:274:28 | uri : URI | ApacheHttpSSRFVersion5.java:274:26:274:39 | toString(...) | provenance | MaD:286 Sink:MaD:172 | -| ApacheHttpSSRFVersion5.java:277:25:277:27 | uri : URI | ApacheHttpSSRFVersion5.java:277:25:277:38 | toString(...) | provenance | MaD:286 Sink:MaD:174 | -| ApacheHttpSSRFVersion5.java:280:27:280:29 | uri : URI | ApacheHttpSSRFVersion5.java:280:27:280:40 | toString(...) | provenance | MaD:286 Sink:MaD:176 | -| ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:296:31:296:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:308:60:308:62 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:309:60:309:62 | uri | provenance | Sink:MaD:209 | -| ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:313:53:313:55 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:314:53:314:55 | uri | provenance | Sink:MaD:209 | -| ApacheHttpSSRFVersion5.java:296:31:296:37 | uriSink : String | ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:296:31:296:37 | uriSink : String | ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:299:42:299:49 | hostSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:299:29:299:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:303:34:303:37 | host | provenance | Sink:MaD:178 | -| ApacheHttpSSRFVersion5.java:299:29:299:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:304:34:304:37 | host | provenance | Sink:MaD:179 | -| ApacheHttpSSRFVersion5.java:299:42:299:49 | hostSink : String | ApacheHttpSSRFVersion5.java:299:29:299:50 | new HttpHost(...) : HttpHost | provenance | MaD:292 | -| ApacheHttpSSRFVersion5.java:308:60:308:62 | uri : URI | ApacheHttpSSRFVersion5.java:308:60:308:73 | toString(...) | provenance | MaD:286 Sink:MaD:208 | -| ApacheHttpSSRFVersion5.java:313:53:313:55 | uri : URI | ApacheHttpSSRFVersion5.java:313:53:313:66 | toString(...) | provenance | MaD:286 Sink:MaD:208 | -| ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:327:31:327:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:333:42:333:44 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:334:42:334:44 | uri | provenance | Sink:MaD:181 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:336:39:336:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:337:39:337:41 | uri | provenance | Sink:MaD:183 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:339:40:339:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:340:40:340:42 | uri | provenance | Sink:MaD:185 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:342:43:342:45 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:343:43:343:45 | uri | provenance | Sink:MaD:187 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:345:41:345:43 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:346:41:346:43 | uri | provenance | Sink:MaD:189 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:348:40:348:42 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:349:40:349:42 | uri | provenance | Sink:MaD:191 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:351:39:351:41 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:352:39:352:41 | uri | provenance | Sink:MaD:193 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:356:48:356:50 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:357:48:357:50 | uri | provenance | Sink:MaD:206 | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:359:41:359:43 | uri : URI | provenance | | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:360:41:360:43 | uri | provenance | Sink:MaD:195 | -| ApacheHttpSSRFVersion5.java:327:31:327:37 | uriSink : String | ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:327:31:327:37 | uriSink : String | ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:329:31:329:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:330:42:330:49 | hostSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:330:29:330:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:354:53:354:56 | host | provenance | Sink:MaD:204 | -| ApacheHttpSSRFVersion5.java:330:42:330:49 | hostSink : String | ApacheHttpSSRFVersion5.java:330:29:330:50 | new HttpHost(...) : HttpHost | provenance | MaD:292 | -| ApacheHttpSSRFVersion5.java:333:42:333:44 | uri : URI | ApacheHttpSSRFVersion5.java:333:42:333:55 | toString(...) | provenance | MaD:286 Sink:MaD:180 | -| ApacheHttpSSRFVersion5.java:336:39:336:41 | uri : URI | ApacheHttpSSRFVersion5.java:336:39:336:52 | toString(...) | provenance | MaD:286 Sink:MaD:182 | -| ApacheHttpSSRFVersion5.java:339:40:339:42 | uri : URI | ApacheHttpSSRFVersion5.java:339:40:339:53 | toString(...) | provenance | MaD:286 Sink:MaD:184 | -| ApacheHttpSSRFVersion5.java:342:43:342:45 | uri : URI | ApacheHttpSSRFVersion5.java:342:43:342:56 | toString(...) | provenance | MaD:286 Sink:MaD:186 | -| ApacheHttpSSRFVersion5.java:345:41:345:43 | uri : URI | ApacheHttpSSRFVersion5.java:345:41:345:54 | toString(...) | provenance | MaD:286 Sink:MaD:188 | -| ApacheHttpSSRFVersion5.java:348:40:348:42 | uri : URI | ApacheHttpSSRFVersion5.java:348:40:348:53 | toString(...) | provenance | MaD:286 Sink:MaD:190 | -| ApacheHttpSSRFVersion5.java:351:39:351:41 | uri : URI | ApacheHttpSSRFVersion5.java:351:39:351:52 | toString(...) | provenance | MaD:286 Sink:MaD:192 | -| ApacheHttpSSRFVersion5.java:356:48:356:50 | uri : URI | ApacheHttpSSRFVersion5.java:356:48:356:61 | toString(...) | provenance | MaD:286 Sink:MaD:205 | -| ApacheHttpSSRFVersion5.java:359:41:359:43 | uri : URI | ApacheHttpSSRFVersion5.java:359:41:359:54 | toString(...) | provenance | MaD:286 Sink:MaD:194 | -| ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:373:31:373:37 | uriSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:380:57:380:59 | uri | provenance | Sink:MaD:197 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:382:51:382:53 | uri | provenance | Sink:MaD:199 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:386:50:386:52 | uri | provenance | Sink:MaD:201 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:388:44:388:46 | uri | provenance | Sink:MaD:203 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:390:24:390:26 | uri | provenance | Sink:MaD:207 | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | ApacheHttpSSRFVersion5.java:394:24:394:26 | uri | provenance | Sink:MaD:207 | -| ApacheHttpSSRFVersion5.java:373:31:373:37 | uriSink : String | ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | provenance | Config | -| ApacheHttpSSRFVersion5.java:373:31:373:37 | uriSink : String | ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | provenance | MaD:285 | -| ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | ApacheHttpSSRFVersion5.java:376:42:376:49 | hostSink : String | provenance | Src:MaD:277 | -| ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:379:57:379:60 | host | provenance | Sink:MaD:196 | -| ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:381:51:381:54 | host | provenance | Sink:MaD:198 | -| ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:385:50:385:53 | host | provenance | Sink:MaD:200 | -| ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | ApacheHttpSSRFVersion5.java:387:44:387:47 | host | provenance | Sink:MaD:202 | -| ApacheHttpSSRFVersion5.java:376:42:376:49 | hostSink : String | ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | provenance | MaD:292 | -| JakartaWsSSRF.java:14:22:14:48 | getParameter(...) : String | JakartaWsSSRF.java:15:23:15:25 | url | provenance | Src:MaD:277 Sink:MaD:3 | -| JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | JavaNetHttpSSRF.java:26:31:26:34 | sink : String | provenance | Src:MaD:277 | -| JavaNetHttpSSRF.java:26:23:26:35 | new URI(...) : URI | JavaNetHttpSSRF.java:39:59:39:61 | uri | provenance | Sink:MaD:6 | -| JavaNetHttpSSRF.java:26:31:26:34 | sink : String | JavaNetHttpSSRF.java:26:23:26:35 | new URI(...) : URI | provenance | Config | -| JavaNetHttpSSRF.java:26:31:26:34 | sink : String | JavaNetHttpSSRF.java:26:23:26:35 | new URI(...) : URI | provenance | MaD:285 | -| JavaNetHttpSSRF.java:26:31:26:34 | sink : String | JavaNetHttpSSRF.java:27:40:27:43 | sink : String | provenance | | -| JavaNetHttpSSRF.java:27:24:27:57 | new URI(...) : URI | JavaNetHttpSSRF.java:38:65:38:68 | uri2 | provenance | Sink:MaD:5 | -| JavaNetHttpSSRF.java:27:40:27:43 | sink : String | JavaNetHttpSSRF.java:27:24:27:57 | new URI(...) : URI | provenance | Config | -| JavaNetHttpSSRF.java:27:40:27:43 | sink : String | JavaNetHttpSSRF.java:28:32:28:35 | sink : String | provenance | | -| JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | JavaNetHttpSSRF.java:30:32:30:35 | url1 | provenance | Sink:MaD:9 | -| JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | JavaNetHttpSSRF.java:33:32:33:35 | url1 | provenance | Sink:MaD:9 | -| JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | JavaNetHttpSSRF.java:34:30:34:33 | url1 | provenance | Sink:MaD:10 | -| JavaNetHttpSSRF.java:28:32:28:35 | sink : String | JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | provenance | Config | -| JavaNetHttpSSRF.java:28:32:28:35 | sink : String | JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | provenance | MaD:288 | -| JaxWsSSRF.java:14:22:14:48 | getParameter(...) : String | JaxWsSSRF.java:15:23:15:25 | url | provenance | Src:MaD:277 Sink:MaD:23 | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:26:28:26:34 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:17 | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:28:41:28:47 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:18 | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:29:41:29:47 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:20 | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:30:41:30:47 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:19 | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | JdbcUrlSSRF.java:32:27:32:33 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:242 | -| JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:43:27:43:33 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:2 | -| JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:48:23:48:29 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:2 | -| JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | JdbcUrlSSRF.java:52:38:52:44 | jdbcUrl : String | provenance | Src:MaD:277 | -| JdbcUrlSSRF.java:52:9:52:13 | props : Properties | JdbcUrlSSRF.java:54:49:54:53 | props | provenance | Sink:MaD:1 | -| JdbcUrlSSRF.java:52:9:52:13 | props [post update] : Properties [] : String | JdbcUrlSSRF.java:54:49:54:53 | props | provenance | Sink:MaD:1 | -| JdbcUrlSSRF.java:52:38:52:44 | jdbcUrl : String | JdbcUrlSSRF.java:52:9:52:13 | props : Properties | provenance | Config | -| JdbcUrlSSRF.java:52:38:52:44 | jdbcUrl : String | JdbcUrlSSRF.java:52:9:52:13 | props [post update] : Properties [] : String | provenance | MaD:291 | -| JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:65:27:65:33 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:257 | -| JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:67:75:67:81 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:258 | -| JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:70:75:70:81 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:260 | -| JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | JdbcUrlSSRF.java:73:75:73:81 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:259 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:82:21:82:27 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:235 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:83:21:83:27 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:236 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:84:21:84:27 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:237 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:86:19:86:25 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:238 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:87:19:87:25 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:239 | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | provenance | Src:MaD:277 Sink:MaD:240 | -| ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:16:52:16:54 | url | provenance | Src:MaD:277 Sink:MaD:274 | -| ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | ReactiveWebClientSSRF.java:35:30:35:32 | url | provenance | Src:MaD:277 Sink:MaD:273 | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | SanitizationTests.java:22:52:22:54 | uri | provenance | Sink:MaD:6 | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | SanitizationTests.java:22:52:22:54 | uri : URI | provenance | | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:19:23:19:58 | new URI(...) : URI | provenance | Src:MaD:277 Config | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | SanitizationTests.java:19:23:19:58 | new URI(...) : URI | provenance | Src:MaD:277 MaD:285 | -| SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | SanitizationTests.java:23:25:23:25 | r | provenance | Sink:MaD:4 | -| SanitizationTests.java:22:52:22:54 | uri : URI | SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:75:33:75:63 | getParameter(...) : String | SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | SanitizationTests.java:77:25:77:32 | unsafer3 | provenance | Sink:MaD:4 | -| SanitizationTests.java:76:59:76:77 | new URI(...) : URI | SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | SanitizationTests.java:76:59:76:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:79:49:79:79 | getParameter(...) : String | SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | SanitizationTests.java:81:25:81:32 | unsafer4 | provenance | Sink:MaD:4 | -| SanitizationTests.java:80:59:80:77 | new URI(...) : URI | SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | SanitizationTests.java:80:59:80:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | provenance | | -| SanitizationTests.java:84:31:84:61 | getParameter(...) : String | SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | provenance | Src:MaD:277 MaD:278 | -| SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | SanitizationTests.java:86:25:86:32 | unsafer5 | provenance | Sink:MaD:4 | -| SanitizationTests.java:85:59:85:88 | new URI(...) : URI | SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | SanitizationTests.java:85:67:85:87 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | SanitizationTests.java:85:59:85:88 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | provenance | | -| SanitizationTests.java:88:58:88:86 | getParameter(...) : String | SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | -| SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | SanitizationTests.java:91:25:91:33 | unsafer5a | provenance | Sink:MaD:4 | -| SanitizationTests.java:90:60:90:89 | new URI(...) : URI | SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | SanitizationTests.java:90:68:90:88 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | SanitizationTests.java:90:60:90:89 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | provenance | | -| SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | provenance | MaD:279 | -| SanitizationTests.java:93:60:93:88 | getParameter(...) : String | SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | provenance | Src:MaD:277 MaD:282 | -| SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | SanitizationTests.java:96:25:96:33 | unsafer5b | provenance | Sink:MaD:4 | -| SanitizationTests.java:95:60:95:90 | new URI(...) : URI | SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | SanitizationTests.java:95:68:95:89 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | SanitizationTests.java:95:60:95:90 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | provenance | | -| SanitizationTests.java:98:77:98:105 | getParameter(...) : String | SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | provenance | Src:MaD:277 MaD:278+MaD:279 | -| SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | SanitizationTests.java:101:25:101:33 | unsafer5c | provenance | Sink:MaD:4 | -| SanitizationTests.java:100:60:100:90 | new URI(...) : URI | SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | SanitizationTests.java:100:68:100:89 | toString(...) : String | provenance | MaD:280 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | SanitizationTests.java:100:60:100:90 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:103:33:103:104 | format(...) : String | SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | provenance | | -| SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:103:33:103:104 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:103:73:103:103 | getParameter(...) : String | SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | SanitizationTests.java:105:25:105:32 | unsafer6 | provenance | Sink:MaD:4 | -| SanitizationTests.java:104:59:104:77 | new URI(...) : URI | SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | SanitizationTests.java:104:59:104:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:107:33:107:110 | format(...) : String | SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | provenance | | -| SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:107:33:107:110 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:107:56:107:86 | getParameter(...) : String | SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | SanitizationTests.java:109:25:109:32 | unsafer7 | provenance | Sink:MaD:4 | -| SanitizationTests.java:108:59:108:77 | new URI(...) : URI | SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | SanitizationTests.java:108:59:108:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:111:33:111:110 | format(...) : String | SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | provenance | | -| SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:111:33:111:110 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:111:55:111:85 | getParameter(...) : String | SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | SanitizationTests.java:113:25:113:32 | unsafer8 | provenance | Sink:MaD:4 | -| SanitizationTests.java:112:59:112:77 | new URI(...) : URI | SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | SanitizationTests.java:112:59:112:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:115:33:115:63 | getParameter(...) : String | SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | provenance | Src:MaD:277 | -| SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | SanitizationTests.java:117:25:117:32 | unsafer9 | provenance | Sink:MaD:4 | -| SanitizationTests.java:116:59:116:77 | new URI(...) : URI | SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | SanitizationTests.java:116:59:116:77 | new URI(...) : URI | provenance | MaD:285 | -| SanitizationTests.java:119:34:119:126 | format(...) : String | SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | provenance | | -| SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | SanitizationTests.java:119:34:119:126 | format(...) : String | provenance | MaD:281 | -| SanitizationTests.java:119:94:119:125 | getParameter(...) : String | SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | provenance | Src:MaD:277 | -| SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | provenance | MaD:283 | -| SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | SanitizationTests.java:121:25:121:33 | unsafer10 | provenance | Sink:MaD:4 | -| SanitizationTests.java:120:60:120:79 | new URI(...) : URI | SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | provenance | MaD:284 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) | provenance | Config Sink:MaD:6 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) | provenance | MaD:285 Sink:MaD:6 | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) : URI | provenance | Config | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | SanitizationTests.java:120:60:120:79 | new URI(...) : URI | provenance | MaD:285 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:32:39:32:59 | ... + ... | provenance | Src:MaD:277 Sink:MaD:264 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:33:35:33:48 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:262 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:34:34:34:47 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:263 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:35:39:35:52 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:265 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:36:69:36:82 | fooResourceUrl | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:37:73:37:86 | fooResourceUrl | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:44:41:44:54 | fooResourceUrl | provenance | Src:MaD:277 Sink:MaD:268 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | provenance | Src:MaD:277 | -| SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | SpringSSRF.java:40:69:40:97 | of(...) | provenance | MaD:289 | -| SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | SpringSSRF.java:42:69:42:119 | of(...) | provenance | MaD:290 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:45:40:45:62 | new URI(...) | provenance | Config Sink:MaD:269 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:45:40:45:62 | new URI(...) | provenance | MaD:285 Sink:MaD:269 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:46:42:46:55 | fooResourceUrl | provenance | Sink:MaD:270 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:47:40:47:53 | fooResourceUrl | provenance | Sink:MaD:271 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:48:30:48:43 | fooResourceUrl | provenance | Sink:MaD:272 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:49:33:49:46 | fooResourceUrl | provenance | Sink:MaD:261 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:50:41:50:54 | fooResourceUrl | provenance | Sink:MaD:266 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:51:42:51:55 | fooResourceUrl | provenance | Sink:MaD:267 | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | provenance | | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:56:44:56:46 | uri | provenance | Sink:MaD:255 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:58:35:58:37 | uri | provenance | Sink:MaD:250 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:59:35:59:37 | uri | provenance | Sink:MaD:256 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:60:38:60:40 | uri | provenance | Sink:MaD:249 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:61:39:61:41 | uri | provenance | Sink:MaD:253 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:62:37:62:39 | uri | provenance | Sink:MaD:254 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:63:36:63:38 | uri | provenance | Sink:MaD:251 | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | SpringSSRF.java:64:44:64:46 | uri | provenance | Sink:MaD:252 | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:54:27:54:49 | new URI(...) : URI | provenance | Config | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:54:27:54:49 | new URI(...) : URI | provenance | MaD:285 | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | provenance | | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:70:49:70:51 | uri | provenance | Sink:MaD:243 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:71:58:71:60 | uri | provenance | Sink:MaD:244 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:72:57:72:59 | uri | provenance | Sink:MaD:245 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:73:66:73:68 | uri | provenance | Sink:MaD:247 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:74:57:74:59 | uri | provenance | Sink:MaD:246 | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | SpringSSRF.java:75:66:75:68 | uri | provenance | Sink:MaD:248 | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | SpringSSRF.java:67:27:67:49 | new URI(...) : URI | provenance | Config | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | SpringSSRF.java:67:27:67:49 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | URLClassLoaderSSRF.java:17:31:17:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | URLClassLoaderSSRF.java:18:74:18:76 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:17:31:17:33 | url : String | URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:17:31:17:33 | url : String | URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:18:64:18:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | provenance | Sink:MaD:13 | -| URLClassLoaderSSRF.java:18:64:18:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | provenance | Sink:MaD:13 | -| URLClassLoaderSSRF.java:18:74:18:76 | uri : URI | URLClassLoaderSSRF.java:18:74:18:84 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:18:74:18:84 | toURL(...) : URL | URLClassLoaderSSRF.java:18:64:18:85 | {...} : URL[] [[]] : URL | provenance | | -| URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) : String | URLClassLoaderSSRF.java:29:31:29:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:29:23:29:34 | new URI(...) : URI | URLClassLoaderSSRF.java:30:74:30:76 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:29:31:29:33 | url : String | URLClassLoaderSSRF.java:29:23:29:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:29:31:29:33 | url : String | URLClassLoaderSSRF.java:29:23:29:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:30:64:30:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | provenance | Sink:MaD:14 | -| URLClassLoaderSSRF.java:30:64:30:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | provenance | Sink:MaD:14 | -| URLClassLoaderSSRF.java:30:74:30:76 | uri : URI | URLClassLoaderSSRF.java:30:74:30:84 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:30:74:30:84 | toURL(...) : URL | URLClassLoaderSSRF.java:30:64:30:85 | {...} : URL[] [[]] : URL | provenance | | -| URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) : String | URLClassLoaderSSRF.java:41:31:41:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:41:23:41:34 | new URI(...) : URI | URLClassLoaderSSRF.java:44:74:44:76 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:41:31:41:33 | url : String | URLClassLoaderSSRF.java:41:23:41:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:41:31:41:33 | url : String | URLClassLoaderSSRF.java:41:23:41:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:44:64:44:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | provenance | Sink:MaD:15 | -| URLClassLoaderSSRF.java:44:64:44:85 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | provenance | Sink:MaD:15 | -| URLClassLoaderSSRF.java:44:74:44:76 | uri : URI | URLClassLoaderSSRF.java:44:74:44:84 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:44:74:44:84 | toURL(...) : URL | URLClassLoaderSSRF.java:44:64:44:85 | {...} : URL[] [[]] : URL | provenance | | -| URLClassLoaderSSRF.java:54:26:54:52 | getParameter(...) : String | URLClassLoaderSSRF.java:55:31:55:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:55:23:55:34 | new URI(...) : URI | URLClassLoaderSSRF.java:56:82:56:84 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:55:31:55:33 | url : String | URLClassLoaderSSRF.java:55:23:55:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:55:31:55:33 | url : String | URLClassLoaderSSRF.java:55:23:55:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:56:72:56:93 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:56:72:56:93 | new URL[] | provenance | Sink:MaD:16 | -| URLClassLoaderSSRF.java:56:82:56:84 | uri : URI | URLClassLoaderSSRF.java:56:82:56:92 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:56:82:56:92 | toURL(...) : URL | URLClassLoaderSSRF.java:56:72:56:93 | {...} : URL[] [[]] : URL | provenance | | -| URLClassLoaderSSRF.java:66:26:66:52 | getParameter(...) : String | URLClassLoaderSSRF.java:67:31:67:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:67:23:67:34 | new URI(...) : URI | URLClassLoaderSSRF.java:70:31:70:33 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:67:31:67:33 | url : String | URLClassLoaderSSRF.java:67:23:67:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:67:31:67:33 | url : String | URLClassLoaderSSRF.java:67:23:67:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:70:21:70:42 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:70:21:70:42 | new URL[] | provenance | Sink:MaD:11 | -| URLClassLoaderSSRF.java:70:21:70:42 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:70:21:70:42 | new URL[] | provenance | Sink:MaD:11 | -| URLClassLoaderSSRF.java:70:31:70:33 | uri : URI | URLClassLoaderSSRF.java:70:31:70:41 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:70:31:70:41 | toURL(...) : URL | URLClassLoaderSSRF.java:70:21:70:42 | {...} : URL[] [[]] : URL | provenance | | -| URLClassLoaderSSRF.java:83:26:83:52 | getParameter(...) : String | URLClassLoaderSSRF.java:84:31:84:33 | url : String | provenance | Src:MaD:277 | -| URLClassLoaderSSRF.java:84:23:84:34 | new URI(...) : URI | URLClassLoaderSSRF.java:89:31:89:33 | uri : URI | provenance | | -| URLClassLoaderSSRF.java:84:31:84:33 | url : String | URLClassLoaderSSRF.java:84:23:84:34 | new URI(...) : URI | provenance | Config | -| URLClassLoaderSSRF.java:84:31:84:33 | url : String | URLClassLoaderSSRF.java:84:23:84:34 | new URI(...) : URI | provenance | MaD:285 | -| URLClassLoaderSSRF.java:89:21:89:42 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:89:21:89:42 | new URL[] | provenance | Sink:MaD:12 | -| URLClassLoaderSSRF.java:89:21:89:42 | {...} : URL[] [[]] : URL | URLClassLoaderSSRF.java:89:21:89:42 | new URL[] | provenance | Sink:MaD:12 | -| URLClassLoaderSSRF.java:89:31:89:33 | uri : URI | URLClassLoaderSSRF.java:89:31:89:41 | toURL(...) : URL | provenance | MaD:287 | -| URLClassLoaderSSRF.java:89:31:89:41 | toURL(...) : URL | URLClassLoaderSSRF.java:89:21:89:42 | {...} : URL[] [[]] : URL | provenance | | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:31:40:31:47 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:36:16:36:23 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:38:36:38:43 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:40:16:40:23 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:45:40:45:47 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:47:40:47:47 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:49:36:49:43 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:51:36:51:43 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:53:36:53:43 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:55:44:55:51 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:57:38:57:45 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:59:44:59:51 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:61:53:61:60 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:63:32:63:39 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:65:44:65:51 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:67:32:67:39 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:69:33:69:40 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:71:53:71:60 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:74:58:74:65 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:76:62:76:69 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:78:52:78:59 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:80:34:80:41 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:82:40:82:47 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:84:40:84:47 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:86:50:86:57 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:92:33:92:40 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:97:35:97:42 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:102:32:102:39 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:107:24:107:31 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | mad/Test.java:112:24:112:31 | source(...) : String | provenance | Src:MaD:277 | -| mad/Test.java:31:40:31:47 | source(...) : String | mad/Test.java:31:24:31:47 | (...)... | provenance | Sink:MaD:7 | -| mad/Test.java:36:16:36:23 | source(...) : String | mad/Test.java:36:10:36:23 | (...)... | provenance | Sink:MaD:9 | -| mad/Test.java:38:36:38:43 | source(...) : String | mad/Test.java:38:28:38:43 | (...)... | provenance | Sink:MaD:8 | -| mad/Test.java:40:16:40:23 | source(...) : String | mad/Test.java:40:10:40:23 | (...)... | provenance | Sink:MaD:10 | -| mad/Test.java:45:40:45:47 | source(...) : String | mad/Test.java:45:32:45:47 | (...)... | provenance | Sink:MaD:11 | -| mad/Test.java:45:40:45:47 | source(...) : String | mad/Test.java:45:32:45:47 | (...)... | provenance | Sink:MaD:11 | -| mad/Test.java:47:40:47:47 | source(...) : String | mad/Test.java:47:32:47:47 | (...)... | provenance | Sink:MaD:12 | -| mad/Test.java:47:40:47:47 | source(...) : String | mad/Test.java:47:32:47:47 | (...)... | provenance | Sink:MaD:12 | -| mad/Test.java:49:36:49:43 | source(...) : String | mad/Test.java:49:28:49:43 | (...)... | provenance | Sink:MaD:13 | -| mad/Test.java:49:36:49:43 | source(...) : String | mad/Test.java:49:28:49:43 | (...)... | provenance | Sink:MaD:13 | -| mad/Test.java:51:36:51:43 | source(...) : String | mad/Test.java:51:28:51:43 | (...)... | provenance | Sink:MaD:14 | -| mad/Test.java:51:36:51:43 | source(...) : String | mad/Test.java:51:28:51:43 | (...)... | provenance | Sink:MaD:14 | -| mad/Test.java:53:36:53:43 | source(...) : String | mad/Test.java:53:28:53:43 | (...)... | provenance | Sink:MaD:15 | -| mad/Test.java:53:36:53:43 | source(...) : String | mad/Test.java:53:28:53:43 | (...)... | provenance | Sink:MaD:15 | -| mad/Test.java:55:44:55:51 | source(...) : String | mad/Test.java:55:36:55:51 | (...)... | provenance | Sink:MaD:16 | -| mad/Test.java:57:38:57:45 | source(...) : String | mad/Test.java:57:32:57:45 | (...)... | provenance | Sink:MaD:25 | -| mad/Test.java:59:44:59:51 | source(...) : String | mad/Test.java:59:38:59:51 | (...)... | provenance | Sink:MaD:26 | -| mad/Test.java:61:53:61:60 | source(...) : String | mad/Test.java:61:47:61:60 | (...)... | provenance | Sink:MaD:24 | -| mad/Test.java:63:32:63:39 | source(...) : String | mad/Test.java:63:26:63:39 | (...)... | provenance | Sink:MaD:28 | -| mad/Test.java:65:44:65:51 | source(...) : String | mad/Test.java:65:38:65:51 | (...)... | provenance | Sink:MaD:29 | -| mad/Test.java:67:32:67:39 | source(...) : String | mad/Test.java:67:26:67:39 | (...)... | provenance | Sink:MaD:27 | -| mad/Test.java:69:33:69:40 | source(...) : String | mad/Test.java:69:27:69:40 | (...)... | provenance | Sink:MaD:22 | -| mad/Test.java:71:53:71:60 | source(...) : String | mad/Test.java:71:47:71:60 | (...)... | provenance | Sink:MaD:30 | -| mad/Test.java:74:58:74:65 | source(...) : String | mad/Test.java:74:50:74:65 | (...)... | provenance | Sink:MaD:32 | -| mad/Test.java:76:62:76:69 | source(...) : String | mad/Test.java:76:50:76:69 | (...)... | provenance | Sink:MaD:31 | -| mad/Test.java:78:52:78:59 | source(...) : String | mad/Test.java:78:43:78:59 | (...)... | provenance | Sink:MaD:33 | -| mad/Test.java:80:34:80:41 | source(...) : String | mad/Test.java:80:25:80:41 | (...)... | provenance | Sink:MaD:34 | -| mad/Test.java:82:40:82:47 | source(...) : String | mad/Test.java:82:31:82:47 | (...)... | provenance | Sink:MaD:35 | -| mad/Test.java:84:40:84:47 | source(...) : String | mad/Test.java:84:31:84:47 | (...)... | provenance | Sink:MaD:36 | -| mad/Test.java:86:50:86:57 | source(...) : String | mad/Test.java:86:41:86:57 | (...)... | provenance | Sink:MaD:37 | -| mad/Test.java:92:33:92:40 | source(...) : String | mad/Test.java:92:24:92:40 | (...)... | provenance | Sink:MaD:21 | -| mad/Test.java:97:35:97:42 | source(...) : String | mad/Test.java:97:29:97:42 | (...)... | provenance | Sink:MaD:234 | -| mad/Test.java:102:32:102:39 | source(...) : String | mad/Test.java:102:26:102:39 | (...)... | provenance | Sink:MaD:241 | -| mad/Test.java:107:24:107:31 | source(...) : String | mad/Test.java:107:15:107:31 | (...)... | provenance | Sink:MaD:276 | -| mad/Test.java:112:24:112:31 | source(...) : String | mad/Test.java:112:15:112:31 | (...)... | provenance | Sink:MaD:275 | -models -| 1 | Sink: com.zaxxer.hikari; HikariConfig; false; HikariConfig; (Properties); ; Argument[0]; request-forgery; manual | -| 2 | Sink: com.zaxxer.hikari; HikariConfig; false; setJdbcUrl; (String); ; Argument[0]; request-forgery; manual | -| 3 | Sink: jakarta.ws.rs.client; Client; true; target; ; ; Argument[0]; request-forgery; manual | -| 4 | Sink: java.net.http; HttpClient; true; send; (HttpRequest,HttpResponse$BodyHandler); ; Argument[0]; request-forgery; ai-manual | -| 5 | Sink: java.net.http; HttpRequest$Builder; false; uri; ; ; Argument[0]; request-forgery; manual | -| 6 | Sink: java.net.http; HttpRequest; false; newBuilder; ; ; Argument[0]; request-forgery; manual | -| 7 | Sink: java.net; DatagramSocket; true; connect; (SocketAddress); ; Argument[0]; request-forgery; ai-manual | -| 8 | Sink: java.net; URL; false; openConnection; (Proxy); ; Argument[0]; request-forgery; ai-manual | -| 9 | Sink: java.net; URL; false; openConnection; ; ; Argument[this]; request-forgery; manual | -| 10 | Sink: java.net; URL; false; openStream; ; ; Argument[this]; request-forgery; manual | -| 11 | Sink: java.net; URLClassLoader; false; URLClassLoader; (String,URL[],ClassLoader); ; Argument[1]; request-forgery; manual | -| 12 | Sink: java.net; URLClassLoader; false; URLClassLoader; (String,URL[],ClassLoader,URLStreamHandlerFactory); ; Argument[1]; request-forgery; manual | -| 13 | Sink: java.net; URLClassLoader; false; URLClassLoader; (URL[]); ; Argument[0]; request-forgery; manual | -| 14 | Sink: java.net; URLClassLoader; false; URLClassLoader; (URL[],ClassLoader); ; Argument[0]; request-forgery; manual | -| 15 | Sink: java.net; URLClassLoader; false; URLClassLoader; (URL[],ClassLoader,URLStreamHandlerFactory); ; Argument[0]; request-forgery; manual | -| 16 | Sink: java.net; URLClassLoader; false; newInstance; ; ; Argument[0]; request-forgery; manual | -| 17 | Sink: java.sql; Driver; false; connect; (String,Properties); ; Argument[0]; request-forgery; manual | -| 18 | Sink: java.sql; DriverManager; false; getConnection; (String); ; Argument[0]; request-forgery; manual | -| 19 | Sink: java.sql; DriverManager; false; getConnection; (String,Properties); ; Argument[0]; request-forgery; manual | -| 20 | Sink: java.sql; DriverManager; false; getConnection; (String,String,String); ; Argument[0]; request-forgery; manual | -| 21 | Sink: javafx.scene.web; WebEngine; false; load; (String); ; Argument[0]; request-forgery; ai-manual | -| 22 | Sink: javax.activation; URLDataSource; true; URLDataSource; ; ; Argument[0]; request-forgery; manual | -| 23 | Sink: javax.ws.rs.client; Client; true; target; ; ; Argument[0]; request-forgery; manual | -| 24 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (JellyContext,URL); ; Argument[1]; request-forgery; ai-manual | -| 25 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (JellyContext,URL,URL); ; Argument[1]; request-forgery; ai-manual | -| 26 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (JellyContext,URL,URL); ; Argument[2]; request-forgery; ai-manual | -| 27 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (URL); ; Argument[0]; request-forgery; ai-manual | -| 28 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (URL,URL); ; Argument[0]; request-forgery; ai-manual | -| 29 | Sink: org.apache.commons.jelly; JellyContext; true; JellyContext; (URL,URL); ; Argument[1]; request-forgery; ai-manual | -| 30 | Sink: org.apache.cxf.catalog; OASISCatalogManager; true; loadCatalog; (URL); ; Argument[0]; request-forgery; manual | -| 31 | Sink: org.apache.cxf.common.classloader; ClassLoaderUtils; true; getURLClassLoader; (List,ClassLoader); ; Argument[0]; request-forgery; manual | -| 32 | Sink: org.apache.cxf.common.classloader; ClassLoaderUtils; true; getURLClassLoader; (URL[],ClassLoader); ; Argument[0]; request-forgery; manual | -| 33 | Sink: org.apache.cxf.resource; ExtendedURIResolver; true; resolve; (String,String); ; Argument[0]; request-forgery; manual | -| 34 | Sink: org.apache.cxf.resource; URIResolver; true; URIResolver; (String); ; Argument[0]; request-forgery; manual | -| 35 | Sink: org.apache.cxf.resource; URIResolver; true; URIResolver; (String,String); ; Argument[1]; request-forgery; manual | -| 36 | Sink: org.apache.cxf.resource; URIResolver; true; URIResolver; (String,String,Class); ; Argument[1]; request-forgery; manual | -| 37 | Sink: org.apache.cxf.resource; URIResolver; true; resolve; (String,String,Class); ; Argument[1]; request-forgery; manual | -| 38 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; create; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 39 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; create; (Method,String); ; Argument[1]; request-forgery; hq-manual | -| 40 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; create; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 41 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; create; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 42 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; create; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 43 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; delete; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 44 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 45 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 46 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; get; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 47 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 48 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 49 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; head; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 50 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 51 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 52 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; options; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 53 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 54 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 55 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; patch; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 56 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 57 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 58 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; post; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 59 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 60 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 61 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; put; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 62 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 63 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 64 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; trace; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 65 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 66 | Sink: org.apache.hc.client5.http.async.methods; BasicHttpRequests; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 67 | Sink: org.apache.hc.client5.http.async.methods; ConfigurableHttpRequest; true; ConfigurableHttpRequest; (String,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 68 | Sink: org.apache.hc.client5.http.async.methods; ConfigurableHttpRequest; true; ConfigurableHttpRequest; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 69 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; SimpleHttpRequest; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 70 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; SimpleHttpRequest; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 71 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; SimpleHttpRequest; (String,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 72 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; SimpleHttpRequest; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 73 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; create; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 74 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; create; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 75 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; create; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 76 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequest; true; create; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 77 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; create; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 78 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; create; (Method,String); ; Argument[1]; request-forgery; hq-manual | -| 79 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; create; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 80 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; create; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 81 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; create; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 82 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; delete; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 83 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 84 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 85 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; get; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 86 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 87 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 88 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; head; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 89 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 90 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 91 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; options; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 92 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 93 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 94 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; patch; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 95 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 96 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 97 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; post; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 98 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 99 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 100 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; put; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 101 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 102 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 103 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; trace; (HttpHost,String); ; Argument[0]; request-forgery; hq-manual | -| 104 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 105 | Sink: org.apache.hc.client5.http.async.methods; SimpleHttpRequests; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 106 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 107 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 108 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 109 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 110 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 111 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 112 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 113 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 114 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 115 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 116 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 117 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 118 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 119 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 120 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 121 | Sink: org.apache.hc.client5.http.async.methods; SimpleRequestBuilder; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 122 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; create; (Method,String); ; Argument[1]; request-forgery; hq-manual | -| 123 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; create; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 124 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; create; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 125 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; create; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 126 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 127 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 128 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 129 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 130 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 131 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 132 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 133 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 134 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 135 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 136 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 137 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 138 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 139 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 140 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 141 | Sink: org.apache.hc.client5.http.classic.methods; ClassicHttpRequests; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 142 | Sink: org.apache.hc.client5.http.classic.methods; HttpDelete; true; HttpDelete; (String); ; Argument[0]; request-forgery; hq-manual | -| 143 | Sink: org.apache.hc.client5.http.classic.methods; HttpDelete; true; HttpDelete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 144 | Sink: org.apache.hc.client5.http.classic.methods; HttpGet; true; HttpGet; (String); ; Argument[0]; request-forgery; hq-manual | -| 145 | Sink: org.apache.hc.client5.http.classic.methods; HttpGet; true; HttpGet; (URI); ; Argument[0]; request-forgery; hq-manual | -| 146 | Sink: org.apache.hc.client5.http.classic.methods; HttpHead; true; HttpHead; (String); ; Argument[0]; request-forgery; hq-manual | -| 147 | Sink: org.apache.hc.client5.http.classic.methods; HttpHead; true; HttpHead; (URI); ; Argument[0]; request-forgery; hq-manual | -| 148 | Sink: org.apache.hc.client5.http.classic.methods; HttpOptions; true; HttpOptions; (String); ; Argument[0]; request-forgery; hq-manual | -| 149 | Sink: org.apache.hc.client5.http.classic.methods; HttpOptions; true; HttpOptions; (URI); ; Argument[0]; request-forgery; hq-manual | -| 150 | Sink: org.apache.hc.client5.http.classic.methods; HttpPatch; true; HttpPatch; (String); ; Argument[0]; request-forgery; hq-manual | -| 151 | Sink: org.apache.hc.client5.http.classic.methods; HttpPatch; true; HttpPatch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 152 | Sink: org.apache.hc.client5.http.classic.methods; HttpPost; true; HttpPost; (String); ; Argument[0]; request-forgery; hq-manual | -| 153 | Sink: org.apache.hc.client5.http.classic.methods; HttpPost; true; HttpPost; (URI); ; Argument[0]; request-forgery; hq-manual | -| 154 | Sink: org.apache.hc.client5.http.classic.methods; HttpPut; true; HttpPut; (String); ; Argument[0]; request-forgery; hq-manual | -| 155 | Sink: org.apache.hc.client5.http.classic.methods; HttpPut; true; HttpPut; (URI); ; Argument[0]; request-forgery; hq-manual | -| 156 | Sink: org.apache.hc.client5.http.classic.methods; HttpTrace; true; HttpTrace; (String); ; Argument[0]; request-forgery; hq-manual | -| 157 | Sink: org.apache.hc.client5.http.classic.methods; HttpTrace; true; HttpTrace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 158 | Sink: org.apache.hc.client5.http.classic.methods; HttpUriRequestBase; true; HttpUriRequestBase; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 159 | Sink: org.apache.hc.client5.http.fluent; Request; true; create; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 160 | Sink: org.apache.hc.client5.http.fluent; Request; true; create; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 161 | Sink: org.apache.hc.client5.http.fluent; Request; true; create; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 162 | Sink: org.apache.hc.client5.http.fluent; Request; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 163 | Sink: org.apache.hc.client5.http.fluent; Request; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 164 | Sink: org.apache.hc.client5.http.fluent; Request; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 165 | Sink: org.apache.hc.client5.http.fluent; Request; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 166 | Sink: org.apache.hc.client5.http.fluent; Request; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 167 | Sink: org.apache.hc.client5.http.fluent; Request; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 168 | Sink: org.apache.hc.client5.http.fluent; Request; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 169 | Sink: org.apache.hc.client5.http.fluent; Request; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 170 | Sink: org.apache.hc.client5.http.fluent; Request; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 171 | Sink: org.apache.hc.client5.http.fluent; Request; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 172 | Sink: org.apache.hc.client5.http.fluent; Request; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 173 | Sink: org.apache.hc.client5.http.fluent; Request; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 174 | Sink: org.apache.hc.client5.http.fluent; Request; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 175 | Sink: org.apache.hc.client5.http.fluent; Request; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 176 | Sink: org.apache.hc.client5.http.fluent; Request; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 177 | Sink: org.apache.hc.client5.http.fluent; Request; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 178 | Sink: org.apache.hc.core5.http.impl.bootstrap; HttpAsyncRequester; true; connect; (HttpHost,Timeout); ; Argument[0]; request-forgery; hq-manual | -| 179 | Sink: org.apache.hc.core5.http.impl.bootstrap; HttpAsyncRequester; true; connect; (HttpHost,Timeout,Object,FutureCallback); ; Argument[0]; request-forgery; hq-manual | -| 180 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; delete; (String); ; Argument[0]; request-forgery; hq-manual | -| 181 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; delete; (URI); ; Argument[0]; request-forgery; hq-manual | -| 182 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; get; (String); ; Argument[0]; request-forgery; hq-manual | -| 183 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; get; (URI); ; Argument[0]; request-forgery; hq-manual | -| 184 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; head; (String); ; Argument[0]; request-forgery; hq-manual | -| 185 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; head; (URI); ; Argument[0]; request-forgery; hq-manual | -| 186 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; options; (String); ; Argument[0]; request-forgery; hq-manual | -| 187 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; options; (URI); ; Argument[0]; request-forgery; hq-manual | -| 188 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; patch; (String); ; Argument[0]; request-forgery; hq-manual | -| 189 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; patch; (URI); ; Argument[0]; request-forgery; hq-manual | -| 190 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; post; (String); ; Argument[0]; request-forgery; hq-manual | -| 191 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; post; (URI); ; Argument[0]; request-forgery; hq-manual | -| 192 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; put; (String); ; Argument[0]; request-forgery; hq-manual | -| 193 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; put; (URI); ; Argument[0]; request-forgery; hq-manual | -| 194 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; trace; (String); ; Argument[0]; request-forgery; hq-manual | -| 195 | Sink: org.apache.hc.core5.http.io.support; ClassicRequestBuilder; true; trace; (URI); ; Argument[0]; request-forgery; hq-manual | -| 196 | Sink: org.apache.hc.core5.http.message; BasicClassicHttpRequest; true; BasicClassicHttpRequest; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 197 | Sink: org.apache.hc.core5.http.message; BasicClassicHttpRequest; true; BasicClassicHttpRequest; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 198 | Sink: org.apache.hc.core5.http.message; BasicClassicHttpRequest; true; BasicClassicHttpRequest; (String,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 199 | Sink: org.apache.hc.core5.http.message; BasicClassicHttpRequest; true; BasicClassicHttpRequest; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 200 | Sink: org.apache.hc.core5.http.message; BasicHttpRequest; true; BasicHttpRequest; (Method,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 201 | Sink: org.apache.hc.core5.http.message; BasicHttpRequest; true; BasicHttpRequest; (Method,URI); ; Argument[1]; request-forgery; hq-manual | -| 202 | Sink: org.apache.hc.core5.http.message; BasicHttpRequest; true; BasicHttpRequest; (String,HttpHost,String); ; Argument[1]; request-forgery; hq-manual | -| 203 | Sink: org.apache.hc.core5.http.message; BasicHttpRequest; true; BasicHttpRequest; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 204 | Sink: org.apache.hc.core5.http.support; AbstractRequestBuilder; true; setHttpHost; (HttpHost); ; Argument[0]; request-forgery; hq-manual | -| 205 | Sink: org.apache.hc.core5.http.support; AbstractRequestBuilder; true; setUri; (String); ; Argument[0]; request-forgery; hq-manual | -| 206 | Sink: org.apache.hc.core5.http.support; AbstractRequestBuilder; true; setUri; (URI); ; Argument[0]; request-forgery; hq-manual | -| 207 | Sink: org.apache.hc.core5.http; HttpRequest; true; setUri; (URI); ; Argument[0]; request-forgery; hq-manual | -| 208 | Sink: org.apache.hc.core5.http; HttpRequestFactory; true; newHttpRequest; (String,String); ; Argument[1]; request-forgery; hq-manual | -| 209 | Sink: org.apache.hc.core5.http; HttpRequestFactory; true; newHttpRequest; (String,URI); ; Argument[1]; request-forgery; hq-manual | -| 210 | Sink: org.apache.http.client.methods; HttpDelete; false; HttpDelete; ; ; Argument[0]; request-forgery; manual | -| 211 | Sink: org.apache.http.client.methods; HttpGet; false; HttpGet; ; ; Argument[0]; request-forgery; manual | -| 212 | Sink: org.apache.http.client.methods; HttpHead; false; HttpHead; ; ; Argument[0]; request-forgery; manual | -| 213 | Sink: org.apache.http.client.methods; HttpOptions; false; HttpOptions; ; ; Argument[0]; request-forgery; manual | -| 214 | Sink: org.apache.http.client.methods; HttpPatch; false; HttpPatch; ; ; Argument[0]; request-forgery; manual | -| 215 | Sink: org.apache.http.client.methods; HttpPost; false; HttpPost; ; ; Argument[0]; request-forgery; manual | -| 216 | Sink: org.apache.http.client.methods; HttpPut; false; HttpPut; ; ; Argument[0]; request-forgery; manual | -| 217 | Sink: org.apache.http.client.methods; HttpRequestBase; true; setURI; ; ; Argument[0]; request-forgery; manual | -| 218 | Sink: org.apache.http.client.methods; HttpTrace; false; HttpTrace; ; ; Argument[0]; request-forgery; manual | -| 219 | Sink: org.apache.http.client.methods; RequestBuilder; false; delete; ; ; Argument[0]; request-forgery; manual | -| 220 | Sink: org.apache.http.client.methods; RequestBuilder; false; get; ; ; Argument[0]; request-forgery; manual | -| 221 | Sink: org.apache.http.client.methods; RequestBuilder; false; head; ; ; Argument[0]; request-forgery; manual | -| 222 | Sink: org.apache.http.client.methods; RequestBuilder; false; options; ; ; Argument[0]; request-forgery; manual | -| 223 | Sink: org.apache.http.client.methods; RequestBuilder; false; patch; ; ; Argument[0]; request-forgery; manual | -| 224 | Sink: org.apache.http.client.methods; RequestBuilder; false; post; ; ; Argument[0]; request-forgery; manual | -| 225 | Sink: org.apache.http.client.methods; RequestBuilder; false; put; ; ; Argument[0]; request-forgery; manual | -| 226 | Sink: org.apache.http.client.methods; RequestBuilder; false; setUri; ; ; Argument[0]; request-forgery; manual | -| 227 | Sink: org.apache.http.client.methods; RequestBuilder; false; trace; ; ; Argument[0]; request-forgery; manual | -| 228 | Sink: org.apache.http.message; BasicHttpEntityEnclosingRequest; false; BasicHttpEntityEnclosingRequest; (RequestLine); ; Argument[0]; request-forgery; manual | -| 229 | Sink: org.apache.http.message; BasicHttpEntityEnclosingRequest; false; BasicHttpEntityEnclosingRequest; (String,String); ; Argument[1]; request-forgery; manual | -| 230 | Sink: org.apache.http.message; BasicHttpEntityEnclosingRequest; false; BasicHttpEntityEnclosingRequest; (String,String,ProtocolVersion); ; Argument[1]; request-forgery; manual | -| 231 | Sink: org.apache.http.message; BasicHttpRequest; false; BasicHttpRequest; (RequestLine); ; Argument[0]; request-forgery; manual | -| 232 | Sink: org.apache.http.message; BasicHttpRequest; false; BasicHttpRequest; (String,String); ; Argument[1]; request-forgery; manual | -| 233 | Sink: org.apache.http.message; BasicHttpRequest; false; BasicHttpRequest; (String,String,ProtocolVersion); ; Argument[1]; request-forgery; manual | -| 234 | Sink: org.codehaus.cargo.container.installer; ZipURLInstaller; true; ZipURLInstaller; (URL,String,String); ; Argument[0]; request-forgery; ai-manual | -| 235 | Sink: org.jdbi.v3.core; Jdbi; false; create; (String); ; Argument[0]; request-forgery; manual | -| 236 | Sink: org.jdbi.v3.core; Jdbi; false; create; (String,Properties); ; Argument[0]; request-forgery; manual | -| 237 | Sink: org.jdbi.v3.core; Jdbi; false; create; (String,String,String); ; Argument[0]; request-forgery; manual | -| 238 | Sink: org.jdbi.v3.core; Jdbi; false; open; (String); ; Argument[0]; request-forgery; manual | -| 239 | Sink: org.jdbi.v3.core; Jdbi; false; open; (String,Properties); ; Argument[0]; request-forgery; manual | -| 240 | Sink: org.jdbi.v3.core; Jdbi; false; open; (String,String,String); ; Argument[0]; request-forgery; manual | -| 241 | Sink: org.kohsuke.stapler; HttpResponses; true; staticResource; (URL); ; Argument[0]; request-forgery; ai-manual | -| 242 | Sink: org.springframework.boot.jdbc; DataSourceBuilder; false; url; (String); ; Argument[0]; request-forgery; manual | -| 243 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (HttpMethod,URI); ; Argument[1]; request-forgery; manual | -| 244 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (MultiValueMap,HttpMethod,URI); ; Argument[2]; request-forgery; manual | -| 245 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (Object,HttpMethod,URI); ; Argument[2]; request-forgery; manual | -| 246 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (Object,HttpMethod,URI,Type); ; Argument[2]; request-forgery; manual | -| 247 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (Object,MultiValueMap,HttpMethod,URI); ; Argument[3]; request-forgery; manual | -| 248 | Sink: org.springframework.http; RequestEntity; false; RequestEntity; (Object,MultiValueMap,HttpMethod,URI,Type); ; Argument[3]; request-forgery; manual | -| 249 | Sink: org.springframework.http; RequestEntity; false; delete; ; ; Argument[0]; request-forgery; manual | -| 250 | Sink: org.springframework.http; RequestEntity; false; get; ; ; Argument[0]; request-forgery; manual | -| 251 | Sink: org.springframework.http; RequestEntity; false; head; ; ; Argument[0]; request-forgery; manual | -| 252 | Sink: org.springframework.http; RequestEntity; false; method; ; ; Argument[1]; request-forgery; manual | -| 253 | Sink: org.springframework.http; RequestEntity; false; options; ; ; Argument[0]; request-forgery; manual | -| 254 | Sink: org.springframework.http; RequestEntity; false; patch; ; ; Argument[0]; request-forgery; manual | -| 255 | Sink: org.springframework.http; RequestEntity; false; post; ; ; Argument[0]; request-forgery; manual | -| 256 | Sink: org.springframework.http; RequestEntity; false; put; ; ; Argument[0]; request-forgery; manual | -| 257 | Sink: org.springframework.jdbc.datasource; AbstractDriverBasedDataSource; false; setUrl; (String); ; Argument[0]; request-forgery; manual | -| 258 | Sink: org.springframework.jdbc.datasource; DriverManagerDataSource; false; DriverManagerDataSource; (String); ; Argument[0]; request-forgery; manual | -| 259 | Sink: org.springframework.jdbc.datasource; DriverManagerDataSource; false; DriverManagerDataSource; (String,Properties); ; Argument[0]; request-forgery; manual | -| 260 | Sink: org.springframework.jdbc.datasource; DriverManagerDataSource; false; DriverManagerDataSource; (String,String,String); ; Argument[0]; request-forgery; manual | -| 261 | Sink: org.springframework.web.client; RestTemplate; false; delete; ; ; Argument[0]; request-forgery; manual | -| 262 | Sink: org.springframework.web.client; RestTemplate; false; exchange; ; ; Argument[0]; request-forgery; manual | -| 263 | Sink: org.springframework.web.client; RestTemplate; false; execute; ; ; Argument[0]; request-forgery; manual | -| 264 | Sink: org.springframework.web.client; RestTemplate; false; getForEntity; ; ; Argument[0]; request-forgery; manual | -| 265 | Sink: org.springframework.web.client; RestTemplate; false; getForObject; ; ; Argument[0]; request-forgery; manual | -| 266 | Sink: org.springframework.web.client; RestTemplate; false; headForHeaders; ; ; Argument[0]; request-forgery; manual | -| 267 | Sink: org.springframework.web.client; RestTemplate; false; optionsForAllow; ; ; Argument[0]; request-forgery; manual | -| 268 | Sink: org.springframework.web.client; RestTemplate; false; patchForObject; ; ; Argument[0]; request-forgery; manual | -| 269 | Sink: org.springframework.web.client; RestTemplate; false; postForEntity; ; ; Argument[0]; request-forgery; manual | -| 270 | Sink: org.springframework.web.client; RestTemplate; false; postForLocation; ; ; Argument[0]; request-forgery; manual | -| 271 | Sink: org.springframework.web.client; RestTemplate; false; postForObject; ; ; Argument[0]; request-forgery; manual | -| 272 | Sink: org.springframework.web.client; RestTemplate; false; put; ; ; Argument[0]; request-forgery; manual | -| 273 | Sink: org.springframework.web.reactive.function.client; WebClient$Builder; false; baseUrl; ; ; Argument[0]; request-forgery; manual | -| 274 | Sink: org.springframework.web.reactive.function.client; WebClient; false; create; ; ; Argument[0]; request-forgery; manual | -| 275 | Sink: play.libs.ws; StandaloneWSClient; true; url; ; ; Argument[0]; request-forgery; manual | -| 276 | Sink: play.libs.ws; WSClient; true; url; ; ; Argument[0]; request-forgery; manual | -| 277 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual | -| 278 | Summary: java.lang; AbstractStringBuilder; true; append; ; ; Argument[0]; Argument[this]; taint; manual | -| 279 | Summary: java.lang; AbstractStringBuilder; true; append; ; ; Argument[this]; ReturnValue; value; manual | -| 280 | Summary: java.lang; CharSequence; true; toString; ; ; Argument[this]; ReturnValue; taint; manual | -| 281 | Summary: java.lang; String; false; format; (String,Object[]); ; Argument[1].ArrayElement; ReturnValue; taint; manual | -| 282 | Summary: java.lang; StringBuilder; true; StringBuilder; ; ; Argument[0]; Argument[this]; taint; manual | -| 283 | Summary: java.net.http; HttpRequest$Builder; true; build; (); ; Argument[this]; ReturnValue; taint; df-generated | -| 284 | Summary: java.net.http; HttpRequest; true; newBuilder; (URI); ; Argument[0]; ReturnValue; taint; df-generated | -| 285 | Summary: java.net; URI; false; URI; (String); ; Argument[0]; Argument[this]; taint; manual | -| 286 | Summary: java.net; URI; false; toString; ; ; Argument[this]; ReturnValue; taint; manual | -| 287 | Summary: java.net; URI; false; toURL; ; ; Argument[this]; ReturnValue; taint; manual | -| 288 | Summary: java.net; URL; false; URL; (String); ; Argument[0]; Argument[this]; taint; manual | -| 289 | Summary: java.util; Map; false; of; ; ; Argument[1]; ReturnValue.MapValue; value; manual | -| 290 | Summary: java.util; Map; false; of; ; ; Argument[3]; ReturnValue.MapValue; value; manual | -| 291 | Summary: java.util; Properties; true; setProperty; (String,String); ; Argument[1]; Argument[this].MapValue; value; manual | -| 292 | Summary: org.apache.hc.core5.http; HttpHost; true; HttpHost; (String); ; Argument[0]; Argument[this]; taint; hq-manual | -| 293 | Summary: org.apache.http.message; BasicRequestLine; false; BasicRequestLine; ; ; Argument[1]; Argument[this]; taint; manual | -nodes -| ApacheHttpSSRF.java:27:27:27:53 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRF.java:28:23:28:35 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRF.java:28:31:28:34 | sink : String | semmle.label | sink : String | -| ApacheHttpSSRF.java:30:43:30:45 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:32:29:32:31 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:34:26:34:28 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:35:26:35:28 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:36:25:36:27 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:37:28:37:30 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:38:29:38:31 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:39:27:39:29 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:40:27:40:29 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:42:34:42:82 | new BasicRequestLine(...) | semmle.label | new BasicRequestLine(...) | -| ApacheHttpSSRF.java:42:62:42:64 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:42:62:42:75 | toString(...) : String | semmle.label | toString(...) : String | -| ApacheHttpSSRF.java:43:41:43:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:43:41:43:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRF.java:44:41:44:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:44:41:44:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRF.java:46:49:46:97 | new BasicRequestLine(...) | semmle.label | new BasicRequestLine(...) | -| ApacheHttpSSRF.java:46:77:46:79 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:46:77:46:90 | toString(...) : String | semmle.label | toString(...) : String | -| ApacheHttpSSRF.java:47:56:47:58 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:47:56:47:69 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRF.java:48:56:48:58 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRF.java:48:56:48:69 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRF.java:50:32:50:34 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:51:33:51:35 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:52:32:52:34 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:53:35:53:37 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:54:36:54:38 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:55:33:55:35 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:56:34:56:36 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:57:34:57:36 | uri | semmle.label | uri | -| ApacheHttpSSRF.java:58:43:58:45 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:41:30:41:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:42:23:42:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:42:31:42:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:44:31:44:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:45:29:45:50 | new HttpHost(...) : HttpHost | semmle.label | new HttpHost(...) : HttpHost | -| ApacheHttpSSRFVersion5.java:45:42:45:49 | hostSink : String | semmle.label | hostSink : String | -| ApacheHttpSSRFVersion5.java:48:54:48:57 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:49:54:49:56 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:49:54:49:67 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:50:54:50:56 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:51:48:51:50 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:51:48:51:61 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:52:48:52:50 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:54:38:54:41 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:55:38:55:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:55:38:55:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:56:38:56:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:58:35:58:38 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:59:35:59:37 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:59:35:59:48 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:60:35:60:37 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:62:36:62:39 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:63:36:63:38 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:63:36:63:49 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:64:36:64:38 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:66:39:66:42 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:67:39:67:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:67:39:67:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:68:39:68:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:70:37:70:40 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:71:37:71:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:71:37:71:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:72:37:72:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:74:36:74:39 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:75:36:75:38 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:75:36:75:49 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:76:36:76:38 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:78:35:78:38 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:79:35:79:37 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:79:35:79:48 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:80:35:80:37 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:82:37:82:40 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:83:37:83:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:83:37:83:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:84:37:84:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:87:51:87:54 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:88:51:88:53 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:91:51:91:54 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:92:51:92:53 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:93:45:93:48 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:94:45:94:47 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:96:54:96:57 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:97:54:97:56 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:98:48:98:50 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:98:48:98:61 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:99:48:99:50 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:102:55:102:58 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:103:55:103:57 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:103:55:103:68 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:104:55:104:57 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:105:49:105:51 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:105:49:105:62 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:106:49:106:51 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:108:39:108:42 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:109:39:109:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:109:39:109:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:110:39:110:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:112:36:112:39 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:113:36:113:38 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:113:36:113:49 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:114:36:114:38 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:116:37:116:40 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:117:37:117:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:117:37:117:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:118:37:118:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:120:40:120:43 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:121:40:121:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:121:40:121:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:122:40:122:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:124:38:124:41 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:125:38:125:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:125:38:125:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:126:38:126:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:128:37:128:40 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:129:37:129:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:129:37:129:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:130:37:130:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:132:36:132:39 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:133:36:133:38 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:133:36:133:49 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:134:36:134:38 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:136:38:136:41 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:137:38:137:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:137:38:137:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:138:38:138:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:141:41:141:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:141:41:141:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:142:41:142:43 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:144:38:144:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:144:38:144:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:145:38:145:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:147:39:147:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:147:39:147:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:148:39:148:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:150:42:150:44 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:150:42:150:55 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:151:42:151:44 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:153:40:153:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:153:40:153:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:154:40:154:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:156:39:156:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:156:39:156:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:157:39:157:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:159:38:159:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:159:38:159:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:160:38:160:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:162:52:162:55 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:164:47:164:49 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:164:47:164:60 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:165:47:165:49 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:167:40:167:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:167:40:167:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:168:40:168:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:180:30:180:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:181:23:181:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:181:31:181:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:184:56:184:58 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:184:56:184:69 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:185:56:185:58 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:186:50:186:52 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:186:50:186:63 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:187:50:187:52 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:189:40:189:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:189:40:189:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:190:40:190:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:192:37:192:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:192:37:192:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:193:37:193:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:195:38:195:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:195:38:195:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:196:38:196:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:198:41:198:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:198:41:198:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:199:41:199:43 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:201:39:201:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:201:39:201:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:202:39:202:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:204:38:204:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:204:38:204:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:205:38:205:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:207:37:207:39 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:207:37:207:50 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:208:37:208:39 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:210:39:210:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:210:39:210:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:211:39:211:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:214:28:214:30 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:214:28:214:41 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:215:28:215:30 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:217:25:217:27 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:217:25:217:38 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:218:25:218:27 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:220:26:220:28 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:220:26:220:39 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:221:26:221:28 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:223:29:223:31 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:223:29:223:42 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:224:29:224:31 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:226:27:226:29 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:226:27:226:40 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:227:27:227:29 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:229:26:229:28 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:229:26:229:39 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:230:26:230:28 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:232:25:232:27 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:232:25:232:38 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:233:25:233:27 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:235:27:235:29 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:235:27:235:40 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:236:27:236:29 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:239:46:239:48 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:251:30:251:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:252:23:252:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:252:31:252:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:255:44:255:46 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:256:38:256:40 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:256:38:256:51 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:257:38:257:40 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:259:28:259:30 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:259:28:259:41 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:260:28:260:30 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:262:25:262:27 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:262:25:262:38 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:263:25:263:27 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:265:26:265:28 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:265:26:265:39 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:266:26:266:28 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:268:29:268:31 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:268:29:268:42 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:269:29:269:31 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:271:27:271:29 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:271:27:271:40 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:272:27:272:29 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:274:26:274:28 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:274:26:274:39 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:275:26:275:28 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:277:25:277:27 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:277:25:277:38 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:278:25:278:27 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:280:27:280:29 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:280:27:280:40 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:281:27:281:29 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:295:30:295:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:296:23:296:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:296:31:296:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:298:31:298:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:299:29:299:50 | new HttpHost(...) : HttpHost | semmle.label | new HttpHost(...) : HttpHost | -| ApacheHttpSSRFVersion5.java:299:42:299:49 | hostSink : String | semmle.label | hostSink : String | -| ApacheHttpSSRFVersion5.java:303:34:303:37 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:304:34:304:37 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:308:60:308:62 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:308:60:308:73 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:309:60:309:62 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:313:53:313:55 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:313:53:313:66 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:314:53:314:55 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:326:30:326:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:327:23:327:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:327:31:327:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:329:31:329:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:330:29:330:50 | new HttpHost(...) : HttpHost | semmle.label | new HttpHost(...) : HttpHost | -| ApacheHttpSSRFVersion5.java:330:42:330:49 | hostSink : String | semmle.label | hostSink : String | -| ApacheHttpSSRFVersion5.java:333:42:333:44 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:333:42:333:55 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:334:42:334:44 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:336:39:336:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:336:39:336:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:337:39:337:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:339:40:339:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:339:40:339:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:340:40:340:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:342:43:342:45 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:342:43:342:56 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:343:43:343:45 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:345:41:345:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:345:41:345:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:346:41:346:43 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:348:40:348:42 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:348:40:348:53 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:349:40:349:42 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:351:39:351:41 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:351:39:351:52 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:352:39:352:41 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:354:53:354:56 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:356:48:356:50 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:356:48:356:61 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:357:48:357:50 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:359:41:359:43 | uri : URI | semmle.label | uri : URI | -| ApacheHttpSSRFVersion5.java:359:41:359:54 | toString(...) | semmle.label | toString(...) | -| ApacheHttpSSRFVersion5.java:360:41:360:43 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:372:30:372:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:373:23:373:38 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| ApacheHttpSSRFVersion5.java:373:31:373:37 | uriSink : String | semmle.label | uriSink : String | -| ApacheHttpSSRFVersion5.java:375:31:375:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ApacheHttpSSRFVersion5.java:376:29:376:50 | new HttpHost(...) : HttpHost | semmle.label | new HttpHost(...) : HttpHost | -| ApacheHttpSSRFVersion5.java:376:42:376:49 | hostSink : String | semmle.label | hostSink : String | -| ApacheHttpSSRFVersion5.java:379:57:379:60 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:380:57:380:59 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:381:51:381:54 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:382:51:382:53 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:385:50:385:53 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:386:50:386:52 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:387:44:387:47 | host | semmle.label | host | -| ApacheHttpSSRFVersion5.java:388:44:388:46 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:390:24:390:26 | uri | semmle.label | uri | -| ApacheHttpSSRFVersion5.java:394:24:394:26 | uri | semmle.label | uri | -| JakartaWsSSRF.java:14:22:14:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JakartaWsSSRF.java:15:23:15:25 | url | semmle.label | url | -| JavaNetHttpSSRF.java:25:27:25:53 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JavaNetHttpSSRF.java:26:23:26:35 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| JavaNetHttpSSRF.java:26:31:26:34 | sink : String | semmle.label | sink : String | -| JavaNetHttpSSRF.java:27:24:27:57 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| JavaNetHttpSSRF.java:27:40:27:43 | sink : String | semmle.label | sink : String | -| JavaNetHttpSSRF.java:28:24:28:36 | new URL(...) : URL | semmle.label | new URL(...) : URL | -| JavaNetHttpSSRF.java:28:32:28:35 | sink : String | semmle.label | sink : String | -| JavaNetHttpSSRF.java:30:32:30:35 | url1 | semmle.label | url1 | -| JavaNetHttpSSRF.java:33:32:33:35 | url1 | semmle.label | url1 | -| JavaNetHttpSSRF.java:34:30:34:33 | url1 | semmle.label | url1 | -| JavaNetHttpSSRF.java:38:65:38:68 | uri2 | semmle.label | uri2 | -| JavaNetHttpSSRF.java:39:59:39:61 | uri | semmle.label | uri | -| JaxWsSSRF.java:14:22:14:48 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JaxWsSSRF.java:15:23:15:25 | url | semmle.label | url | -| JdbcUrlSSRF.java:21:26:21:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JdbcUrlSSRF.java:26:28:26:34 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:28:41:28:47 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:29:41:29:47 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:30:41:30:47 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:32:27:32:33 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:40:26:40:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JdbcUrlSSRF.java:43:27:43:33 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:48:23:48:29 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:52:9:52:13 | props : Properties | semmle.label | props : Properties | -| JdbcUrlSSRF.java:52:9:52:13 | props [post update] : Properties [] : String | semmle.label | props [post update] : Properties [] : String | -| JdbcUrlSSRF.java:52:38:52:44 | jdbcUrl : String | semmle.label | jdbcUrl : String | -| JdbcUrlSSRF.java:54:49:54:53 | props | semmle.label | props | -| JdbcUrlSSRF.java:60:26:60:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JdbcUrlSSRF.java:65:27:65:33 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:67:75:67:81 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:70:75:70:81 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:73:75:73:81 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:80:26:80:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| JdbcUrlSSRF.java:82:21:82:27 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:83:21:83:27 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:84:21:84:27 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:86:19:86:25 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:87:19:87:25 | jdbcUrl | semmle.label | jdbcUrl | -| JdbcUrlSSRF.java:88:19:88:25 | jdbcUrl | semmle.label | jdbcUrl | -| ReactiveWebClientSSRF.java:15:26:15:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ReactiveWebClientSSRF.java:16:52:16:54 | url | semmle.label | url | -| ReactiveWebClientSSRF.java:32:26:32:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| ReactiveWebClientSSRF.java:35:30:35:32 | url | semmle.label | url | -| SanitizationTests.java:19:23:19:58 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:19:31:19:57 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:22:29:22:55 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:22:29:22:63 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:22:52:22:54 | uri | semmle.label | uri | -| SanitizationTests.java:22:52:22:54 | uri : URI | semmle.label | uri : URI | -| SanitizationTests.java:23:25:23:25 | r | semmle.label | r | -| SanitizationTests.java:75:33:75:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:76:36:76:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:76:36:76:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:76:59:76:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:76:59:76:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:76:67:76:76 | unsafeUri3 : String | semmle.label | unsafeUri3 : String | -| SanitizationTests.java:77:25:77:32 | unsafer3 | semmle.label | unsafer3 | -| SanitizationTests.java:79:49:79:79 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:80:36:80:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:80:36:80:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:80:59:80:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:80:59:80:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:80:67:80:76 | unsafeUri4 : String | semmle.label | unsafeUri4 : String | -| SanitizationTests.java:81:25:81:32 | unsafer4 | semmle.label | unsafer4 | -| SanitizationTests.java:84:13:84:22 | unsafeUri5 [post update] : StringBuilder | semmle.label | unsafeUri5 [post update] : StringBuilder | -| SanitizationTests.java:84:31:84:61 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:85:36:85:89 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:85:36:85:97 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:85:59:85:88 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:85:59:85:88 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:85:67:85:76 | unsafeUri5 : StringBuilder | semmle.label | unsafeUri5 : StringBuilder | -| SanitizationTests.java:85:67:85:87 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:86:25:86:32 | unsafer5 | semmle.label | unsafer5 | -| SanitizationTests.java:88:40:88:87 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | -| SanitizationTests.java:88:58:88:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:90:37:90:90 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:90:37:90:98 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:90:60:90:89 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:90:60:90:89 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:90:68:90:77 | unafeUri5a : StringBuilder | semmle.label | unafeUri5a : StringBuilder | -| SanitizationTests.java:90:68:90:88 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:91:25:91:33 | unsafer5a | semmle.label | unsafer5a | -| SanitizationTests.java:93:41:93:105 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | -| SanitizationTests.java:93:42:93:89 | new StringBuilder(...) : StringBuilder | semmle.label | new StringBuilder(...) : StringBuilder | -| SanitizationTests.java:93:60:93:88 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:95:37:95:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:95:37:95:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:95:60:95:90 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:95:60:95:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:95:68:95:78 | unsafeUri5b : StringBuilder | semmle.label | unsafeUri5b : StringBuilder | -| SanitizationTests.java:95:68:95:89 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:96:25:96:33 | unsafer5b | semmle.label | unsafer5b | -| SanitizationTests.java:98:41:98:106 | append(...) : StringBuilder | semmle.label | append(...) : StringBuilder | -| SanitizationTests.java:98:77:98:105 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:100:37:100:91 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:100:37:100:99 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:100:60:100:90 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:100:60:100:90 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:100:68:100:78 | unsafeUri5c : StringBuilder | semmle.label | unsafeUri5c : StringBuilder | -| SanitizationTests.java:100:68:100:89 | toString(...) : String | semmle.label | toString(...) : String | -| SanitizationTests.java:101:25:101:33 | unsafer5c | semmle.label | unsafer5c | -| SanitizationTests.java:103:33:103:104 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:103:33:103:104 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:103:73:103:103 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:104:36:104:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:104:36:104:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:104:59:104:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:104:59:104:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:104:67:104:76 | unsafeUri6 : String | semmle.label | unsafeUri6 : String | -| SanitizationTests.java:105:25:105:32 | unsafer6 | semmle.label | unsafer6 | -| SanitizationTests.java:107:33:107:110 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:107:33:107:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:107:56:107:86 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:108:36:108:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:108:36:108:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:108:59:108:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:108:59:108:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:108:67:108:76 | unsafeUri7 : String | semmle.label | unsafeUri7 : String | -| SanitizationTests.java:109:25:109:32 | unsafer7 | semmle.label | unsafer7 | -| SanitizationTests.java:111:33:111:110 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:111:33:111:110 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:111:55:111:85 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:112:36:112:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:112:36:112:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:112:59:112:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:112:59:112:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:112:67:112:76 | unsafeUri8 : String | semmle.label | unsafeUri8 : String | -| SanitizationTests.java:113:25:113:32 | unsafer8 | semmle.label | unsafer8 | -| SanitizationTests.java:115:33:115:63 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:116:36:116:78 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:116:36:116:86 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:116:59:116:77 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:116:59:116:77 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:116:67:116:76 | unsafeUri9 : String | semmle.label | unsafeUri9 : String | -| SanitizationTests.java:117:25:117:32 | unsafer9 | semmle.label | unsafer9 | -| SanitizationTests.java:119:34:119:126 | format(...) : String | semmle.label | format(...) : String | -| SanitizationTests.java:119:34:119:126 | new ..[] { .. } : Object[] [[]] : String | semmle.label | new ..[] { .. } : Object[] [[]] : String | -| SanitizationTests.java:119:94:119:125 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SanitizationTests.java:120:37:120:80 | newBuilder(...) : Builder | semmle.label | newBuilder(...) : Builder | -| SanitizationTests.java:120:37:120:88 | build(...) : HttpRequest | semmle.label | build(...) : HttpRequest | -| SanitizationTests.java:120:60:120:79 | new URI(...) | semmle.label | new URI(...) | -| SanitizationTests.java:120:60:120:79 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SanitizationTests.java:120:68:120:78 | unsafeUri10 : String | semmle.label | unsafeUri10 : String | -| SanitizationTests.java:121:25:121:33 | unsafer10 | semmle.label | unsafer10 | -| SpringSSRF.java:28:33:28:60 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| SpringSSRF.java:32:39:32:59 | ... + ... | semmle.label | ... + ... | -| SpringSSRF.java:33:35:33:48 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:34:34:34:47 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:35:39:35:52 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:36:69:36:82 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:37:73:37:86 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:40:69:40:97 | of(...) | semmle.label | of(...) | -| SpringSSRF.java:40:83:40:96 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:42:69:42:119 | of(...) | semmle.label | of(...) | -| SpringSSRF.java:42:105:42:118 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:44:41:44:54 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:45:40:45:62 | new URI(...) | semmle.label | new URI(...) | -| SpringSSRF.java:45:48:45:61 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:46:42:46:55 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:47:40:47:53 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:48:30:48:43 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:49:33:49:46 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:50:41:50:54 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:51:42:51:55 | fooResourceUrl | semmle.label | fooResourceUrl | -| SpringSSRF.java:54:27:54:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SpringSSRF.java:54:35:54:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:56:44:56:46 | uri | semmle.label | uri | -| SpringSSRF.java:58:35:58:37 | uri | semmle.label | uri | -| SpringSSRF.java:59:35:59:37 | uri | semmle.label | uri | -| SpringSSRF.java:60:38:60:40 | uri | semmle.label | uri | -| SpringSSRF.java:61:39:61:41 | uri | semmle.label | uri | -| SpringSSRF.java:62:37:62:39 | uri | semmle.label | uri | -| SpringSSRF.java:63:36:63:38 | uri | semmle.label | uri | -| SpringSSRF.java:64:44:64:46 | uri | semmle.label | uri | -| SpringSSRF.java:67:27:67:49 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| SpringSSRF.java:67:35:67:48 | fooResourceUrl : String | semmle.label | fooResourceUrl : String | -| SpringSSRF.java:70:49:70:51 | uri | semmle.label | uri | -| SpringSSRF.java:71:58:71:60 | uri | semmle.label | uri | -| SpringSSRF.java:72:57:72:59 | uri | semmle.label | uri | -| SpringSSRF.java:73:66:73:68 | uri | semmle.label | uri | -| SpringSSRF.java:74:57:74:59 | uri | semmle.label | uri | -| SpringSSRF.java:75:66:75:68 | uri | semmle.label | uri | -| URLClassLoaderSSRF.java:16:26:16:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:17:23:17:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:17:31:17:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:18:64:18:85 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:18:64:18:85 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:18:74:18:76 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:18:74:18:84 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| URLClassLoaderSSRF.java:28:26:28:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:29:23:29:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:29:31:29:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:30:64:30:85 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:30:64:30:85 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:30:74:30:76 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:30:74:30:84 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| URLClassLoaderSSRF.java:40:26:40:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:41:23:41:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:41:31:41:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:44:64:44:85 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:44:64:44:85 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:44:74:44:76 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:44:74:44:84 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| URLClassLoaderSSRF.java:54:26:54:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:55:23:55:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:55:31:55:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:56:72:56:93 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:56:72:56:93 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:56:82:56:84 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:56:82:56:92 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| URLClassLoaderSSRF.java:66:26:66:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:67:23:67:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:67:31:67:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:70:21:70:42 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:70:21:70:42 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:70:31:70:33 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:70:31:70:41 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| URLClassLoaderSSRF.java:83:26:83:52 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| URLClassLoaderSSRF.java:84:23:84:34 | new URI(...) : URI | semmle.label | new URI(...) : URI | -| URLClassLoaderSSRF.java:84:31:84:33 | url : String | semmle.label | url : String | -| URLClassLoaderSSRF.java:89:21:89:42 | new URL[] | semmle.label | new URL[] | -| URLClassLoaderSSRF.java:89:21:89:42 | {...} : URL[] [[]] : URL | semmle.label | {...} : URL[] [[]] : URL | -| URLClassLoaderSSRF.java:89:31:89:33 | uri : URI | semmle.label | uri : URI | -| URLClassLoaderSSRF.java:89:31:89:41 | toURL(...) : URL | semmle.label | toURL(...) : URL | -| mad/Test.java:26:16:26:41 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| mad/Test.java:31:24:31:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:31:40:31:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:36:10:36:23 | (...)... | semmle.label | (...)... | -| mad/Test.java:36:16:36:23 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:38:28:38:43 | (...)... | semmle.label | (...)... | -| mad/Test.java:38:36:38:43 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:40:10:40:23 | (...)... | semmle.label | (...)... | -| mad/Test.java:40:16:40:23 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:45:32:45:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:45:40:45:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:47:32:47:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:47:40:47:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:49:28:49:43 | (...)... | semmle.label | (...)... | -| mad/Test.java:49:36:49:43 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:51:28:51:43 | (...)... | semmle.label | (...)... | -| mad/Test.java:51:36:51:43 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:53:28:53:43 | (...)... | semmle.label | (...)... | -| mad/Test.java:53:36:53:43 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:55:36:55:51 | (...)... | semmle.label | (...)... | -| mad/Test.java:55:44:55:51 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:57:32:57:45 | (...)... | semmle.label | (...)... | -| mad/Test.java:57:38:57:45 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:59:38:59:51 | (...)... | semmle.label | (...)... | -| mad/Test.java:59:44:59:51 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:61:47:61:60 | (...)... | semmle.label | (...)... | -| mad/Test.java:61:53:61:60 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:63:26:63:39 | (...)... | semmle.label | (...)... | -| mad/Test.java:63:32:63:39 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:65:38:65:51 | (...)... | semmle.label | (...)... | -| mad/Test.java:65:44:65:51 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:67:26:67:39 | (...)... | semmle.label | (...)... | -| mad/Test.java:67:32:67:39 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:69:27:69:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:69:33:69:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:71:47:71:60 | (...)... | semmle.label | (...)... | -| mad/Test.java:71:53:71:60 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:74:50:74:65 | (...)... | semmle.label | (...)... | -| mad/Test.java:74:58:74:65 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:76:50:76:69 | (...)... | semmle.label | (...)... | -| mad/Test.java:76:62:76:69 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:78:43:78:59 | (...)... | semmle.label | (...)... | -| mad/Test.java:78:52:78:59 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:80:25:80:41 | (...)... | semmle.label | (...)... | -| mad/Test.java:80:34:80:41 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:82:31:82:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:82:40:82:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:84:31:84:47 | (...)... | semmle.label | (...)... | -| mad/Test.java:84:40:84:47 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:86:41:86:57 | (...)... | semmle.label | (...)... | -| mad/Test.java:86:50:86:57 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:92:24:92:40 | (...)... | semmle.label | (...)... | -| mad/Test.java:92:33:92:40 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:97:29:97:42 | (...)... | semmle.label | (...)... | -| mad/Test.java:97:35:97:42 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:102:26:102:39 | (...)... | semmle.label | (...)... | -| mad/Test.java:102:32:102:39 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:107:15:107:31 | (...)... | semmle.label | (...)... | -| mad/Test.java:107:24:107:31 | source(...) : String | semmle.label | source(...) : String | -| mad/Test.java:112:15:112:31 | (...)... | semmle.label | (...)... | -| mad/Test.java:112:24:112:31 | source(...) : String | semmle.label | source(...) : String | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql b/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql new file mode 100644 index 000000000000..971a9532bd6f --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-918/RequestForgery.ql @@ -0,0 +1,19 @@ +import java +import semmle.code.java.security.RequestForgeryConfig +import utils.test.InlineExpectationsTest + +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "SSRF" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "SSRF" and + exists(DataFlow::Node sink | + RequestForgeryFlow::flowTo(sink) and + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-918/RequestForgery.qlref b/java/ql/test/query-tests/security/CWE-918/RequestForgery.qlref deleted file mode 100644 index be2312049e7d..000000000000 --- a/java/ql/test/query-tests/security/CWE-918/RequestForgery.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-918/RequestForgery.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java index 03a61cfcf97d..33df1a586308 100644 --- a/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java +++ b/java/ql/test/query-tests/security/CWE-918/SanitizationTests.java @@ -16,11 +16,11 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - URI uri = new URI(request.getParameter("uri")); // $ Source + URI uri = new URI(request.getParameter("uri")); // BAD: a request parameter is incorporated without validation into a Http // request - HttpRequest r = HttpRequest.newBuilder(uri).build(); // $ Alert - client.send(r, null); // $ Alert + HttpRequest r = HttpRequest.newBuilder(uri).build(); // $ SSRF + client.send(r, null); // $ SSRF // GOOD: sanitisation by concatenation with a prefix that prevents targeting an arbitrary host. // We test a few different ways of sanitisation: via string conctentation (perhaps nested), @@ -72,55 +72,55 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) // BAD: cases where a string that would sanitise is used, but occurs in the wrong // place to sanitise user input: - String unsafeUri3 = request.getParameter("baduri3") + "https://example.com/"; // $ Source - HttpRequest unsafer3 = HttpRequest.newBuilder(new URI(unsafeUri3)).build(); // $ Alert - client.send(unsafer3, null); // $ Alert + String unsafeUri3 = request.getParameter("baduri3") + "https://example.com/"; + HttpRequest unsafer3 = HttpRequest.newBuilder(new URI(unsafeUri3)).build(); // $ SSRF + client.send(unsafer3, null); // $ SSRF - String unsafeUri4 = ("someprefix" + request.getParameter("baduri4")) + "https://example.com/"; // $ Source - HttpRequest unsafer4 = HttpRequest.newBuilder(new URI(unsafeUri4)).build(); // $ Alert - client.send(unsafer4, null); // $ Alert + String unsafeUri4 = ("someprefix" + request.getParameter("baduri4")) + "https://example.com/"; + HttpRequest unsafer4 = HttpRequest.newBuilder(new URI(unsafeUri4)).build(); // $ SSRF + client.send(unsafer4, null); // $ SSRF StringBuilder unsafeUri5 = new StringBuilder(); - unsafeUri5.append(request.getParameter("baduri5")).append("https://example.com/"); // $ Source - HttpRequest unsafer5 = HttpRequest.newBuilder(new URI(unsafeUri5.toString())).build(); // $ Alert - client.send(unsafer5, null); // $ Alert + unsafeUri5.append(request.getParameter("baduri5")).append("https://example.com/"); + HttpRequest unsafer5 = HttpRequest.newBuilder(new URI(unsafeUri5.toString())).build(); // $ SSRF + client.send(unsafer5, null); // $ SSRF - StringBuilder unafeUri5a = new StringBuilder(request.getParameter("uri5a")); // $ Source + StringBuilder unafeUri5a = new StringBuilder(request.getParameter("uri5a")); unafeUri5a.append("https://example.com/"); - HttpRequest unsafer5a = HttpRequest.newBuilder(new URI(unafeUri5a.toString())).build(); // $ Alert - client.send(unsafer5a, null); // $ Alert + HttpRequest unsafer5a = HttpRequest.newBuilder(new URI(unafeUri5a.toString())).build(); // $ SSRF + client.send(unsafer5a, null); // $ SSRF - StringBuilder unsafeUri5b = (new StringBuilder(request.getParameter("uri5b"))).append("dir/"); // $ Source + StringBuilder unsafeUri5b = (new StringBuilder(request.getParameter("uri5b"))).append("dir/"); unsafeUri5b.append("https://example.com/"); - HttpRequest unsafer5b = HttpRequest.newBuilder(new URI(unsafeUri5b.toString())).build(); // $ Alert - client.send(unsafer5b, null); // $ Alert + HttpRequest unsafer5b = HttpRequest.newBuilder(new URI(unsafeUri5b.toString())).build(); // $ SSRF + client.send(unsafer5b, null); // $ SSRF - StringBuilder unsafeUri5c = (new StringBuilder("https")).append(request.getParameter("uri5c")); // $ Source + StringBuilder unsafeUri5c = (new StringBuilder("https")).append(request.getParameter("uri5c")); unsafeUri5c.append("://example.com/dir/"); - HttpRequest unsafer5c = HttpRequest.newBuilder(new URI(unsafeUri5c.toString())).build(); // $ Alert - client.send(unsafer5c, null); // $ Alert + HttpRequest unsafer5c = HttpRequest.newBuilder(new URI(unsafeUri5c.toString())).build(); // $ SSRF + client.send(unsafer5c, null); // $ SSRF - String unsafeUri6 = String.format("%shttps://example.com/", request.getParameter("baduri6")); // $ Source - HttpRequest unsafer6 = HttpRequest.newBuilder(new URI(unsafeUri6)).build(); // $ Alert - client.send(unsafer6, null); // $ Alert + String unsafeUri6 = String.format("%shttps://example.com/", request.getParameter("baduri6")); + HttpRequest unsafer6 = HttpRequest.newBuilder(new URI(unsafeUri6)).build(); // $ SSRF + client.send(unsafer6, null); // $ SSRF - String unsafeUri7 = String.format("%s/%s", request.getParameter("baduri7"), "https://example.com"); // $ Source - HttpRequest unsafer7 = HttpRequest.newBuilder(new URI(unsafeUri7)).build(); // $ Alert - client.send(unsafer7, null); // $ Alert + String unsafeUri7 = String.format("%s/%s", request.getParameter("baduri7"), "https://example.com"); + HttpRequest unsafer7 = HttpRequest.newBuilder(new URI(unsafeUri7)).build(); // $ SSRF + client.send(unsafer7, null); // $ SSRF - String unsafeUri8 = String.format("%s%s", request.getParameter("baduri8"), "https://example.com/"); // $ Source - HttpRequest unsafer8 = HttpRequest.newBuilder(new URI(unsafeUri8)).build(); // $ Alert - client.send(unsafer8, null); // $ Alert + String unsafeUri8 = String.format("%s%s", request.getParameter("baduri8"), "https://example.com/"); + HttpRequest unsafer8 = HttpRequest.newBuilder(new URI(unsafeUri8)).build(); // $ SSRF + client.send(unsafer8, null); // $ SSRF - String unsafeUri9 = request.getParameter("baduri9") + "/" + String.format("http://%s", "myserver.com"); // $ Source - HttpRequest unsafer9 = HttpRequest.newBuilder(new URI(unsafeUri9)).build(); // $ Alert - client.send(unsafer9, null); // $ Alert + String unsafeUri9 = request.getParameter("baduri9") + "/" + String.format("http://%s", "myserver.com"); + HttpRequest unsafer9 = HttpRequest.newBuilder(new URI(unsafeUri9)).build(); // $ SSRF + client.send(unsafer9, null); // $ SSRF - String unsafeUri10 = String.format("%s://%s:%s%s", "http", "myserver.com", "80", request.getParameter("baduri10")); // $ Source - HttpRequest unsafer10 = HttpRequest.newBuilder(new URI(unsafeUri10)).build(); // $ Alert - client.send(unsafer10, null); // $ Alert + String unsafeUri10 = String.format("%s://%s:%s%s", "http", "myserver.com", "80", request.getParameter("baduri10")); + HttpRequest unsafer10 = HttpRequest.newBuilder(new URI(unsafeUri10)).build(); // $ SSRF + client.send(unsafer10, null); // $ SSRF } catch (Exception e) { // TODO: handle exception } } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java b/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java index 446e774214dc..895c68eda69a 100644 --- a/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/SpringSSRF.java @@ -25,54 +25,54 @@ public class SpringSSRF extends HttpServlet { protected void doGet(HttpServletRequest request2, HttpServletResponse response2) throws ServletException, IOException { - String fooResourceUrl = request2.getParameter("uri"); // $ Source + String fooResourceUrl = request2.getParameter("uri");; RestTemplate restTemplate = new RestTemplate(); HttpEntity request = new HttpEntity<>(new String("bar")); try { - restTemplate.getForEntity(fooResourceUrl + "/1", String.class); // $ Alert - restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, String.class); // $ Alert - restTemplate.execute(fooResourceUrl, HttpMethod.POST, null, null, "test"); // $ Alert - restTemplate.getForObject(fooResourceUrl, String.class, "test"); // $ Alert - restTemplate.getForObject("http://{foo}", String.class, fooResourceUrl); // $ Alert - restTemplate.getForObject("http://{foo}/a/b", String.class, fooResourceUrl); // $ Alert + restTemplate.getForEntity(fooResourceUrl + "/1", String.class); // $ SSRF + restTemplate.exchange(fooResourceUrl, HttpMethod.POST, request, String.class); // $ SSRF + restTemplate.execute(fooResourceUrl, HttpMethod.POST, null, null, "test"); // $ SSRF + restTemplate.getForObject(fooResourceUrl, String.class, "test"); // $ SSRF + restTemplate.getForObject("http://{foo}", String.class, fooResourceUrl); // $ SSRF + restTemplate.getForObject("http://{foo}/a/b", String.class, fooResourceUrl); // $ SSRF restTemplate.getForObject("http://safe.com/{foo}", String.class, fooResourceUrl); // not bad - the tainted value does not affect the host restTemplate.getForObject("http://{foo}", String.class, "safe.com", fooResourceUrl); // not bad - the tainted value is unused - restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", fooResourceUrl)); // $ Alert + restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", fooResourceUrl)); // $ SSRF restTemplate.getForObject("http://safe.com/{foo}", String.class, Map.of("foo", fooResourceUrl)); // not bad - the tainted value does not affect the host - restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: Alert // not bad - the key for the tainted value is unused + restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", "safe.com", "unused", fooResourceUrl)); // $ SPURIOUS: SSRF // not bad - the key for the tainted value is unused restTemplate.getForObject("http://{foo}", String.class, Map.of("foo", "safe.com", fooResourceUrl, "unused")); // not bad - the tainted value is in a map key - restTemplate.patchForObject(fooResourceUrl, new String("object"), String.class, "hi"); // $ Alert - restTemplate.postForEntity(new URI(fooResourceUrl), new String("object"), String.class); // $ Alert - restTemplate.postForLocation(fooResourceUrl, new String("object")); // $ Alert - restTemplate.postForObject(fooResourceUrl, new String("object"), String.class); // $ Alert - restTemplate.put(fooResourceUrl, new String("object")); // $ Alert - restTemplate.delete(fooResourceUrl); // $ Alert - restTemplate.headForHeaders(fooResourceUrl); // $ Alert - restTemplate.optionsForAllow(fooResourceUrl); // $ Alert + restTemplate.patchForObject(fooResourceUrl, new String("object"), String.class, "hi"); // $ SSRF + restTemplate.postForEntity(new URI(fooResourceUrl), new String("object"), String.class); // $ SSRF + restTemplate.postForLocation(fooResourceUrl, new String("object")); // $ SSRF + restTemplate.postForObject(fooResourceUrl, new String("object"), String.class); // $ SSRF + restTemplate.put(fooResourceUrl, new String("object")); // $ SSRF + restTemplate.delete(fooResourceUrl); // $ SSRF + restTemplate.headForHeaders(fooResourceUrl); // $ SSRF + restTemplate.optionsForAllow(fooResourceUrl); // $ SSRF { String body = new String("body"); URI uri = new URI(fooResourceUrl); RequestEntity requestEntity = - RequestEntity.post(uri).body(body); // $ Alert + RequestEntity.post(uri).body(body); // $ SSRF ResponseEntity response = restTemplate.exchange(requestEntity, String.class); - RequestEntity.get(uri); // $ Alert - RequestEntity.put(uri); // $ Alert - RequestEntity.delete(uri); // $ Alert - RequestEntity.options(uri); // $ Alert - RequestEntity.patch(uri); // $ Alert - RequestEntity.head(uri); // $ Alert - RequestEntity.method(null, uri); // $ Alert + RequestEntity.get(uri); // $ SSRF + RequestEntity.put(uri); // $ SSRF + RequestEntity.delete(uri); // $ SSRF + RequestEntity.options(uri); // $ SSRF + RequestEntity.patch(uri); // $ SSRF + RequestEntity.head(uri); // $ SSRF + RequestEntity.method(null, uri); // $ SSRF } { URI uri = new URI(fooResourceUrl); MultiValueMap headers = null; java.lang.reflect.Type type = null; - new RequestEntity(null, uri); // $ Alert - new RequestEntity(headers, null, uri); // $ Alert - new RequestEntity("body", null, uri); // $ Alert - new RequestEntity("body", headers, null, uri); // $ Alert - new RequestEntity("body", null, uri, type); // $ Alert - new RequestEntity("body", headers, null, uri, type); // $ Alert + new RequestEntity(null, uri); // $ SSRF + new RequestEntity(headers, null, uri); // $ SSRF + new RequestEntity("body", null, uri); // $ SSRF + new RequestEntity("body", headers, null, uri); // $ SSRF + new RequestEntity("body", null, uri, type); // $ SSRF + new RequestEntity("body", headers, null, uri, type); // $ SSRF } } catch (org.springframework.web.client.RestClientException | java.net.URISyntaxException e) {} } diff --git a/java/ql/test/query-tests/security/CWE-918/URLClassLoaderSSRF.java b/java/ql/test/query-tests/security/CWE-918/URLClassLoaderSSRF.java index 64070c765980..84d53f797be5 100644 --- a/java/ql/test/query-tests/security/CWE-918/URLClassLoaderSSRF.java +++ b/java/ql/test/query-tests/security/CWE-918/URLClassLoaderSSRF.java @@ -13,9 +13,9 @@ public class URLClassLoaderSSRF extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); - URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}); // $ Alert + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}); // $ SSRF Class test = urlClassLoader.loadClass("test"); } catch (Exception e) { // Ignore @@ -25,9 +25,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); - URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}, URLClassLoaderSSRF.class.getClassLoader()); // $ Alert + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}, URLClassLoaderSSRF.class.getClassLoader()); // $ SSRF Class test = urlClassLoader.loadClass("test"); } catch (Exception e) { // Ignore @@ -37,11 +37,11 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); URLStreamHandlerFactory urlStreamHandlerFactory = null; - URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}, URLClassLoaderSSRF.class.getClassLoader(), urlStreamHandlerFactory); // $ Alert + URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{uri.toURL()}, URLClassLoaderSSRF.class.getClassLoader(), urlStreamHandlerFactory); // $ SSRF urlClassLoader.findResource("test"); } catch (Exception e) { // Ignore @@ -51,9 +51,9 @@ protected void doPut(HttpServletRequest request, HttpServletResponse response) protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); - URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[]{uri.toURL()}); // $ Alert + URLClassLoader urlClassLoader = URLClassLoader.newInstance(new URL[]{uri.toURL()}); // $ SSRF urlClassLoader.getResourceAsStream("test"); } catch (Exception e) { // Ignore @@ -63,11 +63,11 @@ protected void doDelete(HttpServletRequest request, HttpServletResponse response protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); URLClassLoader urlClassLoader = new URLClassLoader("testClassLoader", - new URL[]{uri.toURL()}, // $ Alert + new URL[]{uri.toURL()}, // $ SSRF URLClassLoaderSSRF.class.getClassLoader() ); @@ -80,13 +80,13 @@ protected void doOptions(HttpServletRequest request, HttpServletResponse respons protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { - String url = request.getParameter("uri"); // $ Source + String url = request.getParameter("uri"); URI uri = new URI(url); URLStreamHandlerFactory urlStreamHandlerFactory = null; URLClassLoader urlClassLoader = new URLClassLoader("testClassLoader", - new URL[]{uri.toURL()}, // $ Alert + new URL[]{uri.toURL()}, // $ SSRF URLClassLoaderSSRF.class.getClassLoader(), urlStreamHandlerFactory ); @@ -96,4 +96,4 @@ protected void doTrace(HttpServletRequest request, HttpServletResponse response) // Ignore } } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-918/mad/Test.java b/java/ql/test/query-tests/security/CWE-918/mad/Test.java index c1bc4e12e08e..5bf070bbe507 100644 --- a/java/ql/test/query-tests/security/CWE-918/mad/Test.java +++ b/java/ql/test/query-tests/security/CWE-918/mad/Test.java @@ -23,93 +23,93 @@ public class Test { private static HttpServletRequest request; public static Object source() { - return request.getParameter(null); // $ Source + return request.getParameter(null); } public void test(DatagramSocket socket) throws Exception { // "java.net;DatagramSocket;true;connect;(SocketAddress);;Argument[0];open-url;ai-generated" - socket.connect((SocketAddress) source()); // $ Alert + socket.connect((SocketAddress) source()); // $ SSRF } public void test(URL url) throws Exception { // "java.net;URL;false;openConnection;(Proxy);:Argument[this]:open-url;manual" - ((URL) source()).openConnection(); // $ Alert + ((URL) source()).openConnection(); // $ SSRF // "java.net;URL;false;openConnection;(Proxy);:Argument[0]:open-url;ai-generated" - url.openConnection((Proxy) source()); // $ Alert + url.openConnection((Proxy) source()); // $ SSRF // "java.net;URL;false;openStream;;:Argument[this]:open-url;manual" - ((URL) source()).openStream(); // $ Alert + ((URL) source()).openStream(); // $ SSRF } public void test() throws Exception { // "java.net;URLClassLoader;false;URLClassLoader;(String,URL[],ClassLoader);;Argument[1];open-url;manual" - new URLClassLoader("", (URL[]) source(), null); // $ Alert + new URLClassLoader("", (URL[]) source(), null); // $ SSRF // "java.net;URLClassLoader;false;URLClassLoader;(String,URL[],ClassLoader,URLStreamHandlerFactory);;Argument[1];open-url;manual" - new URLClassLoader("", (URL[]) source(), null, null); // $ Alert + new URLClassLoader("", (URL[]) source(), null, null); // $ SSRF // "java.net;URLClassLoader;false;URLClassLoader;(URL[]);;Argument[0];open-url;manual" - new URLClassLoader((URL[]) source()); // $ Alert + new URLClassLoader((URL[]) source()); // $ SSRF // "java.net;URLClassLoader;false;URLClassLoader;(URL[],ClassLoader);;Argument[0];open-url;manual" - new URLClassLoader((URL[]) source(), null); // $ Alert + new URLClassLoader((URL[]) source(), null); // $ SSRF // "java.net;URLClassLoader;false;URLClassLoader;(URL[],ClassLoader,URLStreamHandlerFactory);;Argument[0];open-url;manual" - new URLClassLoader((URL[]) source(), null, null); // $ Alert + new URLClassLoader((URL[]) source(), null, null); // $ SSRF // "java.net;URLClassLoader;false;newInstance;;;Argument[0];open-url;manual" - URLClassLoader.newInstance((URL[]) source()); // $ Alert + URLClassLoader.newInstance((URL[]) source()); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL,URL);;Argument[1];open-url;ai-generated" - new JellyContext(null, (URL) source(), null); // $ Alert + new JellyContext(null, (URL) source(), null); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL,URL);;Argument[2];open-url;ai-generated" - new JellyContext(null, null, (URL) source()); // $ Alert + new JellyContext(null, null, (URL) source()); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(JellyContext,URL);;Argument[1];open-url;ai-generated" - new JellyContext((JellyContext) null, (URL) source()); // $ Alert + new JellyContext((JellyContext) null, (URL) source()); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL,URL);;Argument[0];open-url;ai-generated" - new JellyContext((URL) source(), null); // $ Alert + new JellyContext((URL) source(), null); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL,URL);;Argument[1];open-url;ai-generated" - new JellyContext((URL) null, (URL) source()); // $ Alert + new JellyContext((URL) null, (URL) source()); // $ SSRF // "org.apache.commons.jelly;JellyContext;true;JellyContext;(URL);;Argument[0];open-url;ai-generated" - new JellyContext((URL) source()); // $ Alert + new JellyContext((URL) source()); // $ SSRF // "javax.activation;URLDataSource;true;URLDataSource;(URL);;Argument[0];request-forgery;manual" - new URLDataSource((URL) source()); // $ Alert + new URLDataSource((URL) source()); // $ SSRF // "org.apache.cxf.catalog;OASISCatalogManager;true;loadCatalog;(URL);;Argument[0];request-forgery;manual" - new OASISCatalogManager().loadCatalog((URL) source()); // $ Alert + new OASISCatalogManager().loadCatalog((URL) source()); // $ SSRF // @formatter:off // "org.apache.cxf.common.classloader;ClassLoaderUtils;true;getURLClassLoader;(URL[],ClassLoader);;Argument[0];request-forgery;manual" - new ClassLoaderUtils().getURLClassLoader((URL[]) source(), null); // $ Alert + new ClassLoaderUtils().getURLClassLoader((URL[]) source(), null); // $ SSRF // "org.apache.cxf.common.classloader;ClassLoaderUtils;true;getURLClassLoader;(List,ClassLoader);;Argument[0];request-forgery;manual" - new ClassLoaderUtils().getURLClassLoader((List) source(), null); // $ Alert + new ClassLoaderUtils().getURLClassLoader((List) source(), null); // $ SSRF // "org.apache.cxf.resource;ExtendedURIResolver;true;resolve;(String,String);;Argument[0];request-forgery;manual"] - new ExtendedURIResolver().resolve((String) source(), null); // $ Alert + new ExtendedURIResolver().resolve((String) source(), null); // $ SSRF // "org.apache.cxf.resource;URIResolver;true;URIResolver;(String);;Argument[0];request-forgery;manual"] - new URIResolver((String) source()); // $ Alert + new URIResolver((String) source()); // $ SSRF // "org.apache.cxf.resource;URIResolver;true;URIResolver;(String,String);;Argument[1];request-forgery;manual"] - new URIResolver(null, (String) source()); // $ Alert + new URIResolver(null, (String) source()); // $ SSRF // "org.apache.cxf.resource;URIResolver;true;URIResolver;(String,String,Class);;Argument[1];request-forgery;manual"] - new URIResolver(null, (String) source(), null); // $ Alert + new URIResolver(null, (String) source(), null); // $ SSRF // "org.apache.cxf.resource;URIResolver;true;resolve;(String,String,Class);;Argument[1];request-forgery;manual" - new URIResolver().resolve(null, (String) source(), null); // $ Alert + new URIResolver().resolve(null, (String) source(), null); // $ SSRF // @formatter:on } public void test(WebEngine webEngine) { // "javafx.scene.web;WebEngine;false;load;(String);;Argument[0];open-url;ai-generated" - webEngine.load((String) source()); // $ Alert + webEngine.load((String) source()); // $ SSRF } public void test(ZipURLInstaller zui) { // "org.codehaus.cargo.container.installer;ZipURLInstaller;true;ZipURLInstaller;(URL,String,String);;Argument[0];open-url:ai-generated" - new ZipURLInstaller((URL) source(), "", ""); // $ Alert + new ZipURLInstaller((URL) source(), "", ""); // $ SSRF } public void test(HttpResponses r) { // "org.kohsuke.stapler;HttpResponses;true;staticResource;(URL);;Argument[0];open-url;ai-generated" - r.staticResource((URL) source()); // $ Alert + r.staticResource((URL) source()); // $ SSRF } public void test(WSClient c) { // "play.libs.ws;WSClient;true;url;;;Argument[0];open-url;manual" - c.url((String) source()); // $ Alert + c.url((String) source()); // $ SSRF } public void test(StandaloneWSClient c) { // "play.libs.ws;StandaloneWSClient;true;url;;;Argument[0];open-url;manual" - c.url((String) source()); // $ Alert + c.url((String) source()); // $ SSRF } } diff --git a/java/ql/test/query-tests/security/CWE-925/BootReceiverXml.java b/java/ql/test/query-tests/security/CWE-925/BootReceiverXml.java index af9ca5926d78..3a9f84983966 100644 --- a/java/ql/test/query-tests/security/CWE-925/BootReceiverXml.java +++ b/java/ql/test/query-tests/security/CWE-925/BootReceiverXml.java @@ -6,8 +6,8 @@ class BootReceiverXml extends BroadcastReceiver { void doStuff(Intent intent) {} - @Override - public void onReceive(Context ctx, Intent intent) { // $ Alert + @Override + public void onReceive(Context ctx, Intent intent) { // $hasResult doStuff(intent); } -} +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected index 862b9a736928..e69de29bb2d1 100644 --- a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected +++ b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.expected @@ -1 +0,0 @@ -| BootReceiverXml.java:10:17:10:25 | onReceive | This reciever doesn't verify intents it receives, and $@ to receive $@. | AndroidManifest.xml:3:9:7:20 | receiver | it is registered | AndroidManifest.xml:5:17:5:79 | action | the system action action | diff --git a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql new file mode 100644 index 000000000000..67da4ee9b297 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.ImproperIntentVerificationQuery +import utils.test.InlineExpectationsTest + +module HasFlowTest implements TestSig { + string getARelevantTag() { result = "hasResult" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasResult" and + exists(Method orm | unverifiedSystemReceiver(_, orm, _) | + orm.getLocation() = location and + element = orm.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.qlref b/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.qlref deleted file mode 100644 index 1402eeee2a16..000000000000 --- a/java/ql/test/query-tests/security/CWE-925/ImproperIntentVerification.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-925/ImproperIntentVerification.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.expected deleted file mode 100644 index c1c694c5fbd2..000000000000 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.expected +++ /dev/null @@ -1,341 +0,0 @@ -#select -| ImplicitPendingIntentsTest.java:36:31:36:39 | fwdIntent | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:36:31:36:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:38:31:38:39 | fwdIntent | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:38:31:38:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:41:31:41:39 | fwdIntent | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:41:31:41:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:52:31:52:39 | fwdIntent | ImplicitPendingIntentsTest.java:48:33:48:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:52:31:52:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:48:33:48:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:60:31:60:39 | fwdIntent | ImplicitPendingIntentsTest.java:56:33:56:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:60:31:60:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:56:33:56:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:69:31:69:39 | fwdIntent | ImplicitPendingIntentsTest.java:64:33:64:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:69:31:69:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:64:33:64:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:77:31:77:39 | fwdIntent | ImplicitPendingIntentsTest.java:73:33:73:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:77:31:77:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:73:33:73:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:85:31:85:39 | fwdIntent | ImplicitPendingIntentsTest.java:81:33:81:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:85:31:85:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:81:33:81:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:93:31:93:39 | fwdIntent | ImplicitPendingIntentsTest.java:89:33:89:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:93:31:93:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:89:33:89:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:101:31:101:39 | fwdIntent | ImplicitPendingIntentsTest.java:97:33:97:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:101:31:101:39 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:97:33:97:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:170:32:170:40 | fwdIntent | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:170:32:170:40 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:171:32:171:40 | fwdIntent | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:171:32:171:40 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:172:32:172:40 | fwdIntent | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:172:32:172:40 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:173:32:173:40 | fwdIntent | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:173:32:173:40 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:188:65:188:76 | notification | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:188:65:188:76 | notification | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:189:32:189:43 | notification | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:189:32:189:43 | notification | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:190:42:190:53 | notification | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:190:42:190:53 | notification | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:229:32:229:43 | notification | ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:229:32:229:43 | notification | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:230:36:230:47 | notification | ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:230:36:230:47 | notification | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:239:32:239:33 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:239:32:239:33 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:240:42:240:43 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:240:42:240:43 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:241:49:241:50 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:241:49:241:50 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:242:37:242:38 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:242:37:242:38 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:243:54:243:55 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:243:54:243:55 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:244:51:244:52 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:244:51:244:52 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:245:44:245:45 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:245:44:245:45 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:246:41:246:42 | pi | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:246:41:246:42 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:258:59:258:60 | pi | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:258:59:258:60 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:259:65:259:66 | pi | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:259:65:259:66 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:260:69:260:70 | pi | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:260:69:260:70 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:261:57:261:58 | pi | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:261:57:261:58 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:262:74:262:75 | pi | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:262:74:262:75 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:273:26:273:34 | fwdIntent | ImplicitPendingIntentsTest.java:269:33:269:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:273:26:273:34 | fwdIntent | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:269:33:269:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:290:24:290:42 | build(...) | ImplicitPendingIntentsTest.java:284:37:284:48 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:290:24:290:42 | build(...) | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:284:37:284:48 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:317:24:317:42 | build(...) | ImplicitPendingIntentsTest.java:339:33:339:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:317:24:317:42 | build(...) | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:339:33:339:44 | new Intent(...) | An implicit Intent is created | -| ImplicitPendingIntentsTest.java:326:24:326:25 | pi | ImplicitPendingIntentsTest.java:324:37:324:48 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:326:24:326:25 | pi | $@ and sent to an unspecified third party through a PendingIntent. | ImplicitPendingIntentsTest.java:324:37:324:48 | new Intent(...) | An implicit Intent is created | -edges -| ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:32:66:32:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:32:32:32:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:34:45:34:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:32:66:32:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:32:32:32:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:34:13:34:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:36:31:36:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:34:13:34:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:38:31:38:39 | fwdIntent | provenance | Sink:MaD:17 Sink:MaD:17 | -| ImplicitPendingIntentsTest.java:34:13:34:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:41:31:41:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:34:45:34:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:34:13:34:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:48:33:48:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:49:72:49:81 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:49:32:49:97 | getActivityAsUser(...) : PendingIntent | ImplicitPendingIntentsTest.java:51:45:51:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:49:72:49:81 | baseIntent : Intent | ImplicitPendingIntentsTest.java:49:32:49:97 | getActivityAsUser(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:51:13:51:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:52:31:52:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:51:45:51:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:51:13:51:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:56:33:56:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:57:82:57:91 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:57:32:57:96 | getActivities(...) : PendingIntent | ImplicitPendingIntentsTest.java:59:45:59:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:57:68:57:92 | new Intent[] : Intent[] [[]] : Intent | ImplicitPendingIntentsTest.java:57:32:57:96 | getActivities(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:57:68:57:92 | {...} : Intent[] [[]] : Intent | ImplicitPendingIntentsTest.java:57:68:57:92 | new Intent[] : Intent[] [[]] : Intent | provenance | | -| ImplicitPendingIntentsTest.java:57:82:57:91 | baseIntent : Intent | ImplicitPendingIntentsTest.java:57:68:57:92 | {...} : Intent[] [[]] : Intent | provenance | | -| ImplicitPendingIntentsTest.java:59:13:59:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:60:31:60:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:59:45:59:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:59:13:59:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:64:33:64:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:65:88:65:97 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:65:32:66:34 | getActivitiesAsUser(...) : PendingIntent | ImplicitPendingIntentsTest.java:68:45:68:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:65:74:65:98 | new Intent[] : Intent[] [[]] : Intent | ImplicitPendingIntentsTest.java:65:32:66:34 | getActivitiesAsUser(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:65:74:65:98 | {...} : Intent[] [[]] : Intent | ImplicitPendingIntentsTest.java:65:74:65:98 | new Intent[] : Intent[] [[]] : Intent | provenance | | -| ImplicitPendingIntentsTest.java:65:88:65:97 | baseIntent : Intent | ImplicitPendingIntentsTest.java:65:74:65:98 | {...} : Intent[] [[]] : Intent | provenance | | -| ImplicitPendingIntentsTest.java:68:13:68:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:69:31:69:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:68:45:68:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:68:13:68:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:73:33:73:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:74:67:74:76 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:74:32:74:80 | getBroadcast(...) : PendingIntent | ImplicitPendingIntentsTest.java:76:45:76:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:74:67:74:76 | baseIntent : Intent | ImplicitPendingIntentsTest.java:74:32:74:80 | getBroadcast(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:76:13:76:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:77:31:77:39 | fwdIntent | provenance | Sink:MaD:17 Sink:MaD:17 | -| ImplicitPendingIntentsTest.java:76:45:76:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:76:13:76:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:81:33:81:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:82:73:82:82 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:82:32:82:92 | getBroadcastAsUser(...) : PendingIntent | ImplicitPendingIntentsTest.java:84:45:84:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:82:73:82:82 | baseIntent : Intent | ImplicitPendingIntentsTest.java:82:32:82:92 | getBroadcastAsUser(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:84:13:84:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:85:31:85:39 | fwdIntent | provenance | Sink:MaD:17 Sink:MaD:17 | -| ImplicitPendingIntentsTest.java:84:45:84:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:84:13:84:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:89:33:89:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:90:65:90:74 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:90:32:90:78 | getService(...) : PendingIntent | ImplicitPendingIntentsTest.java:92:45:92:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:90:65:90:74 | baseIntent : Intent | ImplicitPendingIntentsTest.java:90:32:90:78 | getService(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:92:13:92:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:93:31:93:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:92:45:92:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:92:13:92:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:97:33:97:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:98:75:98:84 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:98:32:98:88 | getForegroundService(...) : PendingIntent | ImplicitPendingIntentsTest.java:100:45:100:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:98:75:98:84 | baseIntent : Intent | ImplicitPendingIntentsTest.java:98:32:98:88 | getForegroundService(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:100:13:100:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:101:31:101:39 | fwdIntent | provenance | Sink:MaD:18 Sink:MaD:18 | -| ImplicitPendingIntentsTest.java:100:45:100:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:100:13:100:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:167:66:167:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:167:32:167:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:169:45:169:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:167:66:167:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:167:32:167:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:170:32:170:40 | fwdIntent | provenance | Sink:MaD:13 Sink:MaD:13 | -| ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:171:32:171:40 | fwdIntent | provenance | Sink:MaD:14 Sink:MaD:14 | -| ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:172:32:172:40 | fwdIntent | provenance | Sink:MaD:15 Sink:MaD:15 | -| ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:173:32:173:40 | fwdIntent | provenance | Sink:MaD:16 Sink:MaD:16 | -| ImplicitPendingIntentsTest.java:169:45:169:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:182:66:182:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:182:32:182:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:183:91:183:92 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:182:66:182:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:182:32:182:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:183:52:183:93 | new Builder(...) : Builder | ImplicitPendingIntentsTest.java:185:61:185:68 | aBuilder : Builder | provenance | | -| ImplicitPendingIntentsTest.java:183:91:183:92 | pi : PendingIntent | ImplicitPendingIntentsTest.java:183:52:183:93 | new Builder(...) : Builder | provenance | MaD:27 | -| ImplicitPendingIntentsTest.java:185:21:185:77 | addAction(...) : Builder | ImplicitPendingIntentsTest.java:186:41:186:48 | nBuilder : Builder | provenance | | -| ImplicitPendingIntentsTest.java:185:61:185:68 | aBuilder : Builder | ImplicitPendingIntentsTest.java:185:61:185:76 | build(...) : Action | provenance | MaD:28 | -| ImplicitPendingIntentsTest.java:185:61:185:76 | build(...) : Action | ImplicitPendingIntentsTest.java:185:21:185:77 | addAction(...) : Builder | provenance | MaD:29+MaD:30 | -| ImplicitPendingIntentsTest.java:186:41:186:48 | nBuilder : Builder | ImplicitPendingIntentsTest.java:186:41:186:56 | build(...) : Notification | provenance | MaD:31 | -| ImplicitPendingIntentsTest.java:186:41:186:56 | build(...) : Notification | ImplicitPendingIntentsTest.java:188:65:188:76 | notification | provenance | Sink:MaD:11 | -| ImplicitPendingIntentsTest.java:186:41:186:56 | build(...) : Notification | ImplicitPendingIntentsTest.java:189:32:189:43 | notification | provenance | Sink:MaD:10 | -| ImplicitPendingIntentsTest.java:186:41:186:56 | build(...) : Notification | ImplicitPendingIntentsTest.java:190:42:190:53 | notification | provenance | Sink:MaD:12 | -| ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:223:66:223:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:223:32:223:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:224:91:224:92 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:223:66:223:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:223:32:223:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:224:52:224:93 | new Builder(...) : Builder | ImplicitPendingIntentsTest.java:226:61:226:68 | aBuilder : Builder | provenance | | -| ImplicitPendingIntentsTest.java:224:91:224:92 | pi : PendingIntent | ImplicitPendingIntentsTest.java:224:52:224:93 | new Builder(...) : Builder | provenance | MaD:27 | -| ImplicitPendingIntentsTest.java:226:21:226:77 | addAction(...) : Builder | ImplicitPendingIntentsTest.java:227:41:227:48 | nBuilder : Builder | provenance | | -| ImplicitPendingIntentsTest.java:226:61:226:68 | aBuilder : Builder | ImplicitPendingIntentsTest.java:226:61:226:76 | build(...) : Action | provenance | MaD:28 | -| ImplicitPendingIntentsTest.java:226:61:226:76 | build(...) : Action | ImplicitPendingIntentsTest.java:226:21:226:77 | addAction(...) : Builder | provenance | MaD:29+MaD:30 | -| ImplicitPendingIntentsTest.java:227:41:227:48 | nBuilder : Builder | ImplicitPendingIntentsTest.java:227:41:227:56 | build(...) : Notification | provenance | MaD:31 | -| ImplicitPendingIntentsTest.java:227:41:227:56 | build(...) : Notification | ImplicitPendingIntentsTest.java:229:32:229:43 | notification | provenance | Sink:MaD:24 | -| ImplicitPendingIntentsTest.java:227:41:227:56 | build(...) : Notification | ImplicitPendingIntentsTest.java:230:36:230:47 | notification | provenance | Sink:MaD:23 | -| ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:238:66:238:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:239:32:239:33 | pi | provenance | Sink:MaD:2 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:240:42:240:43 | pi | provenance | Sink:MaD:3 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:241:49:241:50 | pi | provenance | Sink:MaD:4 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:242:37:242:38 | pi | provenance | Sink:MaD:5 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:243:54:243:55 | pi | provenance | Sink:MaD:6 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:244:51:244:52 | pi | provenance | Sink:MaD:7 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:245:44:245:45 | pi | provenance | Sink:MaD:8 | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:246:41:246:42 | pi | provenance | Sink:MaD:9 | -| ImplicitPendingIntentsTest.java:238:66:238:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:257:66:257:75 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:258:59:258:60 | pi | provenance | Sink:MaD:19 | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:259:65:259:66 | pi | provenance | Sink:MaD:19 | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:260:69:260:70 | pi | provenance | Sink:MaD:20 | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:261:57:261:58 | pi | provenance | Sink:MaD:21 | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:262:74:262:75 | pi | provenance | Sink:MaD:22 | -| ImplicitPendingIntentsTest.java:257:66:257:75 | baseIntent : Intent | ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:269:33:269:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:270:67:270:76 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:270:32:270:80 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:272:45:272:46 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:270:67:270:76 | baseIntent : Intent | ImplicitPendingIntentsTest.java:270:32:270:80 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:272:13:272:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | ImplicitPendingIntentsTest.java:273:26:273:34 | fwdIntent | provenance | Sink:MaD:1 Sink:MaD:1 | -| ImplicitPendingIntentsTest.java:272:45:272:46 | pi : PendingIntent | ImplicitPendingIntentsTest.java:272:13:272:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | provenance | MaD:32 | -| ImplicitPendingIntentsTest.java:282:22:282:32 | parameter this : TestSliceProvider [mPendingIntent] : PendingIntent | ImplicitPendingIntentsTest.java:314:65:314:78 | this <.field> : TestSliceProvider [mPendingIntent] : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:284:37:284:48 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:285:79:285:88 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:285:36:285:92 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:286:73:286:74 | pi : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:285:79:285:88 | baseIntent : Intent | ImplicitPendingIntentsTest.java:285:36:285:92 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:286:46:286:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:289:43:289:56 | activityAction : SliceAction [androidx.slice.Slice.action] : Object | provenance | | -| ImplicitPendingIntentsTest.java:286:73:286:74 | pi : PendingIntent | ImplicitPendingIntentsTest.java:286:46:286:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | provenance | MaD:37 | -| ImplicitPendingIntentsTest.java:288:17:288:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:290:24:290:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | provenance | | -| ImplicitPendingIntentsTest.java:288:36:289:57 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:288:17:288:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | provenance | MaD:35 | -| ImplicitPendingIntentsTest.java:289:43:289:56 | activityAction : SliceAction [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:288:36:289:57 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | provenance | MaD:33+MaD:34 | -| ImplicitPendingIntentsTest.java:290:24:290:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:290:24:290:42 | build(...) | provenance | MaD:36 Sink:MaD:25 | -| ImplicitPendingIntentsTest.java:314:38:314:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:316:90:316:95 | action : SliceAction [androidx.slice.Slice.action] : Object | provenance | | -| ImplicitPendingIntentsTest.java:314:65:314:78 | mPendingIntent : PendingIntent | ImplicitPendingIntentsTest.java:314:38:314:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | provenance | MaD:37 | -| ImplicitPendingIntentsTest.java:314:65:314:78 | this <.field> : TestSliceProvider [mPendingIntent] : PendingIntent | ImplicitPendingIntentsTest.java:314:65:314:78 | mPendingIntent : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:316:17:316:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:317:24:317:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | provenance | | -| ImplicitPendingIntentsTest.java:316:36:316:96 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:316:17:316:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | provenance | MaD:35 | -| ImplicitPendingIntentsTest.java:316:90:316:95 | action : SliceAction [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:316:36:316:96 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | provenance | MaD:33+MaD:34 | -| ImplicitPendingIntentsTest.java:317:24:317:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | ImplicitPendingIntentsTest.java:317:24:317:42 | build(...) | provenance | MaD:36 Sink:MaD:25 | -| ImplicitPendingIntentsTest.java:324:37:324:48 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:325:79:325:88 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:325:36:325:92 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:326:24:326:25 | pi | provenance | Sink:MaD:26 | -| ImplicitPendingIntentsTest.java:325:79:325:88 | baseIntent : Intent | ImplicitPendingIntentsTest.java:325:36:325:92 | getActivity(...) : PendingIntent | provenance | Config | -| ImplicitPendingIntentsTest.java:339:33:339:44 | new Intent(...) : Intent | ImplicitPendingIntentsTest.java:340:73:340:82 | baseIntent : Intent | provenance | | -| ImplicitPendingIntentsTest.java:340:13:340:26 | this <.field> [post update] : TestSliceProvider [mPendingIntent] : PendingIntent | ImplicitPendingIntentsTest.java:282:22:282:32 | parameter this : TestSliceProvider [mPendingIntent] : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:340:30:340:86 | getActivity(...) : PendingIntent | ImplicitPendingIntentsTest.java:340:13:340:26 | this <.field> [post update] : TestSliceProvider [mPendingIntent] : PendingIntent | provenance | | -| ImplicitPendingIntentsTest.java:340:73:340:82 | baseIntent : Intent | ImplicitPendingIntentsTest.java:340:30:340:86 | getActivity(...) : PendingIntent | provenance | Config | -models -| 1 | Sink: android.app; Activity; true; setResult; (int,Intent); ; Argument[1]; pending-intents; manual | -| 2 | Sink: android.app; AlarmManager; true; set; (int,long,PendingIntent); ; Argument[2]; pending-intents; manual | -| 3 | Sink: android.app; AlarmManager; true; setAlarmClock; ; ; Argument[1]; pending-intents; manual | -| 4 | Sink: android.app; AlarmManager; true; setAndAllowWhileIdle; ; ; Argument[2]; pending-intents; manual | -| 5 | Sink: android.app; AlarmManager; true; setExact; (int,long,PendingIntent); ; Argument[2]; pending-intents; manual | -| 6 | Sink: android.app; AlarmManager; true; setExactAndAllowWhileIdle; ; ; Argument[2]; pending-intents; manual | -| 7 | Sink: android.app; AlarmManager; true; setInexactRepeating; ; ; Argument[3]; pending-intents; manual | -| 8 | Sink: android.app; AlarmManager; true; setRepeating; ; ; Argument[3]; pending-intents; manual | -| 9 | Sink: android.app; AlarmManager; true; setWindow; (int,long,long,PendingIntent); ; Argument[3]; pending-intents; manual | -| 10 | Sink: android.app; NotificationManager; true; notify; (int,Notification); ; Argument[1]; pending-intents; manual | -| 11 | Sink: android.app; NotificationManager; true; notifyAsPackage; (String,String,int,Notification); ; Argument[3]; pending-intents; manual | -| 12 | Sink: android.app; NotificationManager; true; notifyAsUser; (String,int,Notification,UserHandle); ; Argument[2]; pending-intents; manual | -| 13 | Sink: android.app; PendingIntent; false; send; (Context,int,Intent); ; Argument[2]; pending-intents; manual | -| 14 | Sink: android.app; PendingIntent; false; send; (Context,int,Intent,PendingIntent$OnFinished,Handler); ; Argument[2]; pending-intents; manual | -| 15 | Sink: android.app; PendingIntent; false; send; (Context,int,Intent,PendingIntent$OnFinished,Handler,String); ; Argument[2]; pending-intents; manual | -| 16 | Sink: android.app; PendingIntent; false; send; (Context,int,Intent,PendingIntent$OnFinished,Handler,String,Bundle); ; Argument[2]; pending-intents; manual | -| 17 | Sink: android.content; Context; true; sendBroadcast; ; ; Argument[0]; intent-redirection; manual | -| 18 | Sink: android.content; Context; true; startActivity; ; ; Argument[0]; intent-redirection; manual | -| 19 | Sink: androidx.core.app; AlarmManagerCompat; true; setAlarmClock; ; ; Argument[2..3]; pending-intents; manual | -| 20 | Sink: androidx.core.app; AlarmManagerCompat; true; setAndAllowWhileIdle; ; ; Argument[3]; pending-intents; manual | -| 21 | Sink: androidx.core.app; AlarmManagerCompat; true; setExact; ; ; Argument[3]; pending-intents; manual | -| 22 | Sink: androidx.core.app; AlarmManagerCompat; true; setExactAndAllowWhileIdle; ; ; Argument[3]; pending-intents; manual | -| 23 | Sink: androidx.core.app; NotificationManagerCompat; true; notify; (String,int,Notification); ; Argument[2]; pending-intents; manual | -| 24 | Sink: androidx.core.app; NotificationManagerCompat; true; notify; (int,Notification); ; Argument[1]; pending-intents; manual | -| 25 | Sink: androidx.slice; SliceProvider; true; onBindSlice; ; ; ReturnValue; pending-intents; manual | -| 26 | Sink: androidx.slice; SliceProvider; true; onCreatePermissionRequest; ; ; ReturnValue; pending-intents; manual | -| 27 | Summary: android.app; Notification$Action$Builder; true; Builder; (int,CharSequence,PendingIntent); ; Argument[2]; Argument[this]; taint; manual | -| 28 | Summary: android.app; Notification$Action$Builder; true; build; ; ; Argument[this]; ReturnValue; taint; manual | -| 29 | Summary: android.app; Notification$Builder; true; addAction; (Notification$Action); ; Argument[0]; Argument[this]; taint; manual | -| 30 | Summary: android.app; Notification$Builder; true; addAction; ; ; Argument[this]; ReturnValue; value; manual | -| 31 | Summary: android.app; Notification$Builder; true; build; ; ; Argument[this]; ReturnValue; taint; manual | -| 32 | Summary: android.content; Intent; true; putExtra; ; ; Argument[1]; Argument[this].SyntheticField[android.content.Intent.extras].MapValue; value; manual | -| 33 | Summary: androidx.slice.builders; ListBuilder$RowBuilder; true; setPrimaryAction; ; ; Argument[0].SyntheticField[androidx.slice.Slice.action]; Argument[this].SyntheticField[androidx.slice.Slice.action]; taint; manual | -| 34 | Summary: androidx.slice.builders; ListBuilder$RowBuilder; true; setPrimaryAction; ; ; Argument[this]; ReturnValue; value; manual | -| 35 | Summary: androidx.slice.builders; ListBuilder; true; addRow; ; ; Argument[0].SyntheticField[androidx.slice.Slice.action]; Argument[this].SyntheticField[androidx.slice.Slice.action]; taint; manual | -| 36 | Summary: androidx.slice.builders; ListBuilder; true; build; ; ; Argument[this].SyntheticField[androidx.slice.Slice.action]; ReturnValue; taint; manual | -| 37 | Summary: androidx.slice.builders; SliceAction; true; createDeeplink; (PendingIntent,IconCompat,int,CharSequence); ; Argument[0]; ReturnValue.SyntheticField[androidx.slice.Slice.action]; taint; manual | -nodes -| ImplicitPendingIntentsTest.java:31:33:31:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:32:32:32:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:32:66:32:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:34:13:34:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:34:45:34:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:36:31:36:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:38:31:38:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:41:31:41:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:48:33:48:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:49:32:49:97 | getActivityAsUser(...) : PendingIntent | semmle.label | getActivityAsUser(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:49:72:49:81 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:51:13:51:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:51:45:51:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:52:31:52:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:56:33:56:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:57:32:57:96 | getActivities(...) : PendingIntent | semmle.label | getActivities(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:57:68:57:92 | new Intent[] : Intent[] [[]] : Intent | semmle.label | new Intent[] : Intent[] [[]] : Intent | -| ImplicitPendingIntentsTest.java:57:68:57:92 | {...} : Intent[] [[]] : Intent | semmle.label | {...} : Intent[] [[]] : Intent | -| ImplicitPendingIntentsTest.java:57:82:57:91 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:59:13:59:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:59:45:59:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:60:31:60:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:64:33:64:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:65:32:66:34 | getActivitiesAsUser(...) : PendingIntent | semmle.label | getActivitiesAsUser(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:65:74:65:98 | new Intent[] : Intent[] [[]] : Intent | semmle.label | new Intent[] : Intent[] [[]] : Intent | -| ImplicitPendingIntentsTest.java:65:74:65:98 | {...} : Intent[] [[]] : Intent | semmle.label | {...} : Intent[] [[]] : Intent | -| ImplicitPendingIntentsTest.java:65:88:65:97 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:68:13:68:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:68:45:68:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:69:31:69:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:73:33:73:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:74:32:74:80 | getBroadcast(...) : PendingIntent | semmle.label | getBroadcast(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:74:67:74:76 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:76:13:76:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:76:45:76:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:77:31:77:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:81:33:81:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:82:32:82:92 | getBroadcastAsUser(...) : PendingIntent | semmle.label | getBroadcastAsUser(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:82:73:82:82 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:84:13:84:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:84:45:84:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:85:31:85:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:89:33:89:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:90:32:90:78 | getService(...) : PendingIntent | semmle.label | getService(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:90:65:90:74 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:92:13:92:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:92:45:92:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:93:31:93:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:97:33:97:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:98:32:98:88 | getForegroundService(...) : PendingIntent | semmle.label | getForegroundService(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:98:75:98:84 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:100:13:100:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:100:45:100:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:101:31:101:39 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:166:33:166:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:167:32:167:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:167:66:167:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:169:13:169:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:169:45:169:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:170:32:170:40 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:171:32:171:40 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:172:32:172:40 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:173:32:173:40 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:181:33:181:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:182:32:182:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:182:66:182:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:183:52:183:93 | new Builder(...) : Builder | semmle.label | new Builder(...) : Builder | -| ImplicitPendingIntentsTest.java:183:91:183:92 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:185:21:185:77 | addAction(...) : Builder | semmle.label | addAction(...) : Builder | -| ImplicitPendingIntentsTest.java:185:61:185:68 | aBuilder : Builder | semmle.label | aBuilder : Builder | -| ImplicitPendingIntentsTest.java:185:61:185:76 | build(...) : Action | semmle.label | build(...) : Action | -| ImplicitPendingIntentsTest.java:186:41:186:48 | nBuilder : Builder | semmle.label | nBuilder : Builder | -| ImplicitPendingIntentsTest.java:186:41:186:56 | build(...) : Notification | semmle.label | build(...) : Notification | -| ImplicitPendingIntentsTest.java:188:65:188:76 | notification | semmle.label | notification | -| ImplicitPendingIntentsTest.java:189:32:189:43 | notification | semmle.label | notification | -| ImplicitPendingIntentsTest.java:190:42:190:53 | notification | semmle.label | notification | -| ImplicitPendingIntentsTest.java:222:33:222:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:223:32:223:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:223:66:223:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:224:52:224:93 | new Builder(...) : Builder | semmle.label | new Builder(...) : Builder | -| ImplicitPendingIntentsTest.java:224:91:224:92 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:226:21:226:77 | addAction(...) : Builder | semmle.label | addAction(...) : Builder | -| ImplicitPendingIntentsTest.java:226:61:226:68 | aBuilder : Builder | semmle.label | aBuilder : Builder | -| ImplicitPendingIntentsTest.java:226:61:226:76 | build(...) : Action | semmle.label | build(...) : Action | -| ImplicitPendingIntentsTest.java:227:41:227:48 | nBuilder : Builder | semmle.label | nBuilder : Builder | -| ImplicitPendingIntentsTest.java:227:41:227:56 | build(...) : Notification | semmle.label | build(...) : Notification | -| ImplicitPendingIntentsTest.java:229:32:229:43 | notification | semmle.label | notification | -| ImplicitPendingIntentsTest.java:230:36:230:47 | notification | semmle.label | notification | -| ImplicitPendingIntentsTest.java:237:33:237:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:238:32:238:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:238:66:238:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:239:32:239:33 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:240:42:240:43 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:241:49:241:50 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:242:37:242:38 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:243:54:243:55 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:244:51:244:52 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:245:44:245:45 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:246:41:246:42 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:256:33:256:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:257:32:257:79 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:257:66:257:75 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:258:59:258:60 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:259:65:259:66 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:260:69:260:70 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:261:57:261:58 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:262:74:262:75 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:269:33:269:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:270:32:270:80 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:270:67:270:76 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:272:13:272:21 | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | semmle.label | fwdIntent [post update] : Intent [android.content.Intent.extras, ] : PendingIntent | -| ImplicitPendingIntentsTest.java:272:45:272:46 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:273:26:273:34 | fwdIntent | semmle.label | fwdIntent | -| ImplicitPendingIntentsTest.java:282:22:282:32 | parameter this : TestSliceProvider [mPendingIntent] : PendingIntent | semmle.label | parameter this : TestSliceProvider [mPendingIntent] : PendingIntent | -| ImplicitPendingIntentsTest.java:284:37:284:48 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:285:36:285:92 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:285:79:285:88 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:286:46:286:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | semmle.label | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:286:73:286:74 | pi : PendingIntent | semmle.label | pi : PendingIntent | -| ImplicitPendingIntentsTest.java:288:17:288:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | semmle.label | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:288:36:289:57 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | semmle.label | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:289:43:289:56 | activityAction : SliceAction [androidx.slice.Slice.action] : Object | semmle.label | activityAction : SliceAction [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:290:24:290:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | semmle.label | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:290:24:290:42 | build(...) | semmle.label | build(...) | -| ImplicitPendingIntentsTest.java:314:38:314:92 | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | semmle.label | createDeeplink(...) : SliceAction [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:314:65:314:78 | mPendingIntent : PendingIntent | semmle.label | mPendingIntent : PendingIntent | -| ImplicitPendingIntentsTest.java:314:65:314:78 | this <.field> : TestSliceProvider [mPendingIntent] : PendingIntent | semmle.label | this <.field> : TestSliceProvider [mPendingIntent] : PendingIntent | -| ImplicitPendingIntentsTest.java:316:17:316:27 | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | semmle.label | listBuilder [post update] : ListBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:316:36:316:96 | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | semmle.label | setPrimaryAction(...) : RowBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:316:90:316:95 | action : SliceAction [androidx.slice.Slice.action] : Object | semmle.label | action : SliceAction [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:317:24:317:34 | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | semmle.label | listBuilder : ListBuilder [androidx.slice.Slice.action] : Object | -| ImplicitPendingIntentsTest.java:317:24:317:42 | build(...) | semmle.label | build(...) | -| ImplicitPendingIntentsTest.java:324:37:324:48 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:325:36:325:92 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:325:79:325:88 | baseIntent : Intent | semmle.label | baseIntent : Intent | -| ImplicitPendingIntentsTest.java:326:24:326:25 | pi | semmle.label | pi | -| ImplicitPendingIntentsTest.java:339:33:339:44 | new Intent(...) : Intent | semmle.label | new Intent(...) : Intent | -| ImplicitPendingIntentsTest.java:340:13:340:26 | this <.field> [post update] : TestSliceProvider [mPendingIntent] : PendingIntent | semmle.label | this <.field> [post update] : TestSliceProvider [mPendingIntent] : PendingIntent | -| ImplicitPendingIntentsTest.java:340:30:340:86 | getActivity(...) : PendingIntent | semmle.label | getActivity(...) : PendingIntent | -| ImplicitPendingIntentsTest.java:340:73:340:82 | baseIntent : Intent | semmle.label | baseIntent : Intent | -subpaths diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.qlref b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.qlref deleted file mode 100644 index beeff5417fcd..000000000000 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: Security/CWE/CWE-927/ImplicitPendingIntents.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/options b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/options deleted file mode 100644 index 43e25f608b67..000000000000 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/options +++ /dev/null @@ -1 +0,0 @@ -// semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.java b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java similarity index 80% rename from java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.java rename to java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java index 5bada3e77369..80f661492211 100644 --- a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntents/ImplicitPendingIntentsTest.java +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.java @@ -28,77 +28,77 @@ public class ImplicitPendingIntentsTest { public static void testPendingIntentAsAnExtra(Context ctx) throws PendingIntent.CanceledException { { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivities(new Intent[] {fwdIntent}); // $ MISSING: Alert - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivities(new Intent[] {fwdIntent}); // $ MISSING: hasImplicitPendingIntent + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent ctx.startService(fwdIntent); // Safe - ctx.sendBroadcast(fwdIntent); // $ Alert + ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent fwdIntent.setComponent(null); // Not a sanitizer - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent fwdIntent.setPackage("a.safe.package"); // Sanitizer ctx.startActivity(fwdIntent); // Safe } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivityAsUser(ctx, 0, baseIntent, 0, null, null); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivities(ctx, 0, new Intent[] {baseIntent}, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivitiesAsUser(ctx, 0, new Intent[] {baseIntent}, 0, null, null); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getBroadcast(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.sendBroadcast(fwdIntent); // $ Alert + ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getBroadcastAsUser(ctx, 0, baseIntent, 0, null); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.sendBroadcast(fwdIntent); // $ Alert + ctx.sendBroadcast(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getService(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent } { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getForegroundService(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - ctx.startActivity(fwdIntent); // $ Alert + ctx.startActivity(fwdIntent); // $hasImplicitPendingIntent } { @@ -163,14 +163,14 @@ public static void testPendingIntentAsAnExtra(Context ctx) public static void testPendingIntentWrappedInAnotherPendingIntent(Context ctx, PendingIntent other) throws PendingIntent.CanceledException { { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - other.send(ctx, 0, fwdIntent); // $ Alert - other.send(ctx, 0, fwdIntent, null, null); // $ Alert - other.send(ctx, 0, fwdIntent, null, null, null); // $ Alert - other.send(ctx, 0, fwdIntent, null, null, null, null); // $ Alert + other.send(ctx, 0, fwdIntent); // $hasImplicitPendingIntent + other.send(ctx, 0, fwdIntent, null, null); // $hasImplicitPendingIntent + other.send(ctx, 0, fwdIntent, null, null, null); // $hasImplicitPendingIntent + other.send(ctx, 0, fwdIntent, null, null, null, null); // $hasImplicitPendingIntent } } @@ -178,16 +178,16 @@ public static void testPendingIntentInANotification(Context ctx) throws PendingIntent.CanceledException { { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Notification.Action.Builder aBuilder = new Notification.Action.Builder(0, "", pi); Notification.Builder nBuilder = new Notification.Builder(ctx).addAction(aBuilder.build()); Notification notification = nBuilder.build(); NotificationManager nManager = null; - nManager.notifyAsPackage("targetPackage", "tag", 0, notification); // $ Alert - nManager.notify(0, notification); // $ Alert - nManager.notifyAsUser("", 0, notification, null); // $ Alert + nManager.notifyAsPackage("targetPackage", "tag", 0, notification); // $hasImplicitPendingIntent + nManager.notify(0, notification); // $hasImplicitPendingIntent + nManager.notifyAsUser("", 0, notification, null); // $hasImplicitPendingIntent } { Intent baseIntent = new Intent(); @@ -219,31 +219,31 @@ public static void testPendingIntentInANotification(Context ctx) } // Compat sinks { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); Notification.Action.Builder aBuilder = new Notification.Action.Builder(0, "", pi); Notification.Builder nBuilder = new Notification.Builder(ctx).addAction(aBuilder.build()); Notification notification = nBuilder.build(); NotificationManagerCompat nManager = null; - nManager.notify(0, notification); // $ Alert - nManager.notify("", 0, notification); // $ Alert + nManager.notify(0, notification); // $hasImplicitPendingIntent + nManager.notify("", 0, notification); // $hasImplicitPendingIntent } } public static void testPendingIntentInAnAlarm(Context ctx) { AlarmManager aManager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); - aManager.set(0, 0, pi); // $ Alert - aManager.setAlarmClock(null, pi); // $ Alert - aManager.setAndAllowWhileIdle(0, 0, pi); // $ Alert - aManager.setExact(0, 0, pi); // $ Alert - aManager.setExactAndAllowWhileIdle(0, 0, pi); // $ Alert - aManager.setInexactRepeating(0, 0, 0, pi); // $ Alert - aManager.setRepeating(0, 0, 0, pi); // $ Alert - aManager.setWindow(0, 0, 0, pi); // $ Alert + aManager.set(0, 0, pi); // $hasImplicitPendingIntent + aManager.setAlarmClock(null, pi); // $hasImplicitPendingIntent + aManager.setAndAllowWhileIdle(0, 0, pi); // $hasImplicitPendingIntent + aManager.setExact(0, 0, pi); // $hasImplicitPendingIntent + aManager.setExactAndAllowWhileIdle(0, 0, pi); // $hasImplicitPendingIntent + aManager.setInexactRepeating(0, 0, 0, pi); // $hasImplicitPendingIntent + aManager.setRepeating(0, 0, 0, pi); // $hasImplicitPendingIntent + aManager.setWindow(0, 0, 0, pi); // $hasImplicitPendingIntent } { Intent baseIntent = new Intent(); @@ -253,24 +253,24 @@ public static void testPendingIntentInAnAlarm(Context ctx) { } // Compat sinks { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(ctx, 0, baseIntent, 0); - AlarmManagerCompat.setAlarmClock(aManager, 0, pi, null); // $ Alert - AlarmManagerCompat.setAlarmClock(aManager, 0, null, pi); // $ Alert - AlarmManagerCompat.setAndAllowWhileIdle(aManager, 0, 0, pi); // $ Alert - AlarmManagerCompat.setExact(aManager, 0, 0, pi); // $ Alert - AlarmManagerCompat.setExactAndAllowWhileIdle(aManager, 0, 0, pi); // $ Alert + AlarmManagerCompat.setAlarmClock(aManager, 0, pi, null); // $hasImplicitPendingIntent + AlarmManagerCompat.setAlarmClock(aManager, 0, null, pi); // $hasImplicitPendingIntent + AlarmManagerCompat.setAndAllowWhileIdle(aManager, 0, 0, pi); // $hasImplicitPendingIntent + AlarmManagerCompat.setExact(aManager, 0, 0, pi); // $hasImplicitPendingIntent + AlarmManagerCompat.setExactAndAllowWhileIdle(aManager, 0, 0, pi); // $hasImplicitPendingIntent } } static class TestActivity extends Activity { @Override public void onCreate(Bundle bundle) { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(null, 0, baseIntent, 0); Intent fwdIntent = new Intent(); fwdIntent.putExtra("fwdIntent", pi); - setResult(0, fwdIntent); // $ Alert + setResult(0, fwdIntent); // $hasImplicitPendingIntent } } @@ -281,13 +281,13 @@ static class TestSliceProvider extends SliceProvider { @Override public Slice onBindSlice(Uri sliceUri) { if (sliceUri.getAuthority().equals("1")) { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(getContext(), 0, baseIntent, 0); SliceAction activityAction = SliceAction.createDeeplink(pi, null, 0, "Test"); ListBuilder listBuilder = new ListBuilder(getContext(), sliceUri, null); listBuilder.addRow(new ListBuilder.RowBuilder().setTitle("Title") .setPrimaryAction(activityAction)); - return listBuilder.build(); // $ Alert + return listBuilder.build(); // $hasImplicitPendingIntent } else if (sliceUri.getAuthority().equals("2")) { Intent baseIntent = new Intent(getContext(), Activity.class); // Sanitizer @@ -314,16 +314,16 @@ public Slice onBindSlice(Uri sliceUri) { SliceAction action = SliceAction.createDeeplink(mPendingIntent, null, 0, ""); ListBuilder listBuilder = new ListBuilder(getContext(), sliceUri, 0); listBuilder.addRow(new ListBuilder.RowBuilder(sliceUri).setPrimaryAction(action)); - return listBuilder.build(); // $ Alert + return listBuilder.build(); // $hasImplicitPendingIntent } } @Override public PendingIntent onCreatePermissionRequest(Uri sliceUri, String callingPackage) { if (sliceUri.getAuthority().equals("1")) { - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(getContext(), 0, baseIntent, 0); - return pi; // $ Alert + return pi; // $hasImplicitPendingIntent } else { Intent baseIntent = new Intent(); PendingIntent pi = PendingIntent.getActivity(getContext(), 0, baseIntent, @@ -336,7 +336,7 @@ public PendingIntent onCreatePermissionRequest(Uri sliceUri, String callingPacka public boolean onCreateSliceProvider() { // Testing implicit field read flows: // mPendingIntent is used in onBindSlice - Intent baseIntent = new Intent(); // $ Source + Intent baseIntent = new Intent(); mPendingIntent = PendingIntent.getActivity(getContext(), 0, baseIntent, 0); return true; } diff --git a/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql new file mode 100644 index 000000000000..b474a32b52c7 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-927/ImplicitPendingIntentsTest.ql @@ -0,0 +1,18 @@ +import java +import semmle.code.java.security.ImplicitPendingIntentsQuery +import utils.test.InlineExpectationsTest + +module ImplicitPendingIntentsTest implements TestSig { + string getARelevantTag() { result = "hasImplicitPendingIntent" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasImplicitPendingIntent" and + exists(DataFlow::Node sink | ImplicitPendingIntentStartFlow::flowTo(sink) | + sink.getLocation() = location and + element = sink.toString() and + value = "" + ) + } +} + +import MakeTest diff --git a/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected index 652ac0ebc1b9..1cf124ce3cf6 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-code-scanning.qls.expected @@ -31,6 +31,7 @@ ql/javascript/ql/src/Security/CWE-079/Xss.ql ql/javascript/ql/src/Security/CWE-079/XssThroughDom.ql ql/javascript/ql/src/Security/CWE-089/SqlInjection.ql ql/javascript/ql/src/Security/CWE-094/CodeInjection.ql +ql/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql ql/javascript/ql/src/Security/CWE-094/ImproperCodeSanitization.ql ql/javascript/ql/src/Security/CWE-094/UnsafeDynamicMethodAccess.ql ql/javascript/ql/src/Security/CWE-1004/ClientExposedCookie.ql @@ -47,6 +48,7 @@ ql/javascript/ql/src/Security/CWE-201/PostMessageStar.ql ql/javascript/ql/src/Security/CWE-209/StackTraceExposure.ql ql/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql ql/javascript/ql/src/Security/CWE-300/InsecureDependencyResolution.ql +ql/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/BuildArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/CleartextLogging.ql ql/javascript/ql/src/Security/CWE-312/CleartextStorage.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected index dd5877683082..eb4acd38e39b 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-and-quality.qls.expected @@ -119,6 +119,7 @@ ql/javascript/ql/src/Security/CWE-079/Xss.ql ql/javascript/ql/src/Security/CWE-079/XssThroughDom.ql ql/javascript/ql/src/Security/CWE-089/SqlInjection.ql ql/javascript/ql/src/Security/CWE-094/CodeInjection.ql +ql/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql ql/javascript/ql/src/Security/CWE-094/ImproperCodeSanitization.ql ql/javascript/ql/src/Security/CWE-094/UnsafeCodeConstruction.ql ql/javascript/ql/src/Security/CWE-094/UnsafeDynamicMethodAccess.ql @@ -139,6 +140,7 @@ ql/javascript/ql/src/Security/CWE-201/PostMessageStar.ql ql/javascript/ql/src/Security/CWE-209/StackTraceExposure.ql ql/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql ql/javascript/ql/src/Security/CWE-300/InsecureDependencyResolution.ql +ql/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/BuildArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/CleartextLogging.ql ql/javascript/ql/src/Security/CWE-312/CleartextStorage.ql diff --git a/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected b/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected index 9b7cfd22ed6f..a5b5cfefdbc2 100644 --- a/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected +++ b/javascript/ql/integration-tests/query-suite/javascript-security-extended.qls.expected @@ -34,6 +34,7 @@ ql/javascript/ql/src/Security/CWE-079/Xss.ql ql/javascript/ql/src/Security/CWE-079/XssThroughDom.ql ql/javascript/ql/src/Security/CWE-089/SqlInjection.ql ql/javascript/ql/src/Security/CWE-094/CodeInjection.ql +ql/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql ql/javascript/ql/src/Security/CWE-094/ImproperCodeSanitization.ql ql/javascript/ql/src/Security/CWE-094/UnsafeCodeConstruction.ql ql/javascript/ql/src/Security/CWE-094/UnsafeDynamicMethodAccess.ql @@ -54,6 +55,7 @@ ql/javascript/ql/src/Security/CWE-201/PostMessageStar.ql ql/javascript/ql/src/Security/CWE-209/StackTraceExposure.ql ql/javascript/ql/src/Security/CWE-295/DisablingCertificateValidation.ql ql/javascript/ql/src/Security/CWE-300/InsecureDependencyResolution.ql +ql/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/BuildArtifactLeak.ql ql/javascript/ql/src/Security/CWE-312/CleartextLogging.ql ql/javascript/ql/src/Security/CWE-312/CleartextStorage.ql diff --git a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected index 9d67dfc2cc7a..c80c3fc76da1 100644 --- a/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected +++ b/javascript/ql/integration-tests/query-suite/not_included_in_qls.expected @@ -67,6 +67,7 @@ ql/javascript/ql/src/Summary/TaintSinks.ql ql/javascript/ql/src/Summary/TaintSources.ql ql/javascript/ql/src/definitions.ql ql/javascript/ql/src/experimental/Security/CWE-094-dataURL/CodeInjection.ql +ql/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql ql/javascript/ql/src/experimental/Security/CWE-099/EnvValueAndKeyInjection.ql ql/javascript/ql/src/experimental/Security/CWE-099/EnvValueInjection.ql ql/javascript/ql/src/experimental/Security/CWE-340/TokenBuiltFromUUID.ql diff --git a/javascript/ql/lib/change-notes/2025-06-20-execa.md b/javascript/ql/lib/change-notes/2025-06-20-execa.md deleted file mode 100644 index b22afe593f8f..000000000000 --- a/javascript/ql/lib/change-notes/2025-06-20-execa.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Enhanced modeling for the `execa` library, adding support for command execution methods `execaCommand`, `execaCommandSync`, `$`, and `$.sync`, as well as file system operations through `inputFile`, `pipeStdout`, `pipeAll`, and `pipeStderr`. diff --git a/javascript/ql/lib/ext/react.model.yml b/javascript/ql/lib/ext/react.model.yml deleted file mode 100644 index 51b6aaefc46d..000000000000 --- a/javascript/ql/lib/ext/react.model.yml +++ /dev/null @@ -1,6 +0,0 @@ -extensions: - - addsTo: - pack: codeql/javascript-all - extensible: summaryModel - data: - - ["react", "Member[use]", "Argument[0].Awaited", "ReturnValue", "value"] diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index 7accf28be072..d75eed29b8e0 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -92,7 +92,6 @@ import semmle.javascript.frameworks.DigitalOcean import semmle.javascript.frameworks.DomEvents import semmle.javascript.frameworks.Electron import semmle.javascript.frameworks.EventEmitter -import semmle.javascript.frameworks.Execa import semmle.javascript.frameworks.Files import semmle.javascript.frameworks.Firebase import semmle.javascript.frameworks.FormParsers diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index ea90eead8388..e9fe865ca12c 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.7-dev +version: 2.6.6 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index a3dd7542ec13..8854eb11a55a 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -1,6 +1,4 @@ /** - * PENDING DEPRECATION. Models for GitHub Actions workflow files are part of the actions qlpack now. - * * Libraries for modeling GitHub Actions workflow files written in YAML. * See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions. */ diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Execa.qll b/javascript/ql/lib/semmle/javascript/frameworks/Execa.qll deleted file mode 100644 index 2ef2fcde3868..000000000000 --- a/javascript/ql/lib/semmle/javascript/frameworks/Execa.qll +++ /dev/null @@ -1,296 +0,0 @@ -/** - * Models the `execa` library in terms of `FileSystemAccess` and `SystemCommandExecution`. - */ - -import javascript - -/** - * Provide model for [Execa](https://github.com/sindresorhus/execa) package - */ -module Execa { - /** - * The Execa input file read and output file write - */ - class ExecaFileSystemAccess extends FileSystemReadAccess, DataFlow::Node { - API::Node execaArg; - boolean isPipedToFile; - - ExecaFileSystemAccess() { - ( - execaArg = API::moduleImport("execa").getMember("$").getParameter(0) and - isPipedToFile = false - or - execaArg = - API::moduleImport("execa") - .getMember(["execa", "execaCommand", "execaCommandSync", "execaSync"]) - .getParameter([0, 1, 2]) and - isPipedToFile = false - or - execaArg = - API::moduleImport("execa") - .getMember(["execa", "execaCommand", "execaCommandSync", "execaSync"]) - .getReturn() - .getMember(["pipeStdout", "pipeAll", "pipeStderr"]) - .getParameter(0) and - isPipedToFile = true - ) and - this = execaArg.asSink() - } - - override DataFlow::Node getADataNode() { none() } - - override DataFlow::Node getAPathArgument() { - result = execaArg.getMember("inputFile").asSink() and isPipedToFile = false - or - result = execaArg.asSink() and isPipedToFile = true - } - } - - /** - * A call to `execa.execa` or `execa.execaSync` - */ - class ExecaCall extends API::CallNode { - boolean isSync; - - ExecaCall() { - this = API::moduleImport("execa").getMember("execa").getACall() and - isSync = false - or - this = API::moduleImport("execa").getMember("execaSync").getACall() and - isSync = true - or - this = API::moduleImport("execa").getACall() and - isSync = false - } - } - - /** - * The system command execution nodes for `execa.execa` or `execa.execaSync` functions - */ - class ExecaExec extends SystemCommandExecution, ExecaCall { - ExecaExec() { isSync = [false, true] } - - override DataFlow::Node getACommandArgument() { result = this.getArgument(0) } - - override predicate isShellInterpreted(DataFlow::Node arg) { - // if shell: true then first and second args are sinks - // options can be third argument - arg = [this.getArgument(0), this.getParameter(1).getArrayElement().asSink()] and - isExecaShellEnable(this.getParameter(2)) - or - // options can be second argument - arg = this.getArgument(0) and - isExecaShellEnable(this.getParameter(1)) - } - - override DataFlow::Node getArgumentList() { - // execa(cmd, [arg]); - exists(DataFlow::Node arg | arg = this.getArgument(1) | - // if it is a object then it is a option argument not command argument - result = arg and not arg.asExpr() instanceof ObjectExpr - ) - } - - override predicate isSync() { isSync = true } - - override DataFlow::Node getOptionsArg() { - result = this.getLastArgument() and result.asExpr() instanceof ObjectExpr - } - } - - /** - * A call to `execa.$` or `execa.$.sync` or `execa.$({})` or `execa.$.sync({})` tag functions - */ - private class ExecaScriptCall extends API::CallNode { - boolean isSync; - - ExecaScriptCall() { - exists(API::Node script | - script = - [ - API::moduleImport("execa").getMember("$"), - API::moduleImport("execa").getMember("$").getReturn() - ] - | - this = script.getACall() and - isSync = false - or - this = script.getMember("sync").getACall() and - isSync = true - ) - } - } - - /** - * The system command execution nodes for `execa.$` or `execa.$.sync` tag functions - */ - class ExecaScript extends SystemCommandExecution, ExecaScriptCall { - ExecaScript() { isSync = [false, true] } - - override DataFlow::Node getACommandArgument() { - result = this.getParameter(1).asSink() and - not isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) - } - - override predicate isShellInterpreted(DataFlow::Node arg) { - isExecaShellEnable(this.getParameter(0)) and - arg = this.getAParameter().asSink() - } - - override DataFlow::Node getArgumentList() { - result = this.getParameter(any(int i | i >= 1)).asSink() and - isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) - or - result = this.getParameter(any(int i | i >= 2)).asSink() and - not isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) - } - - override DataFlow::Node getOptionsArg() { result = this.getParameter(0).asSink() } - - override predicate isSync() { isSync = true } - } - - /** - * A call to `execa.execaCommandSync` or `execa.execaCommand` - */ - private class ExecaCommandCall extends API::CallNode { - boolean isSync; - - ExecaCommandCall() { - this = API::moduleImport("execa").getMember("execaCommandSync").getACall() and - isSync = true - or - this = API::moduleImport("execa").getMember("execaCommand").getACall() and - isSync = false - } - } - - /** - * The system command execution nodes for `execa.execaCommand` or `execa.execaCommandSync` functions - */ - class ExecaCommandExec extends SystemCommandExecution, ExecaCommandCall { - ExecaCommandExec() { isSync = [false, true] } - - override DataFlow::Node getACommandArgument() { - result = this.(DataFlow::CallNode).getArgument(0) - } - - override DataFlow::Node getArgumentList() { - // execaCommand(`${cmd} ${arg}`); - result.asExpr() = this.getParameter(0).asSink().asExpr().getAChildExpr() and - not result.asExpr() = this.getArgument(0).asExpr().getChildExpr(0) - } - - override predicate isShellInterpreted(DataFlow::Node arg) { - // execaCommandSync(`${cmd} ${arg}`, {shell: true}) - arg.asExpr() = this.getArgument(0).asExpr().getAChildExpr+() and - isExecaShellEnable(this.getParameter(1)) - or - // there is only one argument that is constructed in previous nodes, - // it makes sanitizing really hard to select whether it is vulnerable to argument injection or not - arg = this.getParameter(0).asSink() and - not exists(this.getArgument(0).asExpr().getChildExpr(1)) - } - - override predicate isSync() { isSync = true } - - override DataFlow::Node getOptionsArg() { - result = this.getLastArgument() and result.asExpr() instanceof ObjectExpr - } - } - - /** Gets a TemplateLiteral and check if first child is a template element */ - private predicate isTaggedTemplateFirstChildAnElement(TemplateLiteral templateLit) { - exists(templateLit.getChildExpr(0).(TemplateElement)) - } - - /** - * Holds whether Execa has shell enabled options or not, get Parameter responsible for options - */ - pragma[inline] - private predicate isExecaShellEnable(API::Node n) { - n.getMember("shell").asSink().asExpr().(BooleanLiteral).getValue() = "true" - } - - /** - * A call to `execa.node` - */ - class ExecaNodeCall extends SystemCommandExecution, API::CallNode { - ExecaNodeCall() { this = API::moduleImport("execa").getMember("node").getACall() } - - override DataFlow::Node getACommandArgument() { result = this.getArgument(0) } - - override predicate isShellInterpreted(DataFlow::Node arg) { none() } - - override DataFlow::Node getArgumentList() { - result = this.getArgument(1) and - not result.asExpr() instanceof ObjectExpr - } - - override predicate isSync() { none() } - - override DataFlow::Node getOptionsArg() { - result = this.getLastArgument() and - result.asExpr() instanceof ObjectExpr - } - } - - /** - * A call to `execa.stdout`, `execa.stderr`, or `execa.sync` - */ - class ExecaStreamCall extends SystemCommandExecution, API::CallNode { - string methodName; - - ExecaStreamCall() { - methodName in ["stdout", "stderr", "sync"] and - this = API::moduleImport("execa").getMember(methodName).getACall() - } - - override DataFlow::Node getACommandArgument() { result = this.getArgument(0) } - - override predicate isShellInterpreted(DataFlow::Node arg) { - arg = this.getArgument(0) and - isExecaShellEnable(this.getParameter([1, 2])) - } - - override DataFlow::Node getArgumentList() { - result = this.getArgument(1) and - not result.asExpr() instanceof ObjectExpr - } - - override predicate isSync() { methodName = "sync" } - - override DataFlow::Node getOptionsArg() { - result = this.getLastArgument() and - result.asExpr() instanceof ObjectExpr - } - } - - /** - * A call to `execa.shell` or `execa.shellSync` - */ - class ExecaShellCall extends SystemCommandExecution, API::CallNode { - boolean sync; - - ExecaShellCall() { - this = API::moduleImport("execa").getMember("shell").getACall() and - sync = false - or - this = API::moduleImport("execa").getMember("shellSync").getACall() and - sync = true - } - - override DataFlow::Node getACommandArgument() { result = this.getArgument(0) } - - override predicate isShellInterpreted(DataFlow::Node arg) { arg = this.getACommandArgument() } - - override DataFlow::Node getArgumentList() { none() } - - override predicate isSync() { sync = true } - - override DataFlow::Node getOptionsArg() { - result = this.getArgument(1) and - result.asExpr() instanceof ObjectExpr - } - } -} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll index fcd8da5c8931..d6bcb9ddd400 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Nest.qll @@ -447,61 +447,6 @@ module NestJS { } } - /** - * A NestJS Middleware Class - */ - private class NestMiddlewareClass extends DataFlow::ClassNode { - NestMiddlewareClass() { - exists(ClassDefinition cls | - this = cls.flow() and - cls.getASuperInterface().hasUnderlyingType("@nestjs/common", "NestMiddleware") - ) - } - - DataFlow::FunctionNode getUseFunction() { result = this.getInstanceMethod("use") } - } - - /** - * A NestJS Middleware Class route handler (the `use` method) - */ - private class MiddlewareRouteHandler extends Http::RouteHandler, DataFlow::FunctionNode { - MiddlewareRouteHandler() { this = any(NestMiddlewareClass m).getUseFunction() } - - override Http::HeaderDefinition getAResponseHeader(string name) { none() } - - /** - * Gets the request object used by this route - */ - DataFlow::ParameterNode getRequest() { result = this.getParameter(0) } - - /** - * Gets the response object used by this route - */ - DataFlow::ParameterNode getResponse() { result = this.getParameter(1) } - } - - /** - * A source of `express` request objects for NestJS middlewares - */ - private class MiddlewareRequestSource extends Express::RequestSource { - MiddlewareRouteHandler middlewareRouteHandler; - - MiddlewareRequestSource() { this = middlewareRouteHandler.getRequest() } - - override Http::RouteHandler getRouteHandler() { result = middlewareRouteHandler } - } - - /** - * A source of `express` response objects for NestJS middlewares - */ - private class MiddlewareResponseSource extends Express::ResponseSource { - MiddlewareRouteHandler middlewareRouteHandler; - - MiddlewareResponseSource() { this = middlewareRouteHandler.getResponse() } - - override Http::RouteHandler getRouteHandler() { result = middlewareRouteHandler } - } - /** * A value passed in the `providers` array in: * ```js @@ -510,53 +455,21 @@ module NestJS { * ``` */ private DataFlow::Node providerTuple() { - exists(DataFlow::CallNode moduleCall | - moduleCall = DataFlow::moduleImport("@nestjs/common").getAPropertyRead("Module").getACall() and - result = providerTupleAux(moduleCall.getArgument(0).getALocalSource()) - ) - } - - private DataFlow::Node providerTupleAux(DataFlow::ObjectLiteralNode o) { - ( - result = - o.getAPropertyWrite("providers") - .getRhs() - .getALocalSource() - .(DataFlow::ArrayCreationNode) - .getAnElement() - or - result = - providerTupleAux(o.getAPropertyWrite("imports") - .getRhs() - .getALocalSource() - .(DataFlow::ArrayCreationNode) - .getAnElement() - .(DataFlow::CallNode) - .getCalleeNode() - .getAFunctionValue() - .getFunction() - .getAReturnedExpr() - .flow()) - ) - } - - private DataFlow::Node getConcreteClassFromProviderTuple(DataFlow::SourceNode tuple) { - result = tuple.getAPropertyWrite("useClass").getRhs() - or - exists(DataFlow::FunctionNode f | - f = tuple.getAPropertyWrite("useFactory").getRhs().getAFunctionValue() and - result.getAstNode() = f.getFunction().getAReturnedExpr().getType().(ClassType).getClass() - ) - or - result.getAstNode() = - tuple.getAPropertyWrite("useValue").getRhs().asExpr().getType().(ClassType).getClass() + result = + DataFlow::moduleImport("@nestjs/common") + .getAPropertyRead("Module") + .getACall() + .getOptionArgument(0, "providers") + .getALocalSource() + .(DataFlow::ArrayCreationNode) + .getAnElement() } private predicate providerPair(DataFlow::Node interface, DataFlow::Node concreteClass) { exists(DataFlow::SourceNode tuple | tuple = providerTuple().getALocalSource() and interface = tuple.getAPropertyWrite("provide").getRhs() and - concreteClass = getConcreteClassFromProviderTuple(tuple) + concreteClass = tuple.getAPropertyWrite("useClass").getRhs() ) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/React.qll b/javascript/ql/lib/semmle/javascript/frameworks/React.qll index 3a361e705940..4d126b888290 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/React.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/React.qll @@ -875,22 +875,3 @@ private class ReactPropAsViewComponentInput extends ViewComponentInput { override string getSourceType() { result = "React props" } } - -private predicate isServerFunction(DataFlow::FunctionNode func) { - exists(Directive::UseServerDirective useServer | - useServer.getContainer() = func.getFunction() - or - useServer.getContainer().(Module).getAnExportedValue(_).getAFunctionValue() = func - ) -} - -private class ServerFunctionRemoteFlowSource extends RemoteFlowSource { - ServerFunctionRemoteFlowSource() { - exists(DataFlow::FunctionNode func | - isServerFunction(func) and - this = func.getAParameter() - ) - } - - override string getSourceType() { result = "React server function parameter" } -} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/SystemCommandExecutors.qll b/javascript/ql/lib/semmle/javascript/frameworks/SystemCommandExecutors.qll index 20baafa04755..98ee244f7699 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/SystemCommandExecutors.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/SystemCommandExecutors.qll @@ -16,6 +16,17 @@ private predicate execApi( cmdArg = 0 and shell = false and optionsArg = -1 + or + mod = "execa" and + optionsArg = -1 and + ( + shell = false and + fn = ["node", "stdout", "stderr", "sync"] + or + shell = true and + fn = ["command", "commandSync", "shell", "shellSync"] + ) and + cmdArg = 0 ) } @@ -27,6 +38,8 @@ private predicate execApi(string mod, int cmdArg, int optionsArg, boolean shell) mod = "cross-spawn-async" and cmdArg = 0 and optionsArg = -1 or mod = "exec-async" and cmdArg = 0 and optionsArg = -1 + or + mod = "execa" and cmdArg = 0 and optionsArg = -1 ) or shell = true and diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp new file mode 100644 index 000000000000..df9d97e4e6b7 --- /dev/null +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp @@ -0,0 +1,56 @@ + + + +

    + Using user-controlled input in GitHub Actions may lead to + code injection in contexts like run: or script:. +

    +

    + Code injection in GitHub Actions may allow an attacker to + exfiltrate any secrets used in the workflow and + the temporary GitHub repository authorization token. + The token might have write access to the repository, allowing an attacker + to use the token to make changes to the repository. +

    +
    + + +

    + The best practice to avoid code injection vulnerabilities + in GitHub workflows is to set the untrusted input value of the expression + to an intermediate environment variable and then use the environment variable + using the native syntax of the shell/script interpreter (that is, not ${{ env.VAR }}). +

    +

    + It is also recommended to limit the permissions of any tokens used + by a workflow such as the GITHUB_TOKEN. +

    +
    + + +

    + The following example lets a user inject an arbitrary shell command: +

    + + +

    + The following example uses an environment variable, but + still allows the injection because of the use of expression syntax: +

    + + +

    + The following example uses shell syntax to read + the environment variable and will prevent the attack: +

    + +
    + + +
  • GitHub Security Lab Research: Keeping your GitHub Actions and workflows secure: Untrusted input.
  • +
  • GitHub Docs: Security hardening for GitHub Actions.
  • +
  • GitHub Docs: Permissions for the GITHUB_TOKEN.
  • +
    +
    diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql new file mode 100644 index 000000000000..6c01edb330f0 --- /dev/null +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql @@ -0,0 +1,270 @@ +/** + * @name Expression injection in Actions + * @description Using user-controlled GitHub Actions contexts like `run:` or `script:` may allow a malicious + * user to inject code into the GitHub action. + * @kind problem + * @problem.severity warning + * @security-severity 9.3 + * @precision high + * @id js/actions/command-injection + * @tags actions + * security + * external/cwe/cwe-094 + */ + +import javascript +import semmle.javascript.Actions + +/** + * A `script:` field within an Actions `with:` specific to `actions/github-script` action. + * + * For example: + * ``` + * uses: actions/github-script@v3 + * with: + * script: console.log('${{ github.event.pull_request.head.sha }}') + * ``` + */ +class GitHubScript extends YamlNode, YamlString { + GitHubScriptWith with; + + GitHubScript() { with.lookup("script") = this } + + /** Gets the `with` field this field belongs to. */ + GitHubScriptWith getWith() { result = with } +} + +/** + * A step that uses `actions/github-script` action. + */ +class GitHubScriptStep extends Actions::Step { + GitHubScriptStep() { this.getUses().getGitHubRepository() = "actions/github-script" } +} + +/** + * A `with:` field sibling to `uses: actions/github-script`. + */ +class GitHubScriptWith extends YamlNode, YamlMapping { + GitHubScriptStep step; + + GitHubScriptWith() { step.lookup("with") = this } + + /** Gets the step this field belongs to. */ + GitHubScriptStep getStep() { result = step } +} + +bindingset[context] +private predicate isExternalUserControlledIssue(string context) { + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*issue\\s*\\.\\s*title\\b") or + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*issue\\s*\\.\\s*body\\b") +} + +bindingset[context] +private predicate isExternalUserControlledPullRequest(string context) { + exists(string reg | + reg = + [ + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*title\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*body\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*label\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*repo\\s*\\.\\s*default_branch\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*repo\\s*\\.\\s*description\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*repo\\s*\\.\\s*homepage\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*ref\\b", + "\\bgithub\\s*\\.\\s*head_ref\\b" + ] + | + context.regexpMatch(reg) + ) +} + +bindingset[context] +private predicate isExternalUserControlledReview(string context) { + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*review\\s*\\.\\s*body\\b") +} + +bindingset[context] +private predicate isExternalUserControlledComment(string context) { + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*comment\\s*\\.\\s*body\\b") +} + +bindingset[context] +private predicate isExternalUserControlledGollum(string context) { + context + .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pages\\[[0-9]+\\]\\s*\\.\\s*page_name\\b") or + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pages\\[[0-9]+\\]\\s*\\.\\s*title\\b") +} + +bindingset[context] +private predicate isExternalUserControlledCommit(string context) { + exists(string reg | + reg = + [ + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits\\[[0-9]+\\]\\s*\\.\\s*message\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*message\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*committer\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*committer\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits\\[[0-9]+\\]\\s*\\.\\s*author\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits\\[[0-9]+\\]\\s*\\.\\s*author\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits\\[[0-9]+\\]\\s*\\.\\s*committer\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits\\[[0-9]+\\]\\s*\\.\\s*committer\\s*\\.\\s*name\\b", + ] + | + context.regexpMatch(reg) + ) +} + +bindingset[context] +private predicate isExternalUserControlledDiscussion(string context) { + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*discussion\\s*\\.\\s*title\\b") or + context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*discussion\\s*\\.\\s*body\\b") +} + +bindingset[context] +private predicate isExternalUserControlledWorkflowRun(string context) { + exists(string reg | + reg = + [ + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_branch\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*display_title\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_repository\\b\\s*\\.\\s*description\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_commit\\b\\s*\\.\\s*message\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_commit\\b\\s*\\.\\s*author\\b\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_commit\\b\\s*\\.\\s*author\\b\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_commit\\b\\s*\\.\\s*committer\\b\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*workflow_run\\s*\\.\\s*head_commit\\b\\s*\\.\\s*committer\\b\\s*\\.\\s*name\\b", + ] + | + context.regexpMatch(reg) + ) +} + +/** + * Holds if environment name in the `injection` (in a form of `env.name`) + * is tainted by the `context` (in a form of `github.event.xxx.xxx`). + */ +bindingset[injection] +predicate isEnvInterpolationTainted(string injection, string context) { + exists(Actions::Env env, string envName, YamlString envValue | + envValue = env.lookup(envName) and + Actions::getEnvName(injection) = envName and + Actions::getASimpleReferenceExpression(envValue) = context + ) +} + +/** + * Holds if the `run` contains any expression interpolation `${{ e }}`. + * Sets `context` to the initial untrusted value assignment in case of `${{ env... }}` interpolation + */ +predicate isRunInjectable(Actions::Run run, string injection, string context) { + Actions::getASimpleReferenceExpression(run) = injection and + ( + injection = context + or + isEnvInterpolationTainted(injection, context) + ) +} + +/** + * Holds if the `actions/github-script` contains any expression interpolation `${{ e }}`. + * Sets `context` to the initial untrusted value assignment in case of `${{ env... }}` interpolation + */ +predicate isScriptInjectable(GitHubScript script, string injection, string context) { + Actions::getASimpleReferenceExpression(script) = injection and + ( + injection = context + or + isEnvInterpolationTainted(injection, context) + ) +} + +/** + * Holds if the composite action contains untrusted expression interpolation `${{ e }}`. + */ +YamlNode getInjectableCompositeActionNode(Actions::Runs runs, string injection, string context) { + exists(Actions::Run run | + isRunInjectable(run, injection, context) and + result = run and + run.getStep().getRuns() = runs + ) + or + exists(GitHubScript script | + isScriptInjectable(script, injection, context) and + result = script and + script.getWith().getStep().getRuns() = runs + ) +} + +/** + * Holds if the workflow contains untrusted expression interpolation `${{ e }}`. + */ +YamlNode getInjectableWorkflowNode(Actions::On on, string injection, string context) { + exists(Actions::Run run | + isRunInjectable(run, injection, context) and + result = run and + run.getStep().getJob().getWorkflow().getOn() = on + ) + or + exists(GitHubScript script | + isScriptInjectable(script, injection, context) and + result = script and + script.getWith().getStep().getJob().getWorkflow().getOn() = on + ) +} + +from YamlNode node, string injection, string context +where + exists(Actions::CompositeAction action, Actions::Runs runs | + action.getRuns() = runs and + node = getInjectableCompositeActionNode(runs, injection, context) and + ( + isExternalUserControlledIssue(context) or + isExternalUserControlledPullRequest(context) or + isExternalUserControlledReview(context) or + isExternalUserControlledComment(context) or + isExternalUserControlledGollum(context) or + isExternalUserControlledCommit(context) or + isExternalUserControlledDiscussion(context) or + isExternalUserControlledWorkflowRun(context) + ) + ) + or + exists(Actions::On on | + node = getInjectableWorkflowNode(on, injection, context) and + ( + exists(on.getNode("issues")) and + isExternalUserControlledIssue(context) + or + exists(on.getNode("pull_request_target")) and + isExternalUserControlledPullRequest(context) + or + exists(on.getNode("pull_request_review")) and + (isExternalUserControlledReview(context) or isExternalUserControlledPullRequest(context)) + or + exists(on.getNode("pull_request_review_comment")) and + (isExternalUserControlledComment(context) or isExternalUserControlledPullRequest(context)) + or + exists(on.getNode("issue_comment")) and + (isExternalUserControlledComment(context) or isExternalUserControlledIssue(context)) + or + exists(on.getNode("gollum")) and + isExternalUserControlledGollum(context) + or + exists(on.getNode("push")) and + isExternalUserControlledCommit(context) + or + exists(on.getNode("discussion")) and + isExternalUserControlledDiscussion(context) + or + exists(on.getNode("discussion_comment")) and + (isExternalUserControlledDiscussion(context) or isExternalUserControlledComment(context)) + or + exists(on.getNode("workflow_run")) and + isExternalUserControlledWorkflowRun(context) + ) + ) +select node, + "Potential injection from the ${{ " + injection + + " }}, which may be controlled by an external user." diff --git a/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad.yml b/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad.yml new file mode 100644 index 000000000000..1a25d44693b2 --- /dev/null +++ b/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad.yml @@ -0,0 +1,8 @@ +on: issue_comment + +jobs: + echo-body: + runs-on: ubuntu-latest + steps: + - run: | + echo '${{ github.event.comment.body }}' \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad_env.yml b/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad_env.yml new file mode 100644 index 000000000000..b7698938de75 --- /dev/null +++ b/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad_env.yml @@ -0,0 +1,10 @@ +on: issue_comment + +jobs: + echo-body: + runs-on: ubuntu-latest + steps: + - env: + BODY: ${{ github.event.issue.body }} + run: | + echo '${{ env.BODY }}' \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-094/examples/comment_issue_good.yml b/javascript/ql/src/Security/CWE-094/examples/comment_issue_good.yml new file mode 100644 index 000000000000..07254a8b2043 --- /dev/null +++ b/javascript/ql/src/Security/CWE-094/examples/comment_issue_good.yml @@ -0,0 +1,10 @@ +on: issue_comment + +jobs: + echo-body: + runs-on: ubuntu-latest + steps: + - env: + BODY: ${{ github.event.issue.body }} + run: | + echo "$BODY" diff --git a/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.qhelp b/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.qhelp new file mode 100644 index 000000000000..7ec9c1fe7770 --- /dev/null +++ b/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.qhelp @@ -0,0 +1,30 @@ + + + +

    + Sensitive information included in a GitHub Actions artifact can allow an attacker to access + the sensitive information if the artifact is published. +

    +
    + + +

    + Only store information that is meant to be publicly available in a GitHub Actions artifact. +

    +
    + + +

    + The following example uses actions/checkout to checkout code which stores the GITHUB_TOKEN in the `.git/config` file + and then stores the contents of the `.git` repository into the artifact: +

    + +

    + The issue has been fixed below, where the actions/upload-artifact uses a version (v4+) which does not include hidden files or + directories into the artifact. +

    + +
    +
    diff --git a/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql b/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql new file mode 100644 index 000000000000..3f001c5e4560 --- /dev/null +++ b/javascript/ql/src/Security/CWE-312/ActionsArtifactLeak.ql @@ -0,0 +1,112 @@ +/** + * @name Storage of sensitive information in GitHub Actions artifact + * @description Including sensitive information in a GitHub Actions artifact can + * expose it to an attacker. + * @kind problem + * @problem.severity error + * @security-severity 7.5 + * @precision high + * @id js/actions/actions-artifact-leak + * @tags actions + * security + * external/cwe/cwe-312 + * external/cwe/cwe-315 + * external/cwe/cwe-359 + */ + +import javascript +import semmle.javascript.Actions + +/** + * A step that uses `actions/checkout` action. + */ +class ActionsCheckoutStep extends Actions::Step { + ActionsCheckoutStep() { this.getUses().getGitHubRepository() = "actions/checkout" } +} + +/** + * A `with:`/`persist-credentials` field sibling to `uses: actions/checkout`. + */ +class ActionsCheckoutWithPersistCredentials extends YamlNode, YamlScalar { + ActionsCheckoutStep step; + + ActionsCheckoutWithPersistCredentials() { + step.lookup("with").(YamlMapping).lookup("persist-credentials") = this + } + + /** Gets the step this field belongs to. */ + ActionsCheckoutStep getStep() { result = step } +} + +/** + * A `with:`/`path` field sibling to `uses: actions/checkout`. + */ +class ActionsCheckoutWithPath extends YamlNode, YamlString { + ActionsCheckoutStep step; + + ActionsCheckoutWithPath() { step.lookup("with").(YamlMapping).lookup("path") = this } + + /** Gets the step this field belongs to. */ + ActionsCheckoutStep getStep() { result = step } +} + +/** + * A step that uses `actions/upload-artifact` action. + */ +class ActionsUploadArtifactStep extends Actions::Step { + ActionsUploadArtifactStep() { this.getUses().getGitHubRepository() = "actions/upload-artifact" } +} + +/** + * A `with:`/`path` field sibling to `uses: actions/upload-artifact`. + */ +class ActionsUploadArtifactWithPath extends YamlNode, YamlString { + ActionsUploadArtifactStep step; + + ActionsUploadArtifactWithPath() { step.lookup("with").(YamlMapping).lookup("path") = this } + + /** Gets the step this field belongs to. */ + ActionsUploadArtifactStep getStep() { result = step } +} + +from ActionsCheckoutStep checkout, ActionsUploadArtifactStep upload, Actions::Job job, int i, int j +where + checkout.getJob() = job and + upload.getJob() = job and + job.getStep(i) = checkout and + job.getStep(j) = upload and + j = i + 1 and + upload.getUses().getVersion() = + [ + "v4.3.6", "834a144ee995460fba8ed112a2fc961b36a5ec5a", // + "v4.3.5", "89ef406dd8d7e03cfd12d9e0a4a378f454709029", // + "v4.3.4", "0b2256b8c012f0828dc542b3febcab082c67f72b", // + "v4.3.3", "65462800fd760344b1a7b4382951275a0abb4808", // + "v4.3.2", "1746f4ab65b179e0ea60a494b83293b640dd5bba", // + "v4.3.1", "5d5d22a31266ced268874388b861e4b58bb5c2f3", // + "v4.3.0", "26f96dfa697d77e81fd5907df203aa23a56210a8", // + "v4.2.0", "694cdabd8bdb0f10b2cea11669e1bf5453eed0a6", // + "v4.1.0", "1eb3cb2b3e0f29609092a73eb033bb759a334595", // + "v4.0.0", "c7d193f32edcb7bfad88892161225aeda64e9392", // + ] and + ( + not exists(ActionsCheckoutWithPersistCredentials persist | persist.getStep() = checkout) + or + exists(ActionsCheckoutWithPersistCredentials persist | + persist.getStep() = checkout and + persist.getValue() = "true" + ) + ) and + ( + not exists(ActionsCheckoutWithPath path | path.getStep() = checkout) and + exists(ActionsUploadArtifactWithPath path | + path.getStep() = upload and path.getValue() = [".", "*"] + ) + or + exists(ActionsCheckoutWithPath checkout_path, ActionsUploadArtifactWithPath upload_path | + checkout_path.getValue() + ["", "/*"] = upload_path.getValue() and + checkout_path.getStep() = checkout and + upload_path.getStep() = upload + ) + ) +select upload, "A secret may be exposed in an artifact." diff --git a/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak-fixed.yml b/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak-fixed.yml new file mode 100644 index 000000000000..9f716584a9bd --- /dev/null +++ b/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak-fixed.yml @@ -0,0 +1,14 @@ +name: secrets-in-artifacts +on: + pull_request: +jobs: + a-job: # NOT VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Upload artifact" + uses: actions/upload-artifact@v4 + with: + name: file + path: . + diff --git a/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak.yml b/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak.yml new file mode 100644 index 000000000000..9006855e997e --- /dev/null +++ b/javascript/ql/src/Security/CWE-312/examples/actions-artifact-leak.yml @@ -0,0 +1,13 @@ +name: secrets-in-artifacts +on: + pull_request: +jobs: + a-job: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: . diff --git a/javascript/ql/src/change-notes/2025-06-23-react-use-server.md b/javascript/ql/src/change-notes/2025-06-23-react-use-server.md deleted file mode 100644 index b3d3088b640e..000000000000 --- a/javascript/ql/src/change-notes/2025-06-23-react-use-server.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: majorAnalysis ---- -* Taint is now tracked through the React `use` function. -* Parameters of React server functions, marked with the `"use server"` directive, are now seen as taint sources. diff --git a/javascript/ql/src/change-notes/2025-06-23-remove-legacy-actions-queries.md b/javascript/ql/src/change-notes/2025-06-23-remove-legacy-actions-queries.md deleted file mode 100644 index 628ad8b083b4..000000000000 --- a/javascript/ql/src/change-notes/2025-06-23-remove-legacy-actions-queries.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: minorAnalysis ---- -* Removed three queries from the JS qlpack, which have been superseded by newer queries that are part of the Actions qlpack: - * `js/actions/pull-request-target` has been superseded by `actions/untrusted-checkout/{medium,high,critical}` - * `js/actions/actions-artifact-leak` has been superseded by `actions/secrets-in-artifacts` - * `js/actions/command-injection` has been superseded by `actions/command-injection/{medium,critical}` diff --git a/javascript/ql/src/codeql-suites/javascript-security-and-quality.qls b/javascript/ql/src/codeql-suites/javascript-security-and-quality.qls index 10097f6eaad0..38d45ecfbe66 100644 --- a/javascript/ql/src/codeql-suites/javascript-security-and-quality.qls +++ b/javascript/ql/src/codeql-suites/javascript-security-and-quality.qls @@ -1,7 +1,24 @@ - description: Security-and-quality queries for JavaScript - queries: . -- apply: security-and-frozen-quality-selectors.yml - from: codeql/suite-helpers +- include: + kind: + - problem + - path-problem + precision: + - high + - very-high + tags contain: + - security +- include: + kind: + - problem + - path-problem + precision: medium + problem.severity: + - error + - warning + tags contain: + - security - include: id: - js/node/assignment-to-exports-variable @@ -106,3 +123,16 @@ - js/diagnostics/successfully-extracted-files - js/summary/lines-of-code - js/summary/lines-of-user-code +- include: + kind: + - diagnostic +- include: + kind: + - metric + tags contain: + - summary +- exclude: + deprecated: // +- exclude: + query path: + - /^experimental\/.*/ diff --git a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.qhelp b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.qhelp new file mode 100644 index 000000000000..4833b50d8e2f --- /dev/null +++ b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.qhelp @@ -0,0 +1,64 @@ + + + + + +

    + + Combining pull_request_target workflow trigger with an explicit checkout + of an untrusted pull request is a dangerous practice + that may lead to repository compromise. + +

    + +
    + + + +

    + + The best practice is to handle the potentially untrusted pull request + via the pull_request trigger so that it is isolated in + an unprivileged environment. The workflow processing the pull request + should then store any results like code coverage or failed/passed tests + in artifacts and exit. The following workflow then starts on workflow_run + where it is granted write permission to the target repository and access to + repository secrets, so that it can download the artifacts and make + any necessary modifications to the repository or interact with third party services + that require repository secrets (e.g. API tokens). + +

    + +
    + + + +

    + + The following example allows unauthorized repository modification + and secrets exfiltration: + +

    + + + +

    + + The following example uses two workflows to handle potentially untrusted + pull request in a secure manner. The receive_pr.yml is triggered first: + +

    + + +

    The comment_pr.yml is triggered after receive_pr.yml completes:

    + + +
    + + +
  • GitHub Security Lab Research: Keeping your GitHub Actions and workflows secure: Preventing pwn requests.
  • +
    + +
    diff --git a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql new file mode 100644 index 000000000000..3f08f297c6a7 --- /dev/null +++ b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql @@ -0,0 +1,81 @@ +/** + * @name Checkout of untrusted code in trusted context + * @description Workflows triggered on `pull_request_target` have read/write access to the base repository and access to secrets. + * By explicitly checking out and running the build script from a fork the untrusted code is running in an environment + * that is able to push to the base repository and to access secrets. + * @kind problem + * @problem.severity warning + * @precision low + * @id js/actions/pull-request-target + * @tags actions + * security + * experimental + * external/cwe/cwe-094 + */ + +import javascript +import semmle.javascript.Actions + +/** + * An action step that doesn't contain `actor` check in `if:` or + * the check requires manual analysis. + */ +class ProbableStep extends Actions::Step { + // some simplistic checks to eleminate likely false positives: + ProbableStep() { + // no if at all + not exists(this.getIf().getValue()) + or + // needs manual analysis if there is OR + this.getIf().getValue().matches("%||%") + or + // actor check means only the user is able to run it + not exists(this.getIf().getValue().regexpFind("\\bgithub\\s*\\.\\s*actor\\s*==", _, _)) + } +} + +/** + * An action job that doesn't contain `actor` check in `if:` or + * the check requires manual analysis. + */ +class ProbableJob extends Actions::Job { + // some simplistic checks to eleminate likely false positives: + ProbableJob() { + // no if at all + not exists(this.getIf().getValue()) + or + // needs manual analysis if there is OR + this.getIf().getValue().matches("%||%") + or + // actor check means only the user is able to run it + not exists(this.getIf().getValue().regexpFind("\\bgithub\\s*\\.\\s*actor\\s*==", _, _)) + } +} + +/** + * The `on: pull_request_target`. + */ +class ProbablePullRequestTarget extends Actions::On, YamlMappingLikeNode { + ProbablePullRequestTarget() { + // The `on:` is triggered on `pull_request_target` + exists(this.getNode("pull_request_target")) + } +} + +from + Actions::Ref ref, Actions::Uses uses, Actions::Step step, Actions::Job job, + ProbablePullRequestTarget pullRequestTarget +where + pullRequestTarget.getWorkflow() = job.getWorkflow() and + uses.getStep() = step and + ref.getWith().getStep() = step and + step.getJob() = job and + uses.getGitHubRepository() = "actions/checkout" and + ref.getValue() + .matches([ + "%github.event.pull_request.head.ref%", "%github.event.pull_request.head.sha%", + "%github.event.pull_request.number%", "%github.event.number%", "%github.head_ref%" + ]) and + step instanceof ProbableStep and + job instanceof ProbableJob +select step, "Potential unsafe checkout of untrusted pull request on 'pull_request_target'." diff --git a/javascript/ql/src/experimental/Security/CWE-094/examples/comment_pr.yml b/javascript/ql/src/experimental/Security/CWE-094/examples/comment_pr.yml new file mode 100644 index 000000000000..e496b1449a06 --- /dev/null +++ b/javascript/ql/src/experimental/Security/CWE-094/examples/comment_pr.yml @@ -0,0 +1,52 @@ +name: Comment on the pull request + +# read-write repo token +# access to secrets +on: + workflow_run: + workflows: ["Receive PR"] + types: + - completed + +jobs: + upload: + runs-on: ubuntu-latest + if: > + ${{ github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' }} + steps: + - name: 'Download artifact' + uses: actions/github-script@v3.1.0 + with: + script: | + var artifacts = await github.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: ${{github.event.workflow_run.id }}, + }); + var matchArtifact = artifacts.data.artifacts.filter((artifact) => { + return artifact.name == "pr" + })[0]; + var download = await github.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + var fs = require('fs'); + fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data)); + - run: unzip pr.zip + + - name: 'Comment on PR' + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var fs = require('fs'); + var issue_number = Number(fs.readFileSync('./NR')); + await github.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issue_number, + body: 'Everything is OK. Thank you for the PR!' + }); \ No newline at end of file diff --git a/javascript/ql/src/experimental/Security/CWE-094/examples/pull_request_target_bad.yml b/javascript/ql/src/experimental/Security/CWE-094/examples/pull_request_target_bad.yml new file mode 100644 index 000000000000..fb9f0699a426 --- /dev/null +++ b/javascript/ql/src/experimental/Security/CWE-094/examples/pull_request_target_bad.yml @@ -0,0 +1,25 @@ +on: + pull_request_target + +jobs: + build: + name: Build and test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - uses: actions/setup-node@v1 + - run: | + npm install + npm build + + - uses: completely/fakeaction@v2 + with: + arg1: ${{ secrets.supersecret }} + + - uses: fakerepo/comment-on-pr@v1 + with: + message: | + Thank you! \ No newline at end of file diff --git a/javascript/ql/src/experimental/Security/CWE-094/examples/receive_pr.yml b/javascript/ql/src/experimental/Security/CWE-094/examples/receive_pr.yml new file mode 100644 index 000000000000..7104bce8bf36 --- /dev/null +++ b/javascript/ql/src/experimental/Security/CWE-094/examples/receive_pr.yml @@ -0,0 +1,26 @@ +name: Receive PR + +# read-only repo token +# no access to secrets +on: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + # imitation of a build process + - name: Build + run: /bin/bash ./build.sh + + - name: Save PR number + run: | + mkdir -p ./pr + echo ${{ github.event.number }} > ./pr/NR + - uses: actions/upload-artifact@v2 + with: + name: pr + path: pr/ \ No newline at end of file diff --git a/javascript/ql/src/experimental/semmle/javascript/Execa.qll b/javascript/ql/src/experimental/semmle/javascript/Execa.qll new file mode 100644 index 000000000000..624b21c5dac6 --- /dev/null +++ b/javascript/ql/src/experimental/semmle/javascript/Execa.qll @@ -0,0 +1,211 @@ +/** + * Models the `execa` library in terms of `FileSystemAccess` and `SystemCommandExecution`. + */ + +import javascript + +/** + * Provide model for [Execa](https://github.com/sindresorhus/execa) package + */ +module Execa { + /** + * The Execa input file read and output file write + */ + class ExecaFileSystemAccess extends FileSystemReadAccess, DataFlow::Node { + API::Node execaArg; + boolean isPipedToFile; + + ExecaFileSystemAccess() { + ( + execaArg = API::moduleImport("execa").getMember("$").getParameter(0) and + isPipedToFile = false + or + execaArg = + API::moduleImport("execa") + .getMember(["execa", "execaCommand", "execaCommandSync", "execaSync"]) + .getParameter([0, 1, 2]) and + isPipedToFile = false + or + execaArg = + API::moduleImport("execa") + .getMember(["execa", "execaCommand", "execaCommandSync", "execaSync"]) + .getReturn() + .getMember(["pipeStdout", "pipeAll", "pipeStderr"]) + .getParameter(0) and + isPipedToFile = true + ) and + this = execaArg.asSink() + } + + override DataFlow::Node getADataNode() { none() } + + override DataFlow::Node getAPathArgument() { + result = execaArg.getMember("inputFile").asSink() and isPipedToFile = false + or + result = execaArg.asSink() and isPipedToFile = true + } + } + + /** + * A call to `execa.execa` or `execa.execaSync` + */ + class ExecaCall extends API::CallNode { + boolean isSync; + + ExecaCall() { + this = API::moduleImport("execa").getMember("execa").getACall() and + isSync = false + or + this = API::moduleImport("execa").getMember("execaSync").getACall() and + isSync = true + } + } + + /** + * The system command execution nodes for `execa.execa` or `execa.execaSync` functions + */ + class ExecaExec extends SystemCommandExecution, ExecaCall { + ExecaExec() { isSync = [false, true] } + + override DataFlow::Node getACommandArgument() { result = this.getArgument(0) } + + override predicate isShellInterpreted(DataFlow::Node arg) { + // if shell: true then first and second args are sinks + // options can be third argument + arg = [this.getArgument(0), this.getParameter(1).getArrayElement().asSink()] and + isExecaShellEnable(this.getParameter(2)) + or + // options can be second argument + arg = this.getArgument(0) and + isExecaShellEnable(this.getParameter(1)) + } + + override DataFlow::Node getArgumentList() { + // execa(cmd, [arg]); + exists(DataFlow::Node arg | arg = this.getArgument(1) | + // if it is a object then it is a option argument not command argument + result = arg and not arg.asExpr() instanceof ObjectExpr + ) + } + + override predicate isSync() { isSync = true } + + override DataFlow::Node getOptionsArg() { + result = this.getLastArgument() and result.asExpr() instanceof ObjectExpr + } + } + + /** + * A call to `execa.$` or `execa.$.sync` or `execa.$({})` or `execa.$.sync({})` tag functions + */ + private class ExecaScriptCall extends API::CallNode { + boolean isSync; + + ExecaScriptCall() { + exists(API::Node script | + script = + [ + API::moduleImport("execa").getMember("$"), + API::moduleImport("execa").getMember("$").getReturn() + ] + | + this = script.getACall() and + isSync = false + or + this = script.getMember("sync").getACall() and + isSync = true + ) + } + } + + /** + * The system command execution nodes for `execa.$` or `execa.$.sync` tag functions + */ + class ExecaScript extends SystemCommandExecution, ExecaScriptCall { + ExecaScript() { isSync = [false, true] } + + override DataFlow::Node getACommandArgument() { + result = this.getParameter(1).asSink() and + not isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) + } + + override predicate isShellInterpreted(DataFlow::Node arg) { + isExecaShellEnable(this.getParameter(0)) and + arg = this.getAParameter().asSink() + } + + override DataFlow::Node getArgumentList() { + result = this.getParameter(any(int i | i >= 1)).asSink() and + isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) + or + result = this.getParameter(any(int i | i >= 2)).asSink() and + not isTaggedTemplateFirstChildAnElement(this.getParameter(1).asSink().asExpr().getParent()) + } + + override DataFlow::Node getOptionsArg() { result = this.getParameter(0).asSink() } + + override predicate isSync() { isSync = true } + } + + /** + * A call to `execa.execaCommandSync` or `execa.execaCommand` + */ + private class ExecaCommandCall extends API::CallNode { + boolean isSync; + + ExecaCommandCall() { + this = API::moduleImport("execa").getMember("execaCommandSync").getACall() and + isSync = true + or + this = API::moduleImport("execa").getMember("execaCommand").getACall() and + isSync = false + } + } + + /** + * The system command execution nodes for `execa.execaCommand` or `execa.execaCommandSync` functions + */ + class ExecaCommandExec extends SystemCommandExecution, ExecaCommandCall { + ExecaCommandExec() { isSync = [false, true] } + + override DataFlow::Node getACommandArgument() { + result = this.(DataFlow::CallNode).getArgument(0) + } + + override DataFlow::Node getArgumentList() { + // execaCommand(`${cmd} ${arg}`); + result.asExpr() = this.getParameter(0).asSink().asExpr().getAChildExpr() and + not result.asExpr() = this.getArgument(0).asExpr().getChildExpr(0) + } + + override predicate isShellInterpreted(DataFlow::Node arg) { + // execaCommandSync(`${cmd} ${arg}`, {shell: true}) + arg.asExpr() = this.getArgument(0).asExpr().getAChildExpr+() and + isExecaShellEnable(this.getParameter(1)) + or + // there is only one argument that is constructed in previous nodes, + // it makes sanitizing really hard to select whether it is vulnerable to argument injection or not + arg = this.getParameter(0).asSink() and + not exists(this.getArgument(0).asExpr().getChildExpr(1)) + } + + override predicate isSync() { isSync = true } + + override DataFlow::Node getOptionsArg() { + result = this.getLastArgument() and result.asExpr() instanceof ObjectExpr + } + } + + /** Gets a TemplateLiteral and check if first child is a template element */ + private predicate isTaggedTemplateFirstChildAnElement(TemplateLiteral templateLit) { + exists(templateLit.getChildExpr(0).(TemplateElement)) + } + + /** + * Holds whether Execa has shell enabled options or not, get Parameter responsible for options + */ + pragma[inline] + private predicate isExecaShellEnable(API::Node n) { + n.getMember("shell").asSink().asExpr().(BooleanLiteral).getValue() = "true" + } +} diff --git a/javascript/ql/src/experimental/semmle/javascript/SQL.qll b/javascript/ql/src/experimental/semmle/javascript/SQL.qll index f91172ccc14d..3581106e2f85 100644 --- a/javascript/ql/src/experimental/semmle/javascript/SQL.qll +++ b/javascript/ql/src/experimental/semmle/javascript/SQL.qll @@ -146,42 +146,11 @@ module ExperimentalSql { override DataFlow::Node getAQueryArgument() { result = this.getArgument(0) } } - /** - * A call to a TypeORM `Repository` (https://orkhan.gitbook.io/typeorm/docs/repository-api) - */ - private class RepositoryCall extends DatabaseAccess { - API::Node repository; - - RepositoryCall() { - ( - repository = API::moduleImport("typeorm").getMember("Repository").getInstance() or - repository = dataSource().getMember("getRepository").getReturn() - ) and - this = repository.getMember(_).asSource() - } - - override DataFlow::Node getAResult() { - result = - repository - .getMember([ - "find", "findBy", "findOne", "findOneBy", "findOneOrFail", "findOneByOrFail", - "findAndCount", "findAndCountBy" - ]) - .getReturn() - .asSource() - } - - override DataFlow::Node getAQueryArgument() { - result = repository.getMember("query").getParameter(0).asSink() - } - } - /** An expression that is passed to the `query` function and hence interpreted as SQL. */ class QueryString extends SQL::SqlString { QueryString() { this = any(QueryRunner qr).getAQueryArgument() or - this = any(QueryBuilderCall qb).getAQueryArgument() or - this = any(RepositoryCall rc).getAQueryArgument() + this = any(QueryBuilderCall qb).getAQueryArgument() } } } diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 59f83e85aeff..546308a70c7e 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.7.1-dev +version: 1.7.0 groups: - javascript - queries diff --git a/javascript/ql/test/experimental/Execa/CommandInjection/tests.expected b/javascript/ql/test/experimental/Execa/CommandInjection/tests.expected new file mode 100644 index 000000000000..931d1de923f3 --- /dev/null +++ b/javascript/ql/test/experimental/Execa/CommandInjection/tests.expected @@ -0,0 +1,22 @@ +passingPositiveTests +| PASSED | CommandInjection | tests.js:11:46:11:70 | // test ... jection | +| PASSED | CommandInjection | tests.js:12:43:12:67 | // test ... jection | +| PASSED | CommandInjection | tests.js:13:63:13:87 | // test ... jection | +| PASSED | CommandInjection | tests.js:14:62:14:86 | // test ... jection | +| PASSED | CommandInjection | tests.js:15:60:15:84 | // test ... jection | +| PASSED | CommandInjection | tests.js:17:45:17:69 | // test ... jection | +| PASSED | CommandInjection | tests.js:18:42:18:66 | // test ... jection | +| PASSED | CommandInjection | tests.js:19:62:19:86 | // test ... jection | +| PASSED | CommandInjection | tests.js:20:63:20:87 | // test ... jection | +| PASSED | CommandInjection | tests.js:21:60:21:84 | // test ... jection | +| PASSED | CommandInjection | tests.js:23:43:23:67 | // test ... jection | +| PASSED | CommandInjection | tests.js:24:40:24:64 | // test ... jection | +| PASSED | CommandInjection | tests.js:25:40:25:64 | // test ... jection | +| PASSED | CommandInjection | tests.js:26:60:26:84 | // test ... jection | +| PASSED | CommandInjection | tests.js:28:41:28:65 | // test ... jection | +| PASSED | CommandInjection | tests.js:29:58:29:82 | // test ... jection | +| PASSED | CommandInjection | tests.js:31:51:31:75 | // test ... jection | +| PASSED | CommandInjection | tests.js:32:68:32:92 | // test ... jection | +| PASSED | CommandInjection | tests.js:34:49:34:73 | // test ... jection | +| PASSED | CommandInjection | tests.js:35:66:35:90 | // test ... jection | +failingPositiveTests diff --git a/javascript/ql/test/experimental/Execa/CommandInjection/tests.js b/javascript/ql/test/experimental/Execa/CommandInjection/tests.js new file mode 100644 index 000000000000..eb35be96b616 --- /dev/null +++ b/javascript/ql/test/experimental/Execa/CommandInjection/tests.js @@ -0,0 +1,36 @@ +import { execa, execaSync, execaCommand, execaCommandSync, $ } from 'execa'; +import http from 'node:http' +import url from 'url' + +http.createServer(async function (req, res) { + let cmd = url.parse(req.url, true).query["cmd"][0]; + let arg1 = url.parse(req.url, true).query["arg1"]; + let arg2 = url.parse(req.url, true).query["arg2"]; + let arg3 = url.parse(req.url, true).query["arg3"]; + + await $`${cmd} ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + await $`ssh ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + $({ shell: false }).sync`${cmd} ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + $({ shell: true }).sync`${cmd} ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + $({ shell: false }).sync`ssh ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + + $.sync`${cmd} ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + $.sync`ssh ${arg1} ${arg2} ${arg3}`; // test: CommandInjection + await $({ shell: true })`${cmd} ${arg1} ${arg2} ${arg3}` // test: CommandInjection + await $({ shell: false })`${cmd} ${arg1} ${arg2} ${arg3}` // test: CommandInjection + await $({ shell: false })`ssh ${arg1} ${arg2} ${arg3}` // test: CommandInjection + + await execa(cmd, [arg1, arg2, arg3]); // test: CommandInjection + await execa(cmd, { shell: true }); // test: CommandInjection + await execa(cmd, { shell: true }); // test: CommandInjection + await execa(cmd, [arg1, arg2, arg3], { shell: true }); // test: CommandInjection + + execaSync(cmd, [arg1, arg2, arg3]); // test: CommandInjection + execaSync(cmd, [arg1, arg2, arg3], { shell: true }); // test: CommandInjection + + await execaCommand(cmd + arg1 + arg2 + arg3); // test: CommandInjection + await execaCommand(cmd + arg1 + arg2 + arg3, { shell: true }); // test: CommandInjection + + execaCommandSync(cmd + arg1 + arg2 + arg3); // test: CommandInjection + execaCommandSync(cmd + arg1 + arg2 + arg3, { shell: true }); // test: CommandInjection +}); \ No newline at end of file diff --git a/javascript/ql/test/experimental/Execa/CommandInjection/tests.ql b/javascript/ql/test/experimental/Execa/CommandInjection/tests.ql new file mode 100644 index 000000000000..a8ab812f821d --- /dev/null +++ b/javascript/ql/test/experimental/Execa/CommandInjection/tests.ql @@ -0,0 +1,38 @@ +import javascript + +class InlineTest extends LineComment { + string tests; + + InlineTest() { tests = this.getText().regexpCapture("\\s*test:(.*)", 1) } + + string getPositiveTest() { + result = tests.trim().splitAt(",").trim() and not result.matches("!%") + } + + predicate hasPositiveTest(string test) { test = this.getPositiveTest() } + + predicate inNode(DataFlow::Node n) { + this.getLocation().getFile() = n.getFile() and + this.getLocation().getStartLine() = n.getStartLine() + } +} + +import experimental.semmle.javascript.Execa + +query predicate passingPositiveTests(string res, string expectation, InlineTest t) { + res = "PASSED" and + t.hasPositiveTest(expectation) and + expectation = "CommandInjection" and + exists(SystemCommandExecution n | + t.inNode(n.getArgumentList()) or t.inNode(n.getACommandArgument()) + ) +} + +query predicate failingPositiveTests(string res, string expectation, InlineTest t) { + res = "FAILED" and + t.hasPositiveTest(expectation) and + expectation = "CommandInjection" and + not exists(SystemCommandExecution n | + t.inNode(n.getArgumentList()) or t.inNode(n.getACommandArgument()) + ) +} diff --git a/javascript/ql/test/experimental/Execa/PathInjection/tests.expected b/javascript/ql/test/experimental/Execa/PathInjection/tests.expected new file mode 100644 index 000000000000..3149ae1c0220 --- /dev/null +++ b/javascript/ql/test/experimental/Execa/PathInjection/tests.expected @@ -0,0 +1,6 @@ +passingPositiveTests +| PASSED | PathInjection | tests.js:9:43:9:64 | // test ... jection | +| PASSED | PathInjection | tests.js:12:50:12:71 | // test ... jection | +| PASSED | PathInjection | tests.js:15:61:15:82 | // test ... jection | +| PASSED | PathInjection | tests.js:18:73:18:94 | // test ... jection | +failingPositiveTests diff --git a/javascript/ql/test/experimental/Execa/PathInjection/tests.js b/javascript/ql/test/experimental/Execa/PathInjection/tests.js new file mode 100644 index 000000000000..4665b8c89507 --- /dev/null +++ b/javascript/ql/test/experimental/Execa/PathInjection/tests.js @@ -0,0 +1,19 @@ +import { execa, $ } from 'execa'; +import http from 'node:http' +import url from 'url' + +http.createServer(async function (req, res) { + let filePath = url.parse(req.url, true).query["filePath"][0]; + + // Piping to stdin from a file + await $({ inputFile: filePath })`cat` // test: PathInjection + + // Piping to stdin from a file + await execa('cat', { inputFile: filePath }); // test: PathInjection + + // Piping Stdout to file + await execa('echo', ['example3']).pipeStdout(filePath); // test: PathInjection + + // Piping all of command output to file + await execa('echo', ['example4'], { all: true }).pipeAll(filePath); // test: PathInjection +}); \ No newline at end of file diff --git a/javascript/ql/test/experimental/Execa/PathInjection/tests.ql b/javascript/ql/test/experimental/Execa/PathInjection/tests.ql new file mode 100644 index 000000000000..08b5435e01f5 --- /dev/null +++ b/javascript/ql/test/experimental/Execa/PathInjection/tests.ql @@ -0,0 +1,34 @@ +import javascript + +class InlineTest extends LineComment { + string tests; + + InlineTest() { tests = this.getText().regexpCapture("\\s*test:(.*)", 1) } + + string getPositiveTest() { + result = tests.trim().splitAt(",").trim() and not result.matches("!%") + } + + predicate hasPositiveTest(string test) { test = this.getPositiveTest() } + + predicate inNode(DataFlow::Node n) { + this.getLocation().getFile() = n.getFile() and + this.getLocation().getStartLine() = n.getStartLine() + } +} + +import experimental.semmle.javascript.Execa + +query predicate passingPositiveTests(string res, string expectation, InlineTest t) { + res = "PASSED" and + t.hasPositiveTest(expectation) and + expectation = "PathInjection" and + exists(FileSystemReadAccess n | t.inNode(n.getAPathArgument())) +} + +query predicate failingPositiveTests(string res, string expectation, InlineTest t) { + res = "FAILED" and + t.hasPositiveTest(expectation) and + expectation = "PathInjection" and + not exists(FileSystemReadAccess n | t.inNode(n.getAPathArgument())) +} diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_job.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_job.yml new file mode 100644 index 000000000000..cf713f5473d8 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_job.yml @@ -0,0 +1,38 @@ +on: + pull_request_target: + +jobs: + job1: + if: contains(github.event.issue.labels.*.name, 'ok') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + job2: + if: github.event.label.name == 'ok' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + job3: + if: github.actor == 'ok' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + job4: + if: github.actor == 'ok' || true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + job5: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_step.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_step.yml new file mode 100644 index 000000000000..08a3757392b6 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_if_step.yml @@ -0,0 +1,31 @@ +on: + pull_request_target: + +jobs: + job1: + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v2 + if: contains(github.event.issue.labels.*.name, 'ok') + with: + ref: ${{ github.event.pull_request.head.ref }} + + - uses: actions/checkout@v2 + if: github.event.label.name == 'ok' + with: + ref: ${{ github.event.pull_request.head.ref }} + + - uses: actions/checkout@v2 + if: github.actor == 'ok' + with: + ref: ${{ github.event.pull_request.head.ref }} + + - uses: actions/checkout@v2 + if: github.actor == 'ok' || true + with: + ref: ${{ github.event.pull_request.head.ref }} + + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only.yml new file mode 100644 index 000000000000..1b87798b89c8 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only.yml @@ -0,0 +1,12 @@ +on: + pull_request_target: + types: [labeled] + push: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only_mapping.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only_mapping.yml new file mode 100644 index 000000000000..076d827a9b91 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_label_only_mapping.yml @@ -0,0 +1,13 @@ +on: + pull_request_target: + types: + labeled: + push: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_mapping.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_mapping.yml new file mode 100644 index 000000000000..5b2b594890b3 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_mapping.yml @@ -0,0 +1,15 @@ +on: + pull_request_target: + types: + labeled: + opened: + closed: + push: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_sequence.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_sequence.yml new file mode 100644 index 000000000000..9677bd353606 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_labels_sequence.yml @@ -0,0 +1,12 @@ +on: + pull_request_target: + types: [labeled, opened] + push: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_mapping.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_mapping.yml new file mode 100644 index 000000000000..c3875fde7cdc --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_mapping.yml @@ -0,0 +1,10 @@ +on: + pull_request_target: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_master.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_master.yml new file mode 100644 index 000000000000..feeec7bf1f37 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_master.yml @@ -0,0 +1,10 @@ +on: + pull_request_target: + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: master \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_run.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_run.yml new file mode 100644 index 000000000000..33bb9ba889b6 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_run.yml @@ -0,0 +1,11 @@ +on: pull_request_target + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} + + - run: make \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_sequence.yml b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_sequence.yml new file mode 100644 index 000000000000..5e0d2a8ee275 --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/pull_request_target_sequence.yml @@ -0,0 +1,9 @@ +on: [pull_request_target, push] + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.ref }} \ No newline at end of file diff --git a/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.expected b/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.expected new file mode 100644 index 000000000000..127ced2bb97a --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.expected @@ -0,0 +1,15 @@ +| .github/workflows/pull_request_target_if_job.yml:9:7:12:2 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_job.yml:16:7:19:2 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_job.yml:30:7:33:2 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_job.yml:36:7:38:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_step.yml:9:7:14:4 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_step.yml:14:7:19:4 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_step.yml:24:7:29:4 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_if_step.yml:29:7:31:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_label_only.yml:10:7:12:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_label_only_mapping.yml:11:7:13:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_labels_mapping.yml:13:7:15:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_labels_sequence.yml:10:7:12:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_mapping.yml:8:7:10:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_run.yml:7:7:11:4 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | +| .github/workflows/pull_request_target_sequence.yml:7:7:9:54 | uses: a ... kout@v2 | Potential unsafe checkout of untrusted pull request on 'pull_request_target'. | diff --git a/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.qlref b/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.qlref new file mode 100644 index 000000000000..bdf753c1f4ac --- /dev/null +++ b/javascript/ql/test/experimental/Security/CWE-094/UntrustedCheckout.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-094/UntrustedCheckout.ql diff --git a/javascript/ql/test/experimental/TypeOrm/test.ts b/javascript/ql/test/experimental/TypeOrm/test.ts index 3f6cd54d22d0..39e4dbb6ec35 100644 --- a/javascript/ql/test/experimental/TypeOrm/test.ts +++ b/javascript/ql/test/experimental/TypeOrm/test.ts @@ -217,9 +217,4 @@ AppDataSource.initialize().then(async () => { qb.where(BadInput).orWhere(BadInput) // test: SQLInjectionPoint }), ).getMany() - - // Repository.query sink - await AppDataSource.getRepository(User2) - .query(BadInput) // test: SQLInjectionPoint - }).catch(error => console.log(error)) diff --git a/javascript/ql/test/experimental/TypeOrm/tests.expected b/javascript/ql/test/experimental/TypeOrm/tests.expected index cbcf7785c787..a8f092c33e31 100644 --- a/javascript/ql/test/experimental/TypeOrm/tests.expected +++ b/javascript/ql/test/experimental/TypeOrm/tests.expected @@ -29,5 +29,4 @@ passingPositiveTests | PASSED | SQLInjectionPoint | test.ts:210:28:210:53 | // test ... onPoint | | PASSED | SQLInjectionPoint | test.ts:213:56:213:81 | // test ... onPoint | | PASSED | SQLInjectionPoint | test.ts:217:56:217:81 | // test ... onPoint | -| PASSED | SQLInjectionPoint | test.ts:223:29:223:54 | // test ... onPoint | failingPositiveTests diff --git a/javascript/ql/test/library-tests/TripleDot/react-use.js b/javascript/ql/test/library-tests/TripleDot/react-use.js deleted file mode 100644 index 1691a7fbea46..000000000000 --- a/javascript/ql/test/library-tests/TripleDot/react-use.js +++ /dev/null @@ -1,12 +0,0 @@ -import { use } from "react"; - -async function fetchData() { - return new Promise((resolve) => { - resolve(source("fetchedData")); - }); -} - -function Component() { - const data = use(fetchData()); - sink(data); // $ hasValueFlow=fetchedData -} diff --git a/javascript/ql/test/library-tests/frameworks/Nest/global/app.module.ts b/javascript/ql/test/library-tests/frameworks/Nest/global/app.module.ts index b8793dc57895..2c230821a632 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/global/app.module.ts +++ b/javascript/ql/test/library-tests/frameworks/Nest/global/app.module.ts @@ -1,27 +1,12 @@ import { Module } from '@nestjs/common'; import { Controller } from './validation'; -import { Imports } from './imports'; -import { Foo, Foo2, Foo3 } from './foo.interface'; -import { FooImpl, Foo2Impl, Foo3Impl } from './foo.impl'; - -const foo3 = new Foo3Impl() +import { Foo } from './foo.interface'; +import { FooImpl } from './foo.impl'; @Module({ - controllers: [Controller], - imports: [Imports.forRoot()], - providers: [ - { - provide: Foo, - useClass: FooImpl - }, - { - provide: Foo2, - useFactory: () => new Foo2Impl() - }, - { - provide: Foo3, - useValue: foo3 - } - ], + controllers: [Controller], + providers: [{ + provide: Foo, useClass: FooImpl + }], }) export class AppModule { } diff --git a/javascript/ql/test/library-tests/frameworks/Nest/global/foo.impl.ts b/javascript/ql/test/library-tests/frameworks/Nest/global/foo.impl.ts index 9e54bc4774e9..979389a3804c 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/global/foo.impl.ts +++ b/javascript/ql/test/library-tests/frameworks/Nest/global/foo.impl.ts @@ -1,25 +1,7 @@ -import { Foo, Foo2, Foo3, Foo4 } from "./foo.interface"; +import { Foo } from "./foo.interface"; export class FooImpl extends Foo { fooMethod(x: string) { sink(x); // $ hasValueFlow=x } } - -export class Foo2Impl extends Foo2 { - fooMethod(x: string) { - sink(x); // $ hasValueFlow=x - } -} - -export class Foo3Impl extends Foo3 { - fooMethod(x: string) { - sink(x); // $ hasValueFlow=x - } -} - -export class Foo4Impl extends Foo4 { - fooMethod(x: string) { - sink(x); // $ hasValueFlow=x - } -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/frameworks/Nest/global/foo.interface.ts b/javascript/ql/test/library-tests/frameworks/Nest/global/foo.interface.ts index b3d18f2749a3..f22529c2d185 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/global/foo.interface.ts +++ b/javascript/ql/test/library-tests/frameworks/Nest/global/foo.interface.ts @@ -1,15 +1,3 @@ export abstract class Foo { abstract fooMethod(x: string): void; } - -export abstract class Foo2 { - abstract fooMethod(x: string): void; -} - -export abstract class Foo3 { - abstract fooMethod(x: string): void; -} - -export abstract class Foo4 { - abstract fooMethod(x: string): void; -} diff --git a/javascript/ql/test/library-tests/frameworks/Nest/global/imports.ts b/javascript/ql/test/library-tests/frameworks/Nest/global/imports.ts deleted file mode 100644 index 1df36111161c..000000000000 --- a/javascript/ql/test/library-tests/frameworks/Nest/global/imports.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { DynamicModule } from '@nestjs/common'; -import { Foo4Impl } from './foo.impl'; -import { Foo4 } from './foo.interface'; - -export class Imports { - static forRoot(): DynamicModule { - return { - providers: [ - { - provide: Foo4, - useClass: Foo4Impl, - }, - ], - }; - } -} diff --git a/javascript/ql/test/library-tests/frameworks/Nest/global/validation.ts b/javascript/ql/test/library-tests/frameworks/Nest/global/validation.ts index f6046e4651a1..1872b5a51b7d 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/global/validation.ts +++ b/javascript/ql/test/library-tests/frameworks/Nest/global/validation.ts @@ -1,10 +1,10 @@ import { Get, Query } from '@nestjs/common'; import { IsIn } from 'class-validator'; -import { Foo, Foo2, Foo3, Foo4 } from './foo.interface'; +import { Foo } from './foo.interface'; export class Controller { constructor( - private readonly foo: Foo, private readonly foo2: Foo2, private readonly foo3: Foo3, private readonly foo4: Foo4 + private readonly foo: Foo ) { } @Get() @@ -16,9 +16,6 @@ export class Controller { @Get() route2(@Query('x') x: string) { this.foo.fooMethod(x); - this.foo2.fooMethod(x); - this.foo3.fooMethod(x); - this.foo4.fooMethod(x); } } diff --git a/javascript/ql/test/library-tests/frameworks/Nest/local/middleware.ts b/javascript/ql/test/library-tests/frameworks/Nest/local/middleware.ts deleted file mode 100644 index f7f7104c68cc..000000000000 --- a/javascript/ql/test/library-tests/frameworks/Nest/local/middleware.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Injectable, NestMiddleware } from '@nestjs/common'; -import { Response, NextFunction } from 'express'; -import { CustomRequest } from '@randomPackage/request'; - -@Injectable() -export class LoggerMiddleware implements NestMiddleware { - // The request can be a custom type that extends the express Request - use(req: CustomRequest, res: Response, next: NextFunction) { - console.log(req.query.abc); - next(); - } -} \ No newline at end of file diff --git a/javascript/ql/test/library-tests/frameworks/Nest/test.expected b/javascript/ql/test/library-tests/frameworks/Nest/test.expected index ea74b306b366..db49fc95eba9 100644 --- a/javascript/ql/test/library-tests/frameworks/Nest/test.expected +++ b/javascript/ql/test/library-tests/frameworks/Nest/test.expected @@ -1,7 +1,7 @@ testFailures routeHandler | global/validation.ts:11:3:14:3 | route1( ... OK\\n } | -| global/validation.ts:17:3:22:3 | route2( ... x);\\n } | +| global/validation.ts:17:3:19:3 | route2( ... x);\\n } | | local/customDecorator.ts:18:3:20:3 | sneaky( ... OK\\n } | | local/customDecorator.ts:23:3:25:3 | safe(@S ... OK\\n } | | local/customPipe.ts:20:5:22:5 | sanitiz ... K\\n } | @@ -10,7 +10,6 @@ routeHandler | local/customPipe.ts:36:5:38:5 | propaga ... K\\n } | | local/customPipe.ts:41:5:43:5 | propaga ... K\\n } | | local/customPipe.ts:47:5:49:5 | propaga ... K\\n } | -| local/middleware.ts:8:3:11:3 | use(req ... ();\\n } | | local/routes.ts:6:3:8:3 | getFoo( ... o';\\n } | | local/routes.ts:11:3:13:3 | postFoo ... o';\\n } | | local/routes.ts:16:3:18:3 | getRoot ... o';\\n } | @@ -30,11 +29,9 @@ routeHandler | local/validation.ts:42:3:45:3 | route6( ... OK\\n } | requestSource | local/customDecorator.ts:5:21:5:51 | ctx.swi ... quest() | -| local/middleware.ts:8:7:8:9 | req | | local/routes.ts:30:12:30:14 | req | | local/routes.ts:61:23:61:25 | req | responseSource -| local/middleware.ts:8:27:8:29 | res | | local/routes.ts:61:35:61:37 | res | | local/routes.ts:62:5:62:25 | res.sen ... uery.x) | requestInputAccess @@ -47,7 +44,6 @@ requestInputAccess | parameter | local/customDecorator.ts:6:12:6:41 | request ... ryParam | | parameter | local/customPipe.ts:5:15:5:19 | value | | parameter | local/customPipe.ts:13:15:13:19 | value | -| parameter | local/middleware.ts:9:17:9:29 | req.query.abc | | parameter | local/routes.ts:27:17:27:17 | x | | parameter | local/routes.ts:28:14:28:21 | queryObj | | parameter | local/routes.ts:29:20:29:23 | name | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent.qll new file mode 100644 index 000000000000..a48c6b8f1c94 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent.qll @@ -0,0 +1,3 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent(ReactComponent c) { any() } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidatePropsValue.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidatePropsValue.qll new file mode 100644 index 000000000000..a551aa457eca --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidatePropsValue.qll @@ -0,0 +1,5 @@ +import javascript + +query predicate test_ReactComponent_getACandidatePropsValue(DataFlow::Node res) { + exists(ReactComponent c | res = c.getACandidatePropsValue(_)) +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidateStateSource.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidateStateSource.qll new file mode 100644 index 000000000000..af6597ab96cf --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getACandidateStateSource.qll @@ -0,0 +1,7 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_getACandidateStateSource( + ReactComponent c, DataFlow::SourceNode res +) { + res = c.getACandidateStateSource() +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getADirectPropsSource.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getADirectPropsSource.qll new file mode 100644 index 000000000000..9f9ebd89f8de --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getADirectPropsSource.qll @@ -0,0 +1,5 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_getADirectPropsSource(ReactComponent c, DataFlow::SourceNode res) { + res = c.getADirectPropsAccess() +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPreviousStateSource.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPreviousStateSource.qll new file mode 100644 index 000000000000..b1bfe312dae2 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPreviousStateSource.qll @@ -0,0 +1,7 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_getAPreviousStateSource( + ReactComponent c, DataFlow::SourceNode res +) { + res = c.getAPreviousStateSource() +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPropRead.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPropRead.qll new file mode 100644 index 000000000000..0ff2a588a029 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getAPropRead.qll @@ -0,0 +1,5 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_getAPropRead(ReactComponent c, string n, DataFlow::PropRead res) { + res = c.getAPropRead(n) +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getInstanceMethod.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getInstanceMethod.qll new file mode 100644 index 000000000000..b813e19539b5 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_getInstanceMethod.qll @@ -0,0 +1,5 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_getInstanceMethod(ReactComponent c, string n, Function res) { + res = c.getInstanceMethod(n) +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_ref.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_ref.qll new file mode 100644 index 000000000000..a017a0715feb --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactComponent_ref.qll @@ -0,0 +1,3 @@ +import semmle.javascript.frameworks.React + +query predicate test_ReactComponent_ref(ReactComponent c, DataFlow::Node res) { res = c.ref() } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/ReactName.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactName.qll new file mode 100644 index 000000000000..885f1f38a57f --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/ReactName.qll @@ -0,0 +1,17 @@ +import semmle.javascript.frameworks.React + +query predicate test_JSXname(JsxElement element, JsxName jsxname, string name, string type) { + name = jsxname.getValue() and + ( + jsxname instanceof Identifier and type = "Identifier" + or + jsxname instanceof ThisExpr and type = "thisExpr" + or + jsxname.(DotExpr).getBase() instanceof JsxName and type = "dot" + or + jsxname instanceof JsxQualifiedName and type = "qualifiedName" + ) and + element.getNameExpr() = jsxname +} + +query ThisExpr test_JsxName_this(JsxElement element) { result.getParentExpr+() = element } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/es5.js b/javascript/ql/test/library-tests/frameworks/ReactJS/es5.js index 8d1eb47b55f6..abef8d7d8bbd 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/es5.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/es5.js @@ -1,14 +1,14 @@ var Hello = React.createClass({ displayName: 'Hello', render: function() { - return
    Hello {this.props.name}
    ; // $ threatModelSource=view-component-input + return
    Hello {this.props.name}
    ; }, getDefaultProps: function() { return { - name: 'world' // $ getACandidatePropsValue + name: 'world' }; } -}); // $ reactComponent +}); Hello.info = function() { return "Nothing to see here."; @@ -17,6 +17,6 @@ Hello.info = function() { var createReactClass = require('create-react-class'); var Greeting = createReactClass({ render: function() { - return

    Hello, {this.props.name}

    ; // $ threatModelSource=view-component-input + return

    Hello, {this.props.name}

    ; } -}); // $ reactComponent +}); diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/es6.js b/javascript/ql/test/library-tests/frameworks/ReactJS/es6.js index 333ac1a943f5..2991888354c8 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/es6.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/es6.js @@ -1,11 +1,11 @@ -class Hello extends React.Component { // $ threatModelSource=view-component-input +class Hello extends React.Component { render() { - return
    Hello {this.props.name}
    ; // $ threatModelSource=view-component-input + return
    Hello {this.props.name}
    ; } static info() { return "Nothing to see here."; } -} // $ reactComponent +} Hello.displayName = 'Hello'; Hello.defaultProps = { name: 'world' @@ -17,4 +17,4 @@ class Hello2 extends React.Component { this.state.bar.foo = 42; this.state = { baz: 42}; } -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/exportedComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/exportedComponent.jsx index 9e2d5580228f..4335b4bc3081 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/exportedComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/exportedComponent.jsx @@ -1,3 +1,3 @@ -export function MyComponent(props) { // $ threatModelSource=view-component-input +export function MyComponent(props) { return
    -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/getADirectStateAccess.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/getADirectStateAccess.qll new file mode 100644 index 000000000000..b43f3e487d77 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/getADirectStateAccess.qll @@ -0,0 +1,5 @@ +import semmle.javascript.frameworks.React + +query predicate test_getADirectStateAccess(ReactComponent c, DataFlow::SourceNode res) { + res = c.getADirectStateAccess() +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/importedComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/importedComponent.jsx index ed04d4bec889..d94acf59abee 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/importedComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/importedComponent.jsx @@ -1,5 +1,5 @@ import { MyComponent } from "./exportedComponent"; -export function render({color, location}) { // $ threatModelSource=view-component-input locationSource threatModelSource=remote - return // $ getACandidatePropsValue -} // $ reactComponent +export function render({color, location}) { + return +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/namedImport.js b/javascript/ql/test/library-tests/frameworks/ReactJS/namedImport.js index c29160c8ed5b..3c5a7182d65e 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/namedImport.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/namedImport.js @@ -1,5 +1,5 @@ import { Component } from "react"; -class C extends Component {} // $ threatModelSource=view-component-input reactComponent +class C extends Component {} -class D extends C {} // $ threatModelSource=view-component-input reactComponent +class D extends C {} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/plainfn.js b/javascript/ql/test/library-tests/frameworks/ReactJS/plainfn.js index c5d029a44d13..7f5995b9fdb1 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/plainfn.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/plainfn.js @@ -1,15 +1,15 @@ -function Hello(props) { // $ threatModelSource=view-component-input +function Hello(props) { return
    Hello {props.name}
    ; -} // $ reactComponent +} -function Hello2(props) { // $ threatModelSource=view-component-input +function Hello2(props) { return React.createElement("div"); -} // $ reactComponent +} -function Hello3(props) { // $ threatModelSource=view-component-input +function Hello3(props) { var x = React.createElement("div"); return x; -} // $ reactComponent +} function NotAComponent(props) { if (y) @@ -17,8 +17,8 @@ function NotAComponent(props) { return g(); } -function SpuriousComponent(props) { // $ threatModelSource=view-component-input +function SpuriousComponent(props) { if (y) return React.createElement("div"); return 42; -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/preact.js b/javascript/ql/test/library-tests/frameworks/ReactJS/preact.js index ced8ae6be303..787064397f0d 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/preact.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/preact.js @@ -1,11 +1,11 @@ -class Hello extends Preact.Component { // $ threatModelSource=view-component-input - render(props, state) { // $ threatModelSource=view-component-input +class Hello extends Preact.Component { + render(props, state) { props.name; state.name; return
    ; } -} // $ reactComponent +} -class Hello extends preact.Component { // $ threatModelSource=view-component-input +class Hello extends preact.Component { -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/probably-a-component.js b/javascript/ql/test/library-tests/frameworks/ReactJS/probably-a-component.js index c82188beb02a..a8205039b8e7 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/probably-a-component.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/probably-a-component.js @@ -1,6 +1,6 @@ -class Hello extends Component { // $ threatModelSource=view-component-input +class Hello extends Component { render() { - this.props.name; // $ threatModelSource=view-component-input + this.props.name; return
    ; } -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/props.js b/javascript/ql/test/library-tests/frameworks/ReactJS/props.js index 153ee1473428..c1cce38a040c 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/props.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/props.js @@ -1,36 +1,36 @@ function ES2015() { - class C extends React.Component { // $ threatModelSource=view-component-input - } // $ reactComponent + class C extends React.Component { + } - C.defaultProps = { propFromDefaultProps: "propFromDefaultProps" }; // $ getACandidatePropsValue + C.defaultProps = { propFromDefaultProps: "propFromDefaultProps" }; - (); // $ getACandidatePropsValue + (); - new C({propFromConstructor: "propFromConstructor"}); // $ getACandidatePropsValue + new C({propFromConstructor: "propFromConstructor"}); } function ES5() { var C = React.createClass({ getDefaultProps() { - return { propFromDefaultProps: "propFromDefaultProps" }; // $ getACandidatePropsValue + return { propFromDefaultProps: "propFromDefaultProps" }; } - }); // $ reactComponent + }); - (); // $ getACandidatePropsValue + (); - C({propFromConstructor: "propFromConstructor"}); // $ getACandidatePropsValue + C({propFromConstructor: "propFromConstructor"}); } function Functional() { - function C(props) { // $ threatModelSource=view-component-input + function C(props) { return
    ; - } // $ reactComponent + } - C.defaultProps = { propFromDefaultProps: "propFromDefaultProps" }; // $ getACandidatePropsValue + C.defaultProps = { propFromDefaultProps: "propFromDefaultProps" }; - (); // $ getACandidatePropsValue + (); - new C({propFromConstructor: "propFromConstructor"}); // $ getACandidatePropsValue + new C({propFromConstructor: "propFromConstructor"}); } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/rare-lifecycle-methods.js b/javascript/ql/test/library-tests/frameworks/ReactJS/rare-lifecycle-methods.js index b4943ea66c30..c3f7c13b1623 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/rare-lifecycle-methods.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/rare-lifecycle-methods.js @@ -1,4 +1,4 @@ -class C extends React.Component { // $ threatModelSource=view-component-input +class C extends React.Component { static getDerivedStateFromProps(props, state) { return {}; } @@ -8,4 +8,4 @@ class C extends React.Component { // $ threatModelSource=view-component-input getSnapshotBeforeUpdate(prevProps, prevState) { return {}; } -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/react.qll b/javascript/ql/test/library-tests/frameworks/ReactJS/react.qll new file mode 100644 index 000000000000..a5f254b79707 --- /dev/null +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/react.qll @@ -0,0 +1,3 @@ +import javascript + +query predicate test_react(DataFlow::ValueNode nd) { react().flowsTo(nd) } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyReads.js b/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyReads.js index 93a120937d76..697bc35c1505 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyReads.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyReads.js @@ -10,4 +10,4 @@ class Reads extends React.Component { componentDidUpdate(prevProps, prevState) { prevState.p4; } -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyWrites.js b/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyWrites.js index 27e02bc6f665..692400c7381a 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyWrites.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/statePropertyWrites.js @@ -31,15 +31,15 @@ class Writes extends React.Component { state = { p7: 42 }; -} // $ reactComponent +} React.createClass({ render: function() { - return
    Hello {this.props.name}
    ; // $ threatModelSource=view-component-input + return
    Hello {this.props.name}
    ; }, getInitialState: function() { return { p8: 42 }; } -}); // $ reactComponent +}); diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected index 9b453989bb80..9a5c38ddbf90 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected @@ -1,112 +1,42 @@ -getACandidatePropsValue -| es5.js:8:13:8:19 | 'world' | -| importedComponent.jsx:4:32:4:36 | color | -| props.js:5:46:5:67 | "propFr ... tProps" | -| props.js:7:22:7:34 | "propFromJSX" | -| props.js:9:33:9:53 | "propFr ... ructor" | -| props.js:15:44:15:65 | "propFr ... tProps" | -| props.js:19:22:19:34 | "propFromJSX" | -| props.js:21:29:21:49 | "propFr ... ructor" | -| props.js:30:46:30:67 | "propFr ... tProps" | -| props.js:32:22:32:34 | "propFromJSX" | -| props.js:34:33:34:53 | "propFr ... ructor" | -| useHigherOrderComponent.jsx:5:33:5:37 | "red" | -| useHigherOrderComponent.jsx:11:39:11:44 | "lazy" | -| useHigherOrderComponent.jsx:17:40:17:46 | "lazy2" | -getACandidateStateSource -| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:22:18:31 | { baz: 42} | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:3:16:3:17 | {} | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:5:38:5:46 | nextState | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:45:7:56 | prevState.p3 | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:8:18:8:19 | {} | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:12:18:12:19 | {} | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:16:18:16:19 | {} | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:20:18:20:19 | {} | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:31:13:33:5 | {\\n ... 2\\n } | -| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:41:12:43:5 | {\\n p8: 42\\n } | -| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:48:18:48:18 | y | -| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:49:22:49:22 | x | -getADirectPropsSource -| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:4:24:4:33 | this.props | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | es5.js:20:24:20:33 | this.props | -| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:1:37:1:36 | args | -| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:3:24:3:33 | this.props | -| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | exportedComponent.jsx:1:29:1:33 | props | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | importedComponent.jsx:3:24:3:40 | {color, location} | -| namedImport.js:3:1:3:28 | class C ... nent {} | namedImport.js:3:27:3:26 | args | -| namedImport.js:5:1:5:20 | class D extends C {} | namedImport.js:5:19:5:18 | args | -| plainfn.js:1:1:3:1 | functio ... div>;\\n} | plainfn.js:1:16:1:20 | props | -| plainfn.js:5:1:7:1 | functio ... iv");\\n} | plainfn.js:5:17:5:21 | props | -| plainfn.js:9:1:12:1 | functio ... rn x;\\n} | plainfn.js:9:17:9:21 | props | -| plainfn.js:20:1:24:1 | functio ... n 42;\\n} | plainfn.js:20:28:20:32 | props | -| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:1:38:1:37 | args | -| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:2:12:2:16 | props | -| preact.js:9:1:11:1 | class H ... nput\\n\\n} | preact.js:9:38:9:37 | args | -| probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:1:31:1:30 | args | -| probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:3:9:3:18 | this.props | -| props.js:2:5:3:5 | class C ... t\\n } | props.js:2:37:2:36 | args | -| props.js:26:5:28:5 | functio ... ;\\n } | props.js:26:16:26:20 | props | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:1:33:1:32 | args | -| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:38:24:38:33 | this.props | -| thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | thisAccesses.js:31:12:31:16 | props | -| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:48:18:48:18 | y | -getADirectStateAccess -| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:16:9:16:18 | this.state | -| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:17:9:17:18 | this.state | -| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:9:18:18 | this.state | -| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:2:19:2:23 | state | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:3:9:3:18 | this.state | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:5:9:5:18 | this.state | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:4:9:4:17 | cmp.state | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:6:9:6:17 | cmp.state | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:10:9:10:17 | cmp.state | -| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:49:9:49:18 | this.state | -| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:50:9:50:18 | this.state | -getAPreviousStateSource -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:2:44:2:48 | state | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:8:40:8:48 | prevState | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:24:7:32 | prevState | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:10:35:10:43 | prevState | -getAPropRead -| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | name | es5.js:4:24:4:38 | this.props.name | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | name | es5.js:20:24:20:38 | this.props.name | -| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | name | es6.js:3:24:3:38 | this.props.name | -| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | color | exportedComponent.jsx:2:32:2:42 | props.color | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | color | importedComponent.jsx:3:25:3:29 | color | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | location | importedComponent.jsx:3:32:3:39 | location | -| plainfn.js:1:1:3:1 | functio ... div>;\\n} | name | plainfn.js:2:22:2:31 | props.name | -| preact.js:1:1:7:1 | class H ... }\\n} | name | preact.js:3:9:3:18 | props.name | -| probably-a-component.js:1:1:6:1 | class H ... }\\n} | name | probably-a-component.js:3:9:3:23 | this.props.name | -| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | name | statePropertyWrites.js:38:24:38:38 | this.props.name | -getInstanceMethod -| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | getDefaultProps | es5.js:6:20:10:3 | functio ... };\\n } | -| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | render | es5.js:3:11:5:3 | functio ... put\\n } | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | render | es5.js:19:11:21:3 | functio ... put\\n } | -| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | render | es6.js:2:9:4:3 | () {\\n ... put\\n } | -| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | render | exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | render | importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | -| plainfn.js:1:1:3:1 | functio ... div>;\\n} | render | plainfn.js:1:1:3:1 | functio ... div>;\\n} | -| plainfn.js:5:1:7:1 | functio ... iv");\\n} | render | plainfn.js:5:1:7:1 | functio ... iv");\\n} | -| plainfn.js:9:1:12:1 | functio ... rn x;\\n} | render | plainfn.js:9:1:12:1 | functio ... rn x;\\n} | -| plainfn.js:20:1:24:1 | functio ... n 42;\\n} | render | plainfn.js:20:1:24:1 | functio ... n 42;\\n} | -| preact.js:1:1:7:1 | class H ... }\\n} | render | preact.js:2:11:6:5 | (props, ... ;\\n } | -| probably-a-component.js:1:1:6:1 | class H ... }\\n} | render | probably-a-component.js:2:11:5:5 | () {\\n ... ;\\n } | -| props.js:13:31:17:5 | {\\n ... }\\n } | getDefaultProps | props.js:14:24:16:9 | () {\\n ... } | -| props.js:26:5:28:5 | functio ... ;\\n } | render | props.js:26:5:28:5 | functio ... ;\\n } | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | getSnapshotBeforeUpdate | rare-lifecycle-methods.js:8:28:10:5 | (prevPr ... ;\\n } | -| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | shouldComponentUpdate | rare-lifecycle-methods.js:5:26:7:5 | (nextPr ... ;\\n } | -| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | componentDidUpdate | statePropertyReads.js:10:23:12:5 | (prevPr ... ;\\n } | -| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | getInitialState | statePropertyWrites.js:25:20:29:5 | () { // ... ;\\n } | -| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | getInitialState | statePropertyWrites.js:40:20:44:3 | functio ... };\\n } | -| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | render | statePropertyWrites.js:37:11:39:3 | functio ... put\\n } | -| thisAccesses.js:1:1:16:1 | class C ... }\\n} | someInstanceMethod | thisAccesses.js:13:23:15:5 | () {\\n ... ;\\n } | -| thisAccesses.js:18:19:29:1 | {\\n r ... }\\n} | render | thisAccesses.js:19:13:24:5 | functio ... ;\\n } | -| thisAccesses.js:18:19:29:1 | {\\n r ... }\\n} | someInstanceMethod | thisAccesses.js:26:25:28:5 | functio ... ;\\n } | -| thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | render | thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | -| thisAccesses.js:38:19:45:1 | {\\n r ... },\\n} | render | thisAccesses.js:39:13:44:5 | functio ... ;\\n } | -| thisAccesses.js:54:1:63:1 | class C ... }\\n} | render | thisAccesses.js:59:11:62:5 | () {\\n ... ;\\n } | -| thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | render | thisAccesses_importedMappers.js:5:13:14:5 | functio ... ;\\n } | -jsxName +test_react +| es5.js:1:13:1:17 | React | +| es6.js:1:21:1:25 | React | +| es6.js:14:22:14:26 | React | +| globalReactRefs.js:1:1:1:5 | React | +| globalReactRefs.js:4:5:4:9 | React | +| globalReactRefs.js:7:1:7:5 | React | +| importedReactRefs.js:1:8:1:12 | React | +| importedReactRefs.js:3:1:3:5 | React | +| importedReactRefs.js:6:5:6:9 | React | +| importedReactRefs.js:9:1:9:5 | React | +| plainfn.js:6:12:6:16 | React | +| plainfn.js:10:13:10:17 | React | +| plainfn.js:16:16:16:20 | React | +| plainfn.js:22:16:22:20 | React | +| props.js:2:21:2:25 | React | +| props.js:13:13:13:17 | React | +| rare-lifecycle-methods.js:1:17:1:21 | React | +| requiredReactRefs.js:1:13:1:28 | require("react") | +| requiredReactRefs.js:3:1:3:5 | React | +| requiredReactRefs.js:6:5:6:9 | React | +| requiredReactRefs.js:9:1:9:5 | React | +| requiredReactRefs.js:12:17:12:32 | require("react") | +| requiredReactRefs.js:14:5:14:9 | React | +| requiredReactRefs.js:17:9:17:13 | React | +| requiredReactRefs.js:20:5:20:9 | React | +| statePropertyReads.js:1:21:1:25 | React | +| statePropertyWrites.js:1:22:1:26 | React | +| statePropertyWrites.js:36:1:36:5 | React | +| thisAccesses.js:1:17:1:21 | React | +| thisAccesses.js:18:1:18:5 | React | +| thisAccesses.js:38:1:38:5 | React | +| thisAccesses.js:40:9:40:13 | React | +| thisAccesses.js:47:18:47:22 | React | +| thisAccesses.js:54:18:54:22 | React | +| thisAccesses_importedMappers.js:1:8:1:12 | React | +| thisAccesses_importedMappers.js:4:1:4:5 | React | +| thisAccesses_importedMappers.js:6:9:6:13 | React | +test_JSXname | es5.js:4:12:4:45 |
    He ... }
    | es5.js:4:13:4:15 | div | div | Identifier | | es5.js:20:12:20:44 |

    Hel ... e}

    | es5.js:20:13:20:14 | h1 | h1 | Identifier | | es6.js:3:12:3:45 |
    He ... }
    | es6.js:3:13:3:15 | div | div | Identifier | @@ -132,22 +62,13 @@ jsxName | useHigherOrderComponent.jsx:5:12:5:39 | | useHigherOrderComponent.jsx:5:13:5:25 | SomeComponent | SomeComponent | Identifier | | useHigherOrderComponent.jsx:11:12:11:46 | | useHigherOrderComponent.jsx:11:13:11:31 | LazyLoadedComponent | LazyLoadedComponent | Identifier | | useHigherOrderComponent.jsx:17:12:17:48 | | useHigherOrderComponent.jsx:17:13:17:32 | LazyLoadedComponent2 | LazyLoadedComponent2 | Identifier | -jsxNameThis -| es5.js:4:12:4:45 |
    He ... }
    | es5.js:4:24:4:27 | this | -| es5.js:20:12:20:44 |

    Hel ... e}

    | es5.js:20:24:20:27 | this | -| es6.js:3:12:3:45 |
    He ... }
    | es6.js:3:24:3:27 | this | -| statePropertyWrites.js:38:12:38:45 |
    He ... }
    | statePropertyWrites.js:38:24:38:27 | this | -| thisAccesses.js:60:19:60:41 | | thisAccesses.js:60:20:60:23 | this | -| thisAccesses.js:61:19:61:41 | | thisAccesses.js:61:20:61:23 | this | -locationSource -| importedComponent.jsx:3:32:3:39 | location | -reactComponent +test_ReactComponent | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | | es6.js:1:1:8:1 | class H ... ;\\n }\\n} | | es6.js:14:1:20:1 | class H ... }\\n} | | exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | | namedImport.js:3:1:3:28 | class C ... nent {} | | namedImport.js:5:1:5:20 | class D extends C {} | | plainfn.js:1:1:3:1 | functio ... div>;\\n} | @@ -155,9 +76,9 @@ reactComponent | plainfn.js:9:1:12:1 | functio ... rn x;\\n} | | plainfn.js:20:1:24:1 | functio ... n 42;\\n} | | preact.js:1:1:7:1 | class H ... }\\n} | -| preact.js:9:1:11:1 | class H ... nput\\n\\n} | +| preact.js:9:1:11:1 | class H ... nt {\\n\\n} | | probably-a-component.js:1:1:6:1 | class H ... }\\n} | -| props.js:2:5:3:5 | class C ... t\\n } | +| props.js:2:5:3:5 | class C ... {\\n } | | props.js:13:31:17:5 | {\\n ... }\\n } | | props.js:26:5:28:5 | functio ... ;\\n } | | rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | @@ -171,14 +92,14 @@ reactComponent | thisAccesses.js:47:1:52:1 | class C ... }\\n} | | thisAccesses.js:54:1:63:1 | class C ... }\\n} | | thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | -reactComponentRef +test_ReactComponent_ref | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:3:11:3:10 | this | | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:4:24:4:27 | this | | es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:6:20:6:19 | this | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | es5.js:19:11:19:10 | this | -| es5.js:18:33:22:1 | {\\n ren ... t\\n }\\n} | es5.js:20:24:20:27 | this | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | es5.js:19:11:19:10 | this | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | es5.js:20:24:20:27 | this | | es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:1:37:1:36 | implicit 'this' | | es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:1:37:1:36 | this | | es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:2:9:2:8 | this | @@ -189,7 +110,7 @@ reactComponentRef | es6.js:14:1:20:1 | class H ... }\\n} | es6.js:17:9:17:12 | this | | es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:9:18:12 | this | | exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | exportedComponent.jsx:1:8:1:7 | this | -| importedComponent.jsx:3:8:5:1 | functio ... Value\\n} | importedComponent.jsx:3:8:3:7 | this | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | importedComponent.jsx:3:8:3:7 | this | | namedImport.js:3:1:3:28 | class C ... nent {} | namedImport.js:3:27:3:26 | implicit 'this' | | namedImport.js:3:1:3:28 | class C ... nent {} | namedImport.js:3:27:3:26 | this | | namedImport.js:5:1:5:20 | class D extends C {} | namedImport.js:5:19:5:18 | implicit 'this' | @@ -201,15 +122,15 @@ reactComponentRef | preact.js:1:1:7:1 | class H ... }\\n} | preact.js:1:38:1:37 | implicit 'this' | | preact.js:1:1:7:1 | class H ... }\\n} | preact.js:1:38:1:37 | this | | preact.js:1:1:7:1 | class H ... }\\n} | preact.js:2:11:2:10 | this | -| preact.js:9:1:11:1 | class H ... nput\\n\\n} | preact.js:9:38:9:37 | implicit 'this' | -| preact.js:9:1:11:1 | class H ... nput\\n\\n} | preact.js:9:38:9:37 | this | +| preact.js:9:1:11:1 | class H ... nt {\\n\\n} | preact.js:9:38:9:37 | implicit 'this' | +| preact.js:9:1:11:1 | class H ... nt {\\n\\n} | preact.js:9:38:9:37 | this | | probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:1:31:1:30 | implicit 'this' | | probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:1:31:1:30 | this | | probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:2:11:2:10 | this | | probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:3:9:3:12 | this | -| props.js:2:5:3:5 | class C ... t\\n } | props.js:2:37:2:36 | implicit 'this' | -| props.js:2:5:3:5 | class C ... t\\n } | props.js:2:37:2:36 | this | -| props.js:2:5:3:5 | class C ... t\\n } | props.js:9:5:9:55 | new C({ ... ctor"}) | +| props.js:2:5:3:5 | class C ... {\\n } | props.js:2:37:2:36 | implicit 'this' | +| props.js:2:5:3:5 | class C ... {\\n } | props.js:2:37:2:36 | this | +| props.js:2:5:3:5 | class C ... {\\n } | props.js:9:5:9:55 | new C({ ... ctor"}) | | props.js:13:31:17:5 | {\\n ... }\\n } | props.js:13:31:17:5 | {\\n ... }\\n } | | props.js:13:31:17:5 | {\\n ... }\\n } | props.js:14:24:14:23 | this | | props.js:26:5:28:5 | functio ... ;\\n } | props.js:26:5:26:4 | this | @@ -280,6 +201,123 @@ reactComponentRef | thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | thisAccesses_importedMappers.js:9:25:9:24 | this | | thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | thisAccesses_importedMappers.js:10:13:10:16 | this | | thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | thisAccesses_importedMappers.js:11:12:11:15 | this | +test_getADirectStateAccess +| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:16:9:16:18 | this.state | +| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:17:9:17:18 | this.state | +| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:9:18:18 | this.state | +| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:2:19:2:23 | state | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:3:9:3:18 | this.state | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:5:9:5:18 | this.state | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:4:9:4:17 | cmp.state | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:6:9:6:17 | cmp.state | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:10:9:10:17 | cmp.state | +| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:49:9:49:18 | this.state | +| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:50:9:50:18 | this.state | +test_ReactComponent_getAPropRead +| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | name | es5.js:4:24:4:38 | this.props.name | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | name | es5.js:20:24:20:38 | this.props.name | +| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | name | es6.js:3:24:3:38 | this.props.name | +| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | color | exportedComponent.jsx:2:32:2:42 | props.color | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | color | importedComponent.jsx:3:25:3:29 | color | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | location | importedComponent.jsx:3:32:3:39 | location | +| plainfn.js:1:1:3:1 | functio ... div>;\\n} | name | plainfn.js:2:22:2:31 | props.name | +| preact.js:1:1:7:1 | class H ... }\\n} | name | preact.js:3:9:3:18 | props.name | +| probably-a-component.js:1:1:6:1 | class H ... }\\n} | name | probably-a-component.js:3:9:3:23 | this.props.name | +| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | name | statePropertyWrites.js:38:24:38:38 | this.props.name | +test_ReactComponent_getInstanceMethod +| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | getDefaultProps | es5.js:6:20:10:3 | functio ... };\\n } | +| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | render | es5.js:3:11:5:3 | functio ... v>;\\n } | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | render | es5.js:19:11:21:3 | functio ... 1>;\\n } | +| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | render | es6.js:2:9:4:3 | () {\\n ... v>;\\n } | +| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | render | exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | render | importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | +| plainfn.js:1:1:3:1 | functio ... div>;\\n} | render | plainfn.js:1:1:3:1 | functio ... div>;\\n} | +| plainfn.js:5:1:7:1 | functio ... iv");\\n} | render | plainfn.js:5:1:7:1 | functio ... iv");\\n} | +| plainfn.js:9:1:12:1 | functio ... rn x;\\n} | render | plainfn.js:9:1:12:1 | functio ... rn x;\\n} | +| plainfn.js:20:1:24:1 | functio ... n 42;\\n} | render | plainfn.js:20:1:24:1 | functio ... n 42;\\n} | +| preact.js:1:1:7:1 | class H ... }\\n} | render | preact.js:2:11:6:5 | (props, ... ;\\n } | +| probably-a-component.js:1:1:6:1 | class H ... }\\n} | render | probably-a-component.js:2:11:5:5 | () {\\n ... ;\\n } | +| props.js:13:31:17:5 | {\\n ... }\\n } | getDefaultProps | props.js:14:24:16:9 | () {\\n ... } | +| props.js:26:5:28:5 | functio ... ;\\n } | render | props.js:26:5:28:5 | functio ... ;\\n } | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | getSnapshotBeforeUpdate | rare-lifecycle-methods.js:8:28:10:5 | (prevPr ... ;\\n } | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | shouldComponentUpdate | rare-lifecycle-methods.js:5:26:7:5 | (nextPr ... ;\\n } | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | componentDidUpdate | statePropertyReads.js:10:23:12:5 | (prevPr ... ;\\n } | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | getInitialState | statePropertyWrites.js:25:20:29:5 | () { // ... ;\\n } | +| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | getInitialState | statePropertyWrites.js:40:20:44:3 | functio ... };\\n } | +| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | render | statePropertyWrites.js:37:11:39:3 | functio ... v>;\\n } | +| thisAccesses.js:1:1:16:1 | class C ... }\\n} | someInstanceMethod | thisAccesses.js:13:23:15:5 | () {\\n ... ;\\n } | +| thisAccesses.js:18:19:29:1 | {\\n r ... }\\n} | render | thisAccesses.js:19:13:24:5 | functio ... ;\\n } | +| thisAccesses.js:18:19:29:1 | {\\n r ... }\\n} | someInstanceMethod | thisAccesses.js:26:25:28:5 | functio ... ;\\n } | +| thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | render | thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | +| thisAccesses.js:38:19:45:1 | {\\n r ... },\\n} | render | thisAccesses.js:39:13:44:5 | functio ... ;\\n } | +| thisAccesses.js:54:1:63:1 | class C ... }\\n} | render | thisAccesses.js:59:11:62:5 | () {\\n ... ;\\n } | +| thisAccesses_importedMappers.js:4:19:15:1 | {\\n r ... },\\n} | render | thisAccesses_importedMappers.js:5:13:14:5 | functio ... ;\\n } | +test_ReactComponent_getADirectPropsSource +| es5.js:1:31:11:1 | {\\n dis ... ;\\n }\\n} | es5.js:4:24:4:33 | this.props | +| es5.js:18:33:22:1 | {\\n ren ... ;\\n }\\n} | es5.js:20:24:20:33 | this.props | +| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:1:37:1:36 | args | +| es6.js:1:1:8:1 | class H ... ;\\n }\\n} | es6.js:3:24:3:33 | this.props | +| exportedComponent.jsx:1:8:3:1 | functio ... r}}/>\\n} | exportedComponent.jsx:1:29:1:33 | props | +| importedComponent.jsx:3:8:5:1 | functio ... or}/>\\n} | importedComponent.jsx:3:24:3:40 | {color, location} | +| namedImport.js:3:1:3:28 | class C ... nent {} | namedImport.js:3:27:3:26 | args | +| namedImport.js:5:1:5:20 | class D extends C {} | namedImport.js:5:19:5:18 | args | +| plainfn.js:1:1:3:1 | functio ... div>;\\n} | plainfn.js:1:16:1:20 | props | +| plainfn.js:5:1:7:1 | functio ... iv");\\n} | plainfn.js:5:17:5:21 | props | +| plainfn.js:9:1:12:1 | functio ... rn x;\\n} | plainfn.js:9:17:9:21 | props | +| plainfn.js:20:1:24:1 | functio ... n 42;\\n} | plainfn.js:20:28:20:32 | props | +| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:1:38:1:37 | args | +| preact.js:1:1:7:1 | class H ... }\\n} | preact.js:2:12:2:16 | props | +| preact.js:9:1:11:1 | class H ... nt {\\n\\n} | preact.js:9:38:9:37 | args | +| probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:1:31:1:30 | args | +| probably-a-component.js:1:1:6:1 | class H ... }\\n} | probably-a-component.js:3:9:3:18 | this.props | +| props.js:2:5:3:5 | class C ... {\\n } | props.js:2:37:2:36 | args | +| props.js:26:5:28:5 | functio ... ;\\n } | props.js:26:16:26:20 | props | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:1:33:1:32 | args | +| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:38:24:38:33 | this.props | +| thisAccesses.js:31:2:36:1 | functio ... iv/>;\\n} | thisAccesses.js:31:12:31:16 | props | +| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:48:18:48:18 | y | +test_ReactComponent_getACandidatePropsValue +| es5.js:8:13:8:19 | 'world' | +| importedComponent.jsx:4:32:4:36 | color | +| props.js:5:46:5:67 | "propFr ... tProps" | +| props.js:7:22:7:34 | "propFromJSX" | +| props.js:9:33:9:53 | "propFr ... ructor" | +| props.js:15:44:15:65 | "propFr ... tProps" | +| props.js:19:22:19:34 | "propFromJSX" | +| props.js:21:29:21:49 | "propFr ... ructor" | +| props.js:30:46:30:67 | "propFr ... tProps" | +| props.js:32:22:32:34 | "propFromJSX" | +| props.js:34:33:34:53 | "propFr ... ructor" | +| useHigherOrderComponent.jsx:5:33:5:37 | "red" | +| useHigherOrderComponent.jsx:11:39:11:44 | "lazy" | +| useHigherOrderComponent.jsx:17:40:17:46 | "lazy2" | +test_ReactComponent_getAPreviousStateSource +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:2:44:2:48 | state | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:8:40:8:48 | prevState | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:24:7:32 | prevState | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:10:35:10:43 | prevState | +test_ReactComponent_getACandidateStateSource +| es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:22:18:31 | { baz: 42} | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:3:16:3:17 | {} | +| rare-lifecycle-methods.js:1:1:11:1 | class C ... }\\n} | rare-lifecycle-methods.js:5:38:5:46 | nextState | +| statePropertyReads.js:1:1:13:1 | class R ... }\\n} | statePropertyReads.js:7:45:7:56 | prevState.p3 | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:8:18:8:19 | {} | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:12:18:12:19 | {} | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:16:18:16:19 | {} | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:20:18:20:19 | {} | +| statePropertyWrites.js:1:1:34:1 | class W ... };\\n} | statePropertyWrites.js:31:13:33:5 | {\\n ... 2\\n } | +| statePropertyWrites.js:36:19:45:1 | {\\n ren ... ;\\n }\\n} | statePropertyWrites.js:41:12:43:5 | {\\n p8: 42\\n } | +| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:48:18:48:18 | y | +| thisAccesses.js:47:1:52:1 | class C ... }\\n} | thisAccesses.js:49:22:49:22 | x | +test_JsxName_this +| es5.js:4:12:4:45 |
    He ... }
    | es5.js:4:24:4:27 | this | +| es5.js:20:12:20:44 |

    Hel ... e}

    | es5.js:20:24:20:27 | this | +| es6.js:3:12:3:45 |
    He ... }
    | es6.js:3:24:3:27 | this | +| statePropertyWrites.js:38:12:38:45 |
    He ... }
    | statePropertyWrites.js:38:24:38:27 | this | +| thisAccesses.js:60:19:60:41 | | thisAccesses.js:60:20:60:23 | this | +| thisAccesses.js:61:19:61:41 | | thisAccesses.js:61:20:61:23 | this | +locationSource +| importedComponent.jsx:3:32:3:39 | location | threatModelSource | es5.js:4:24:4:33 | this.props | view-component-input | | es5.js:20:24:20:33 | this.props | view-component-input | @@ -305,7 +343,3 @@ threatModelSource | statePropertyWrites.js:38:24:38:33 | this.props | view-component-input | | thisAccesses.js:31:12:31:16 | props | view-component-input | | thisAccesses.js:48:18:48:18 | y | view-component-input | -| use-server1.js:2:5:2:5 | x | remote | -| use-server1.js:3:5:3:5 | y | remote | -| use-server2.js:4:5:4:5 | x | remote | -| use-server2.js:5:5:5:5 | y | remote | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.ql b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.ql index 6de8091b010b..4d20306d4ed4 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.ql +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.ql @@ -1,53 +1,14 @@ -import javascript -import semmle.javascript.frameworks.React - -query predicate getADirectStateAccess(ReactComponent c, DataFlow::SourceNode res) { - res = c.getADirectStateAccess() -} - -query predicate getInstanceMethod(ReactComponent c, string n, Function res) { - res = c.getInstanceMethod(n) -} - -query predicate getAPreviousStateSource(ReactComponent c, DataFlow::SourceNode res) { - res = c.getAPreviousStateSource() -} - -query predicate reactComponentRef(ReactComponent c, DataFlow::Node res) { res = c.ref() } - -query predicate getACandidateStateSource(ReactComponent c, DataFlow::SourceNode res) { - res = c.getACandidateStateSource() -} - -query predicate getADirectPropsSource(ReactComponent c, DataFlow::SourceNode res) { - res = c.getADirectPropsAccess() -} - -query predicate getACandidatePropsValue(DataFlow::Node res) { - exists(ReactComponent c | res = c.getACandidatePropsValue(_)) -} - -query predicate reactComponent(ReactComponent c) { any() } - -query predicate getAPropRead(ReactComponent c, string n, DataFlow::PropRead res) { - res = c.getAPropRead(n) -} - -query predicate jsxName(JsxElement element, JsxName jsxname, string name, string type) { - name = jsxname.getValue() and - ( - jsxname instanceof Identifier and type = "Identifier" - or - jsxname instanceof ThisExpr and type = "thisExpr" - or - jsxname.(DotExpr).getBase() instanceof JsxName and type = "dot" - or - jsxname instanceof JsxQualifiedName and type = "qualifiedName" - ) and - element.getNameExpr() = jsxname -} - -query ThisExpr jsxNameThis(JsxElement element) { result.getParentExpr+() = element } +import getADirectStateAccess +import ReactComponent_getInstanceMethod +import react +import ReactComponent_getAPreviousStateSource +import ReactComponent_ref +import ReactComponent_getACandidateStateSource +import ReactComponent_getADirectPropsSource +import ReactComponent_getACandidatePropsValue +import ReactComponent +import ReactComponent_getAPropRead +import ReactName query DataFlow::SourceNode locationSource() { result = DOM::locationSource() } diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.qlref b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.qlref deleted file mode 100644 index 8581a3f8b748..000000000000 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.qlref +++ /dev/null @@ -1,2 +0,0 @@ -query: tests.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses.js b/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses.js index c30509974d4e..b662b7ca53bf 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses.js @@ -13,7 +13,7 @@ class C extends React.Component { someInstanceMethod() { this; } -} // $ reactComponent +} React.createClass({ render: function() { @@ -26,14 +26,14 @@ React.createClass({ someInstanceMethod: function() { this; } -}); // $ reactComponent +}); -(function (props) { // $ threatModelSource=view-component-input +(function (props) { (function () { this; props; }).bind(this); return
    ; -}) // $ reactComponent +}) React.createClass({ render: function() { @@ -42,14 +42,14 @@ React.createClass({ }, this) return
    ; }, -}); // $ reactComponent +}); class C2 extends React.Component { - constructor (y) { // $ threatModelSource=view-component-input + constructor (y) { this.state = x; this.state = y; } -} // $ reactComponent +} class C3 extends React.Component { constructor() { @@ -60,4 +60,4 @@ class C3 extends React.Component { var foo = ; var bar = ; } -} // $ reactComponent +} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses_importedMappers.js b/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses_importedMappers.js index abbbdd844ed0..06e5e1149fda 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses_importedMappers.js +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/thisAccesses_importedMappers.js @@ -12,4 +12,4 @@ React.createClass({ return
    ; }, -}); // $ reactComponent +}); diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/use-server1.js b/javascript/ql/test/library-tests/frameworks/ReactJS/use-server1.js deleted file mode 100644 index 1625ff23d1c0..000000000000 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/use-server1.js +++ /dev/null @@ -1,10 +0,0 @@ -async function getData( - x, // $ threatModelSource=remote - y) { // $ threatModelSource=remote - "use server"; -} - -async function getData2( - x, // should not be remote flow sources (because the function does not have "use server") - y) { -} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/use-server2.js b/javascript/ql/test/library-tests/frameworks/ReactJS/use-server2.js deleted file mode 100644 index fa0bbab05527..000000000000 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/use-server2.js +++ /dev/null @@ -1,11 +0,0 @@ -"use server"; - -export async function getData( - x, // $ threatModelSource=remote - y) { // $ threatModelSource=remote -} - -async function getData2( - x, // should not be remote flow sources (because the function is not exported) - y) { -} diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx index dba28fd1c6c5..a57c5aa70bab 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx @@ -2,17 +2,17 @@ import SomeComponent from './higherOrderComponent'; import { lazy } from 'react'; function foo() { - return // $ getACandidatePropsValue + return } const LazyLoadedComponent = lazy(() => import('./higherOrderComponent')); function bar() { - return // $ getACandidatePropsValue + return } const LazyLoadedComponent2 = lazy(() => import('./exportedComponent').then(m => m.MyComponent)); function barz() { - return // $ getACandidatePropsValue + return } diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 2a3e4c18884b..08bf15800dad 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -48,10 +48,6 @@ | TaintedPath.js:214:29:214:42 | improperEscape | TaintedPath.js:212:24:212:30 | req.url | TaintedPath.js:214:29:214:42 | improperEscape | This path depends on a $@. | TaintedPath.js:212:24:212:30 | req.url | user-provided value | | TaintedPath.js:216:29:216:43 | improperEscape2 | TaintedPath.js:212:24:212:30 | req.url | TaintedPath.js:216:29:216:43 | improperEscape2 | This path depends on a $@. | TaintedPath.js:212:24:212:30 | req.url | user-provided value | | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | examples/TaintedPath.js:8:28:8:34 | req.url | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | This path depends on a $@. | examples/TaintedPath.js:8:28:8:34 | req.url | user-provided value | -| execa.js:9:26:9:33 | filePath | execa.js:6:30:6:36 | req.url | execa.js:9:26:9:33 | filePath | This path depends on a $@. | execa.js:6:30:6:36 | req.url | user-provided value | -| execa.js:12:37:12:44 | filePath | execa.js:6:30:6:36 | req.url | execa.js:12:37:12:44 | filePath | This path depends on a $@. | execa.js:6:30:6:36 | req.url | user-provided value | -| execa.js:15:50:15:57 | filePath | execa.js:6:30:6:36 | req.url | execa.js:15:50:15:57 | filePath | This path depends on a $@. | execa.js:6:30:6:36 | req.url | user-provided value | -| execa.js:18:62:18:69 | filePath | execa.js:6:30:6:36 | req.url | execa.js:18:62:18:69 | filePath | This path depends on a $@. | execa.js:6:30:6:36 | req.url | user-provided value | | express.js:8:20:8:32 | req.query.bar | express.js:8:20:8:32 | req.query.bar | express.js:8:20:8:32 | req.query.bar | This path depends on a $@. | express.js:8:20:8:32 | req.query.bar | user-provided value | | handlebars.js:11:32:11:39 | filePath | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:11:32:11:39 | filePath | This path depends on a $@. | handlebars.js:29:46:29:60 | req.params.path | user-provided value | | handlebars.js:15:25:15:32 | filePath | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:15:25:15:32 | filePath | This path depends on a $@. | handlebars.js:43:15:43:29 | req.params.path | user-provided value | @@ -403,15 +399,6 @@ edges | examples/TaintedPath.js:8:18:8:52 | url.par ... ry.path | examples/TaintedPath.js:8:7:8:52 | filePath | provenance | | | examples/TaintedPath.js:8:28:8:34 | req.url | examples/TaintedPath.js:8:18:8:41 | url.par ... , true) | provenance | Config | | examples/TaintedPath.js:10:36:10:43 | filePath | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | provenance | Config | -| execa.js:6:9:6:64 | filePath | execa.js:9:26:9:33 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:12:37:12:44 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:15:50:15:57 | filePath | provenance | | -| execa.js:6:9:6:64 | filePath | execa.js:18:62:18:69 | filePath | provenance | | -| execa.js:6:20:6:43 | url.par ... , true) | execa.js:6:20:6:49 | url.par ... ).query | provenance | Config | -| execa.js:6:20:6:49 | url.par ... ).query | execa.js:6:20:6:61 | url.par ... ePath"] | provenance | Config | -| execa.js:6:20:6:61 | url.par ... ePath"] | execa.js:6:20:6:64 | url.par ... th"][0] | provenance | Config | -| execa.js:6:20:6:64 | url.par ... th"][0] | execa.js:6:9:6:64 | filePath | provenance | | -| execa.js:6:30:6:36 | req.url | execa.js:6:20:6:43 | url.par ... , true) | provenance | Config | | handlebars.js:10:51:10:58 | filePath | handlebars.js:11:32:11:39 | filePath | provenance | | | handlebars.js:13:73:13:80 | filePath | handlebars.js:15:25:15:32 | filePath | provenance | | | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:10:51:10:58 | filePath | provenance | | @@ -957,16 +944,6 @@ nodes | examples/TaintedPath.js:8:28:8:34 | req.url | semmle.label | req.url | | examples/TaintedPath.js:10:29:10:43 | ROOT + filePath | semmle.label | ROOT + filePath | | examples/TaintedPath.js:10:36:10:43 | filePath | semmle.label | filePath | -| execa.js:6:9:6:64 | filePath | semmle.label | filePath | -| execa.js:6:20:6:43 | url.par ... , true) | semmle.label | url.par ... , true) | -| execa.js:6:20:6:49 | url.par ... ).query | semmle.label | url.par ... ).query | -| execa.js:6:20:6:61 | url.par ... ePath"] | semmle.label | url.par ... ePath"] | -| execa.js:6:20:6:64 | url.par ... th"][0] | semmle.label | url.par ... th"][0] | -| execa.js:6:30:6:36 | req.url | semmle.label | req.url | -| execa.js:9:26:9:33 | filePath | semmle.label | filePath | -| execa.js:12:37:12:44 | filePath | semmle.label | filePath | -| execa.js:15:50:15:57 | filePath | semmle.label | filePath | -| execa.js:18:62:18:69 | filePath | semmle.label | filePath | | express.js:8:20:8:32 | req.query.bar | semmle.label | req.query.bar | | handlebars.js:10:51:10:58 | filePath | semmle.label | filePath | | handlebars.js:11:32:11:39 | filePath | semmle.label | filePath | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/execa.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/execa.js deleted file mode 100644 index 8fcfdd42c672..000000000000 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/execa.js +++ /dev/null @@ -1,19 +0,0 @@ -import { execa, $ } from 'execa'; -import http from 'node:http' -import url from 'url' - -http.createServer(async function (req, res) { - let filePath = url.parse(req.url, true).query["filePath"][0]; // $Source - - // Piping to stdin from a file - await $({ inputFile: filePath })`cat` // $Alert - - // Piping to stdin from a file - await execa('cat', { inputFile: filePath }); // $Alert - - // Piping Stdout to file - await execa('echo', ['example3']).pipeStdout(filePath); // $Alert - - // Piping all of command output to file - await execa('echo', ['example4'], { all: true }).pipeAll(filePath); // $Alert -}); diff --git a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected index 22394ec4cb89..b68d40a540dd 100644 --- a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/CommandInjection.expected @@ -24,33 +24,6 @@ | exec-sh2.js:10:12:10:57 | cp.spaw ... ptions) | exec-sh2.js:14:25:14:31 | req.url | exec-sh2.js:10:40:10:46 | command | This command line depends on a $@. | exec-sh2.js:14:25:14:31 | req.url | user-provided value | | exec-sh.js:15:12:15:61 | cp.spaw ... ptions) | exec-sh.js:19:25:19:31 | req.url | exec-sh.js:15:44:15:50 | command | This command line depends on a $@. | exec-sh.js:19:25:19:31 | req.url | user-provided value | | execSeries.js:14:41:14:47 | command | execSeries.js:18:34:18:40 | req.url | execSeries.js:14:41:14:47 | command | This command line depends on a $@. | execSeries.js:18:34:18:40 | req.url | user-provided value | -| execa.js:11:15:11:17 | cmd | execa.js:6:25:6:31 | req.url | execa.js:11:15:11:17 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:13:32:13:34 | cmd | execa.js:6:25:6:31 | req.url | execa.js:13:32:13:34 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:14:31:14:33 | cmd | execa.js:6:25:6:31 | req.url | execa.js:14:31:14:33 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:17:14:17:16 | cmd | execa.js:6:25:6:31 | req.url | execa.js:17:14:17:16 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:19:32:19:34 | cmd | execa.js:6:25:6:31 | req.url | execa.js:19:32:19:34 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:20:33:20:35 | cmd | execa.js:6:25:6:31 | req.url | execa.js:20:33:20:35 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:23:17:23:19 | cmd | execa.js:6:25:6:31 | req.url | execa.js:23:17:23:19 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:24:17:24:19 | cmd | execa.js:6:25:6:31 | req.url | execa.js:24:17:24:19 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:25:17:25:19 | cmd | execa.js:6:25:6:31 | req.url | execa.js:25:17:25:19 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:27:15:27:17 | cmd | execa.js:6:25:6:31 | req.url | execa.js:27:15:27:17 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:28:15:28:17 | cmd | execa.js:6:25:6:31 | req.url | execa.js:28:15:28:17 | cmd | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:30:24:30:47 | cmd + a ... + arg3 | execa.js:6:25:6:31 | req.url | execa.js:30:24:30:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:30:24:30:47 | cmd + a ... + arg3 | execa.js:7:26:7:32 | req.url | execa.js:30:24:30:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:7:26:7:32 | req.url | user-provided value | -| execa.js:30:24:30:47 | cmd + a ... + arg3 | execa.js:8:26:8:32 | req.url | execa.js:30:24:30:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:8:26:8:32 | req.url | user-provided value | -| execa.js:30:24:30:47 | cmd + a ... + arg3 | execa.js:9:26:9:32 | req.url | execa.js:30:24:30:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:9:26:9:32 | req.url | user-provided value | -| execa.js:31:24:31:47 | cmd + a ... + arg3 | execa.js:6:25:6:31 | req.url | execa.js:31:24:31:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:31:24:31:47 | cmd + a ... + arg3 | execa.js:7:26:7:32 | req.url | execa.js:31:24:31:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:7:26:7:32 | req.url | user-provided value | -| execa.js:31:24:31:47 | cmd + a ... + arg3 | execa.js:8:26:8:32 | req.url | execa.js:31:24:31:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:8:26:8:32 | req.url | user-provided value | -| execa.js:31:24:31:47 | cmd + a ... + arg3 | execa.js:9:26:9:32 | req.url | execa.js:31:24:31:47 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:9:26:9:32 | req.url | user-provided value | -| execa.js:33:22:33:45 | cmd + a ... + arg3 | execa.js:6:25:6:31 | req.url | execa.js:33:22:33:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:33:22:33:45 | cmd + a ... + arg3 | execa.js:7:26:7:32 | req.url | execa.js:33:22:33:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:7:26:7:32 | req.url | user-provided value | -| execa.js:33:22:33:45 | cmd + a ... + arg3 | execa.js:8:26:8:32 | req.url | execa.js:33:22:33:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:8:26:8:32 | req.url | user-provided value | -| execa.js:33:22:33:45 | cmd + a ... + arg3 | execa.js:9:26:9:32 | req.url | execa.js:33:22:33:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:9:26:9:32 | req.url | user-provided value | -| execa.js:34:22:34:45 | cmd + a ... + arg3 | execa.js:6:25:6:31 | req.url | execa.js:34:22:34:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:6:25:6:31 | req.url | user-provided value | -| execa.js:34:22:34:45 | cmd + a ... + arg3 | execa.js:7:26:7:32 | req.url | execa.js:34:22:34:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:7:26:7:32 | req.url | user-provided value | -| execa.js:34:22:34:45 | cmd + a ... + arg3 | execa.js:8:26:8:32 | req.url | execa.js:34:22:34:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:8:26:8:32 | req.url | user-provided value | -| execa.js:34:22:34:45 | cmd + a ... + arg3 | execa.js:9:26:9:32 | req.url | execa.js:34:22:34:45 | cmd + a ... + arg3 | This command line depends on a $@. | execa.js:9:26:9:32 | req.url | user-provided value | | form-parsers.js:9:8:9:39 | "touch ... nalname | form-parsers.js:9:19:9:26 | req.file | form-parsers.js:9:8:9:39 | "touch ... nalname | This command line depends on a $@. | form-parsers.js:9:19:9:26 | req.file | user-provided value | | form-parsers.js:14:10:14:37 | "touch ... nalname | form-parsers.js:13:3:13:11 | req.files | form-parsers.js:14:10:14:37 | "touch ... nalname | This command line depends on a $@. | form-parsers.js:13:3:13:11 | req.files | user-provided value | | form-parsers.js:25:10:25:28 | "touch " + filename | form-parsers.js:24:48:24:55 | filename | form-parsers.js:25:10:25:28 | "touch " + filename | This command line depends on a $@. | form-parsers.js:24:48:24:55 | filename | user-provided value | @@ -139,57 +112,6 @@ edges | execSeries.js:18:34:18:40 | req.url | execSeries.js:18:13:18:47 | require ... , true) | provenance | | | execSeries.js:19:12:19:16 | [cmd] [0] | execSeries.js:13:19:13:26 | commands [0] | provenance | | | execSeries.js:19:13:19:15 | cmd | execSeries.js:19:12:19:16 | [cmd] [0] | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:11:15:11:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:13:32:13:34 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:14:31:14:33 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:17:14:17:16 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:19:32:19:34 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:20:33:20:35 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:23:17:23:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:24:17:24:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:25:17:25:19 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:27:15:27:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:28:15:28:17 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:30:24:30:26 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:31:24:31:26 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:33:22:33:24 | cmd | provenance | | -| execa.js:6:9:6:54 | cmd | execa.js:34:22:34:24 | cmd | provenance | | -| execa.js:6:15:6:38 | url.par ... , true) | execa.js:6:9:6:54 | cmd | provenance | | -| execa.js:6:25:6:31 | req.url | execa.js:6:15:6:38 | url.par ... , true) | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:30:30:30:33 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:31:30:31:33 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:33:28:33:31 | arg1 | provenance | | -| execa.js:7:9:7:53 | arg1 | execa.js:34:28:34:31 | arg1 | provenance | | -| execa.js:7:16:7:39 | url.par ... , true) | execa.js:7:9:7:53 | arg1 | provenance | | -| execa.js:7:26:7:32 | req.url | execa.js:7:16:7:39 | url.par ... , true) | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:30:37:30:40 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:31:37:31:40 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:33:35:33:38 | arg2 | provenance | | -| execa.js:8:9:8:53 | arg2 | execa.js:34:35:34:38 | arg2 | provenance | | -| execa.js:8:16:8:39 | url.par ... , true) | execa.js:8:9:8:53 | arg2 | provenance | | -| execa.js:8:26:8:32 | req.url | execa.js:8:16:8:39 | url.par ... , true) | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:30:44:30:47 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:31:44:31:47 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:33:42:33:45 | arg3 | provenance | | -| execa.js:9:9:9:53 | arg3 | execa.js:34:42:34:45 | arg3 | provenance | | -| execa.js:9:16:9:39 | url.par ... , true) | execa.js:9:9:9:53 | arg3 | provenance | | -| execa.js:9:26:9:32 | req.url | execa.js:9:16:9:39 | url.par ... , true) | provenance | | -| execa.js:30:24:30:26 | cmd | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | -| execa.js:30:30:30:33 | arg1 | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | -| execa.js:30:37:30:40 | arg2 | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | -| execa.js:30:44:30:47 | arg3 | execa.js:30:24:30:47 | cmd + a ... + arg3 | provenance | | -| execa.js:31:24:31:26 | cmd | execa.js:31:24:31:47 | cmd + a ... + arg3 | provenance | | -| execa.js:31:30:31:33 | arg1 | execa.js:31:24:31:47 | cmd + a ... + arg3 | provenance | | -| execa.js:31:37:31:40 | arg2 | execa.js:31:24:31:47 | cmd + a ... + arg3 | provenance | | -| execa.js:31:44:31:47 | arg3 | execa.js:31:24:31:47 | cmd + a ... + arg3 | provenance | | -| execa.js:33:22:33:24 | cmd | execa.js:33:22:33:45 | cmd + a ... + arg3 | provenance | | -| execa.js:33:28:33:31 | arg1 | execa.js:33:22:33:45 | cmd + a ... + arg3 | provenance | | -| execa.js:33:35:33:38 | arg2 | execa.js:33:22:33:45 | cmd + a ... + arg3 | provenance | | -| execa.js:33:42:33:45 | arg3 | execa.js:33:22:33:45 | cmd + a ... + arg3 | provenance | | -| execa.js:34:22:34:24 | cmd | execa.js:34:22:34:45 | cmd + a ... + arg3 | provenance | | -| execa.js:34:28:34:31 | arg1 | execa.js:34:22:34:45 | cmd + a ... + arg3 | provenance | | -| execa.js:34:35:34:38 | arg2 | execa.js:34:22:34:45 | cmd + a ... + arg3 | provenance | | -| execa.js:34:42:34:45 | arg3 | execa.js:34:22:34:45 | cmd + a ... + arg3 | provenance | | | form-parsers.js:9:19:9:26 | req.file | form-parsers.js:9:8:9:39 | "touch ... nalname | provenance | | | form-parsers.js:13:3:13:11 | req.files | form-parsers.js:13:21:13:24 | file | provenance | | | form-parsers.js:13:21:13:24 | file | form-parsers.js:14:21:14:24 | file | provenance | | @@ -294,49 +216,6 @@ nodes | execSeries.js:18:34:18:40 | req.url | semmle.label | req.url | | execSeries.js:19:12:19:16 | [cmd] [0] | semmle.label | [cmd] [0] | | execSeries.js:19:13:19:15 | cmd | semmle.label | cmd | -| execa.js:6:9:6:54 | cmd | semmle.label | cmd | -| execa.js:6:15:6:38 | url.par ... , true) | semmle.label | url.par ... , true) | -| execa.js:6:25:6:31 | req.url | semmle.label | req.url | -| execa.js:7:9:7:53 | arg1 | semmle.label | arg1 | -| execa.js:7:16:7:39 | url.par ... , true) | semmle.label | url.par ... , true) | -| execa.js:7:26:7:32 | req.url | semmle.label | req.url | -| execa.js:8:9:8:53 | arg2 | semmle.label | arg2 | -| execa.js:8:16:8:39 | url.par ... , true) | semmle.label | url.par ... , true) | -| execa.js:8:26:8:32 | req.url | semmle.label | req.url | -| execa.js:9:9:9:53 | arg3 | semmle.label | arg3 | -| execa.js:9:16:9:39 | url.par ... , true) | semmle.label | url.par ... , true) | -| execa.js:9:26:9:32 | req.url | semmle.label | req.url | -| execa.js:11:15:11:17 | cmd | semmle.label | cmd | -| execa.js:13:32:13:34 | cmd | semmle.label | cmd | -| execa.js:14:31:14:33 | cmd | semmle.label | cmd | -| execa.js:17:14:17:16 | cmd | semmle.label | cmd | -| execa.js:19:32:19:34 | cmd | semmle.label | cmd | -| execa.js:20:33:20:35 | cmd | semmle.label | cmd | -| execa.js:23:17:23:19 | cmd | semmle.label | cmd | -| execa.js:24:17:24:19 | cmd | semmle.label | cmd | -| execa.js:25:17:25:19 | cmd | semmle.label | cmd | -| execa.js:27:15:27:17 | cmd | semmle.label | cmd | -| execa.js:28:15:28:17 | cmd | semmle.label | cmd | -| execa.js:30:24:30:26 | cmd | semmle.label | cmd | -| execa.js:30:24:30:47 | cmd + a ... + arg3 | semmle.label | cmd + a ... + arg3 | -| execa.js:30:30:30:33 | arg1 | semmle.label | arg1 | -| execa.js:30:37:30:40 | arg2 | semmle.label | arg2 | -| execa.js:30:44:30:47 | arg3 | semmle.label | arg3 | -| execa.js:31:24:31:26 | cmd | semmle.label | cmd | -| execa.js:31:24:31:47 | cmd + a ... + arg3 | semmle.label | cmd + a ... + arg3 | -| execa.js:31:30:31:33 | arg1 | semmle.label | arg1 | -| execa.js:31:37:31:40 | arg2 | semmle.label | arg2 | -| execa.js:31:44:31:47 | arg3 | semmle.label | arg3 | -| execa.js:33:22:33:24 | cmd | semmle.label | cmd | -| execa.js:33:22:33:45 | cmd + a ... + arg3 | semmle.label | cmd + a ... + arg3 | -| execa.js:33:28:33:31 | arg1 | semmle.label | arg1 | -| execa.js:33:35:33:38 | arg2 | semmle.label | arg2 | -| execa.js:33:42:33:45 | arg3 | semmle.label | arg3 | -| execa.js:34:22:34:24 | cmd | semmle.label | cmd | -| execa.js:34:22:34:45 | cmd + a ... + arg3 | semmle.label | cmd + a ... + arg3 | -| execa.js:34:28:34:31 | arg1 | semmle.label | arg1 | -| execa.js:34:35:34:38 | arg2 | semmle.label | arg2 | -| execa.js:34:42:34:45 | arg3 | semmle.label | arg3 | | form-parsers.js:9:8:9:39 | "touch ... nalname | semmle.label | "touch ... nalname | | form-parsers.js:9:19:9:26 | req.file | semmle.label | req.file | | form-parsers.js:13:3:13:11 | req.files | semmle.label | req.files | diff --git a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/execa.js b/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/execa.js deleted file mode 100644 index ed7f8832f9cc..000000000000 --- a/javascript/ql/test/query-tests/Security/CWE-078/CommandInjection/execa.js +++ /dev/null @@ -1,35 +0,0 @@ -import { execa, execaSync, execaCommand, execaCommandSync, $ } from 'execa'; -import http from 'node:http' -import url from 'url' - -http.createServer(async function (req, res) { - let cmd = url.parse(req.url, true).query["cmd"][0]; // $Source - let arg1 = url.parse(req.url, true).query["arg1"]; // $Source - let arg2 = url.parse(req.url, true).query["arg2"]; // $Source - let arg3 = url.parse(req.url, true).query["arg3"]; // $Source - - await $`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - await $`ssh ${arg1} ${arg2} ${arg3}`; // safely escapes variables, preventing shell injection. - $({ shell: false }).sync`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - $({ shell: true }).sync`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - $({ shell: false }).sync`ssh ${arg1} ${arg2} ${arg3}`; // safely escapes variables, preventing shell injection. - - $.sync`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - $.sync`ssh ${arg1} ${arg2} ${arg3}`; // safely escapes variables, preventing shell injection. - await $({ shell: true })`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - await $({ shell: false })`${cmd} ${arg1} ${arg2} ${arg3}`; // $Alert - await $({ shell: false })`ssh ${arg1} ${arg2} ${arg3}`; // safely escapes variables, preventing shell injection. - - await execa(cmd, [arg1, arg2, arg3]); // $Alert - await execa(cmd, { shell: true }); // $Alert - await execa(cmd, [arg1, arg2, arg3], { shell: true }); // $Alert - - execaSync(cmd, [arg1, arg2, arg3]); // $Alert - execaSync(cmd, [arg1, arg2, arg3], { shell: true }); // $Alert - - await execaCommand(cmd + arg1 + arg2 + arg3); // $Alert - await execaCommand(cmd + arg1 + arg2 + arg3, { shell: true }); // $Alert - - execaCommandSync(cmd + arg1 + arg2 + arg3); // $Alert - execaCommandSync(cmd + arg1 + arg2 + arg3, { shell: true }); // $Alert -}); diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected index 412f0a5c5fa5..4d54adb27249 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected @@ -65,8 +65,7 @@ | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value | | react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | | react-native.js:10:23:10:29 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:10:23:10:29 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value | -| react.js:11:56:11:77 | documen ... on.hash | react.js:11:56:11:77 | documen ... on.hash | react.js:11:56:11:77 | documen ... on.hash | This code execution depends on a $@. | react.js:11:56:11:77 | documen ... on.hash | user-provided value | -| react.js:25:8:25:11 | data | react-server-function.js:3:35:3:35 | x | react.js:25:8:25:11 | data | This code execution depends on a $@. | react-server-function.js:3:35:3:35 | x | user-provided value | +| react.js:10:56:10:77 | documen ... on.hash | react.js:10:56:10:77 | documen ... on.hash | react.js:10:56:10:77 | documen ... on.hash | This code execution depends on a $@. | react.js:10:56:10:77 | documen ... on.hash | user-provided value | | template-sinks.js:20:17:20:23 | tainted | template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:20:17:20:23 | tainted | Template, which may contain code, depends on a $@. | template-sinks.js:18:19:18:31 | req.query.foo | user-provided value | | template-sinks.js:21:16:21:22 | tainted | template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:21:16:21:22 | tainted | Template, which may contain code, depends on a $@. | template-sinks.js:18:19:18:31 | req.query.foo | user-provided value | | template-sinks.js:22:18:22:24 | tainted | template-sinks.js:18:19:18:31 | req.query.foo | template-sinks.js:22:18:22:24 | tainted | Template, which may contain code, depends on a $@. | template-sinks.js:18:19:18:31 | req.query.foo | user-provided value | @@ -157,12 +156,6 @@ edges | react-native.js:7:7:7:33 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:33 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:33 | tainted | provenance | | -| react-server-function.js:3:35:3:35 | x | react-server-function.js:4:12:4:12 | x | provenance | | -| react-server-function.js:4:12:4:12 | x | react-server-function.js:4:12:4:29 | x + " from server" | provenance | | -| react-server-function.js:4:12:4:29 | x + " from server" | react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | provenance | | -| react.js:24:9:24:45 | data | react.js:25:8:25:11 | data | provenance | | -| react.js:24:16:24:45 | use(ech ... alue")) | react.js:24:9:24:45 | data | provenance | | -| react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | react.js:24:16:24:45 | use(ech ... alue")) | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:20:17:20:23 | tainted | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:21:16:21:22 | tainted | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:22:18:22:24 | tainted | provenance | | @@ -294,14 +287,7 @@ nodes | react-native.js:7:17:7:33 | req.param("code") | semmle.label | req.param("code") | | react-native.js:8:32:8:38 | tainted | semmle.label | tainted | | react-native.js:10:23:10:29 | tainted | semmle.label | tainted | -| react-server-function.js:3:35:3:35 | x | semmle.label | x | -| react-server-function.js:4:12:4:12 | x | semmle.label | x | -| react-server-function.js:4:12:4:29 | x + " from server" | semmle.label | x + " from server" | -| react.js:11:56:11:77 | documen ... on.hash | semmle.label | documen ... on.hash | -| react.js:24:9:24:45 | data | semmle.label | data | -| react.js:24:16:24:45 | use(ech ... alue")) | semmle.label | use(ech ... alue")) | -| react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | semmle.label | echoSer ... value") [PromiseValue] | -| react.js:25:8:25:11 | data | semmle.label | data | +| react.js:10:56:10:77 | documen ... on.hash | semmle.label | documen ... on.hash | | template-sinks.js:18:9:18:31 | tainted | semmle.label | tainted | | template-sinks.js:18:19:18:31 | req.query.foo | semmle.label | req.query.foo | | template-sinks.js:20:17:20:23 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected index 5a249b086b97..a1c8354ecf71 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected @@ -58,12 +58,6 @@ edges | react-native.js:7:7:7:33 | tainted | react-native.js:8:32:8:38 | tainted | provenance | | | react-native.js:7:7:7:33 | tainted | react-native.js:10:23:10:29 | tainted | provenance | | | react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:33 | tainted | provenance | | -| react-server-function.js:3:35:3:35 | x | react-server-function.js:4:12:4:12 | x | provenance | | -| react-server-function.js:4:12:4:12 | x | react-server-function.js:4:12:4:29 | x + " from server" | provenance | | -| react-server-function.js:4:12:4:29 | x + " from server" | react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | provenance | | -| react.js:24:9:24:45 | data | react.js:25:8:25:11 | data | provenance | | -| react.js:24:16:24:45 | use(ech ... alue")) | react.js:24:9:24:45 | data | provenance | | -| react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | react.js:24:16:24:45 | use(ech ... alue")) | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:20:17:20:23 | tainted | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:21:16:21:22 | tainted | provenance | | | template-sinks.js:18:9:18:31 | tainted | template-sinks.js:22:18:22:24 | tainted | provenance | | @@ -197,14 +191,7 @@ nodes | react-native.js:7:17:7:33 | req.param("code") | semmle.label | req.param("code") | | react-native.js:8:32:8:38 | tainted | semmle.label | tainted | | react-native.js:10:23:10:29 | tainted | semmle.label | tainted | -| react-server-function.js:3:35:3:35 | x | semmle.label | x | -| react-server-function.js:4:12:4:12 | x | semmle.label | x | -| react-server-function.js:4:12:4:29 | x + " from server" | semmle.label | x + " from server" | -| react.js:11:56:11:77 | documen ... on.hash | semmle.label | documen ... on.hash | -| react.js:24:9:24:45 | data | semmle.label | data | -| react.js:24:16:24:45 | use(ech ... alue")) | semmle.label | use(ech ... alue")) | -| react.js:24:20:24:44 | echoSer ... value") [PromiseValue] | semmle.label | echoSer ... value") [PromiseValue] | -| react.js:25:8:25:11 | data | semmle.label | data | +| react.js:10:56:10:77 | documen ... on.hash | semmle.label | documen ... on.hash | | template-sinks.js:18:9:18:31 | tainted | semmle.label | tainted | | template-sinks.js:18:19:18:31 | req.query.foo | semmle.label | req.query.foo | | template-sinks.js:20:17:20:23 | tainted | semmle.label | tainted | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react-server-function.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react-server-function.js deleted file mode 100644 index 9c6bf514201a..000000000000 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react-server-function.js +++ /dev/null @@ -1,5 +0,0 @@ -"use server"; - -export async function echoService(x) { // $ Source[js/code-injection] - return x + " from server"; -} diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react.js index ab6ff096af43..32db7a3f621a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react.js +++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/react.js @@ -1,7 +1,6 @@ -import React, { use } from "react"; +import React from "react"; import {Helmet} from "react-helmet"; -import { echoService } from "./react-server-function"; - + class Application extends React.Component { render () { return ( @@ -15,12 +14,4 @@ class Application extends React.Component { } }; -export default Application - -export function Component() { - // We currently get false-positive flow through server functions in cases where a safe value - // is passed as the argument, which flows to the return value. In this case, the tainted parameter - // flows out of the return value regardless. - const data = use(echoService("safe value")); - eval(data); // $ SPURIOUS: Alert[js/code-injection] -} +export default Application \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue.yml new file mode 100644 index 000000000000..17ead9fdd204 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue.yml @@ -0,0 +1,28 @@ +on: issue_comment + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: | + echo '${{ github.event.comment.body }}' + + echo-chamber2: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.comment.body }}' + - run: echo '${{ github.event.issue.body }}' + - run: echo '${{ github.event.issue.title }}' + + echo-chamber3: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v3 + with: + script: console.log('${{ github.event.comment.body }}') + - uses: actions/github-script@v3 + with: + script: console.log('${{ github.event.issue.body }}') + - uses: actions/github-script@v3 + with: + script: console.log('${{ github.event.issue.title }}') \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue_newline.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue_newline.yml new file mode 100644 index 000000000000..0a64e47f6cba --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue_newline.yml @@ -0,0 +1,10 @@ +on: issue_comment + +# same as comment_issue but this file ends with a line break + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: | + echo '${{ github.event.comment.body }}' diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion.yml new file mode 100644 index 000000000000..fdb140ec3802 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion.yml @@ -0,0 +1,8 @@ +on: discussion + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.discussion.title }}' + - run: echo '${{ github.event.discussion.body }}' \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion_comment.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion_comment.yml new file mode 100644 index 000000000000..649d3a6e1319 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/discussion_comment.yml @@ -0,0 +1,9 @@ +on: discussion_comment + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.discussion.title }}' + - run: echo '${{ github.event.discussion.body }}' + - run: echo '${{ github.event.comment.body }}' \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/gollum.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/gollum.yml new file mode 100644 index 000000000000..a952c8c1ab85 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/gollum.yml @@ -0,0 +1,11 @@ +on: gollum + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.pages[1].title }}' + - run: echo '${{ github.event.pages[11].title }}' + - run: echo '${{ github.event.pages[0].page_name }}' + - run: echo '${{ github.event.pages[2222].page_name }}' + - run: echo '${{ toJSON(github.event.pages.*.title) }}' # safe \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/issues.yaml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/issues.yaml new file mode 100644 index 000000000000..5e767ce0239f --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/issues.yaml @@ -0,0 +1,20 @@ +on: issues + +env: + global_env: ${{ github.event.issue.title }} + test: test + +jobs: + echo-chamber: + env: + job_env: ${{ github.event.issue.title }} + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.issue.title }}' + - run: echo '${{ github.event.issue.body }}' + - run: echo '${{ env.global_env }}' + - run: echo '${{ env.test }}' + - run: echo '${{ env.job_env }}' + - run: echo '${{ env.step_env }}' + env: + step_env: ${{ github.event.issue.title }} diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review.yml new file mode 100644 index 000000000000..d4ce78856694 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review.yml @@ -0,0 +1,14 @@ +on: pull_request_review + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.pull_request.title }}' + - run: echo '${{ github.event.pull_request.body }}' + - run: echo '${{ github.event.pull_request.head.label }}' + - run: echo '${{ github.event.pull_request.head.repo.default_branch }}' + - run: echo '${{ github.event.pull_request.head.repo.description }}' + - run: echo '${{ github.event.pull_request.head.repo.homepage }}' + - run: echo '${{ github.event.pull_request.head.ref }}' + - run: echo '${{ github.event.review.body }}' diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review_comment.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review_comment.yml new file mode 100644 index 000000000000..5d288caad85d --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_review_comment.yml @@ -0,0 +1,14 @@ +on: pull_request_review_comment + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.pull_request.title }}' + - run: echo '${{ github.event.pull_request.body }}' + - run: echo '${{ github.event.pull_request.head.label }}' + - run: echo '${{ github.event.pull_request.head.repo.default_branch }}' + - run: echo '${{ github.event.pull_request.head.repo.description }}' + - run: echo '${{ github.event.pull_request.head.repo.homepage }}' + - run: echo '${{ github.event.pull_request.head.ref }}' + - run: echo '${{ github.event.comment.body }}' diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_target.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_target.yml new file mode 100644 index 000000000000..215b32528853 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/pull_request_target.yml @@ -0,0 +1,16 @@ +on: pull_request_target + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.issue.title }}' # not defined + - run: echo '${{ github.event.issue.body }}' # not defined + - run: echo '${{ github.event.pull_request.title }}' + - run: echo '${{ github.event.pull_request.body }}' + - run: echo '${{ github.event.pull_request.head.label }}' + - run: echo '${{ github.event.pull_request.head.repo.default_branch }}' + - run: echo '${{ github.event.pull_request.head.repo.description }}' + - run: echo '${{ github.event.pull_request.head.repo.homepage }}' + - run: echo '${{ github.event.pull_request.head.ref }}' + - run: echo '${{ github.head_ref }}' diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/push.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/push.yml new file mode 100644 index 000000000000..2006a7999daf --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/push.yml @@ -0,0 +1,16 @@ +on: push + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.commits[11].message }}' + - run: echo '${{ github.event.commits[11].author.email }}' + - run: echo '${{ github.event.commits[11].author.name }}' + - run: echo '${{ github.event.head_commit.message }}' + - run: echo '${{ github.event.head_commit.author.email }}' + - run: echo '${{ github.event.head_commit.author.name }}' + - run: echo '${{ github.event.head_commit.committer.email }}' + - run: echo '${{ github.event.head_commit.committer.name }}' + - run: echo '${{ github.event.commits[11].committer.email }}' + - run: echo '${{ github.event.commits[11].committer.name }}' \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/workflow_run.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/workflow_run.yml new file mode 100644 index 000000000000..60e7645f60fe --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/workflow_run.yml @@ -0,0 +1,16 @@ +on: + workflow_run: + workflows: [test] + +jobs: + echo-chamber: + runs-on: ubuntu-latest + steps: + - run: echo '${{ github.event.workflow_run.display_title }}' + - run: echo '${{ github.event.workflow_run.head_commit.message }}' + - run: echo '${{ github.event.workflow_run.head_commit.author.email }}' + - run: echo '${{ github.event.workflow_run.head_commit.author.name }}' + - run: echo '${{ github.event.workflow_run.head_commit.committer.email }}' + - run: echo '${{ github.event.workflow_run.head_commit.committer.name }}' + - run: echo '${{ github.event.workflow_run.head_branch }}' + - run: echo '${{ github.event.workflow_run.head_repository.description }}' diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.expected new file mode 100644 index 000000000000..414b9b9ae404 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.expected @@ -0,0 +1,65 @@ +| .github/workflows/comment_issue.yml:7:12:8:48 | \| | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:13:12:13:50 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:14:12:14:48 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.issue.body }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:15:12:15:49 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.issue.title }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:22:17:22:63 | console ... dy }}') | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:25:17:25:61 | console ... dy }}') | Potential injection from the ${{ github.event.issue.body }}, which may be controlled by an external user. | +| .github/workflows/comment_issue.yml:28:17:28:62 | console ... le }}') | Potential injection from the ${{ github.event.issue.title }}, which may be controlled by an external user. | +| .github/workflows/comment_issue_newline.yml:9:14:10:50 | \| | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/discussion.yml:7:12:7:54 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.discussion.title }}, which may be controlled by an external user. | +| .github/workflows/discussion.yml:8:12:8:53 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.discussion.body }}, which may be controlled by an external user. | +| .github/workflows/discussion_comment.yml:7:12:7:54 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.discussion.title }}, which may be controlled by an external user. | +| .github/workflows/discussion_comment.yml:8:12:8:53 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.discussion.body }}, which may be controlled by an external user. | +| .github/workflows/discussion_comment.yml:9:12:9:50 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/gollum.yml:7:12:7:52 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.pages[1].title }}, which may be controlled by an external user. | +| .github/workflows/gollum.yml:8:12:8:53 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.pages[11].title }}, which may be controlled by an external user. | +| .github/workflows/gollum.yml:9:12:9:56 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.pages[0].page_name }}, which may be controlled by an external user. | +| .github/workflows/gollum.yml:10:12:10:59 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.pages[2222].page_name }}, which may be controlled by an external user. | +| .github/workflows/issues.yaml:13:12:13:49 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.issue.title }}, which may be controlled by an external user. | +| .github/workflows/issues.yaml:14:12:14:48 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.issue.body }}, which may be controlled by an external user. | +| .github/workflows/issues.yaml:15:12:15:39 | echo '$ ... env }}' | Potential injection from the ${{ env.global_env }}, which may be controlled by an external user. | +| .github/workflows/issues.yaml:17:12:17:36 | echo '$ ... env }}' | Potential injection from the ${{ env.job_env }}, which may be controlled by an external user. | +| .github/workflows/issues.yaml:18:12:18:37 | echo '$ ... env }}' | Potential injection from the ${{ env.step_env }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:7:12:7:56 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.pull_request.title }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:8:12:8:55 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.pull_request.body }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:9:12:9:61 | echo '$ ... bel }}' | Potential injection from the ${{ github.event.pull_request.head.label }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:10:12:10:75 | echo '$ ... nch }}' | Potential injection from the ${{ github.event.pull_request.head.repo.default_branch }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:11:12:11:72 | echo '$ ... ion }}' | Potential injection from the ${{ github.event.pull_request.head.repo.description }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:12:12:12:69 | echo '$ ... age }}' | Potential injection from the ${{ github.event.pull_request.head.repo.homepage }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:13:12:13:59 | echo '$ ... ref }}' | Potential injection from the ${{ github.event.pull_request.head.ref }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review.yml:14:12:14:49 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.review.body }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:7:12:7:56 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.pull_request.title }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:8:12:8:55 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.pull_request.body }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:9:12:9:61 | echo '$ ... bel }}' | Potential injection from the ${{ github.event.pull_request.head.label }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:10:12:10:75 | echo '$ ... nch }}' | Potential injection from the ${{ github.event.pull_request.head.repo.default_branch }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:11:12:11:72 | echo '$ ... ion }}' | Potential injection from the ${{ github.event.pull_request.head.repo.description }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:12:12:12:69 | echo '$ ... age }}' | Potential injection from the ${{ github.event.pull_request.head.repo.homepage }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:13:12:13:59 | echo '$ ... ref }}' | Potential injection from the ${{ github.event.pull_request.head.ref }}, which may be controlled by an external user. | +| .github/workflows/pull_request_review_comment.yml:14:12:14:50 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:9:12:9:56 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.pull_request.title }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:10:12:10:55 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.pull_request.body }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:11:12:11:61 | echo '$ ... bel }}' | Potential injection from the ${{ github.event.pull_request.head.label }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:12:12:12:75 | echo '$ ... nch }}' | Potential injection from the ${{ github.event.pull_request.head.repo.default_branch }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:13:12:13:72 | echo '$ ... ion }}' | Potential injection from the ${{ github.event.pull_request.head.repo.description }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:14:12:14:69 | echo '$ ... age }}' | Potential injection from the ${{ github.event.pull_request.head.repo.homepage }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:15:12:15:59 | echo '$ ... ref }}' | Potential injection from the ${{ github.event.pull_request.head.ref }}, which may be controlled by an external user. | +| .github/workflows/pull_request_target.yml:16:12:16:40 | echo '$ ... ref }}' | Potential injection from the ${{ github.head_ref }}, which may be controlled by an external user. | +| .github/workflows/push.yml:7:12:7:57 | echo '$ ... age }}' | Potential injection from the ${{ github.event.commits[11].message }}, which may be controlled by an external user. | +| .github/workflows/push.yml:8:12:8:62 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.commits[11].author.email }}, which may be controlled by an external user. | +| .github/workflows/push.yml:9:12:9:61 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.commits[11].author.name }}, which may be controlled by an external user. | +| .github/workflows/push.yml:10:12:10:57 | echo '$ ... age }}' | Potential injection from the ${{ github.event.head_commit.message }}, which may be controlled by an external user. | +| .github/workflows/push.yml:11:12:11:62 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.head_commit.author.email }}, which may be controlled by an external user. | +| .github/workflows/push.yml:12:12:12:61 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.head_commit.author.name }}, which may be controlled by an external user. | +| .github/workflows/push.yml:13:12:13:65 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.head_commit.committer.email }}, which may be controlled by an external user. | +| .github/workflows/push.yml:14:12:14:64 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.head_commit.committer.name }}, which may be controlled by an external user. | +| .github/workflows/push.yml:15:12:15:65 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.commits[11].committer.email }}, which may be controlled by an external user. | +| .github/workflows/push.yml:16:12:16:64 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.commits[11].committer.name }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:9:12:9:64 | echo '$ ... tle }}' | Potential injection from the ${{ github.event.workflow_run.display_title }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:10:12:10:70 | echo '$ ... age }}' | Potential injection from the ${{ github.event.workflow_run.head_commit.message }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:11:12:11:75 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.workflow_run.head_commit.author.email }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:12:12:12:74 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.workflow_run.head_commit.author.name }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:13:12:13:78 | echo '$ ... ail }}' | Potential injection from the ${{ github.event.workflow_run.head_commit.committer.email }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:14:12:14:77 | echo '$ ... ame }}' | Potential injection from the ${{ github.event.workflow_run.head_commit.committer.name }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:15:12:15:62 | echo '$ ... nch }}' | Potential injection from the ${{ github.event.workflow_run.head_branch }}, which may be controlled by an external user. | +| .github/workflows/workflow_run.yml:16:12:16:78 | echo '$ ... ion }}' | Potential injection from the ${{ github.event.workflow_run.head_repository.description }}, which may be controlled by an external user. | +| action1/action.yml:14:12:14:50 | echo '$ ... ody }}' | Potential injection from the ${{ github.event.comment.body }}, which may be controlled by an external user. | diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref new file mode 100644 index 000000000000..dd00277b79b5 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref @@ -0,0 +1 @@ +query: Security/CWE-094/ExpressionInjection.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action1/action.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action1/action.yml new file mode 100644 index 000000000000..e9a178cf3dbd --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action1/action.yml @@ -0,0 +1,14 @@ +name: 'test' +description: 'test' +branding: + icon: 'test' + color: 'test' +inputs: + test: + description: test + required: false + default: 'test' +runs: + using: "composite" + steps: + - run: echo '${{ github.event.comment.body }}' \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action2/action.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action2/action.yml new file mode 100644 index 000000000000..40fe0b31e6a1 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/action2/action.yml @@ -0,0 +1,17 @@ +name: 'Hello World' +description: 'Greet someone and record the time' +inputs: + who-to-greet: # id of input + description: 'Who to greet' + required: true + default: 'World' +outputs: + time: # id of output + description: 'The time we greeted you' +runs: + using: 'docker' + steps: # this is actually invalid, used to test we correctly identify composite actions + - run: echo '${{ github.event.comment.body }}' + image: 'Dockerfile' + args: + - ${{ inputs.who-to-greet }} \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-312/.github/workflows/test.yml b/javascript/ql/test/query-tests/Security/CWE-312/.github/workflows/test.yml new file mode 100644 index 000000000000..473d59986957 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-312/.github/workflows/test.yml @@ -0,0 +1,87 @@ +name: secrets-in-artifacts +on: + pull_request: +jobs: + test1: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: . + test2: # NOT VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Upload artifact" + uses: actions/upload-artifact@v4 + with: + name: file + path: . + test3: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: "*" + test4: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: foo + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: foo + test5: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: foo + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: foo/* + test6: # NOT VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: pr + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: foo + test7: # NOT VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: . + test8: # VULNERABLE + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: true + - name: "Upload artifact" + uses: actions/upload-artifact@1746f4ab65b179e0ea60a494b83293b640dd5bba # v4.3.2 + with: + name: file + path: . + diff --git a/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.expected b/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.expected new file mode 100644 index 000000000000..575ddda89a48 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.expected @@ -0,0 +1,5 @@ +| .github/workflows/test.yml:9:9:14:2 | name: " ... tifact" | A secret may be exposed in an artifact. | +| .github/workflows/test.yml:27:9:32:2 | name: " ... tifact" | A secret may be exposed in an artifact. | +| .github/workflows/test.yml:38:9:43:2 | name: " ... tifact" | A secret may be exposed in an artifact. | +| .github/workflows/test.yml:49:9:54:2 | name: " ... tifact" | A secret may be exposed in an artifact. | +| .github/workflows/test.yml:82:9:86:18 | name: " ... tifact" | A secret may be exposed in an artifact. | diff --git a/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.qlref b/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.qlref new file mode 100644 index 000000000000..79d8f4aea279 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-312/ActionsArtifactLeak.qlref @@ -0,0 +1 @@ +query: Security/CWE-312/ActionsArtifactLeak.ql diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 7f5a20358413..440382b51c88 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -300,7 +300,6 @@ _NORMAL_DEPENDENCIES = { "lazy_static": Label("@vendor_ts__lazy_static-1.5.0//:lazy_static"), "rayon": Label("@vendor_ts__rayon-1.10.0//:rayon"), "regex": Label("@vendor_ts__regex-1.11.1//:regex"), - "serde_json": Label("@vendor_ts__serde_json-1.0.140//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber"), "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), diff --git a/misc/codegen/generators/qlgen.py b/misc/codegen/generators/qlgen.py index c3848917c49e..991c21990d46 100755 --- a/misc/codegen/generators/qlgen.py +++ b/misc/codegen/generators/qlgen.py @@ -30,7 +30,6 @@ import typing import itertools import os -import dataclasses import inflection @@ -114,197 +113,117 @@ def _get_doc(cls: schema.Class, prop: schema.Property, plural=None): return f"{prop_name} of this {class_name}" -@dataclasses.dataclass -class Resolver: - lookup: typing.Dict[str, schema.ClassBase] - _property_cache: typing.Dict[tuple[int, int], ql.Property] = dataclasses.field( - default_factory=dict, init=False - ) - _class_cache: typing.Dict[int, ql.Class] = dataclasses.field( - default_factory=dict, init=False - ) - - def _type_is_hideable(self, t: str) -> bool: - match self.lookup.get(t): +def _type_is_hideable(t: str, lookup: typing.Dict[str, schema.ClassBase]) -> bool: + if t in lookup: + match lookup[t]: case schema.Class() as cls: return "ql_hideable" in cls.pragmas - case _: - return False - - def get_ql_property( - self, - cls: schema.Class, - prop: schema.Property, - ) -> ql.Property: - cache_key = (id(cls), id(prop)) - if cache_key not in self._property_cache: - args = dict( - type=prop.type if not prop.is_predicate else "predicate", - qltest_skip="qltest_skip" in prop.pragmas, - is_optional=prop.is_optional, - is_predicate=prop.is_predicate, - is_unordered=prop.is_unordered, - description=prop.description, - synth=bool(cls.synth) or prop.synth, - type_is_hideable=self._type_is_hideable(prop.type), - type_is_codegen_class=prop.type in self.lookup - and not self.lookup[prop.type].imported, - internal="ql_internal" in prop.pragmas, - cfg=prop.is_child - and prop.type in self.lookup - and self.lookup[prop.type].cfg, - is_child=prop.is_child, - ) - ql_name = prop.pragmas.get("ql_name", prop.name) - db_table_name = prop.pragmas.get("ql_db_table_name") - if db_table_name and prop.is_single: - raise Error( - f"`db_table_name` pragma is not supported for single properties, but {cls.name}.{prop.name} has it" - ) - if prop.is_single: - args.update( - singular=inflection.camelize(ql_name), - tablename=inflection.tableize(cls.name), - tableparams=["this"] - + [ - "result" if p is prop else "_" - for p in cls.properties - if p.is_single - ], - doc=_get_doc(cls, prop), - ) - elif prop.is_repeated: - args.update( - singular=inflection.singularize(inflection.camelize(ql_name)), - plural=inflection.pluralize(inflection.camelize(ql_name)), - tablename=db_table_name - or inflection.tableize(f"{cls.name}_{prop.name}"), - tableparams=( - ["this", "index", "result"] - if not prop.is_unordered - else ["this", "result"] - ), - doc=_get_doc(cls, prop, plural=False), - doc_plural=_get_doc(cls, prop, plural=True), - ) - elif prop.is_optional: - args.update( - singular=inflection.camelize(ql_name), - tablename=db_table_name - or inflection.tableize(f"{cls.name}_{prop.name}"), - tableparams=["this", "result"], - doc=_get_doc(cls, prop), - ) - elif prop.is_predicate: - args.update( - singular=inflection.camelize(ql_name, uppercase_first_letter=False), - tablename=db_table_name - or inflection.underscore(f"{cls.name}_{prop.name}"), - tableparams=["this"], - doc=_get_doc(cls, prop), - ) - else: - raise ValueError( - f"unknown property kind for {prop.name} from {cls.name}" - ) - self._property_cache[cache_key] = ql.Property(**args) - return self._property_cache[cache_key] - - def get_ql_class(self, cls: schema.Class) -> ql.Class: - cache_key = id(cls) - if cache_key not in self._class_cache: - if "ql_name" in cls.pragmas: - raise Error( - "ql_name is not supported yet for classes, only for properties" - ) - properties = [self.get_ql_property(cls, p) for p in cls.properties] - all_children = [ - ql.Child(self.get_ql_property(c, p)) - for c, p in self._get_all_properties(cls) - if p.is_child - ] - for prev, child in zip([""] + all_children, all_children): - child.prev = prev and prev.property.singular - self._class_cache[cache_key] = ql.Class( - name=cls.name, - bases=cls.bases, - bases_impl=[base + "Impl::" + base for base in cls.bases], - final=not cls.derived, - properties=properties, - all_children=all_children, - dir=pathlib.Path(cls.group or ""), - doc=cls.doc, - hideable="ql_hideable" in cls.pragmas, - internal="ql_internal" in cls.pragmas, - cfg=cls.cfg, - ) - return self._class_cache[cache_key] - - def get_ql_cfg_class( - self, - cls: schema.Class, - ) -> ql.CfgClass: - return ql.CfgClass( - name=cls.name, - bases=[base for base in cls.bases if self.lookup[base.base].cfg], - properties=cls.properties, - doc=cls.doc, + return False + + +def get_ql_property( + cls: schema.Class, + prop: schema.Property, + lookup: typing.Dict[str, schema.ClassBase], + prev_child: str = "", +) -> ql.Property: + + args = dict( + type=prop.type if not prop.is_predicate else "predicate", + qltest_skip="qltest_skip" in prop.pragmas, + prev_child=prev_child if prop.is_child else None, + is_optional=prop.is_optional, + is_predicate=prop.is_predicate, + is_unordered=prop.is_unordered, + description=prop.description, + synth=bool(cls.synth) or prop.synth, + type_is_hideable=_type_is_hideable(prop.type, lookup), + type_is_codegen_class=prop.type in lookup and not lookup[prop.type].imported, + internal="ql_internal" in prop.pragmas, + ) + ql_name = prop.pragmas.get("ql_name", prop.name) + db_table_name = prop.pragmas.get("ql_db_table_name") + if db_table_name and prop.is_single: + raise Error( + f"`db_table_name` pragma is not supported for single properties, but {cls.name}.{prop.name} has it" + ) + if prop.is_single: + args.update( + singular=inflection.camelize(ql_name), + tablename=inflection.tableize(cls.name), + tableparams=["this"] + + ["result" if p is prop else "_" for p in cls.properties if p.is_single], + doc=_get_doc(cls, prop), + ) + elif prop.is_repeated: + args.update( + singular=inflection.singularize(inflection.camelize(ql_name)), + plural=inflection.pluralize(inflection.camelize(ql_name)), + tablename=db_table_name or inflection.tableize(f"{cls.name}_{prop.name}"), + tableparams=( + ["this", "index", "result"] + if not prop.is_unordered + else ["this", "result"] + ), + doc=_get_doc(cls, prop, plural=False), + doc_plural=_get_doc(cls, prop, plural=True), ) + elif prop.is_optional: + args.update( + singular=inflection.camelize(ql_name), + tablename=db_table_name or inflection.tableize(f"{cls.name}_{prop.name}"), + tableparams=["this", "result"], + doc=_get_doc(cls, prop), + ) + elif prop.is_predicate: + args.update( + singular=inflection.camelize(ql_name, uppercase_first_letter=False), + tablename=db_table_name or inflection.underscore(f"{cls.name}_{prop.name}"), + tableparams=["this"], + doc=_get_doc(cls, prop), + ) + else: + raise ValueError(f"unknown property kind for {prop.name} from {cls.name}") + return ql.Property(**args) - def _get_all_properties( - self, - cls: schema.Class, - already_seen: typing.Optional[typing.Set[int]] = None, - ) -> typing.Iterable[typing.Tuple[schema.Class, schema.Property]]: - # deduplicate using ids - if already_seen is None: - already_seen = set() - for b in cls.bases: - base = self.lookup[b] - for item in self._get_all_properties(base, already_seen): - yield item - for p in cls.properties: - if id(p) not in already_seen: - already_seen.add(id(p)) - yield cls, p - - def get_all_properties_to_be_tested( - self, - cls: schema.Class, - ) -> typing.Iterable[ql.PropertyForTest]: - for c, p in self._get_all_properties(cls): - if not ("qltest_skip" in c.pragmas or "qltest_skip" in p.pragmas): - p = self.get_ql_property(c, p) - yield ql.PropertyForTest( - p.getter, - is_total=p.is_single or p.is_predicate, - type=p.type if not p.is_predicate else None, - is_indexed=p.is_indexed, - ) - def _is_in_qltest_collapsed_hierarchy( - self, - cls: schema.Class, - ) -> bool: - return ( - "qltest_collapse_hierarchy" in cls.pragmas - or self._is_under_qltest_collapsed_hierarchy(cls) - ) +def get_ql_class( + cls: schema.Class, lookup: typing.Dict[str, schema.ClassBase] +) -> ql.Class: + if "ql_name" in cls.pragmas: + raise Error("ql_name is not supported yet for classes, only for properties") + prev_child = "" + properties = [] + for p in cls.properties: + prop = get_ql_property(cls, p, lookup, prev_child) + if prop.is_child: + prev_child = prop.singular + if prop.type in lookup and lookup[prop.type].cfg: + prop.cfg = True + properties.append(prop) + return ql.Class( + name=cls.name, + bases=cls.bases, + bases_impl=[base + "Impl::" + base for base in cls.bases], + final=not cls.derived, + properties=properties, + dir=pathlib.Path(cls.group or ""), + doc=cls.doc, + hideable="ql_hideable" in cls.pragmas, + internal="ql_internal" in cls.pragmas, + cfg=cls.cfg, + ) - def _is_under_qltest_collapsed_hierarchy( - self, - cls: schema.Class, - ) -> bool: - return "qltest_uncollapse_hierarchy" not in cls.pragmas and any( - self._is_in_qltest_collapsed_hierarchy(self.lookup[b]) for b in cls.bases - ) - def should_skip_qltest(self, cls: schema.Class) -> bool: - return ( - "qltest_skip" in cls.pragmas - or not (cls.final or "qltest_collapse_hierarchy" in cls.pragmas) - or self._is_under_qltest_collapsed_hierarchy(cls) - ) +def get_ql_cfg_class( + cls: schema.Class, lookup: typing.Dict[str, ql.Class] +) -> ql.CfgClass: + return ql.CfgClass( + name=cls.name, + bases=[base for base in cls.bases if lookup[base.base].cfg], + properties=cls.properties, + doc=cls.doc, + ) def _to_db_type(x: str) -> str: @@ -411,6 +330,78 @@ def _get_path_public(cls: schema.Class) -> pathlib.Path: ).with_suffix(".qll") +def _get_all_properties( + cls: schema.Class, + lookup: typing.Dict[str, schema.Class], + already_seen: typing.Optional[typing.Set[int]] = None, +) -> typing.Iterable[typing.Tuple[schema.Class, schema.Property]]: + # deduplicate using ids + if already_seen is None: + already_seen = set() + for b in sorted(cls.bases): + base = lookup[b] + for item in _get_all_properties(base, lookup, already_seen): + yield item + for p in cls.properties: + if id(p) not in already_seen: + already_seen.add(id(p)) + yield cls, p + + +def _get_all_properties_to_be_tested( + cls: schema.Class, lookup: typing.Dict[str, schema.Class] +) -> typing.Iterable[ql.PropertyForTest]: + for c, p in _get_all_properties(cls, lookup): + if not ("qltest_skip" in c.pragmas or "qltest_skip" in p.pragmas): + # TODO here operations are duplicated, but should be better if we split ql and qltest generation + p = get_ql_property(c, p, lookup) + yield ql.PropertyForTest( + p.getter, + is_total=p.is_single or p.is_predicate, + type=p.type if not p.is_predicate else None, + is_indexed=p.is_indexed, + ) + if p.is_repeated and not p.is_optional: + yield ql.PropertyForTest(f"getNumberOf{p.plural}", type="int") + elif p.is_optional and not p.is_repeated: + yield ql.PropertyForTest(f"has{p.singular}") + + +def _partition_iter(x, pred): + x1, x2 = itertools.tee(x) + return filter(pred, x1), itertools.filterfalse(pred, x2) + + +def _partition(l, pred): + """partitions a list according to boolean predicate""" + return map(list, _partition_iter(l, pred)) + + +def _is_in_qltest_collapsed_hierarchy( + cls: schema.Class, lookup: typing.Dict[str, schema.Class] +): + return ( + "qltest_collapse_hierarchy" in cls.pragmas + or _is_under_qltest_collapsed_hierarchy(cls, lookup) + ) + + +def _is_under_qltest_collapsed_hierarchy( + cls: schema.Class, lookup: typing.Dict[str, schema.Class] +): + return "qltest_uncollapse_hierarchy" not in cls.pragmas and any( + _is_in_qltest_collapsed_hierarchy(lookup[b], lookup) for b in cls.bases + ) + + +def should_skip_qltest(cls: schema.Class, lookup: typing.Dict[str, schema.Class]): + return ( + "qltest_skip" in cls.pragmas + or not (cls.final or "qltest_collapse_hierarchy" in cls.pragmas) + or _is_under_qltest_collapsed_hierarchy(cls, lookup) + ) + + def _get_stub( cls: schema.Class, base_import: str, generated_import_prefix: str ) -> ql.Stub: @@ -496,10 +487,8 @@ def generate(opts, renderer): data = schemaloader.load_file(input) - resolver = Resolver(data.classes) - classes = { - name: resolver.get_ql_class(cls) + name: get_ql_class(cls, data.classes) for name, cls in data.classes.items() if not cls.imported } @@ -549,7 +538,7 @@ def generate(opts, renderer): ) imports_impl[c.name + "Impl"] = path_impl + "Impl" if c.cfg: - cfg_classes.append(resolver.get_ql_cfg_class(c)) + cfg_classes.append(get_ql_cfg_class(c, classes)) for c in classes.values(): qll = out / c.path.with_suffix(".qll") @@ -620,7 +609,7 @@ def generate(opts, renderer): for c in data.classes.values(): if c.imported: continue - if resolver.should_skip_qltest(c): + if should_skip_qltest(c, data.classes): continue test_with_name = c.pragmas.get("qltest_test_with") test_with = data.classes[test_with_name] if test_with_name else c @@ -636,16 +625,29 @@ def generate(opts, renderer): test_dir / missing_test_source_filename, ) continue + total_props, partial_props = _partition( + _get_all_properties_to_be_tested(c, data.classes), + lambda p: p.is_total, + ) renderer.render( ql.ClassTester( class_name=c.name, - properties=list(resolver.get_all_properties_to_be_tested(c)), + properties=total_props, elements_module=elements_module, # in case of collapsed hierarchies we want to see the actual QL class in results show_ql_class="qltest_collapse_hierarchy" in c.pragmas, ), test_dir / f"{c.name}.ql", ) + for p in partial_props: + renderer.render( + ql.PropertyTester( + class_name=c.name, + elements_module=elements_module, + property=p, + ), + test_dir / f"{c.name}_{p.getter}.ql", + ) final_synth_types = [] non_final_synth_types = [] diff --git a/misc/codegen/generators/rusttestgen.py b/misc/codegen/generators/rusttestgen.py index 4c6e2cb61174..a46d2584127b 100644 --- a/misc/codegen/generators/rusttestgen.py +++ b/misc/codegen/generators/rusttestgen.py @@ -59,12 +59,13 @@ def generate(opts, renderer): registry=opts.ql_test_output / ".generated_tests.list", force=opts.force, ) as renderer: - - resolver = qlgen.Resolver(schema.classes) for cls in schema.classes.values(): if cls.imported: continue - if resolver.should_skip_qltest(cls) or "rust_skip_doc_test" in cls.pragmas: + if ( + qlgen.should_skip_qltest(cls, schema.classes) + or "rust_skip_doc_test" in cls.pragmas + ): continue code = _get_code(cls.doc) for p in schema.iter_properties(cls.name): diff --git a/misc/codegen/lib/ql.py b/misc/codegen/lib/ql.py index 503570c2adc3..7537aac995c5 100644 --- a/misc/codegen/lib/ql.py +++ b/misc/codegen/lib/ql.py @@ -37,6 +37,7 @@ class Property: is_optional: bool = False is_predicate: bool = False is_unordered: bool = False + prev_child: Optional[str] = None qltest_skip: bool = False description: List[str] = field(default_factory=list) doc: Optional[str] = None @@ -47,7 +48,6 @@ class Property: type_is_self: bool = False internal: bool = False cfg: bool = False - is_child: bool = False def __post_init__(self): if self.tableparams: @@ -76,6 +76,10 @@ def is_repeated(self): def is_single(self): return not (self.is_optional or self.is_repeated or self.is_predicate) + @property + def is_child(self): + return self.prev_child is not None + @property def is_indexed(self) -> bool: return self.is_repeated and not self.is_unordered @@ -85,12 +89,6 @@ def type_alias(self) -> Optional[str]: return self.type + "Alias" if self.type_is_self else self.type -@dataclass -class Child: - property: Property - prev: str = "" - - @dataclass class Base: base: str @@ -109,7 +107,6 @@ class Class: bases_impl: List[Base] = field(default_factory=list) final: bool = False properties: List[Property] = field(default_factory=list) - all_children: List[Child] = field(default_factory=list) dir: pathlib.Path = pathlib.Path() imports: List[str] = field(default_factory=list) import_prefix: Optional[str] = None @@ -151,7 +148,7 @@ def db_id(self) -> str: @property def has_children(self) -> bool: - return bool(self.all_children) + return any(p.is_child for p in self.properties) @property def last_base(self) -> str: @@ -248,6 +245,13 @@ class ClassTester(TesterBase): show_ql_class: bool = False +@dataclass +class PropertyTester(TesterBase): + template: ClassVar = "ql_test_property" + + property: PropertyForTest + + @dataclass class MissingTestInstructions: template: ClassVar = "ql_test_missing" diff --git a/misc/codegen/templates/ql_parent.mustache b/misc/codegen/templates/ql_parent.mustache index 84bc0d79a0b7..67b975183736 100644 --- a/misc/codegen/templates/ql_parent.mustache +++ b/misc/codegen/templates/ql_parent.mustache @@ -9,39 +9,51 @@ import {{.}} private module Impl { {{#classes}} - {{#final}} - private Element getImmediateChildOf{{name}}({{name}} e, int index, string partialPredicateCall) { - {{^has_children}}none(){{/has_children}} - {{#has_children}} - {{! n is the base offset 0, for ease of generation }} - {{! n is constructed to be strictly greater than the indexes for children }} - exists(int n{{#all_children}}, int n{{property.singular}}{{/all_children}} | - n = 0 - {{#all_children}} - {{#property}} - {{! n is defined on top of the previous definition }} - {{! for single and optional properties it adds 1 (regardless of whether the optional property exists) }} - {{! for repeated it adds 1 + the maximum index (which works for repeated optional as well) }} - and - n{{singular}} = n{{prev}} + 1{{#is_repeated}}+ max(int i | i = -1 or exists(e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}(i)) | i){{/is_repeated}} - {{/property}} - {{/all_children}} and ( - none() - {{#all_children}} - {{#property}} - or - {{#is_repeated}} - result = e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}(index - n{{prev}}) and partialPredicateCall = "{{singular}}(" + (index - n{{prev}}).toString() + ")" - {{/is_repeated}} - {{^is_repeated}} - index = n{{prev}} and result = e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}() and partialPredicateCall = "{{singular}}()" - {{/is_repeated}} - {{/property}} - {{/all_children}} - )) - {{/has_children}} - } - {{/final}} + private Element getImmediateChildOf{{name}}({{name}} e, int index, string partialPredicateCall) { + {{! avoid unused argument warnings on root element, assuming the root element has no children }} + {{#root}}none(){{/root}} + {{^root}} + {{! b is the base offset 0, for ease of generation }} + {{! b is constructed to be strictly greater than the indexes required for children coming from }} + {{! n is the base offset for direct children, equal to the last base offset from above }} + {{! n is constructed to be strictly greater than the indexes for children }} + exists(int b{{#bases}}, int b{{.}}{{/bases}}, int n{{#properties}}{{#is_child}}, int n{{singular}}{{/is_child}}{{/properties}} | + b = 0 + {{#bases}} + and + b{{.}} = b{{prev}} + 1 + max(int i | i = -1 or exists(getImmediateChildOf{{.}}(e, i, _)) | i) + {{/bases}} + and + n = b{{last_base}} + {{#properties}} + {{#is_child}} + {{! n is defined on top of the previous definition }} + {{! for single and optional properties it adds 1 (regardless of whether the optional property exists) }} + {{! for repeated it adds 1 + the maximum index (which works for repeated optional as well) }} + and + n{{singular}} = n{{prev_child}} + 1{{#is_repeated}}+ max(int i | i = -1 or exists(e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}(i)) | i){{/is_repeated}} + {{/is_child}} + {{/properties}} and ( + none() + {{#bases}} + or + result = getImmediateChildOf{{.}}(e, index - b{{prev}}, partialPredicateCall) + {{/bases}} + {{#properties}} + {{#is_child}} + or + {{#is_repeated}} + result = e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}(index - n{{prev_child}}) and partialPredicateCall = "{{singular}}(" + (index - n{{prev_child}}).toString() + ")" + {{/is_repeated}} + {{^is_repeated}} + index = n{{prev_child}} and result = e.get{{#type_is_hideable}}Immediate{{/type_is_hideable}}{{singular}}() and partialPredicateCall = "{{singular}}()" + {{/is_repeated}} + {{/is_child}} + {{/properties}} + )) + {{/root}} + } + {{/classes}} cached Element getImmediateChild(Element e, int index, string partialAccessor) { diff --git a/misc/codegen/templates/ql_test_class.mustache b/misc/codegen/templates/ql_test_class.mustache index f63933e5ca65..63c5e24050c4 100644 --- a/misc/codegen/templates/ql_test_class.mustache +++ b/misc/codegen/templates/ql_test_class.mustache @@ -3,28 +3,14 @@ import {{elements_module}} import TestUtils -query predicate instances({{class_name}} x{{#show_ql_class}}, string primaryQlClasses{{/show_ql_class}}{{#properties}}{{#is_total}}, string {{getter}}__label, {{#type}}{{.}}{{/type}}{{^type}}string{{/type}} {{getter}}{{/is_total}}{{/properties}}) { - toBeTested(x) and not x.isUnknown() - {{#show_ql_class}} - and primaryQlClasses = x.getPrimaryQlClasses() - {{/show_ql_class}} - {{#properties}} - {{#is_total}} - and {{getter}}__label = "{{getter}}:" - {{#type}} - and {{getter}} = x.{{getter}}() - {{/type}} - {{^type}} - and if x.{{getter}}() then {{getter}} = "yes" else {{getter}} = "no" - {{/type}} - {{/is_total}} - {{/properties}} -} - +from {{class_name}} x{{#properties}}, {{#type}}{{.}}{{/type}}{{^type}}string{{/type}} {{getter}}{{/properties}} +where toBeTested(x) and not x.isUnknown() {{#properties}} -{{^is_total}} -query predicate {{getter}}({{class_name}} x{{#is_indexed}}, int index{{/is_indexed}}, {{type}} {{getter}}) { - toBeTested(x) and not x.isUnknown() and {{getter}} = x.{{getter}}({{#is_indexed}}index{{/is_indexed}}) -} -{{/is_total}} +{{#type}} +and {{getter}} = x.{{getter}}() +{{/type}} +{{^type}} +and if x.{{getter}}() then {{getter}} = "yes" else {{getter}} = "no" +{{/type}} {{/properties}} +select x{{#show_ql_class}}, x.getPrimaryQlClasses(){{/show_ql_class}}{{#properties}}, "{{getter}}:", {{getter}}{{/properties}} diff --git a/misc/codegen/templates/ql_test_property.mustache b/misc/codegen/templates/ql_test_property.mustache new file mode 100644 index 000000000000..2c293d7bcaba --- /dev/null +++ b/misc/codegen/templates/ql_test_property.mustache @@ -0,0 +1,10 @@ +// generated by {{generator}}, do not edit + +import {{elements_module}} +import TestUtils + +{{#property}} +from {{class_name}} x{{#is_indexed}}, int index{{/is_indexed}} +where toBeTested(x) and not x.isUnknown() +select x, {{#is_indexed}}index, {{/is_indexed}}x.{{getter}}({{#is_indexed}}index{{/is_indexed}}) +{{/property}} diff --git a/misc/codegen/test/test_ql.py b/misc/codegen/test/test_ql.py index 237e2d6ecd02..406c6134a477 100644 --- a/misc/codegen/test/test_ql.py +++ b/misc/codegen/test/test_ql.py @@ -133,10 +133,22 @@ def test_non_root_class(): assert not cls.root +@pytest.mark.parametrize( + "prev_child,is_child", [(None, False), ("", True), ("x", True)] +) +def test_is_child(prev_child, is_child): + p = ql.Property("Foo", "int", prev_child=prev_child) + assert p.is_child is is_child + + +def test_empty_class_no_children(): + cls = ql.Class("Class", properties=[]) + assert cls.has_children is False + + def test_class_no_children(): cls = ql.Class( - "Class", - all_children=[], + "Class", properties=[ql.Property("Foo", "int"), ql.Property("Bar", "string")] ) assert cls.has_children is False @@ -144,7 +156,11 @@ def test_class_no_children(): def test_class_with_children(): cls = ql.Class( "Class", - all_children=[ql.Child(ql.Property("Foo", "int"))], + properties=[ + ql.Property("Foo", "int"), + ql.Property("Child", "x", prev_child=""), + ql.Property("Bar", "string"), + ], ) assert cls.has_children is True diff --git a/misc/codegen/test/test_qlgen.py b/misc/codegen/test/test_qlgen.py index a2434432390f..43617d5f9e42 100644 --- a/misc/codegen/test/test_qlgen.py +++ b/misc/codegen/test/test_qlgen.py @@ -388,101 +388,11 @@ def test_internal_property(generate_classes): def test_children(generate_classes): - expected_parent_property = ql.Property( - singular="ParentChild", - type="int", - is_child=True, - tablename="parents", - tableparams=["this", "result"], - doc="parent child of this parent", - ) - expected_properties = [ - ql.Property( - singular="A", - type="int", - tablename="my_objects", - tableparams=["this", "result", "_"], - doc="a of this my object", - ), - ql.Property( - singular="Child1", - type="int", - tablename="my_objects", - tableparams=["this", "_", "result"], - is_child=True, - doc="child 1 of this my object", - ), - ql.Property( - singular="B", - plural="Bs", - type="int", - tablename="my_object_bs", - tableparams=["this", "index", "result"], - doc="b of this my object", - doc_plural="bs of this my object", - ), - ql.Property( - singular="Child", - plural="Children", - type="int", - tablename="my_object_children", - tableparams=["this", "index", "result"], - is_child=True, - doc="child of this my object", - doc_plural="children of this my object", - ), - ql.Property( - singular="C", - type="int", - tablename="my_object_cs", - tableparams=["this", "result"], - is_optional=True, - doc="c of this my object", - ), - ql.Property( - singular="Child3", - type="int", - tablename="my_object_child_3s", - tableparams=["this", "result"], - is_optional=True, - is_child=True, - doc="child 3 of this my object", - ), - ql.Property( - singular="D", - plural="Ds", - type="int", - tablename="my_object_ds", - tableparams=["this", "index", "result"], - is_optional=True, - doc="d of this my object", - doc_plural="ds of this my object", - ), - ql.Property( - singular="Child4", - plural="Child4s", - type="int", - tablename="my_object_child_4s", - tableparams=["this", "index", "result"], - is_optional=True, - is_child=True, - doc="child 4 of this my object", - doc_plural="child 4s of this my object", - ), - ] assert generate_classes( [ schema.Class("FakeRoot"), - schema.Class( - "Parent", - derived={"MyObject"}, - properties=[ - schema.SingleProperty("parent_child", "int", is_child=True), - ], - ), schema.Class( "MyObject", - bases=["Parent"], properties=[ schema.SingleProperty("a", "int"), schema.SingleProperty("child_1", "int", is_child=True), @@ -503,53 +413,87 @@ def test_children(generate_classes): name="FakeRoot", final=True, imports=[stub_import_prefix + "FakeRoot"] ), ), - "Parent.qll": ( - a_ql_class_public(name="Parent"), - a_ql_stub(name="Parent"), - a_ql_class( - name="Parent", - imports=[stub_import_prefix + "Parent"], - properties=[expected_parent_property], - all_children=[ - ql.Child( - expected_parent_property, - ), - ], - ), - ), "MyObject.qll": ( - a_ql_class_public(name="MyObject", imports=[stub_import_prefix + "Parent"]), + a_ql_class_public(name="MyObject"), a_ql_stub(name="MyObject"), a_ql_class( name="MyObject", final=True, - bases=["Parent"], - bases_impl=["ParentImpl::Parent"], - properties=expected_properties, - all_children=[ - ql.Child( - expected_parent_property, + properties=[ + ql.Property( + singular="A", + type="int", + tablename="my_objects", + tableparams=["this", "result", "_"], + doc="a of this my object", ), - ql.Child( - expected_properties[1], - prev="ParentChild", + ql.Property( + singular="Child1", + type="int", + tablename="my_objects", + tableparams=["this", "_", "result"], + prev_child="", + doc="child 1 of this my object", ), - ql.Child( - expected_properties[3], - prev="Child1", + ql.Property( + singular="B", + plural="Bs", + type="int", + tablename="my_object_bs", + tableparams=["this", "index", "result"], + doc="b of this my object", + doc_plural="bs of this my object", ), - ql.Child( - expected_properties[5], - prev="Child", + ql.Property( + singular="Child", + plural="Children", + type="int", + tablename="my_object_children", + tableparams=["this", "index", "result"], + prev_child="Child1", + doc="child of this my object", + doc_plural="children of this my object", ), - ql.Child( - expected_properties[7], - prev="Child3", + ql.Property( + singular="C", + type="int", + tablename="my_object_cs", + tableparams=["this", "result"], + is_optional=True, + doc="c of this my object", + ), + ql.Property( + singular="Child3", + type="int", + tablename="my_object_child_3s", + tableparams=["this", "result"], + is_optional=True, + prev_child="Child", + doc="child 3 of this my object", + ), + ql.Property( + singular="D", + plural="Ds", + type="int", + tablename="my_object_ds", + tableparams=["this", "index", "result"], + is_optional=True, + doc="d of this my object", + doc_plural="ds of this my object", + ), + ql.Property( + singular="Child4", + plural="Child4s", + type="int", + tablename="my_object_child_4s", + tableparams=["this", "index", "result"], + is_optional=True, + prev_child="Child3", + doc="child 4 of this my object", + doc_plural="child 4s of this my object", ), ], - imports=[ - stub_import_prefix + "internal.ParentImpl::Impl as ParentImpl" - ], + imports=[stub_import_prefix + "MyObject"], ), ), } @@ -603,13 +547,14 @@ def test_single_properties(generate_classes): } -def test_optional_property(generate_classes): +@pytest.mark.parametrize("is_child,prev_child", [(False, None), (True, "")]) +def test_optional_property(generate_classes, is_child, prev_child): assert generate_classes( [ schema.Class("FakeRoot"), schema.Class( "MyObject", - properties=[schema.OptionalProperty("foo", "bar")], + properties=[schema.OptionalProperty("foo", "bar", is_child=is_child)], ), ] ) == { @@ -633,6 +578,7 @@ def test_optional_property(generate_classes): tablename="my_object_foos", tableparams=["this", "result"], is_optional=True, + prev_child=prev_child, doc="foo of this my object", ), ], @@ -642,13 +588,14 @@ def test_optional_property(generate_classes): } -def test_repeated_property(generate_classes): +@pytest.mark.parametrize("is_child,prev_child", [(False, None), (True, "")]) +def test_repeated_property(generate_classes, is_child, prev_child): assert generate_classes( [ schema.Class("FakeRoot"), schema.Class( "MyObject", - properties=[schema.RepeatedProperty("foo", "bar")], + properties=[schema.RepeatedProperty("foo", "bar", is_child=is_child)], ), ] ) == { @@ -672,6 +619,7 @@ def test_repeated_property(generate_classes): type="bar", tablename="my_object_foos", tableparams=["this", "index", "result"], + prev_child=prev_child, doc="foo of this my object", doc_plural="foos of this my object", ), @@ -722,13 +670,16 @@ def test_repeated_unordered_property(generate_classes): } -def test_repeated_optional_property(generate_classes): +@pytest.mark.parametrize("is_child,prev_child", [(False, None), (True, "")]) +def test_repeated_optional_property(generate_classes, is_child, prev_child): assert generate_classes( [ schema.Class("FakeRoot"), schema.Class( "MyObject", - properties=[schema.RepeatedOptionalProperty("foo", "bar")], + properties=[ + schema.RepeatedOptionalProperty("foo", "bar", is_child=is_child) + ], ), ] ) == { @@ -753,6 +704,7 @@ def test_repeated_optional_property(generate_classes): tablename="my_object_foos", tableparams=["this", "index", "result"], is_optional=True, + prev_child=prev_child, doc="foo of this my object", doc_plural="foos of this my object", ), @@ -791,13 +743,14 @@ def test_predicate_property(generate_classes): } -def test_single_class_property(generate_classes): +@pytest.mark.parametrize("is_child,prev_child", [(False, None), (True, "")]) +def test_single_class_property(generate_classes, is_child, prev_child): assert generate_classes( [ schema.Class("Bar"), schema.Class( "MyObject", - properties=[schema.SingleProperty("foo", "Bar")], + properties=[schema.SingleProperty("foo", "Bar", is_child=is_child)], ), ] ) == { @@ -814,6 +767,7 @@ def test_single_class_property(generate_classes): type="Bar", tablename="my_objects", tableparams=["this", "result"], + prev_child=prev_child, doc="foo of this my object", type_is_codegen_class=True, ), @@ -1006,6 +960,10 @@ def a_ql_class_tester(**kwargs): return ql.ClassTester(**kwargs, elements_module=stub_import) +def a_ql_property_tester(**kwargs): + return ql.PropertyTester(**kwargs, elements_module=stub_import) + + def test_test_source_present(opts, generate_tests): write(opts.ql_test_output / "A" / "test.swift") assert generate_tests( @@ -1083,16 +1041,31 @@ def test_test_partial_properties(opts, generate_tests): "B/B.ql": a_ql_class_tester( class_name="B", properties=[ - ql.PropertyForTest(getter="getX", is_total=False, type="string"), - ql.PropertyForTest( - getter="getY", is_total=False, is_indexed=True, type="bool" - ), - ql.PropertyForTest( - getter="getZ", is_total=False, is_indexed=True, type="int" - ), - ql.PropertyForTest(getter="getAW", is_total=False, type="string"), + ql.PropertyForTest(getter="hasX"), + ql.PropertyForTest(getter="getNumberOfYs", type="int"), + ql.PropertyForTest(getter="getNumberOfWs", type="int"), ], ), + "B/B_getX.ql": a_ql_property_tester( + class_name="B", + property=ql.PropertyForTest(getter="getX", is_total=False, type="string"), + ), + "B/B_getY.ql": a_ql_property_tester( + class_name="B", + property=ql.PropertyForTest( + getter="getY", is_total=False, is_indexed=True, type="bool" + ), + ), + "B/B_getZ.ql": a_ql_property_tester( + class_name="B", + property=ql.PropertyForTest( + getter="getZ", is_total=False, is_indexed=True, type="int" + ), + ), + "B/B_getAW.ql": a_ql_property_tester( + class_name="B", + property=ql.PropertyForTest(getter="getAW", is_total=False, type="string"), + ), } @@ -1117,11 +1090,15 @@ def test_test_properties_deduplicated(opts, generate_tests): class_name="Final", properties=[ ql.PropertyForTest(getter="getX", type="string"), - ql.PropertyForTest( - getter="getY", is_total=False, is_indexed=True, type="bool" - ), + ql.PropertyForTest(getter="getNumberOfYs", type="int"), ], ), + "Final/Final_getY.ql": a_ql_property_tester( + class_name="Final", + property=ql.PropertyForTest( + getter="getY", is_total=False, is_indexed=True, type="bool" + ), + ), } diff --git a/misc/scripts/generate-code-scanning-query-list.py b/misc/scripts/generate-code-scanning-query-list.py index 02d59c473ec7..dae6e3d38351 100755 --- a/misc/scripts/generate-code-scanning-query-list.py +++ b/misc/scripts/generate-code-scanning-query-list.py @@ -30,7 +30,7 @@ assert hasattr(arguments, "ignore_missing_query_packs") # Define which languages and query packs to consider -languages = [ "actions", "cpp", "csharp", "go", "java", "javascript", "python", "ruby", "rust", "swift" ] +languages = [ "actions", "cpp", "csharp", "go", "java", "javascript", "python", "ruby", "swift" ] packs = [ "code-scanning", "security-and-quality", "security-extended", "security-experimental", "code-quality"] class CodeQL: diff --git a/misc/scripts/shared-code-metrics.py b/misc/scripts/shared-code-metrics.py index 94679693186a..23ce1fd8759a 100755 --- a/misc/scripts/shared-code-metrics.py +++ b/misc/scripts/shared-code-metrics.py @@ -11,7 +11,7 @@ import yaml # To add more languages, add them to this list: -languages = ['cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ql', 'ruby', 'rust', 'swift'] +languages = ['cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ql', 'ruby', 'swift'] repo_location = Path(__file__).parent.parent.parent diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 77f627a19009..1cfed45557b1 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.27-dev +version: 1.0.26 groups: shared warnOnImplicitThis: true diff --git a/misc/suite-helpers/security-and-frozen-quality-selectors.yml b/misc/suite-helpers/security-and-frozen-quality-selectors.yml deleted file mode 100644 index f688b5db0466..000000000000 --- a/misc/suite-helpers/security-and-frozen-quality-selectors.yml +++ /dev/null @@ -1,5 +0,0 @@ -- description: Selectors for selecting the non-quality queries for the security-and-quality queries for a language -- apply: security-extended-selectors.yml -- exclude: - tags contain: - - 'model-generator' diff --git a/python/extractor/tests/parser/soft_keywords_new.expected b/python/extractor/tests/parser/soft_keywords_new.expected deleted file mode 100644 index 5dc537904f5b..000000000000 --- a/python/extractor/tests/parser/soft_keywords_new.expected +++ /dev/null @@ -1,137 +0,0 @@ -Module: [1, 0] - [21, 0] - body: [ - Expr: [1, 0] - [1, 8] - value: - Subscript: [1, 0] - [1, 8] - value: - Name: [1, 0] - [1, 5] - variable: Variable('match', None) - ctx: Load - index: - Num: [1, 6] - [1, 7] - n: 1 - text: '1' - ctx: Load - Assign: [2, 0] - [2, 12] - targets: [ - Subscript: [2, 0] - [2, 8] - value: - Name: [2, 0] - [2, 5] - variable: Variable('match', None) - ctx: Load - index: - Num: [2, 6] - [2, 7] - n: 2 - text: '2' - ctx: Store - ] - value: - Num: [2, 11] - [2, 12] - n: 3 - text: '3' - Assign: [4, 0] - [4, 13] - targets: [ - Attribute: [4, 0] - [4, 9] - value: - Name: [4, 0] - [4, 5] - variable: Variable('match', None) - ctx: Load - attr: 'foo' - ctx: Store - ] - value: - Num: [4, 12] - [4, 13] - n: 4 - text: '4' - Expr: [6, 0] - [6, 7] - value: - Call: [6, 0] - [6, 7] - func: - Name: [6, 0] - [6, 5] - variable: Variable('match', None) - ctx: Load - positional_args: [] - named_args: [] - AnnAssign: [8, 0] - [8, 15] - value: None - annotation: - Name: [8, 11] - [8, 15] - variable: Variable('case', None) - ctx: Load - target: - Subscript: [8, 0] - [8, 8] - value: - Name: [8, 0] - [8, 5] - variable: Variable('match', None) - ctx: Load - index: - Num: [8, 6] - [8, 7] - n: 5 - text: '5' - ctx: Store - Match: [12, 0] - [14, 12] - subject: - List: [12, 6] - [12, 9] - elts: [ - Num: [12, 7] - [12, 8] - n: 6 - text: '6' - ] - ctx: Load - cases: [ - Case: [13, 4] - [14, 12] - pattern: - MatchLiteralPattern: [13, 9] - [13, 10] - literal: - Num: [13, 9] - [13, 10] - n: 7 - text: '7' - guard: None - body: [ - Pass: [14, 8] - [14, 12] - ] - ] - Print: [17, 0] - [17, 19] - dest: - Num: [17, 9] - [17, 10] - n: 8 - text: '8' - values: [ - Str: [17, 12] - [17, 19] - s: 'hello' - prefix: '"' - implicitly_concatenated_parts: None - ] - nl: True - Expr: [18, 0] - [18, 19] - value: - Tuple: [18, 0] - [18, 19] - elts: [ - BinOp: [18, 0] - [18, 10] - left: - Name: [18, 0] - [18, 5] - variable: Variable('pront', None) - ctx: Load - op: RShift - right: - Num: [18, 9] - [18, 10] - n: 9 - text: '9' - Str: [18, 12] - [18, 19] - s: 'world' - prefix: '"' - implicitly_concatenated_parts: None - ] - ctx: Load - Expr: [20, 0] - [20, 10] - value: - Await: [20, 0] - [20, 10] - value: - List: [20, 6] - [20, 10] - elts: [ - Num: [20, 7] - [20, 9] - n: 10 - text: '10' - ] - ctx: Load - ] diff --git a/python/extractor/tests/parser/soft_keywords_new.py b/python/extractor/tests/parser/soft_keywords_new.py deleted file mode 100644 index 9e7818682c38..000000000000 --- a/python/extractor/tests/parser/soft_keywords_new.py +++ /dev/null @@ -1,20 +0,0 @@ -match[1] -match[2] = 3 - -match.foo = 4 - -match() - -match[5] : case - - -# match used "properly" -match [6]: - case 7: - pass - - -print >> 8, "hello" # Python 2-style print -pront >> 9, "world" # How this would be interpreted in Python 3 - -await [10] # In Python 2 this would be an indexing operation, but it's more likely to be an await. diff --git a/python/extractor/tsg-python/tsp/grammar.js b/python/extractor/tsg-python/tsp/grammar.js index 1618a67dcf59..b0eaaba2a3f3 100644 --- a/python/extractor/tsg-python/tsp/grammar.js +++ b/python/extractor/tsg-python/tsp/grammar.js @@ -36,7 +36,6 @@ module.exports = grammar({ [$.tuple, $.tuple_pattern], [$.list, $.list_pattern], [$.with_item, $._collection_elements], - [$.match_statement, $.primary_expression], ], supertypes: $ => [ @@ -350,7 +349,7 @@ module.exports = grammar({ )) )), - match_statement: $ => prec(-3, seq( + match_statement: $ => seq( 'match', field('subject', choice( @@ -360,7 +359,7 @@ module.exports = grammar({ ), ':', field('cases', $.cases) - )), + ), cases: $ => repeat1($.case_block), diff --git a/python/extractor/tsg-python/tsp/src/grammar.json b/python/extractor/tsg-python/tsp/src/grammar.json index c638cc74297b..0599cc6be181 100644 --- a/python/extractor/tsg-python/tsp/src/grammar.json +++ b/python/extractor/tsg-python/tsp/src/grammar.json @@ -1407,51 +1407,47 @@ } }, "match_statement": { - "type": "PREC", - "value": -3, - "content": { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "match" - }, - { - "type": "FIELD", - "name": "subject", - "content": { - "type": "CHOICE", - "members": [ - { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "match" + }, + { + "type": "FIELD", + "name": "subject", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "ALIAS", + "content": { "type": "SYMBOL", - "name": "expression" + "name": "expression_list" }, - { - "type": "ALIAS", - "content": { - "type": "SYMBOL", - "name": "expression_list" - }, - "named": true, - "value": "tuple" - } - ] - } - }, - { - "type": "STRING", - "value": ":" - }, - { - "type": "FIELD", - "name": "cases", - "content": { - "type": "SYMBOL", - "name": "cases" - } + "named": true, + "value": "tuple" + } + ] } - ] - } + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "FIELD", + "name": "cases", + "content": { + "type": "SYMBOL", + "name": "cases" + } + } + ] }, "cases": { "type": "REPEAT1", @@ -6679,10 +6675,6 @@ [ "with_item", "_collection_elements" - ], - [ - "match_statement", - "primary_expression" ] ], "precedences": [], diff --git a/python/extractor/tsg-python/tsp/src/parser.c b/python/extractor/tsg-python/tsp/src/parser.c index 506a539bea6c..3e6b497addf3 100644 --- a/python/extractor/tsg-python/tsp/src/parser.c +++ b/python/extractor/tsg-python/tsp/src/parser.c @@ -5,7 +5,7 @@ #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif -#define LANGUAGE_VERSION 14 +#define LANGUAGE_VERSION 13 #define STATE_COUNT 1479 #define LARGE_STATE_COUNT 149 #define SYMBOL_COUNT 282 @@ -2990,2295 +2990,761 @@ static const uint16_t ts_non_terminal_alias_map[] = { 0, }; -static const TSStateId ts_primary_state_ids[STATE_COUNT] = { - [0] = 0, - [1] = 1, - [2] = 2, - [3] = 3, - [4] = 4, - [5] = 5, - [6] = 6, - [7] = 7, - [8] = 8, - [9] = 9, - [10] = 10, - [11] = 11, - [12] = 12, - [13] = 13, - [14] = 14, - [15] = 15, - [16] = 16, - [17] = 17, - [18] = 18, - [19] = 19, - [20] = 20, - [21] = 21, - [22] = 22, - [23] = 23, - [24] = 24, - [25] = 25, - [26] = 26, - [27] = 27, - [28] = 28, - [29] = 29, - [30] = 27, - [31] = 21, - [32] = 32, - [33] = 3, - [34] = 4, - [35] = 5, - [36] = 6, - [37] = 7, - [38] = 8, - [39] = 9, - [40] = 10, - [41] = 11, - [42] = 12, - [43] = 13, - [44] = 14, - [45] = 15, - [46] = 16, - [47] = 17, - [48] = 18, - [49] = 19, - [50] = 20, - [51] = 22, - [52] = 23, - [53] = 24, - [54] = 25, - [55] = 26, - [56] = 2, - [57] = 28, - [58] = 29, - [59] = 32, - [60] = 60, - [61] = 61, - [62] = 60, - [63] = 63, - [64] = 60, - [65] = 63, - [66] = 66, - [67] = 66, - [68] = 68, - [69] = 69, - [70] = 70, - [71] = 71, - [72] = 72, - [73] = 73, - [74] = 74, - [75] = 75, - [76] = 76, - [77] = 77, - [78] = 78, - [79] = 79, - [80] = 80, - [81] = 81, - [82] = 71, - [83] = 74, - [84] = 76, - [85] = 78, - [86] = 81, - [87] = 87, - [88] = 87, - [89] = 89, - [90] = 90, - [91] = 89, - [92] = 92, - [93] = 93, - [94] = 94, - [95] = 95, - [96] = 90, - [97] = 97, - [98] = 98, - [99] = 99, - [100] = 100, - [101] = 101, - [102] = 92, - [103] = 93, - [104] = 104, - [105] = 94, - [106] = 106, - [107] = 107, - [108] = 95, - [109] = 97, - [110] = 110, - [111] = 69, - [112] = 98, - [113] = 70, - [114] = 99, - [115] = 73, - [116] = 100, - [117] = 75, - [118] = 101, - [119] = 77, - [120] = 79, - [121] = 104, - [122] = 80, - [123] = 106, - [124] = 107, - [125] = 68, - [126] = 110, - [127] = 127, - [128] = 127, - [129] = 129, - [130] = 129, - [131] = 127, - [132] = 129, - [133] = 133, - [134] = 134, - [135] = 135, - [136] = 136, - [137] = 136, - [138] = 138, - [139] = 138, - [140] = 140, - [141] = 141, - [142] = 136, - [143] = 136, - [144] = 134, - [145] = 138, - [146] = 146, - [147] = 138, - [148] = 146, - [149] = 149, - [150] = 150, - [151] = 151, - [152] = 152, - [153] = 153, - [154] = 153, - [155] = 155, - [156] = 156, - [157] = 157, - [158] = 157, - [159] = 157, - [160] = 160, - [161] = 161, - [162] = 162, - [163] = 163, - [164] = 164, - [165] = 164, - [166] = 164, - [167] = 167, - [168] = 168, - [169] = 169, - [170] = 170, - [171] = 171, - [172] = 170, - [173] = 170, - [174] = 174, - [175] = 171, - [176] = 176, - [177] = 177, - [178] = 152, - [179] = 179, - [180] = 180, - [181] = 181, - [182] = 180, - [183] = 183, - [184] = 162, - [185] = 161, - [186] = 186, - [187] = 187, - [188] = 188, - [189] = 189, - [190] = 190, - [191] = 186, - [192] = 187, - [193] = 188, - [194] = 194, - [195] = 195, - [196] = 183, - [197] = 181, - [198] = 189, - [199] = 190, - [200] = 200, - [201] = 181, - [202] = 180, - [203] = 163, - [204] = 180, - [205] = 189, - [206] = 190, - [207] = 186, - [208] = 187, - [209] = 188, - [210] = 181, - [211] = 211, - [212] = 212, - [213] = 213, - [214] = 214, - [215] = 215, - [216] = 216, - [217] = 217, - [218] = 218, - [219] = 219, - [220] = 214, - [221] = 221, - [222] = 214, - [223] = 223, - [224] = 224, - [225] = 225, - [226] = 226, - [227] = 223, - [228] = 228, - [229] = 229, - [230] = 230, - [231] = 229, - [232] = 232, - [233] = 226, - [234] = 232, - [235] = 235, - [236] = 230, - [237] = 228, - [238] = 238, - [239] = 239, - [240] = 240, - [241] = 239, - [242] = 242, - [243] = 243, - [244] = 240, - [245] = 243, - [246] = 238, - [247] = 243, - [248] = 242, - [249] = 238, - [250] = 242, - [251] = 251, - [252] = 252, - [253] = 253, - [254] = 251, - [255] = 255, - [256] = 256, - [257] = 257, - [258] = 258, - [259] = 259, - [260] = 260, - [261] = 261, - [262] = 262, - [263] = 263, - [264] = 264, - [265] = 265, - [266] = 266, - [267] = 267, - [268] = 268, - [269] = 253, - [270] = 255, - [271] = 268, - [272] = 263, - [273] = 273, - [274] = 260, - [275] = 252, - [276] = 276, - [277] = 266, - [278] = 278, - [279] = 262, - [280] = 280, - [281] = 264, - [282] = 267, - [283] = 261, - [284] = 257, - [285] = 276, - [286] = 259, - [287] = 287, - [288] = 288, - [289] = 289, - [290] = 290, - [291] = 291, - [292] = 292, - [293] = 293, - [294] = 294, - [295] = 295, - [296] = 296, - [297] = 297, - [298] = 298, - [299] = 299, - [300] = 300, - [301] = 301, - [302] = 302, - [303] = 291, - [304] = 304, - [305] = 298, - [306] = 306, - [307] = 307, - [308] = 292, - [309] = 309, - [310] = 310, - [311] = 311, - [312] = 288, - [313] = 313, - [314] = 219, - [315] = 315, - [316] = 316, - [317] = 317, - [318] = 217, - [319] = 319, - [320] = 320, - [321] = 321, - [322] = 322, - [323] = 323, - [324] = 324, - [325] = 325, - [326] = 326, - [327] = 327, - [328] = 328, - [329] = 329, - [330] = 330, - [331] = 331, - [332] = 315, - [333] = 320, - [334] = 321, - [335] = 322, - [336] = 323, - [337] = 324, - [338] = 325, - [339] = 326, - [340] = 327, - [341] = 328, - [342] = 329, - [343] = 313, - [344] = 319, - [345] = 345, - [346] = 346, - [347] = 347, - [348] = 348, - [349] = 349, - [350] = 350, - [351] = 351, - [352] = 352, - [353] = 353, - [354] = 354, - [355] = 355, - [356] = 356, - [357] = 357, - [358] = 358, - [359] = 359, - [360] = 360, - [361] = 361, - [362] = 362, - [363] = 363, - [364] = 364, - [365] = 365, - [366] = 366, - [367] = 367, - [368] = 368, - [369] = 369, - [370] = 370, - [371] = 371, - [372] = 372, - [373] = 373, - [374] = 374, - [375] = 375, - [376] = 376, - [377] = 377, - [378] = 378, - [379] = 379, - [380] = 359, - [381] = 363, - [382] = 364, - [383] = 372, - [384] = 373, - [385] = 385, - [386] = 349, - [387] = 378, - [388] = 388, - [389] = 389, - [390] = 390, - [391] = 347, - [392] = 350, - [393] = 355, - [394] = 388, - [395] = 357, - [396] = 360, - [397] = 361, - [398] = 398, - [399] = 399, - [400] = 365, - [401] = 366, - [402] = 379, - [403] = 403, - [404] = 371, - [405] = 405, - [406] = 406, - [407] = 390, - [408] = 408, - [409] = 378, - [410] = 359, - [411] = 364, - [412] = 372, - [413] = 373, - [414] = 346, - [415] = 388, - [416] = 378, - [417] = 359, - [418] = 364, - [419] = 372, - [420] = 373, - [421] = 346, - [422] = 388, - [423] = 353, - [424] = 368, - [425] = 425, - [426] = 426, - [427] = 427, - [428] = 425, - [429] = 429, - [430] = 430, - [431] = 431, - [432] = 368, - [433] = 433, - [434] = 346, - [435] = 368, - [436] = 370, - [437] = 370, - [438] = 370, - [439] = 389, - [440] = 375, - [441] = 406, - [442] = 348, - [443] = 356, - [444] = 362, - [445] = 445, - [446] = 446, - [447] = 447, - [448] = 447, - [449] = 449, - [450] = 449, - [451] = 451, - [452] = 452, - [453] = 453, - [454] = 451, - [455] = 446, - [456] = 452, - [457] = 453, - [458] = 458, - [459] = 459, - [460] = 460, - [461] = 461, - [462] = 462, - [463] = 463, - [464] = 464, - [465] = 465, - [466] = 466, - [467] = 467, - [468] = 468, - [469] = 469, - [470] = 470, - [471] = 471, - [472] = 472, - [473] = 473, - [474] = 474, - [475] = 475, - [476] = 476, - [477] = 477, - [478] = 478, - [479] = 462, - [480] = 472, - [481] = 481, - [482] = 482, - [483] = 483, - [484] = 484, - [485] = 485, - [486] = 486, - [487] = 487, - [488] = 488, - [489] = 489, - [490] = 490, - [491] = 491, - [492] = 492, - [493] = 493, - [494] = 494, - [495] = 495, - [496] = 459, - [497] = 497, - [498] = 465, - [499] = 466, - [500] = 467, - [501] = 469, - [502] = 476, - [503] = 503, - [504] = 489, - [505] = 497, - [506] = 503, - [507] = 478, - [508] = 508, - [509] = 458, - [510] = 510, - [511] = 481, - [512] = 512, - [513] = 513, - [514] = 514, - [515] = 508, - [516] = 482, - [517] = 517, - [518] = 518, - [519] = 519, - [520] = 520, - [521] = 521, - [522] = 510, - [523] = 483, - [524] = 524, - [525] = 525, - [526] = 512, - [527] = 468, - [528] = 513, - [529] = 514, - [530] = 463, - [531] = 484, - [532] = 460, - [533] = 486, - [534] = 517, - [535] = 518, - [536] = 461, - [537] = 474, - [538] = 519, - [539] = 520, - [540] = 521, - [541] = 487, - [542] = 488, - [543] = 543, - [544] = 475, - [545] = 490, - [546] = 470, - [547] = 524, - [548] = 525, - [549] = 477, - [550] = 464, - [551] = 491, - [552] = 492, - [553] = 493, - [554] = 494, - [555] = 495, - [556] = 471, - [557] = 557, - [558] = 485, - [559] = 559, - [560] = 560, - [561] = 561, - [562] = 560, - [563] = 563, - [564] = 561, - [565] = 565, - [566] = 566, - [567] = 567, - [568] = 568, - [569] = 569, - [570] = 570, - [571] = 571, - [572] = 572, - [573] = 573, - [574] = 574, - [575] = 575, - [576] = 576, - [577] = 577, - [578] = 578, - [579] = 579, - [580] = 580, - [581] = 581, - [582] = 582, - [583] = 583, - [584] = 584, - [585] = 585, - [586] = 586, - [587] = 587, - [588] = 588, - [589] = 589, - [590] = 590, - [591] = 591, - [592] = 592, - [593] = 593, - [594] = 594, - [595] = 590, - [596] = 596, - [597] = 597, - [598] = 598, - [599] = 599, - [600] = 600, - [601] = 601, - [602] = 602, - [603] = 603, - [604] = 604, - [605] = 605, - [606] = 606, - [607] = 607, - [608] = 608, - [609] = 606, - [610] = 607, - [611] = 611, - [612] = 612, - [613] = 613, - [614] = 614, - [615] = 615, - [616] = 616, - [617] = 607, - [618] = 618, - [619] = 607, - [620] = 608, - [621] = 611, - [622] = 612, - [623] = 613, - [624] = 614, - [625] = 615, - [626] = 616, - [627] = 627, - [628] = 628, - [629] = 629, - [630] = 618, - [631] = 629, - [632] = 627, - [633] = 628, - [634] = 634, - [635] = 635, - [636] = 636, - [637] = 637, - [638] = 638, - [639] = 639, - [640] = 640, - [641] = 641, - [642] = 642, - [643] = 566, - [644] = 644, - [645] = 645, - [646] = 646, - [647] = 569, - [648] = 648, - [649] = 649, - [650] = 645, - [651] = 646, - [652] = 646, - [653] = 644, - [654] = 642, - [655] = 635, - [656] = 656, - [657] = 657, - [658] = 658, - [659] = 642, - [660] = 638, - [661] = 635, - [662] = 636, - [663] = 637, - [664] = 638, - [665] = 639, - [666] = 640, - [667] = 641, - [668] = 642, - [669] = 636, - [670] = 645, - [671] = 657, - [672] = 646, - [673] = 640, - [674] = 658, - [675] = 644, - [676] = 644, - [677] = 639, - [678] = 645, - [679] = 641, - [680] = 635, - [681] = 636, - [682] = 637, - [683] = 638, - [684] = 639, - [685] = 640, - [686] = 641, - [687] = 637, - [688] = 566, - [689] = 590, - [690] = 634, - [691] = 656, - [692] = 569, - [693] = 565, - [694] = 612, - [695] = 572, - [696] = 606, - [697] = 627, - [698] = 590, - [699] = 565, - [700] = 570, - [701] = 628, - [702] = 614, - [703] = 611, - [704] = 618, - [705] = 615, - [706] = 613, - [707] = 616, - [708] = 608, - [709] = 629, - [710] = 710, - [711] = 608, - [712] = 712, - [713] = 606, - [714] = 330, - [715] = 657, - [716] = 716, - [717] = 570, - [718] = 615, - [719] = 627, - [720] = 618, - [721] = 628, - [722] = 431, - [723] = 354, - [724] = 572, - [725] = 331, - [726] = 726, - [727] = 629, - [728] = 377, - [729] = 611, - [730] = 616, - [731] = 612, - [732] = 403, - [733] = 613, - [734] = 614, - [735] = 658, - [736] = 581, - [737] = 573, - [738] = 604, - [739] = 575, - [740] = 577, - [741] = 431, - [742] = 403, - [743] = 354, - [744] = 656, - [745] = 634, - [746] = 588, - [747] = 593, - [748] = 580, - [749] = 582, - [750] = 591, - [751] = 592, - [752] = 598, - [753] = 596, - [754] = 597, - [755] = 605, - [756] = 599, - [757] = 601, - [758] = 602, - [759] = 603, - [760] = 594, - [761] = 574, - [762] = 587, - [763] = 578, - [764] = 586, - [765] = 576, - [766] = 583, - [767] = 600, - [768] = 579, - [769] = 657, - [770] = 658, - [771] = 584, - [772] = 585, - [773] = 589, - [774] = 602, - [775] = 587, - [776] = 578, - [777] = 579, - [778] = 584, - [779] = 585, - [780] = 573, - [781] = 604, - [782] = 575, - [783] = 577, - [784] = 217, - [785] = 580, - [786] = 582, - [787] = 591, - [788] = 592, - [789] = 596, - [790] = 597, - [791] = 605, - [792] = 601, - [793] = 588, - [794] = 712, - [795] = 710, - [796] = 589, - [797] = 598, - [798] = 599, - [799] = 593, - [800] = 594, - [801] = 574, - [802] = 586, - [803] = 576, - [804] = 583, - [805] = 600, - [806] = 219, - [807] = 581, - [808] = 603, - [809] = 809, - [810] = 809, - [811] = 811, - [812] = 812, - [813] = 813, - [814] = 814, - [815] = 815, - [816] = 816, - [817] = 817, - [818] = 818, - [819] = 819, - [820] = 820, - [821] = 821, - [822] = 822, - [823] = 823, - [824] = 824, - [825] = 825, - [826] = 826, - [827] = 827, - [828] = 828, - [829] = 829, - [830] = 828, - [831] = 829, - [832] = 832, - [833] = 833, - [834] = 834, - [835] = 829, - [836] = 836, - [837] = 828, - [838] = 838, - [839] = 839, - [840] = 840, - [841] = 829, - [842] = 842, - [843] = 828, - [844] = 844, - [845] = 845, - [846] = 846, - [847] = 847, - [848] = 846, - [849] = 846, - [850] = 846, - [851] = 851, - [852] = 852, - [853] = 853, - [854] = 854, - [855] = 855, - [856] = 856, - [857] = 856, - [858] = 858, - [859] = 858, - [860] = 860, - [861] = 861, - [862] = 861, - [863] = 863, - [864] = 864, - [865] = 865, - [866] = 866, - [867] = 867, - [868] = 867, - [869] = 869, - [870] = 870, - [871] = 871, - [872] = 872, - [873] = 873, - [874] = 874, - [875] = 871, - [876] = 876, - [877] = 872, - [878] = 873, - [879] = 879, - [880] = 866, - [881] = 874, - [882] = 882, - [883] = 883, - [884] = 884, - [885] = 876, - [886] = 886, - [887] = 879, - [888] = 867, - [889] = 889, - [890] = 889, - [891] = 891, - [892] = 891, - [893] = 893, - [894] = 894, - [895] = 895, - [896] = 896, - [897] = 897, - [898] = 898, - [899] = 899, - [900] = 894, - [901] = 895, - [902] = 902, - [903] = 891, - [904] = 889, - [905] = 894, - [906] = 895, - [907] = 891, - [908] = 908, - [909] = 889, - [910] = 893, - [911] = 893, - [912] = 912, - [913] = 913, - [914] = 914, - [915] = 915, - [916] = 916, - [917] = 917, - [918] = 918, - [919] = 919, - [920] = 920, - [921] = 921, - [922] = 922, - [923] = 923, - [924] = 924, - [925] = 925, - [926] = 926, - [927] = 860, - [928] = 928, - [929] = 929, - [930] = 930, - [931] = 931, - [932] = 932, - [933] = 933, - [934] = 934, - [935] = 935, - [936] = 936, - [937] = 937, - [938] = 938, - [939] = 871, - [940] = 863, - [941] = 941, - [942] = 942, - [943] = 943, - [944] = 944, - [945] = 945, - [946] = 872, - [947] = 947, - [948] = 948, - [949] = 949, - [950] = 950, - [951] = 951, - [952] = 879, - [953] = 953, - [954] = 954, - [955] = 955, - [956] = 956, - [957] = 932, - [958] = 873, - [959] = 876, - [960] = 908, - [961] = 961, - [962] = 962, - [963] = 963, - [964] = 964, - [965] = 965, - [966] = 866, - [967] = 874, - [968] = 968, - [969] = 969, - [970] = 866, - [971] = 874, - [972] = 972, - [973] = 973, - [974] = 974, - [975] = 975, - [976] = 876, - [977] = 977, - [978] = 898, - [979] = 979, - [980] = 980, - [981] = 981, - [982] = 863, - [983] = 879, - [984] = 984, - [985] = 985, - [986] = 986, - [987] = 987, - [988] = 988, - [989] = 989, - [990] = 990, - [991] = 991, - [992] = 973, - [993] = 993, - [994] = 994, - [995] = 995, - [996] = 990, - [997] = 997, - [998] = 902, - [999] = 999, - [1000] = 1000, - [1001] = 871, - [1002] = 975, - [1003] = 860, - [1004] = 1004, - [1005] = 1005, - [1006] = 872, - [1007] = 873, - [1008] = 870, - [1009] = 1009, - [1010] = 990, - [1011] = 1011, - [1012] = 1012, - [1013] = 1013, - [1014] = 1014, - [1015] = 1015, - [1016] = 1016, - [1017] = 1017, - [1018] = 1018, - [1019] = 1019, - [1020] = 1020, - [1021] = 1021, - [1022] = 1014, - [1023] = 1023, - [1024] = 1024, - [1025] = 995, - [1026] = 1026, - [1027] = 1027, - [1028] = 1012, - [1029] = 865, - [1030] = 1011, - [1031] = 1031, - [1032] = 1032, - [1033] = 1033, - [1034] = 1032, - [1035] = 1035, - [1036] = 1036, - [1037] = 1037, - [1038] = 1038, - [1039] = 1039, - [1040] = 1017, - [1041] = 1041, - [1042] = 1042, - [1043] = 1043, - [1044] = 1044, - [1045] = 1039, - [1046] = 1046, - [1047] = 1046, - [1048] = 1048, - [1049] = 1049, - [1050] = 1050, - [1051] = 1051, - [1052] = 1052, - [1053] = 1053, - [1054] = 1054, - [1055] = 1055, - [1056] = 1056, - [1057] = 1057, - [1058] = 1058, - [1059] = 1059, - [1060] = 1060, - [1061] = 1061, - [1062] = 882, - [1063] = 984, - [1064] = 1064, - [1065] = 933, - [1066] = 1066, - [1067] = 1060, - [1068] = 1068, - [1069] = 1069, - [1070] = 1070, - [1071] = 1071, - [1072] = 899, - [1073] = 1073, - [1074] = 1074, - [1075] = 925, - [1076] = 1076, - [1077] = 1053, - [1078] = 1078, - [1079] = 936, - [1080] = 1080, - [1081] = 1081, - [1082] = 1082, - [1083] = 1083, - [1084] = 1084, - [1085] = 1085, - [1086] = 1086, - [1087] = 1087, - [1088] = 1088, - [1089] = 1089, - [1090] = 1090, - [1091] = 1088, - [1092] = 1092, - [1093] = 1093, - [1094] = 1094, - [1095] = 1095, - [1096] = 1096, - [1097] = 1097, - [1098] = 1098, - [1099] = 1099, - [1100] = 1100, - [1101] = 886, - [1102] = 1102, - [1103] = 1103, - [1104] = 1104, - [1105] = 1086, - [1106] = 1087, - [1107] = 1107, - [1108] = 1108, - [1109] = 1109, - [1110] = 1055, - [1111] = 1111, - [1112] = 1112, - [1113] = 1113, - [1114] = 1114, - [1115] = 1115, - [1116] = 1116, - [1117] = 1117, - [1118] = 1118, - [1119] = 1119, - [1120] = 1120, - [1121] = 1121, - [1122] = 1122, - [1123] = 1123, - [1124] = 1124, - [1125] = 1090, - [1126] = 1126, - [1127] = 1127, - [1128] = 1005, - [1129] = 1049, - [1130] = 1130, - [1131] = 1131, - [1132] = 1090, - [1133] = 1133, - [1134] = 1089, - [1135] = 1096, - [1136] = 1136, - [1137] = 1074, - [1138] = 1138, - [1139] = 1139, - [1140] = 1140, - [1141] = 1141, - [1142] = 1115, - [1143] = 1085, - [1144] = 1144, - [1145] = 1130, - [1146] = 1100, - [1147] = 1090, - [1148] = 1140, - [1149] = 1149, - [1150] = 1050, - [1151] = 1151, - [1152] = 1152, - [1153] = 1153, - [1154] = 1154, - [1155] = 1155, - [1156] = 1156, - [1157] = 1133, - [1158] = 1158, - [1159] = 1159, - [1160] = 1160, - [1161] = 1161, - [1162] = 1162, - [1163] = 1117, - [1164] = 1107, - [1165] = 1165, - [1166] = 1166, - [1167] = 1167, - [1168] = 1136, - [1169] = 1169, - [1170] = 1155, - [1171] = 1171, - [1172] = 1172, - [1173] = 1173, - [1174] = 1174, - [1175] = 1023, - [1176] = 1176, - [1177] = 1177, - [1178] = 1178, - [1179] = 1179, - [1180] = 1036, - [1181] = 1181, - [1182] = 570, - [1183] = 1183, - [1184] = 1184, - [1185] = 1124, - [1186] = 1186, - [1187] = 1187, - [1188] = 1188, - [1189] = 1189, - [1190] = 1190, - [1191] = 1191, - [1192] = 1192, - [1193] = 572, - [1194] = 1126, - [1195] = 1195, - [1196] = 1196, - [1197] = 1197, - [1198] = 1198, - [1199] = 1199, - [1200] = 1200, - [1201] = 1201, - [1202] = 1202, - [1203] = 1165, - [1204] = 1204, - [1205] = 1205, - [1206] = 1206, - [1207] = 1207, - [1208] = 1208, - [1209] = 1209, - [1210] = 1210, - [1211] = 1211, - [1212] = 1212, - [1213] = 1213, - [1214] = 1214, - [1215] = 1215, - [1216] = 1216, - [1217] = 1042, - [1218] = 1218, - [1219] = 1219, - [1220] = 1158, - [1221] = 1156, - [1222] = 1222, - [1223] = 1223, - [1224] = 1224, - [1225] = 1189, - [1226] = 1226, - [1227] = 1227, - [1228] = 1158, - [1229] = 1188, - [1230] = 1190, - [1231] = 1231, - [1232] = 1232, - [1233] = 1159, - [1234] = 1202, - [1235] = 1235, - [1236] = 1187, - [1237] = 1237, - [1238] = 1167, - [1239] = 1169, - [1240] = 1155, - [1241] = 1241, - [1242] = 1156, - [1243] = 1227, - [1244] = 1244, - [1245] = 1167, - [1246] = 1246, - [1247] = 1224, - [1248] = 1195, - [1249] = 1171, - [1250] = 1250, - [1251] = 1227, - [1252] = 1252, - [1253] = 1253, - [1254] = 1254, - [1255] = 1255, - [1256] = 1256, - [1257] = 1257, - [1258] = 1114, - [1259] = 1041, - [1260] = 1198, - [1261] = 1224, - [1262] = 1250, - [1263] = 1188, - [1264] = 1264, - [1265] = 1190, - [1266] = 1231, - [1267] = 1267, - [1268] = 1268, - [1269] = 1269, - [1270] = 1270, - [1271] = 1176, - [1272] = 1272, - [1273] = 1169, - [1274] = 1274, - [1275] = 1159, - [1276] = 1202, - [1277] = 1277, - [1278] = 1177, - [1279] = 1172, - [1280] = 1187, - [1281] = 1281, - [1282] = 1282, - [1283] = 1283, - [1284] = 1283, - [1285] = 1285, - [1286] = 252, - [1287] = 1287, - [1288] = 1288, - [1289] = 1289, - [1290] = 1290, - [1291] = 1291, - [1292] = 1292, - [1293] = 1293, - [1294] = 1294, - [1295] = 1255, - [1296] = 1296, - [1297] = 1297, - [1298] = 1298, - [1299] = 1299, - [1300] = 1300, - [1301] = 1301, - [1302] = 1302, - [1303] = 1303, - [1304] = 1304, - [1305] = 1305, - [1306] = 1306, - [1307] = 1307, - [1308] = 1308, - [1309] = 1309, - [1310] = 1310, - [1311] = 261, - [1312] = 1312, - [1313] = 1313, - [1314] = 1314, - [1315] = 1000, - [1316] = 1316, - [1317] = 1317, - [1318] = 1318, - [1319] = 1319, - [1320] = 1320, - [1321] = 262, - [1322] = 1268, - [1323] = 1323, - [1324] = 1324, - [1325] = 1325, - [1326] = 1244, - [1327] = 1327, - [1328] = 1288, - [1329] = 1302, - [1330] = 1299, - [1331] = 1324, - [1332] = 1332, - [1333] = 264, - [1334] = 1334, - [1335] = 1335, - [1336] = 1336, - [1337] = 1337, - [1338] = 1338, - [1339] = 1339, - [1340] = 1340, - [1341] = 1341, - [1342] = 1342, - [1343] = 1343, - [1344] = 1344, - [1345] = 1345, - [1346] = 1289, - [1347] = 1347, - [1348] = 1303, - [1349] = 260, - [1350] = 1350, - [1351] = 1351, - [1352] = 1352, - [1353] = 1353, - [1354] = 1354, - [1355] = 1355, - [1356] = 1356, - [1357] = 1357, - [1358] = 1358, - [1359] = 1359, - [1360] = 1360, - [1361] = 1361, - [1362] = 1362, - [1363] = 1363, - [1364] = 1364, - [1365] = 1365, - [1366] = 1366, - [1367] = 1360, - [1368] = 1355, - [1369] = 1369, - [1370] = 1356, - [1371] = 1364, - [1372] = 1372, - [1373] = 1359, - [1374] = 1363, - [1375] = 1375, - [1376] = 1375, - [1377] = 1377, - [1378] = 1378, - [1379] = 1379, - [1380] = 1359, - [1381] = 1381, - [1382] = 1382, - [1383] = 1383, - [1384] = 1384, - [1385] = 1385, - [1386] = 1386, - [1387] = 1387, - [1388] = 1388, - [1389] = 1375, - [1390] = 1390, - [1391] = 1391, - [1392] = 1383, - [1393] = 1356, - [1394] = 1361, - [1395] = 1395, - [1396] = 1361, - [1397] = 1397, - [1398] = 1398, - [1399] = 1399, - [1400] = 1400, - [1401] = 1355, - [1402] = 1385, - [1403] = 1403, - [1404] = 1404, - [1405] = 1405, - [1406] = 1406, - [1407] = 1362, - [1408] = 1408, - [1409] = 1405, - [1410] = 1410, - [1411] = 1411, - [1412] = 1412, - [1413] = 1413, - [1414] = 1365, - [1415] = 1415, - [1416] = 1404, - [1417] = 1417, - [1418] = 1418, - [1419] = 1358, - [1420] = 1378, - [1421] = 1357, - [1422] = 1354, - [1423] = 1423, - [1424] = 1413, - [1425] = 1425, - [1426] = 1426, - [1427] = 1427, - [1428] = 1382, - [1429] = 1429, - [1430] = 1391, - [1431] = 1410, - [1432] = 1432, - [1433] = 1412, - [1434] = 1434, - [1435] = 1435, - [1436] = 1436, - [1437] = 1437, - [1438] = 1403, - [1439] = 1366, - [1440] = 1440, - [1441] = 1432, - [1442] = 1442, - [1443] = 1426, - [1444] = 1434, - [1445] = 1363, - [1446] = 1446, - [1447] = 1408, - [1448] = 1362, - [1449] = 1423, - [1450] = 1450, - [1451] = 1361, - [1452] = 1452, - [1453] = 1400, - [1454] = 1454, - [1455] = 1366, - [1456] = 1378, - [1457] = 1360, - [1458] = 1458, - [1459] = 1459, - [1460] = 1460, - [1461] = 1461, - [1462] = 1426, - [1463] = 1381, - [1464] = 1458, - [1465] = 1465, - [1466] = 1440, - [1467] = 1356, - [1468] = 1364, - [1469] = 1379, - [1470] = 1418, - [1471] = 1458, - [1472] = 1437, - [1473] = 1459, - [1474] = 1450, - [1475] = 1429, - [1476] = 1476, - [1477] = 1477, - [1478] = 1478, -}; - 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 + return (c < 43020 + ? (c < 4096 + ? (c < 2693 + ? (c < 1969 + ? (c < 910 + ? (c < 736 + ? (c < 186 ? (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 <= 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 < 1646 + ? (c < 1369 + ? (c < 1162 + ? (c < 1015 + ? (c >= 931 && c <= 1013) + : c <= 1153) + : (c <= 1327 || (c >= 1329 && c <= 1366))) + : (c <= 1369 || (c < 1519 + ? (c < 1488 + ? (c >= 1376 && c <= 1416) + : c <= 1514) + : (c <= 1522 || (c >= 1568 && c <= 1610))))) + : (c <= 1647 || (c < 1786 + ? (c < 1765 + ? (c < 1749 + ? (c >= 1649 && c <= 1747) + : c <= 1749) + : (c <= 1766 || (c >= 1774 && c <= 1775))) + : (c <= 1788 || (c < 1810 + ? (c < 1808 + ? c == 1791 + : c <= 1808) + : (c <= 1839 || (c >= 1869 && c <= 1957))))))))) + : (c <= 1969 || (c < 2474 ? (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 < 2074 + ? (c < 2042 + ? (c < 2036 + ? (c >= 1994 && c <= 2026) + : c <= 2037) + : (c <= 2042 || (c >= 2048 && c <= 2069))) + : (c <= 2074 || (c < 2112 + ? (c < 2088 + ? c == 2084 + : c <= 2088) + : (c <= 2136 || (c >= 2144 && c <= 2154))))) + : (c <= 2228 || (c < 2392 + ? (c < 2365 + ? (c < 2308 + ? (c >= 2230 && c <= 2247) + : c <= 2361) + : (c <= 2365 || c == 2384)) + : (c <= 2401 || (c < 2447 + ? (c < 2437 + ? (c >= 2417 && c <= 2432) + : c <= 2444) + : (c <= 2448 || (c >= 2451 && c <= 2472))))))) + : (c <= 2480 || (c < 2575 + ? (c < 2524 + ? (c < 2493 + ? (c < 2486 + ? c == 2482 + : c <= 2489) + : (c <= 2493 || c == 2510)) + : (c <= 2525 || (c < 2556 + ? (c < 2544 + ? (c >= 2527 && c <= 2529) + : c <= 2545) + : (c <= 2556 || (c >= 2565 && c <= 2570))))) + : (c <= 2576 || (c < 2616 + ? (c < 2610 + ? (c < 2602 + ? (c >= 2579 && c <= 2600) + : c <= 2608) + : (c <= 2611 || (c >= 2613 && c <= 2614))) + : (c <= 2617 || (c < 2654 + ? (c >= 2649 && c <= 2652) + : (c <= 2654 || (c >= 2674 && c <= 2676))))))))))) + : (c <= 2701 || (c < 3214 + ? (c < 2947 + ? (c < 2821 + ? (c < 2741 + ? (c < 2730 + ? (c < 2707 + ? (c >= 2703 && c <= 2705) + : c <= 2728) + : (c <= 2736 || (c >= 2738 && c <= 2739))) + : (c <= 2745 || (c < 2784 + ? (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 <= 2768) + : (c <= 2785 || c == 2809)))) + : (c <= 2828 || (c < 2869 + ? (c < 2858 + ? (c < 2835 + ? (c >= 2831 && c <= 2832) + : c <= 2856) + : (c <= 2864 || (c >= 2866 && c <= 2867))) + : (c <= 2873 || (c < 2911 + ? (c < 2908 + ? c == 2877 + : c <= 2909) + : (c <= 2913 || c == 2929)))))) + : (c <= 2947 || (c < 3024 + ? (c < 2972 + ? (c < 2962 + ? (c < 2958 + ? (c >= 2949 && c <= 2954) + : c <= 2960) + : (c <= 2965 || (c >= 2969 && c <= 2970))) + : (c <= 2972 || (c < 2984 + ? (c < 2979 + ? (c >= 2974 && c <= 2975) + : c <= 2980) + : (c <= 2986 || (c >= 2990 && c <= 3001))))) + : (c <= 3024 || (c < 3133 + ? (c < 3090 + ? (c < 3086 + ? (c >= 3077 && c <= 3084) + : c <= 3088) + : (c <= 3112 || (c >= 3114 && c <= 3129))) + : (c <= 3133 || (c < 3200 + ? (c < 3168 + ? (c >= 3160 && c <= 3162) + : c <= 3169) + : (c <= 3200 || (c >= 3205 && c <= 3212))))))))) + : (c <= 3216 || (c < 3520 + ? (c < 3346 + ? (c < 3294 + ? (c < 3253 + ? (c < 3242 + ? (c >= 3218 && c <= 3240) + : c <= 3251) + : (c <= 3257 || c == 3261)) + : (c <= 3294 || (c < 3332 + ? (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 <= 3314) + : (c <= 3340 || (c >= 3342 && c <= 3344))))) + : (c <= 3386 || (c < 3450 + ? (c < 3412 + ? (c < 3406 + ? c == 3389 + : c <= 3406) + : (c <= 3414 || (c >= 3423 && c <= 3425))) + : (c <= 3455 || (c < 3507 + ? (c < 3482 + ? (c >= 3461 && c <= 3478) + : c <= 3505) + : (c <= 3515 || c == 3517)))))) + : (c <= 3526 || (c < 3762 + ? (c < 3716 + ? (c < 3648 + ? (c < 3634 + ? (c >= 3585 && c <= 3632) + : c <= 3634) + : (c <= 3654 || (c >= 3713 && c <= 3714))) + : (c <= 3716 || (c < 3749 + ? (c < 3724 + ? (c >= 3718 && c <= 3722) + : c <= 3747) + : (c <= 3749 || (c >= 3751 && c <= 3760))))) + : (c <= 3762 || (c < 3840 + ? (c < 3782 + ? (c < 3776 + ? c == 3773 + : c <= 3780) + : (c <= 3782 || (c >= 3804 && c <= 3807))) + : (c <= 3840 || (c < 3913 + ? (c >= 3904 && c <= 3911) + : (c <= 3948 || (c >= 3976 && c <= 3980))))))))))))) + : (c <= 4138 || (c < 8025 + ? (c < 5952 + ? (c < 4752 + ? (c < 4295 + ? (c < 4197 + ? (c < 4186 + ? (c < 4176 + ? c == 4159 + : c <= 4181) + : (c <= 4189 || c == 4193)) + : (c <= 4198 || (c < 4238 + ? (c < 4213 + ? (c >= 4206 && c <= 4208) + : c <= 4225) + : (c <= 4238 || (c >= 4256 && c <= 4293))))) + : (c <= 4295 || (c < 4688 + ? (c < 4348 ? (c < 4304 ? c == 4301 : c <= 4346) - : (c <= 4680 || (c >= 4682 && c <= 4685))))) - : (c <= 4694 || (c < 4752 - ? (c < 4704 + : (c <= 4680 || (c >= 4682 && c <= 4685))) + : (c <= 4694 || (c < 4704 ? (c < 4698 ? c == 4696 : c <= 4701) - : (c <= 4744 || (c >= 4746 && c <= 4749))) - : (c <= 4784 || (c < 4800 + : (c <= 4744 || (c >= 4746 && c <= 4749))))))) + : (c <= 4784 || (c < 5024 + ? (c < 4808 + ? (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 <= 4800 || (c >= 4802 && c <= 4805))) + : (c <= 4822 || (c < 4888 ? (c < 4882 ? (c >= 4824 && c <= 4880) : c <= 4885) - : (c <= 4954 || (c >= 4992 && c <= 5007))) - : (c <= 5109 || (c < 5743 + : (c <= 4954 || (c >= 4992 && c <= 5007))))) + : (c <= 5109 || (c < 5792 + ? (c < 5743 ? (c < 5121 ? (c >= 5112 && c <= 5117) : c <= 5740) - : (c <= 5759 || (c >= 5761 && c <= 5786))))) - : (c <= 5866 || (c < 5984 - ? (c < 5919 + : (c <= 5759 || (c >= 5761 && c <= 5786))) + : (c <= 5866 || (c < 5902 ? (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 <= 5900) + : (c <= 5905 || (c >= 5920 && c <= 5937))))))))) + : (c <= 5969 || (c < 7043 + ? (c < 6400 + ? (c < 6108 + ? (c < 6016 + ? (c < 5998 + ? (c >= 5984 && c <= 5996) + : c <= 6000) + : (c <= 6067 || c == 6103)) + : (c <= 6108 || (c < 6314 + ? (c < 6272 + ? (c >= 6176 && c <= 6264) + : c <= 6312) + : (c <= 6314 || (c >= 6320 && c <= 6389))))) + : (c <= 6430 || (c < 6656 + ? (c < 6528 + ? (c < 6512 + ? (c >= 6480 && c <= 6509) + : c <= 6516) + : (c <= 6571 || (c >= 6576 && c <= 6601))) + : (c <= 6678 || (c < 6917 + ? (c < 6823 + ? (c >= 6688 && c <= 6740) + : c <= 6823) + : (c <= 6963 || (c >= 6981 && c <= 6987))))))) + : (c <= 7072 || (c < 7406 + ? (c < 7258 + ? (c < 7168 + ? (c < 7098 + ? (c >= 7086 && c <= 7087) + : c <= 7141) + : (c <= 7203 || (c >= 7245 && c <= 7247))) + : (c <= 7293 || (c < 7357 + ? (c < 7312 + ? (c >= 7296 && c <= 7304) + : c <= 7354) + : (c <= 7359 || (c >= 7401 && c <= 7404))))) + : (c <= 7411 || (c < 7960 + ? (c < 7424 + ? (c < 7418 + ? (c >= 7413 && c <= 7414) + : c <= 7418) + : (c <= 7615 || (c >= 7680 && c <= 7957))) + : (c <= 7965 || (c < 8008 + ? (c >= 7968 && c <= 8005) + : (c <= 8013 || (c >= 8016 && c <= 8023))))))))))) + : (c <= 8025 || (c < 11631 + ? (c < 8469 + ? (c < 8150 + ? (c < 8118 + ? (c < 8031 + ? (c < 8029 + ? c == 8027 + : c <= 8029) + : (c <= 8061 || (c >= 8064 && c <= 8116))) + : (c <= 8124 || (c < 8134 + ? (c < 8130 + ? c == 8126 + : c <= 8132) + : (c <= 8140 || (c >= 8144 && c <= 8147))))) + : (c <= 8155 || (c < 8319 + ? (c < 8182 + ? (c < 8178 + ? (c >= 8160 && c <= 8172) + : c <= 8180) + : (c <= 8188 || c == 8305)) + : (c <= 8319 || (c < 8455 + ? (c < 8450 + ? (c >= 8336 && c <= 8348) + : c <= 8450) + : (c <= 8455 || (c >= 8458 && c <= 8467))))))) + : (c <= 8469 || (c < 11264 + ? (c < 8490 + ? (c < 8486 + ? (c < 8484 + ? (c >= 8472 && c <= 8477) + : c <= 8484) + : (c <= 8486 || c == 8488)) + : (c <= 8505 || (c < 8526 + ? (c < 8517 + ? (c >= 8508 && c <= 8511) + : c <= 8521) + : (c <= 8526 || (c >= 8544 && c <= 8584))))) + : (c <= 11310 || (c < 11520 + ? (c < 11499 + ? (c < 11360 + ? (c >= 11312 && c <= 11358) + : c <= 11492) + : (c <= 11502 || (c >= 11506 && c <= 11507))) + : (c <= 11557 || (c < 11565 + ? c == 11559 + : (c <= 11565 || (c >= 11568 && c <= 11623))))))))) + : (c <= 11631 || (c < 12704 + ? (c < 12293 + ? (c < 11704 + ? (c < 11688 + ? (c < 11680 + ? (c >= 11648 && c <= 11670) + : c <= 11686) + : (c <= 11694 || (c >= 11696 && c <= 11702))) + : (c <= 11710 || (c < 11728 + ? (c < 11720 + ? (c >= 11712 && c <= 11718) + : c <= 11726) + : (c <= 11734 || (c >= 11736 && c <= 11742))))) + : (c <= 12295 || (c < 12445 + ? (c < 12344 + ? (c < 12337 + ? (c >= 12321 && c <= 12329) + : c <= 12341) + : (c <= 12348 || (c >= 12353 && c <= 12438))) + : (c <= 12447 || (c < 12549 + ? (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 <= 12543) + : (c <= 12591 || (c >= 12593 && c <= 12686))))))) + : (c <= 12735 || (c < 42623 + ? (c < 42192 + ? (c < 19968 + ? (c < 13312 + ? (c >= 12784 && c <= 12799) + : c <= 19903) + : (c <= 40956 || (c >= 40960 && c <= 42124))) + : (c <= 42237 || (c < 42538 + ? (c < 42512 + ? (c >= 42240 && c <= 42508) + : c <= 42527) + : (c <= 42539 || (c >= 42560 && c <= 42606))))) + : (c <= 42653 || (c < 42946 + ? (c < 42786 + ? (c < 42775 + ? (c >= 42656 && c <= 42735) + : c <= 42783) + : (c <= 42888 || (c >= 42891 && c <= 42943))) + : (c <= 42954 || (c < 43011 + ? (c >= 42997 && c <= 43009) + : (c <= 43013 || (c >= 43015 && c <= 43018))))))))))))))) + : (c <= 43042 || (c < 70453 + ? (c < 66176 + ? (c < 64112 + ? (c < 43697 + ? (c < 43471 + ? (c < 43261 + ? (c < 43250 + ? (c < 43138 + ? (c >= 43072 && c <= 43123) + : c <= 43187) + : (c <= 43255 || c == 43259)) + : (c <= 43262 || (c < 43360 + ? (c < 43312 + ? (c >= 43274 && c <= 43301) + : c <= 43334) + : (c <= 43388 || (c >= 43396 && c <= 43442))))) + : (c <= 43471 || (c < 43584 + ? (c < 43514 + ? (c < 43494 + ? (c >= 43488 && c <= 43492) + : c <= 43503) + : (c <= 43518 || (c >= 43520 && c <= 43560))) + : (c <= 43586 || (c < 43642 + ? (c < 43616 + ? (c >= 43588 && c <= 43595) + : c <= 43638) + : (c <= 43642 || (c >= 43646 && c <= 43695))))))) + : (c <= 43697 || (c < 43793 + ? (c < 43739 + ? (c < 43712 + ? (c < 43705 + ? (c >= 43701 && c <= 43702) + : c <= 43709) + : (c <= 43712 || c == 43714)) + : (c <= 43741 || (c < 43777 + ? (c < 43762 + ? (c >= 43744 && c <= 43754) + : c <= 43764) + : (c <= 43782 || (c >= 43785 && c <= 43790))))) + : (c <= 43798 || (c < 43888 + ? (c < 43824 + ? (c < 43816 + ? (c >= 43808 && c <= 43814) + : c <= 43822) + : (c <= 43866 || (c >= 43868 && c <= 43881))) + : (c <= 44002 || (c < 55243 + ? (c < 55216 + ? (c >= 44032 && c <= 55203) + : c <= 55238) + : (c <= 55291 || (c >= 63744 && c <= 64109))))))))) + : (c <= 64217 || (c < 65147 + ? (c < 64326 + ? (c < 64298 + ? (c < 64285 + ? (c < 64275 + ? (c >= 64256 && c <= 64262) + : c <= 64279) + : (c <= 64285 || (c >= 64287 && c <= 64296))) + : (c <= 64310 || (c < 64320 + ? (c < 64318 + ? (c >= 64312 && c <= 64316) + : c <= 64318) + : (c <= 64321 || (c >= 64323 && c <= 64324))))) + : (c <= 64433 || (c < 65008 + ? (c < 64848 + ? (c < 64612 + ? (c >= 64467 && c <= 64605) + : c <= 64829) + : (c <= 64911 || (c >= 64914 && c <= 64967))) + : (c <= 65017 || (c < 65143 + ? (c < 65139 + ? c == 65137 + : c <= 65139) + : (c <= 65143 || c == 65145)))))) + : (c <= 65147 || (c < 65498 + ? (c < 65382 + ? (c < 65313 ? (c < 65151 ? c == 65149 : c <= 65276) - : (c <= 65338 || (c >= 65345 && c <= 65370))))) - : (c <= 65437 || (c < 65498 - ? (c < 65482 + : (c <= 65338 || (c >= 65345 && c <= 65370))) + : (c <= 65437 || (c < 65482 ? (c < 65474 ? (c >= 65440 && c <= 65470) : c <= 65479) - : (c <= 65487 || (c >= 65490 && c <= 65495))) - : (c <= 65500 || (c < 65576 + : (c <= 65487 || (c >= 65490 && c <= 65495))))) + : (c <= 65500 || (c < 65599 + ? (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 <= 65594 || (c >= 65596 && c <= 65597))) + : (c <= 65613 || (c < 65664 + ? (c >= 65616 && c <= 65629) + : (c <= 65786 || (c >= 65856 && c <= 65908))))))))))) + : (c <= 66204 || (c < 68416 + ? (c < 67639 + ? (c < 66736 + ? (c < 66432 + ? (c < 66349 + ? (c < 66304 + ? (c >= 66208 && c <= 66256) + : c <= 66335) + : (c <= 66378 || (c >= 66384 && c <= 66421))) + : (c <= 66461 || (c < 66513 + ? (c < 66504 + ? (c >= 66464 && c <= 66499) + : c <= 66511) + : (c <= 66517 || (c >= 66560 && c <= 66717))))) + : (c <= 66771 || (c < 67392 + ? (c < 66864 + ? (c < 66816 + ? (c >= 66776 && c <= 66811) + : c <= 66855) + : (c <= 66915 || (c >= 67072 && c <= 67382))) + : (c <= 67413 || (c < 67592 + ? (c < 67584 + ? (c >= 67424 && c <= 67431) + : c <= 67589) + : (c <= 67592 || (c >= 67594 && c <= 67637))))))) + : (c <= 67640 || (c < 68030 + ? (c < 67808 + ? (c < 67680 + ? (c < 67647 + ? c == 67644 + : c <= 67669) + : (c <= 67702 || (c >= 67712 && c <= 67742))) + : (c <= 67826 || (c < 67872 + ? (c < 67840 + ? (c >= 67828 && c <= 67829) + : c <= 67861) + : (c <= 67897 || (c >= 67968 && c <= 68023))))) + : (c <= 68031 || (c < 68192 + ? (c < 68117 + ? (c < 68112 + ? c == 68096 + : c <= 68115) + : (c <= 68119 || (c >= 68121 && c <= 68149))) + : (c <= 68220 || (c < 68297 + ? (c < 68288 + ? (c >= 68224 && c <= 68252) + : c <= 68295) + : (c <= 68324 || (c >= 68352 && c <= 68405))))))))) + : (c <= 68437 || (c < 69968 + ? (c < 69415 + ? (c < 68800 + ? (c < 68608 + ? (c < 68480 + ? (c >= 68448 && c <= 68466) + : c <= 68497) + : (c <= 68680 || (c >= 68736 && c <= 68786))) + : (c <= 68850 || (c < 69296 + ? (c < 69248 + ? (c >= 68864 && c <= 68899) + : c <= 69289) + : (c <= 69297 || (c >= 69376 && c <= 69404))))) + : (c <= 69415 || (c < 69763 + ? (c < 69600 + ? (c < 69552 + ? (c >= 69424 && c <= 69445) + : c <= 69572) + : (c <= 69622 || (c >= 69635 && c <= 69687))) + : (c <= 69807 || (c < 69956 + ? (c < 69891 + ? (c >= 69840 && c <= 69864) + : c <= 69926) + : (c <= 69956 || c == 69959)))))) + : (c <= 70002 || (c < 70282 + ? (c < 70108 + ? (c < 70081 + ? (c < 70019 + ? c == 70006 + : c <= 70066) + : (c <= 70084 || c == 70106)) + : (c <= 70108 || (c < 70272 + ? (c < 70163 + ? (c >= 70144 && c <= 70161) + : c <= 70187) + : (c <= 70278 || c == 70280)))) + : (c <= 70285 || (c < 70415 + ? (c < 70320 + ? (c < 70303 + ? (c >= 70287 && c <= 70301) + : c <= 70312) + : (c <= 70366 || (c >= 70405 && c <= 70412))) + : (c <= 70416 || (c < 70442 + ? (c >= 70419 && c <= 70440) + : (c <= 70448 || (c >= 70450 && c <= 70451))))))))))))) + : (c <= 70457 || (c < 113808 + ? (c < 72818 + ? (c < 71945 + ? (c < 71040 + ? (c < 70727 + ? (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 <= 70497 || (c >= 70656 && c <= 70708))) + : (c <= 70730 || (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 <= 70853 || c == 70855)))) + : (c <= 71086 || (c < 71352 + ? (c < 71236 + ? (c < 71168 + ? (c >= 71128 && c <= 71131) + : c <= 71215) + : (c <= 71236 || (c >= 71296 && c <= 71338))) + : (c <= 71352 || (c < 71840 ? (c < 71680 - ? (c >= 71488 && c <= 71494) + ? (c >= 71424 && c <= 71450) : c <= 71723) - : (c <= 71903 || (c >= 71935 && c <= 71942))) - : (c <= 71945 || (c < 71960 + : (c <= 71903 || (c >= 71935 && c <= 71942))))))) + : (c <= 71945 || (c < 72192 + ? (c < 72001 + ? (c < 71960 ? (c < 71957 ? (c >= 71948 && c <= 71955) : c <= 71958) - : (c <= 71983 || c == 71999)))))) - : (c <= 72001 || (c < 72349 - ? (c < 72192 - ? (c < 72161 + : (c <= 71983 || c == 71999)) + : (c <= 72001 || (c < 72161 ? (c < 72106 ? (c >= 72096 && c <= 72103) : c <= 72144) - : (c <= 72161 || c == 72163)) - : (c <= 72192 || (c < 72272 + : (c <= 72161 || c == 72163)))) + : (c <= 72192 || (c < 72349 + ? (c < 72272 ? (c < 72250 ? (c >= 72203 && c <= 72242) : c <= 72250) - : (c <= 72272 || (c >= 72284 && c <= 72329))))) - : (c <= 72349 || (c < 72818 - ? (c < 72714 + : (c <= 72272 || (c >= 72284 && c <= 72329))) + : (c <= 72349 || (c < 72714 ? (c < 72704 - ? (c >= 72368 && c <= 72440) + ? (c >= 72384 && c <= 72440) : c <= 72712) - : (c <= 72750 || c == 72768)) - : (c <= 72847 || (c < 72971 + : (c <= 72750 || c == 72768)))))))) + : (c <= 72847 || (c < 92992 + ? (c < 73648 + ? (c < 73056 + ? (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 <= 73008 || c == 73030)) + : (c <= 73061 || (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 <= 73112 || (c >= 73440 && c <= 73458))))) + : (c <= 73648 || (c < 82944 + ? (c < 74880 + ? (c < 74752 + ? (c >= 73728 && c <= 74649) + : c <= 74862) + : (c <= 75075 || (c >= 77824 && c <= 78894))) + : (c <= 83526 || (c < 92880 ? (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 <= 92909 || (c >= 92928 && c <= 92975))))))) + : (c <= 92995 || (c < 100352 + ? (c < 94032 + ? (c < 93760 + ? (c < 93053 + ? (c >= 93027 && c <= 93047) + : c <= 93071) + : (c <= 93823 || (c >= 93952 && c <= 94026))) + : (c <= 94032 || (c < 94179 + ? (c < 94176 + ? (c >= 94099 && c <= 94111) + : c <= 94177) + : (c <= 94179 || (c >= 94208 && c <= 100343))))) + : (c <= 101589 || (c < 110960 + ? (c < 110928 + ? (c < 110592 + ? (c >= 101632 && c <= 101640) + : c <= 110878) + : (c <= 110930 || (c >= 110948 && c <= 110951))) + : (c <= 111355 || (c < 113776 + ? (c >= 113664 && c <= 113770) + : (c <= 113788 || (c >= 113792 && c <= 113800))))))))))) + : (c <= 113817 || (c < 126469 + ? (c < 120488 + ? (c < 120005 + ? (c < 119973 + ? (c < 119966 + ? (c < 119894 + ? (c >= 119808 && c <= 119892) + : c <= 119964) + : (c <= 119967 || c == 119970)) + : (c <= 119974 || (c < 119995 + ? (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 <= 119993) + : (c <= 119995 || (c >= 119997 && c <= 120003))))) + : (c <= 120069 || (c < 120123 + ? (c < 120086 + ? (c < 120077 + ? (c >= 120071 && c <= 120074) + : c <= 120084) + : (c <= 120092 || (c >= 120094 && c <= 120121))) + : (c <= 120126 || (c < 120138 + ? (c < 120134 + ? (c >= 120128 && c <= 120132) + : c <= 120134) + : (c <= 120144 || (c >= 120146 && c <= 120485))))))) + : (c <= 120512 || (c < 120772 + ? (c < 120630 + ? (c < 120572 + ? (c < 120540 + ? (c >= 120514 && c <= 120538) + : c <= 120570) + : (c <= 120596 || (c >= 120598 && c <= 120628))) + : (c <= 120654 || (c < 120714 + ? (c < 120688 + ? (c >= 120656 && c <= 120686) + : c <= 120712) + : (c <= 120744 || (c >= 120746 && c <= 120770))))) + : (c <= 120779 || (c < 124928 + ? (c < 123214 + ? (c < 123191 + ? (c >= 123136 && c <= 123180) + : c <= 123197) + : (c <= 123214 || (c >= 123584 && c <= 123627))) + : (c <= 125124 || (c < 125259 + ? (c >= 125184 && c <= 125251) + : (c <= 125259 || (c >= 126464 && c <= 126467))))))))) + : (c <= 126495 || (c < 126561 + ? (c < 126537 + ? (c < 126516 + ? (c < 126503 + ? (c < 126500 + ? (c >= 126497 && c <= 126498) + : c <= 126500) + : (c <= 126503 || (c >= 126505 && c <= 126514))) + : (c <= 126519 || (c < 126530 + ? (c < 126523 + ? c == 126521 + : c <= 126523) + : (c <= 126530 || c == 126535)))) + : (c <= 126537 || (c < 126551 + ? (c < 126545 + ? (c < 126541 + ? c == 126539 + : c <= 126543) + : (c <= 126546 || c == 126548)) + : (c <= 126551 || (c < 126557 + ? (c < 126555 + ? c == 126553 + : c <= 126555) + : (c <= 126557 || c == 126559)))))) + : (c <= 126562 || (c < 126629 + ? (c < 126585 + ? (c < 126572 + ? (c < 126567 + ? c == 126564 + : c <= 126570) + : (c <= 126578 || (c >= 126580 && c <= 126583))) + : (c <= 126588 || (c < 126603 + ? (c < 126592 + ? c == 126590 + : c <= 126601) + : (c <= 126619 || (c >= 126625 && c <= 126627))))) + : (c <= 126633 || (c < 178208 + ? (c < 173824 + ? (c < 131072 + ? (c >= 126635 && c <= 126651) + : c <= 173789) + : (c <= 177972 || (c >= 177984 && c <= 178205))) + : (c <= 183969 || (c < 194560 + ? (c >= 183984 && c <= 191456) : (c <= 195101 || (c >= 196608 && c <= 201546))))))))))))))))); } static inline bool sym_identifier_character_set_2(int32_t c) { - return (c < 43616 - ? (c < 3782 - ? (c < 2748 - ? (c < 2045 + return (c < 43052 + ? (c < 3718 + ? (c < 2730 + ? (c < 2042 ? (c < 1015 ? (c < 710 ? (c < 181 @@ -5339,344 +3805,338 @@ static inline bool sym_identifier_character_set_2(int32_t c) { ? (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 <= 1969 || (c >= 1984 && c <= 2037))))))))) + : (c <= 2042 || (c < 2534 + ? (c < 2447 + ? (c < 2230 + ? (c < 2112 + ? (c < 2048 + ? c == 2045 + : c <= 2093) + : (c <= 2139 || (c < 2208 + ? (c >= 2144 && c <= 2154) + : c <= 2228))) + : (c <= 2247 || (c < 2406 + ? (c < 2275 + ? (c >= 2259 && c <= 2273) + : c <= 2403) + : (c <= 2415 || (c < 2437 + ? (c >= 2417 && c <= 2435) + : c <= 2444))))) + : (c <= 2448 || (c < 2503 + ? (c < 2482 + ? (c < 2474 + ? (c >= 2451 && c <= 2472) + : c <= 2480) + : (c <= 2482 || (c < 2492 + ? (c >= 2486 && c <= 2489) + : c <= 2500))) + : (c <= 2504 || (c < 2524 + ? (c < 2519 + ? (c >= 2507 && c <= 2510) + : c <= 2519) + : (c <= 2525 || (c >= 2527 && c <= 2531))))))) + : (c <= 2545 || (c < 2622 + ? (c < 2579 + ? (c < 2561 + ? (c < 2558 + ? c == 2556 + : c <= 2558) + : (c <= 2563 || (c < 2575 + ? (c >= 2565 && c <= 2570) + : c <= 2576))) + : (c <= 2600 || (c < 2613 + ? (c < 2610 + ? (c >= 2602 && c <= 2608) + : c <= 2611) + : (c <= 2614 || (c < 2620 + ? (c >= 2616 && c <= 2617) + : c <= 2620))))) + : (c <= 2626 || (c < 2662 + ? (c < 2641 + ? (c < 2635 + ? (c >= 2631 && c <= 2632) + : c <= 2637) + : (c <= 2641 || (c < 2654 + ? (c >= 2649 && c <= 2652) + : c <= 2654))) + : (c <= 2677 || (c < 2703 + ? (c < 2693 + ? (c >= 2689 && c <= 2691) + : c <= 2701) + : (c <= 2705 || (c >= 2707 && c <= 2728))))))))))) + : (c <= 2736 || (c < 3142 + ? (c < 2918 + ? (c < 2831 + ? (c < 2768 + ? (c < 2748 + ? (c < 2741 ? (c >= 2738 && c <= 2739) - : c <= 2745))))))))))) - : (c <= 2757 || (c < 3168 - ? (c < 2958 - ? (c < 2866 - ? (c < 2809 - ? (c < 2768 - ? (c < 2763 + : c <= 2745) + : (c <= 2757 || (c < 2763 ? (c >= 2759 && c <= 2761) - : c <= 2765) - : (c <= 2768 || (c < 2790 + : c <= 2765))) + : (c <= 2768 || (c < 2809 + ? (c < 2790 ? (c >= 2784 && c <= 2787) - : c <= 2799))) - : (c <= 2815 || (c < 2831 - ? (c < 2821 + : c <= 2799) + : (c <= 2815 || (c < 2821 ? (c >= 2817 && c <= 2819) - : c <= 2828) - : (c <= 2832 || (c < 2858 + : c <= 2828))))) + : (c <= 2832 || (c < 2887 + ? (c < 2866 + ? (c < 2858 ? (c >= 2835 && c <= 2856) - : c <= 2864))))) - : (c <= 2867 || (c < 2908 - ? (c < 2887 - ? (c < 2876 + : c <= 2864) + : (c <= 2867 || (c < 2876 ? (c >= 2869 && c <= 2873) - : c <= 2884) - : (c <= 2888 || (c < 2901 + : c <= 2884))) + : (c <= 2888 || (c < 2908 + ? (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 <= 2903) + : (c <= 2909 || (c >= 2911 && c <= 2915))))))) + : (c <= 2927 || (c < 3006 + ? (c < 2969 + ? (c < 2949 + ? (c < 2946 + ? c == 2929 + : c <= 2947) + : (c <= 2954 || (c < 2962 + ? (c >= 2958 && c <= 2960) + : c <= 2965))) + : (c <= 2970 || (c < 2979 + ? (c < 2974 + ? c == 2972 + : c <= 2975) + : (c <= 2980 || (c < 2990 + ? (c >= 2984 && c <= 2986) + : c <= 3001))))) + : (c <= 3010 || (c < 3072 + ? (c < 3024 + ? (c < 3018 + ? (c >= 3014 && c <= 3016) + : c <= 3021) + : (c <= 3024 || (c < 3046 + ? c == 3031 + : c <= 3055))) + : (c <= 3084 || (c < 3114 + ? (c < 3090 + ? (c >= 3086 && c <= 3088) + : c <= 3112) + : (c <= 3129 || (c >= 3133 && c <= 3140))))))))) + : (c <= 3144 || (c < 3398 + ? (c < 3260 + ? (c < 3200 + ? (c < 3160 + ? (c < 3157 + ? (c >= 3146 && c <= 3149) + : c <= 3158) + : (c <= 3162 || (c < 3174 + ? (c >= 3168 && c <= 3171) + : c <= 3183))) + : (c <= 3203 || (c < 3218 + ? (c < 3214 + ? (c >= 3205 && c <= 3212) + : c <= 3216) + : (c <= 3240 || (c < 3253 + ? (c >= 3242 && c <= 3251) + : c <= 3257))))) + : (c <= 3268 || (c < 3302 + ? (c < 3285 + ? (c < 3274 + ? (c >= 3270 && c <= 3272) + : c <= 3277) + : (c <= 3286 || (c < 3296 + ? c == 3294 + : c <= 3299))) + : (c <= 3311 || (c < 3342 + ? (c < 3328 + ? (c >= 3313 && c <= 3314) + : c <= 3340) + : (c <= 3344 || (c >= 3346 && c <= 3396))))))) + : (c <= 3400 || (c < 3530 + ? (c < 3457 + ? (c < 3423 + ? (c < 3412 + ? (c >= 3402 && c <= 3406) + : c <= 3415) + : (c <= 3427 || (c < 3450 + ? (c >= 3430 && c <= 3439) + : c <= 3455))) + : (c <= 3459 || (c < 3507 + ? (c < 3482 + ? (c >= 3461 && c <= 3478) + : c <= 3505) + : (c <= 3515 || (c < 3520 + ? c == 3517 + : c <= 3526))))) + : (c <= 3530 || (c < 3585 + ? (c < 3544 + ? (c < 3542 + ? (c >= 3535 && c <= 3540) + : c <= 3542) + : (c <= 3551 || (c < 3570 + ? (c >= 3558 && c <= 3567) + : c <= 3571))) + : (c <= 3642 || (c < 3713 + ? (c < 3664 + ? (c >= 3648 && c <= 3662) + : c <= 3673) + : (c <= 3714 || c == 3716)))))))))))) + : (c <= 3722 || (c < 7296 + ? (c < 5024 + ? (c < 4256 + ? (c < 3893 + ? (c < 3784 + ? (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 <= 3773 || (c < 3782 + ? (c >= 3776 && c <= 3780) + : c <= 3782))) + : (c <= 3789 || (c < 3840 + ? (c < 3804 + ? (c >= 3792 && c <= 3801) + : c <= 3807) + : (c <= 3840 || (c < 3872 + ? (c >= 3864 && c <= 3865) + : c <= 3881))))) + : (c <= 3893 || (c < 3974 + ? (c < 3902 + ? (c < 3897 + ? c == 3895 + : c <= 3897) + : (c <= 3911 || (c < 3953 + ? (c >= 3913 && c <= 3948) + : c <= 3972))) + : (c <= 3991 || (c < 4096 + ? (c < 4038 + ? (c >= 3993 && c <= 4028) + : c <= 4038) + : (c <= 4169 || (c >= 4176 && c <= 4253))))))) + : (c <= 4293 || (c < 4786 + ? (c < 4688 + ? (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 <= 4685))) + : (c <= 4694 || (c < 4704 ? (c < 4698 ? c == 4696 : c <= 4701) : (c <= 4744 || (c < 4752 ? (c >= 4746 && c <= 4749) - : c <= 4784))) - : (c <= 4789 || (c < 4802 + : c <= 4784))))) + : (c <= 4789 || (c < 4882 + ? (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 <= 4880))) + : (c <= 4885 || (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 <= 4977 || (c >= 4992 && c <= 5007))))))))) + : (c <= 5109 || (c < 6400 + ? (c < 5998 + ? (c < 5870 + ? (c < 5743 + ? (c < 5121 + ? (c >= 5112 && c <= 5117) + : c <= 5740) + : (c <= 5759 || (c < 5792 + ? (c >= 5761 && c <= 5786) + : c <= 5866))) + : (c <= 5880 || (c < 5920 + ? (c < 5902 + ? (c >= 5888 && c <= 5900) + : c <= 5908) + : (c <= 5940 || (c < 5984 + ? (c >= 5952 && c <= 5971) + : c <= 5996))))) + : (c <= 6000 || (c < 6155 + ? (c < 6103 + ? (c < 6016 + ? (c >= 6002 && c <= 6003) + : c <= 6099) + : (c <= 6103 || (c < 6112 + ? (c >= 6108 && c <= 6109) + : c <= 6121))) + : (c <= 6157 || (c < 6272 + ? (c < 6176 + ? (c >= 6160 && c <= 6169) + : c <= 6264) + : (c <= 6314 || (c >= 6320 && c <= 6389))))))) + : (c <= 6430 || (c < 6800 + ? (c < 6576 + ? (c < 6470 + ? (c < 6448 ? (c >= 6432 && c <= 6443) - : c <= 6459))) - : (c <= 6509 || (c < 6576 - ? (c < 6528 + : c <= 6459) + : (c <= 6509 || (c < 6528 ? (c >= 6512 && c <= 6516) - : c <= 6571) - : (c <= 6601 || (c < 6656 + : c <= 6571))) + : (c <= 6601 || (c < 6688 + ? (c < 6656 ? (c >= 6608 && c <= 6618) - : c <= 6683))))))) - : (c <= 6750 || (c < 7232 - ? (c < 6847 - ? (c < 6800 - ? (c < 6783 + : c <= 6683) + : (c <= 6750 || (c < 6783 ? (c >= 6752 && c <= 6780) - : c <= 6793) - : (c <= 6809 || (c < 6832 + : c <= 6793))))) + : (c <= 6809 || (c < 7019 + ? (c < 6847 + ? (c < 6832 ? c == 6823 - : c <= 6845))) - : (c <= 6862 || (c < 7019 - ? (c < 6992 - ? (c >= 6912 && c <= 6988) - : c <= 7001) - : (c <= 7027 || (c < 7168 + : c <= 6845) + : (c <= 6848 || (c < 6992 + ? (c >= 6912 && c <= 6987) + : c <= 7001))) + : (c <= 7027 || (c < 7232 + ? (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 <= 7223) + : (c <= 7241 || (c >= 7245 && c <= 7293))))))))))) + : (c <= 7304 || (c < 11264 + ? (c < 8178 + ? (c < 8027 + ? (c < 7675 + ? (c < 7376 + ? (c < 7357 + ? (c >= 7312 && c <= 7354) + : c <= 7359) + : (c <= 7378 || (c < 7424 + ? (c >= 7380 && c <= 7418) + : c <= 7673))) + : (c <= 7957 || (c < 8008 + ? (c < 7968 + ? (c >= 7960 && c <= 7965) + : c <= 8005) + : (c <= 8013 || (c < 8025 + ? (c >= 8016 && c <= 8023) + : c <= 8025))))) + : (c <= 8027 || (c < 8130 + ? (c < 8064 + ? (c < 8031 + ? c == 8029 + : c <= 8061) + : (c <= 8116 || (c < 8126 + ? (c >= 8118 && c <= 8124) + : c <= 8126))) + : (c <= 8132 || (c < 8150 + ? (c < 8144 + ? (c >= 8134 && c <= 8140) + : c <= 8147) + : (c <= 8155 || (c >= 8160 && c <= 8172))))))) + : (c <= 8180 || (c < 8458 + ? (c < 8336 ? (c < 8276 ? (c < 8255 ? (c >= 8182 && c <= 8188) @@ -5690,9 +4150,8 @@ static inline bool sym_identifier_character_set_2(int32_t c) { : c <= 8417) : (c <= 8432 || (c < 8455 ? c == 8450 - : c <= 8455))))))) - : (c <= 8467 || (c < 11499 - ? (c < 8490 + : c <= 8455))))) + : (c <= 8467 || (c < 8490 ? (c < 8484 ? (c < 8472 ? c == 8469 @@ -5704,563 +4163,518 @@ static inline bool sym_identifier_character_set_2(int32_t c) { ? (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 <= 8526 || (c >= 8544 && c <= 8584))))))))) + : (c <= 11310 || (c < 12353 + ? (c < 11696 + ? (c < 11565 + ? (c < 11499 + ? (c < 11360 + ? (c >= 11312 && c <= 11358) + : c <= 11492) + : (c <= 11507 || (c < 11559 ? (c >= 11520 && c <= 11557) - : c <= 11559) - : (c <= 11565 || (c < 11631 + : c <= 11559))) + : (c <= 11565 || (c < 11647 + ? (c < 11631 ? (c >= 11568 && c <= 11623) - : c <= 11631))) - : (c <= 11670 || (c < 11696 - ? (c < 11688 + : c <= 11631) + : (c <= 11670 || (c < 11688 ? (c >= 11680 && c <= 11686) - : c <= 11694) - : (c <= 11702 || (c < 11712 + : c <= 11694))))) + : (c <= 11702 || (c < 11744 + ? (c < 11720 + ? (c < 11712 ? (c >= 11704 && c <= 11710) - : c <= 11718))))))))) - : (c <= 11726 || (c < 42623 - ? (c < 12540 - ? (c < 12337 - ? (c < 11744 - ? (c < 11736 + : c <= 11718) + : (c <= 11726 || (c < 11736 ? (c >= 11728 && c <= 11734) - : c <= 11742) - : (c <= 11775 || (c < 12321 + : c <= 11742))) + : (c <= 11775 || (c < 12337 + ? (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 <= 12335) + : (c <= 12341 || (c >= 12344 && c <= 12348))))))) + : (c <= 12438 || (c < 42192 + ? (c < 12593 + ? (c < 12449 + ? (c < 12445 + ? (c >= 12441 && c <= 12442) + : c <= 12447) + : (c <= 12538 || (c < 12549 + ? (c >= 12540 && c <= 12543) + : c <= 12591))) + : (c <= 12686 || (c < 13312 + ? (c < 12784 + ? (c >= 12704 && c <= 12735) + : c <= 12799) + : (c <= 19903 || (c < 40960 + ? (c >= 19968 && c <= 40956) + : c <= 42124))))) + : (c <= 42237 || (c < 42775 + ? (c < 42560 + ? (c < 42512 + ? (c >= 42240 && c <= 42508) + : c <= 42539) + : (c <= 42607 || (c < 42623 + ? (c >= 42612 && c <= 42621) + : c <= 42737))) + : (c <= 42783 || (c < 42946 + ? (c < 42891 + ? (c >= 42786 && c <= 42888) + : c <= 42943) + : (c <= 42954 || (c >= 42997 && c <= 43047))))))))))))))) + : (c <= 43052 || (c < 71096 + ? (c < 66864 + ? (c < 64914 + ? (c < 43816 + ? (c < 43520 + ? (c < 43261 + ? (c < 43216 + ? (c < 43136 + ? (c >= 43072 && c <= 43123) + : c <= 43205) + : (c <= 43225 || (c < 43259 + ? (c >= 43232 && c <= 43255) + : c <= 43259))) + : (c <= 43309 || (c < 43392 + ? (c < 43360 + ? (c >= 43312 && c <= 43347) + : c <= 43388) + : (c <= 43456 || (c < 43488 + ? (c >= 43471 && c <= 43481) + : c <= 43518))))) + : (c <= 43574 || (c < 43744 + ? (c < 43616 + ? (c < 43600 + ? (c >= 43584 && c <= 43597) + : c <= 43609) + : (c <= 43638 || (c < 43739 ? (c >= 43642 && c <= 43714) - : c <= 43741) - : (c <= 43759 || (c < 43777 + : c <= 43741))) + : (c <= 43759 || (c < 43785 + ? (c < 43777 ? (c >= 43762 && c <= 43766) - : c <= 43782))) - : (c <= 43790 || (c < 43816 - ? (c < 43808 + : c <= 43782) + : (c <= 43790 || (c < 43808 ? (c >= 43793 && c <= 43798) - : c <= 43814) - : (c <= 43822 || (c < 43868 + : c <= 43814))))))) + : (c <= 43822 || (c < 64275 + ? (c < 44032 + ? (c < 43888 + ? (c < 43868 ? (c >= 43824 && c <= 43866) - : c <= 43881))))) - : (c <= 44010 || (c < 63744 - ? (c < 44032 - ? (c < 44016 + : c <= 43881) + : (c <= 44010 || (c < 44016 ? (c >= 44012 && c <= 44013) - : c <= 44025) - : (c <= 55203 || (c < 55243 + : c <= 44025))) + : (c <= 55203 || (c < 63744 + ? (c < 55243 ? (c >= 55216 && c <= 55238) - : c <= 55291))) - : (c <= 64109 || (c < 64275 - ? (c < 64256 + : c <= 55291) + : (c <= 64109 || (c < 64256 ? (c >= 64112 && c <= 64217) - : c <= 64262) - : (c <= 64279 || (c < 64298 + : c <= 64262))))) + : (c <= 64279 || (c < 64323 + ? (c < 64312 + ? (c < 64298 ? (c >= 64285 && c <= 64296) - : c <= 64310))))))) - : (c <= 64316 || (c < 65075 - ? (c < 64612 - ? (c < 64323 - ? (c < 64320 + : c <= 64310) + : (c <= 64316 || (c < 64320 ? c == 64318 - : c <= 64321) - : (c <= 64324 || (c < 64467 + : c <= 64321))) + : (c <= 64324 || (c < 64612 + ? (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 <= 64605) + : (c <= 64829 || (c >= 64848 && c <= 64911))))))))) + : (c <= 64967 || (c < 65549 + ? (c < 65151 + ? (c < 65137 + ? (c < 65056 + ? (c < 65024 + ? (c >= 65008 && c <= 65017) + : c <= 65039) + : (c <= 65071 || (c < 65101 + ? (c >= 65075 && c <= 65076) + : c <= 65103))) + : (c <= 65137 || (c < 65145 + ? (c < 65143 + ? c == 65139 + : c <= 65143) + : (c <= 65145 || (c < 65149 + ? c == 65147 + : c <= 65149))))) + : (c <= 65276 || (c < 65474 + ? (c < 65343 + ? (c < 65313 + ? (c >= 65296 && c <= 65305) + : c <= 65338) + : (c <= 65343 || (c < 65382 + ? (c >= 65345 && c <= 65370) + : c <= 65470))) + : (c <= 65479 || (c < 65498 + ? (c < 65490 + ? (c >= 65482 && c <= 65487) + : c <= 65495) + : (c <= 65500 || (c >= 65536 && c <= 65547))))))) + : (c <= 65574 || (c < 66349 + ? (c < 65856 + ? (c < 65599 + ? (c < 65596 + ? (c >= 65576 && c <= 65594) + : c <= 65597) + : (c <= 65613 || (c < 65664 + ? (c >= 65616 && c <= 65629) + : c <= 65786))) + : (c <= 65908 || (c < 66208 + ? (c < 66176 + ? c == 66045 + : c <= 66204) + : (c <= 66256 || (c < 66304 + ? c == 66272 + : c <= 66335))))) + : (c <= 66378 || (c < 66560 + ? (c < 66464 + ? (c < 66432 + ? (c >= 66384 && c <= 66426) + : c <= 66461) + : (c <= 66499 || (c < 66513 + ? (c >= 66504 && c <= 66511) + : c <= 66517))) + : (c <= 66717 || (c < 66776 + ? (c < 66736 + ? (c >= 66720 && c <= 66729) + : c <= 66771) + : (c <= 66811 || (c >= 66816 && c <= 66855))))))))))) + : (c <= 66915 || (c < 69632 + ? (c < 68152 + ? (c < 67808 + ? (c < 67594 + ? (c < 67424 + ? (c < 67392 + ? (c >= 67072 && c <= 67382) + : c <= 67413) + : (c <= 67431 || (c < 67592 + ? (c >= 67584 && c <= 67589) + : c <= 67592))) + : (c <= 67637 || (c < 67647 + ? (c < 67644 + ? (c >= 67639 && c <= 67640) + : c <= 67644) + : (c <= 67669 || (c < 67712 + ? (c >= 67680 && c <= 67702) + : c <= 67742))))) + : (c <= 67826 || (c < 68096 + ? (c < 67872 + ? (c < 67840 + ? (c >= 67828 && c <= 67829) + : c <= 67861) + : (c <= 67897 || (c < 68030 + ? (c >= 67968 && c <= 68023) + : c <= 68031))) + : (c <= 68099 || (c < 68117 + ? (c < 68108 + ? (c >= 68101 && c <= 68102) + : c <= 68115) + : (c <= 68119 || (c >= 68121 && c <= 68149))))))) + : (c <= 68154 || (c < 68800 + ? (c < 68352 + ? (c < 68224 + ? (c < 68192 + ? c == 68159 + : c <= 68220) + : (c <= 68252 || (c < 68297 + ? (c >= 68288 && c <= 68295) + : c <= 68326))) + : (c <= 68405 || (c < 68480 + ? (c < 68448 + ? (c >= 68416 && c <= 68437) + : c <= 68466) + : (c <= 68497 || (c < 68736 + ? (c >= 68608 && c <= 68680) + : c <= 68786))))) + : (c <= 68850 || (c < 69376 + ? (c < 69248 + ? (c < 68912 + ? (c >= 68864 && c <= 68903) + : c <= 68921) + : (c <= 69289 || (c < 69296 + ? (c >= 69291 && c <= 69292) + : c <= 69297))) + : (c <= 69404 || (c < 69552 + ? (c < 69424 + ? c == 69415 + : c <= 69456) + : (c <= 69572 || (c >= 69600 && c <= 69622))))))))) + : (c <= 69702 || (c < 70384 + ? (c < 70094 + ? (c < 69942 + ? (c < 69840 + ? (c < 69759 + ? (c >= 69734 && c <= 69743) + : c <= 69818) + : (c <= 69864 || (c < 69888 + ? (c >= 69872 && c <= 69881) + : c <= 69940))) + : (c <= 69951 || (c < 70006 + ? (c < 69968 + ? (c >= 69956 && c <= 69959) + : c <= 70003) + : (c <= 70006 || (c < 70089 + ? (c >= 70016 && c <= 70084) + : c <= 70092))))) + : (c <= 70106 || (c < 70280 + ? (c < 70163 + ? (c < 70144 + ? c == 70108 + : c <= 70161) + : (c <= 70199 || (c < 70272 + ? c == 70206 + : c <= 70278))) + : (c <= 70280 || (c < 70303 + ? (c < 70287 + ? (c >= 70282 && c <= 70285) + : c <= 70301) + : (c <= 70312 || (c >= 70320 && c <= 70378))))))) + : (c <= 70393 || (c < 70487 + ? (c < 70450 + ? (c < 70415 + ? (c < 70405 + ? (c >= 70400 && c <= 70403) + : c <= 70412) + : (c <= 70416 || (c < 70442 + ? (c >= 70419 && c <= 70440) + : c <= 70448))) + : (c <= 70451 || (c < 70471 + ? (c < 70459 + ? (c >= 70453 && c <= 70457) + : c <= 70468) + : (c <= 70472 || (c < 70480 + ? (c >= 70475 && c <= 70477) + : c <= 70480))))) + : (c <= 70487 || (c < 70750 + ? (c < 70512 + ? (c < 70502 + ? (c >= 70493 && c <= 70499) + : c <= 70508) + : (c <= 70516 || (c < 70736 + ? (c >= 70656 && c <= 70730) + : c <= 70745))) + : (c <= 70753 || (c < 70864 + ? (c < 70855 + ? (c >= 70784 && c <= 70853) + : c <= 70855) + : (c <= 70873 || (c >= 71040 && c <= 71093))))))))))))) + : (c <= 71104 || (c < 119894 + ? (c < 73104 + ? (c < 72163 + ? (c < 71935 + ? (c < 71360 + ? (c < 71236 + ? (c < 71168 ? (c >= 71128 && c <= 71133) - : c <= 71232))) - : (c <= 71236 || (c < 71360 - ? (c < 71296 + : c <= 71232) + : (c <= 71236 || (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 <= 71352))) + : (c <= 71369 || (c < 71472 + ? (c < 71453 + ? (c >= 71424 && c <= 71450) + : c <= 71467) + : (c <= 71481 || (c < 71840 + ? (c >= 71680 && c <= 71738) + : c <= 71913))))) + : (c <= 71942 || (c < 71995 + ? (c < 71957 + ? (c < 71948 + ? c == 71945 + : c <= 71955) + : (c <= 71958 || (c < 71991 + ? (c >= 71960 && c <= 71989) + : c <= 71992))) + : (c <= 72003 || (c < 72106 + ? (c < 72096 + ? (c >= 72016 && c <= 72025) + : c <= 72103) + : (c <= 72151 || (c >= 72154 && c <= 72161))))))) + : (c <= 72164 || (c < 72873 + ? (c < 72704 + ? (c < 72272 + ? (c < 72263 + ? (c >= 72192 && c <= 72254) + : c <= 72263) + : (c <= 72345 || (c < 72384 + ? c == 72349 + : c <= 72440))) + : (c <= 72712 || (c < 72784 + ? (c < 72760 + ? (c >= 72714 && c <= 72758) + : c <= 72768) + : (c <= 72793 || (c < 72850 + ? (c >= 72818 && c <= 72847) + : c <= 72871))))) + : (c <= 72886 || (c < 73023 + ? (c < 72971 + ? (c < 72968 + ? (c >= 72960 && c <= 72966) + : c <= 72969) + : (c <= 73014 || (c < 73020 + ? c == 73018 + : c <= 73021))) + : (c <= 73031 || (c < 73063 + ? (c < 73056 + ? (c >= 73040 && c <= 73049) + : c <= 73061) + : (c <= 73064 || (c >= 73066 && c <= 73102))))))))) + : (c <= 73105 || (c < 94095 + ? (c < 92768 + ? (c < 74752 + ? (c < 73440 + ? (c < 73120 ? (c >= 73107 && c <= 73112) - : c <= 73129))) - : (c <= 73462 || (c < 74752 - ? (c < 73728 + : c <= 73129) + : (c <= 73462 || (c < 73728 ? c == 73648 - : c <= 74649) - : (c <= 74862 || (c < 77712 + : c <= 74649))) + : (c <= 74862 || (c < 82944 + ? (c < 77824 ? (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 <= 78894) + : (c <= 83526 || (c < 92736 + ? (c >= 92160 && c <= 92728) + : c <= 92766))))) + : (c <= 92777 || (c < 93027 + ? (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 <= 93017))) + : (c <= 93047 || (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 <= 94026 || (c >= 94031 && c <= 94087))))))) + : (c <= 94111 || (c < 113776 + ? (c < 101632 + ? (c < 94192 + ? (c < 94179 + ? (c >= 94176 && c <= 94177) + : c <= 94180) + : (c <= 94193 || (c < 100352 + ? (c >= 94208 && c <= 100343) + : c <= 101589))) + : (c <= 101640 || (c < 110948 + ? (c < 110928 + ? (c >= 110592 && c <= 110878) + : c <= 110930) + : (c <= 110951 || (c < 113664 + ? (c >= 110960 && c <= 111355) + : c <= 113770))))) + : (c <= 113788 || (c < 119163 + ? (c < 113821 + ? (c < 113808 + ? (c >= 113792 && c <= 113800) + : c <= 113817) + : (c <= 113822 || (c < 119149 + ? (c >= 119141 && c <= 119145) + : c <= 119154))) + : (c <= 119170 || (c < 119362 + ? (c < 119210 + ? (c >= 119173 && c <= 119179) + : c <= 119213) + : (c <= 119364 || (c >= 119808 && c <= 119892))))))))))) + : (c <= 119964 || (c < 124928 + ? (c < 120630 + ? (c < 120094 + ? (c < 119995 + ? (c < 119973 + ? (c < 119970 ? (c >= 119966 && c <= 119967) - : c <= 119970))))))))))) - : (c <= 119974 || (c < 124912 - ? (c < 120746 - ? (c < 120134 - ? (c < 120071 - ? (c < 119995 - ? (c < 119982 + : c <= 119970) + : (c <= 119974 || (c < 119982 ? (c >= 119977 && c <= 119980) - : c <= 119993) - : (c <= 119995 || (c < 120005 + : c <= 119993))) + : (c <= 119995 || (c < 120071 + ? (c < 120005 ? (c >= 119997 && c <= 120003) - : c <= 120069))) - : (c <= 120074 || (c < 120094 - ? (c < 120086 + : c <= 120069) + : (c <= 120074 || (c < 120086 ? (c >= 120077 && c <= 120084) - : c <= 120092) - : (c <= 120121 || (c < 120128 + : c <= 120092))))) + : (c <= 120121 || (c < 120488 + ? (c < 120134 + ? (c < 120128 ? (c >= 120123 && c <= 120126) - : c <= 120132))))) - : (c <= 120134 || (c < 120572 - ? (c < 120488 - ? (c < 120146 + : c <= 120132) + : (c <= 120134 || (c < 120146 ? (c >= 120138 && c <= 120144) - : c <= 120485) - : (c <= 120512 || (c < 120540 + : c <= 120485))) + : (c <= 120512 || (c < 120572 + ? (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 <= 120570) + : (c <= 120596 || (c >= 120598 && c <= 120628))))))) + : (c <= 120654 || (c < 121505 + ? (c < 120782 + ? (c < 120714 + ? (c < 120688 + ? (c >= 120656 && c <= 120686) + : c <= 120712) + : (c <= 120744 || (c < 120772 + ? (c >= 120746 && c <= 120770) + : c <= 120779))) + : (c <= 120831 || (c < 121461 + ? (c < 121403 + ? (c >= 121344 && c <= 121398) + : c <= 121452) + : (c <= 121461 || (c < 121499 + ? c == 121476 + : c <= 121503))))) + : (c <= 121519 || (c < 123136 + ? (c < 122907 + ? (c < 122888 ? (c >= 122880 && c <= 122886) - : c <= 122904))))) - : (c <= 122913 || (c < 123214 - ? (c < 123136 - ? (c < 122918 + : c <= 122904) + : (c <= 122913 || (c < 122918 ? (c >= 122915 && c <= 122916) - : c <= 122922) - : (c <= 123180 || (c < 123200 + : c <= 122922))) + : (c <= 123180 || (c < 123214 + ? (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 <= 123209) + : (c <= 123214 || (c >= 123584 && c <= 123641))))))))) + : (c <= 125124 || (c < 126557 + ? (c < 126523 + ? (c < 126497 + ? (c < 125264 + ? (c < 125184 + ? (c >= 125136 && c <= 125142) + : c <= 125259) + : (c <= 125273 || (c < 126469 + ? (c >= 126464 && c <= 126467) + : c <= 126495))) + : (c <= 126498 || (c < 126505 + ? (c < 126503 + ? c == 126500 + : c <= 126503) + : (c <= 126514 || (c < 126521 + ? (c >= 126516 && c <= 126519) + : c <= 126521))))) + : (c <= 126523 || (c < 126545 + ? (c < 126537 + ? (c < 126535 + ? c == 126530 + : c <= 126535) + : (c <= 126537 || (c < 126541 + ? c == 126539 + : c <= 126543))) + : (c <= 126546 || (c < 126553 + ? (c < 126551 + ? c == 126548 + : c <= 126551) + : (c <= 126553 || c == 126555)))))) : (c <= 126557 || (c < 126629 ? (c < 126580 ? (c < 126564 @@ -6282,8 +4696,8 @@ static inline bool sym_identifier_character_set_2(int32_t c) { ? (c < 130032 ? (c >= 126635 && c <= 126651) : c <= 130041) - : (c <= 173791 || (c < 177984 - ? (c >= 173824 && c <= 177976) + : (c <= 173789 || (c < 177984 + ? (c >= 173824 && c <= 177972) : c <= 178205))) : (c <= 183969 || (c < 196608 ? (c < 194560 @@ -7739,11 +6153,11 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [57] = {.lex_state = 50, .external_lex_state = 3}, [58] = {.lex_state = 50, .external_lex_state = 3}, [59] = {.lex_state = 50, .external_lex_state = 3}, - [60] = {.lex_state = 50, .external_lex_state = 3}, - [61] = {.lex_state = 50, .external_lex_state = 2}, + [60] = {.lex_state = 50, .external_lex_state = 2}, + [61] = {.lex_state = 50, .external_lex_state = 3}, [62] = {.lex_state = 50, .external_lex_state = 3}, - [63] = {.lex_state = 50, .external_lex_state = 2}, - [64] = {.lex_state = 50, .external_lex_state = 3}, + [63] = {.lex_state = 50, .external_lex_state = 3}, + [64] = {.lex_state = 50, .external_lex_state = 2}, [65] = {.lex_state = 50, .external_lex_state = 3}, [66] = {.lex_state = 50, .external_lex_state = 4}, [67] = {.lex_state = 50, .external_lex_state = 4}, @@ -7751,7 +6165,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [69] = {.lex_state = 50, .external_lex_state = 5}, [70] = {.lex_state = 50, .external_lex_state = 5}, [71] = {.lex_state = 50, .external_lex_state = 5}, - [72] = {.lex_state = 50, .external_lex_state = 4}, + [72] = {.lex_state = 50, .external_lex_state = 5}, [73] = {.lex_state = 50, .external_lex_state = 5}, [74] = {.lex_state = 50, .external_lex_state = 5}, [75] = {.lex_state = 50, .external_lex_state = 5}, @@ -7804,7 +6218,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [122] = {.lex_state = 50, .external_lex_state = 5}, [123] = {.lex_state = 50, .external_lex_state = 5}, [124] = {.lex_state = 50, .external_lex_state = 5}, - [125] = {.lex_state = 50, .external_lex_state = 5}, + [125] = {.lex_state = 50, .external_lex_state = 4}, [126] = {.lex_state = 50, .external_lex_state = 5}, [127] = {.lex_state = 50, .external_lex_state = 4}, [128] = {.lex_state = 50, .external_lex_state = 4}, @@ -7816,15 +6230,15 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [134] = {.lex_state = 50, .external_lex_state = 4}, [135] = {.lex_state = 50, .external_lex_state = 2}, [136] = {.lex_state = 50, .external_lex_state = 2}, - [137] = {.lex_state = 50, .external_lex_state = 2}, - [138] = {.lex_state = 14, .external_lex_state = 2}, + [137] = {.lex_state = 14, .external_lex_state = 2}, + [138] = {.lex_state = 50, .external_lex_state = 2}, [139] = {.lex_state = 14, .external_lex_state = 2}, [140] = {.lex_state = 14, .external_lex_state = 2}, - [141] = {.lex_state = 14, .external_lex_state = 2}, - [142] = {.lex_state = 50, .external_lex_state = 4}, - [143] = {.lex_state = 50, .external_lex_state = 2}, + [141] = {.lex_state = 50, .external_lex_state = 4}, + [142] = {.lex_state = 14, .external_lex_state = 2}, + [143] = {.lex_state = 50, .external_lex_state = 4}, [144] = {.lex_state = 50, .external_lex_state = 2}, - [145] = {.lex_state = 50, .external_lex_state = 4}, + [145] = {.lex_state = 50, .external_lex_state = 2}, [146] = {.lex_state = 50, .external_lex_state = 2}, [147] = {.lex_state = 14, .external_lex_state = 2}, [148] = {.lex_state = 50, .external_lex_state = 2}, @@ -7835,19 +6249,19 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [153] = {.lex_state = 50, .external_lex_state = 2}, [154] = {.lex_state = 50, .external_lex_state = 2}, [155] = {.lex_state = 14, .external_lex_state = 2}, - [156] = {.lex_state = 50, .external_lex_state = 2}, + [156] = {.lex_state = 14, .external_lex_state = 2}, [157] = {.lex_state = 50, .external_lex_state = 2}, [158] = {.lex_state = 50, .external_lex_state = 2}, [159] = {.lex_state = 50, .external_lex_state = 2}, - [160] = {.lex_state = 14, .external_lex_state = 2}, - [161] = {.lex_state = 14, .external_lex_state = 2}, + [160] = {.lex_state = 50, .external_lex_state = 2}, + [161] = {.lex_state = 50, .external_lex_state = 2}, [162] = {.lex_state = 14, .external_lex_state = 2}, - [163] = {.lex_state = 14, .external_lex_state = 2}, - [164] = {.lex_state = 50, .external_lex_state = 2}, - [165] = {.lex_state = 50, .external_lex_state = 2}, + [163] = {.lex_state = 50, .external_lex_state = 2}, + [164] = {.lex_state = 14, .external_lex_state = 2}, + [165] = {.lex_state = 14, .external_lex_state = 2}, [166] = {.lex_state = 50, .external_lex_state = 2}, [167] = {.lex_state = 50, .external_lex_state = 2}, - [168] = {.lex_state = 50, .external_lex_state = 4}, + [168] = {.lex_state = 50, .external_lex_state = 2}, [169] = {.lex_state = 50, .external_lex_state = 2}, [170] = {.lex_state = 50, .external_lex_state = 2}, [171] = {.lex_state = 50, .external_lex_state = 2}, @@ -7856,182 +6270,182 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [174] = {.lex_state = 50, .external_lex_state = 2}, [175] = {.lex_state = 50, .external_lex_state = 2}, [176] = {.lex_state = 50, .external_lex_state = 2}, - [177] = {.lex_state = 50, .external_lex_state = 2}, + [177] = {.lex_state = 50, .external_lex_state = 4}, [178] = {.lex_state = 50, .external_lex_state = 4}, [179] = {.lex_state = 50, .external_lex_state = 2}, [180] = {.lex_state = 50, .external_lex_state = 2}, [181] = {.lex_state = 50, .external_lex_state = 2}, [182] = {.lex_state = 50, .external_lex_state = 2}, [183] = {.lex_state = 50, .external_lex_state = 2}, - [184] = {.lex_state = 50, .external_lex_state = 4}, - [185] = {.lex_state = 50, .external_lex_state = 4}, + [184] = {.lex_state = 50, .external_lex_state = 2}, + [185] = {.lex_state = 50, .external_lex_state = 2}, [186] = {.lex_state = 50, .external_lex_state = 2}, [187] = {.lex_state = 50, .external_lex_state = 2}, [188] = {.lex_state = 50, .external_lex_state = 2}, [189] = {.lex_state = 50, .external_lex_state = 2}, - [190] = {.lex_state = 50, .external_lex_state = 2}, + [190] = {.lex_state = 50, .external_lex_state = 4}, [191] = {.lex_state = 50, .external_lex_state = 2}, - [192] = {.lex_state = 50, .external_lex_state = 2}, + [192] = {.lex_state = 50, .external_lex_state = 4}, [193] = {.lex_state = 50, .external_lex_state = 2}, - [194] = {.lex_state = 50, .external_lex_state = 4}, + [194] = {.lex_state = 50, .external_lex_state = 2}, [195] = {.lex_state = 50, .external_lex_state = 2}, [196] = {.lex_state = 50, .external_lex_state = 2}, [197] = {.lex_state = 50, .external_lex_state = 2}, [198] = {.lex_state = 50, .external_lex_state = 2}, [199] = {.lex_state = 50, .external_lex_state = 2}, [200] = {.lex_state = 50, .external_lex_state = 2}, - [201] = {.lex_state = 50, .external_lex_state = 2}, + [201] = {.lex_state = 50, .external_lex_state = 4}, [202] = {.lex_state = 50, .external_lex_state = 2}, - [203] = {.lex_state = 50, .external_lex_state = 4}, + [203] = {.lex_state = 50, .external_lex_state = 2}, [204] = {.lex_state = 50, .external_lex_state = 2}, [205] = {.lex_state = 50, .external_lex_state = 2}, [206] = {.lex_state = 50, .external_lex_state = 2}, [207] = {.lex_state = 50, .external_lex_state = 2}, [208] = {.lex_state = 50, .external_lex_state = 2}, - [209] = {.lex_state = 50, .external_lex_state = 2}, + [209] = {.lex_state = 50, .external_lex_state = 4}, [210] = {.lex_state = 50, .external_lex_state = 2}, [211] = {.lex_state = 50, .external_lex_state = 2}, - [212] = {.lex_state = 14, .external_lex_state = 2}, - [213] = {.lex_state = 14, .external_lex_state = 2}, + [212] = {.lex_state = 50, .external_lex_state = 2}, + [213] = {.lex_state = 16}, [214] = {.lex_state = 14, .external_lex_state = 2}, - [215] = {.lex_state = 50, .external_lex_state = 2}, + [215] = {.lex_state = 14, .external_lex_state = 2}, [216] = {.lex_state = 50, .external_lex_state = 2}, - [217] = {.lex_state = 16}, - [218] = {.lex_state = 50, .external_lex_state = 2}, - [219] = {.lex_state = 16}, - [220] = {.lex_state = 14, .external_lex_state = 2}, - [221] = {.lex_state = 14, .external_lex_state = 2}, + [217] = {.lex_state = 14, .external_lex_state = 2}, + [218] = {.lex_state = 14, .external_lex_state = 2}, + [219] = {.lex_state = 14, .external_lex_state = 2}, + [220] = {.lex_state = 16}, + [221] = {.lex_state = 50, .external_lex_state = 2}, [222] = {.lex_state = 14, .external_lex_state = 2}, - [223] = {.lex_state = 50, .external_lex_state = 2}, + [223] = {.lex_state = 50, .external_lex_state = 3}, [224] = {.lex_state = 50, .external_lex_state = 2}, [225] = {.lex_state = 50, .external_lex_state = 2}, - [226] = {.lex_state = 50, .external_lex_state = 3}, + [226] = {.lex_state = 14, .external_lex_state = 2}, [227] = {.lex_state = 50, .external_lex_state = 3}, [228] = {.lex_state = 50, .external_lex_state = 2}, - [229] = {.lex_state = 50, .external_lex_state = 3}, + [229] = {.lex_state = 50, .external_lex_state = 2}, [230] = {.lex_state = 50, .external_lex_state = 2}, [231] = {.lex_state = 50, .external_lex_state = 2}, - [232] = {.lex_state = 50, .external_lex_state = 2}, - [233] = {.lex_state = 50, .external_lex_state = 2}, - [234] = {.lex_state = 50, .external_lex_state = 3}, - [235] = {.lex_state = 14, .external_lex_state = 2}, + [232] = {.lex_state = 50, .external_lex_state = 3}, + [233] = {.lex_state = 50, .external_lex_state = 3}, + [234] = {.lex_state = 50, .external_lex_state = 2}, + [235] = {.lex_state = 50, .external_lex_state = 2}, [236] = {.lex_state = 50, .external_lex_state = 2}, [237] = {.lex_state = 50, .external_lex_state = 2}, [238] = {.lex_state = 50, .external_lex_state = 2}, [239] = {.lex_state = 15, .external_lex_state = 6}, [240] = {.lex_state = 50, .external_lex_state = 2}, - [241] = {.lex_state = 15, .external_lex_state = 6}, + [241] = {.lex_state = 50, .external_lex_state = 2}, [242] = {.lex_state = 50, .external_lex_state = 2}, [243] = {.lex_state = 50, .external_lex_state = 2}, [244] = {.lex_state = 50, .external_lex_state = 2}, [245] = {.lex_state = 50, .external_lex_state = 2}, - [246] = {.lex_state = 50, .external_lex_state = 2}, + [246] = {.lex_state = 15, .external_lex_state = 6}, [247] = {.lex_state = 50, .external_lex_state = 2}, [248] = {.lex_state = 50, .external_lex_state = 2}, [249] = {.lex_state = 50, .external_lex_state = 2}, [250] = {.lex_state = 50, .external_lex_state = 2}, [251] = {.lex_state = 50, .external_lex_state = 2}, - [252] = {.lex_state = 50, .external_lex_state = 2}, - [253] = {.lex_state = 50, .external_lex_state = 3}, - [254] = {.lex_state = 50, .external_lex_state = 3}, - [255] = {.lex_state = 50, .external_lex_state = 3}, - [256] = {.lex_state = 15, .external_lex_state = 4}, + [252] = {.lex_state = 50, .external_lex_state = 3}, + [253] = {.lex_state = 50, .external_lex_state = 2}, + [254] = {.lex_state = 50, .external_lex_state = 2}, + [255] = {.lex_state = 50, .external_lex_state = 2}, + [256] = {.lex_state = 50, .external_lex_state = 2}, [257] = {.lex_state = 50, .external_lex_state = 2}, [258] = {.lex_state = 50, .external_lex_state = 2}, [259] = {.lex_state = 50, .external_lex_state = 2}, [260] = {.lex_state = 50, .external_lex_state = 2}, - [261] = {.lex_state = 50, .external_lex_state = 2}, + [261] = {.lex_state = 50, .external_lex_state = 3}, [262] = {.lex_state = 50, .external_lex_state = 2}, [263] = {.lex_state = 50, .external_lex_state = 3}, - [264] = {.lex_state = 50, .external_lex_state = 2}, - [265] = {.lex_state = 14, .external_lex_state = 2}, - [266] = {.lex_state = 50, .external_lex_state = 3}, + [264] = {.lex_state = 50, .external_lex_state = 3}, + [265] = {.lex_state = 50, .external_lex_state = 2}, + [266] = {.lex_state = 50, .external_lex_state = 2}, [267] = {.lex_state = 50, .external_lex_state = 2}, [268] = {.lex_state = 50, .external_lex_state = 3}, - [269] = {.lex_state = 50, .external_lex_state = 2}, - [270] = {.lex_state = 50, .external_lex_state = 2}, - [271] = {.lex_state = 50, .external_lex_state = 2}, - [272] = {.lex_state = 50, .external_lex_state = 2}, - [273] = {.lex_state = 50, .external_lex_state = 2}, - [274] = {.lex_state = 50, .external_lex_state = 3}, - [275] = {.lex_state = 50, .external_lex_state = 3}, + [269] = {.lex_state = 50, .external_lex_state = 3}, + [270] = {.lex_state = 50, .external_lex_state = 3}, + [271] = {.lex_state = 14, .external_lex_state = 2}, + [272] = {.lex_state = 50, .external_lex_state = 3}, + [273] = {.lex_state = 14, .external_lex_state = 2}, + [274] = {.lex_state = 50, .external_lex_state = 2}, + [275] = {.lex_state = 15, .external_lex_state = 4}, [276] = {.lex_state = 50, .external_lex_state = 2}, [277] = {.lex_state = 50, .external_lex_state = 2}, - [278] = {.lex_state = 14, .external_lex_state = 2}, + [278] = {.lex_state = 50, .external_lex_state = 2}, [279] = {.lex_state = 50, .external_lex_state = 3}, - [280] = {.lex_state = 50, .external_lex_state = 2}, - [281] = {.lex_state = 50, .external_lex_state = 3}, + [280] = {.lex_state = 50, .external_lex_state = 3}, + [281] = {.lex_state = 50, .external_lex_state = 2}, [282] = {.lex_state = 50, .external_lex_state = 2}, - [283] = {.lex_state = 50, .external_lex_state = 3}, + [283] = {.lex_state = 50, .external_lex_state = 2}, [284] = {.lex_state = 50, .external_lex_state = 2}, [285] = {.lex_state = 50, .external_lex_state = 2}, - [286] = {.lex_state = 50, .external_lex_state = 2}, + [286] = {.lex_state = 50, .external_lex_state = 3}, [287] = {.lex_state = 50, .external_lex_state = 2}, - [288] = {.lex_state = 14, .external_lex_state = 2}, + [288] = {.lex_state = 50, .external_lex_state = 2}, [289] = {.lex_state = 50, .external_lex_state = 2}, [290] = {.lex_state = 50, .external_lex_state = 2}, [291] = {.lex_state = 50, .external_lex_state = 2}, [292] = {.lex_state = 50, .external_lex_state = 2}, - [293] = {.lex_state = 50, .external_lex_state = 4}, + [293] = {.lex_state = 50, .external_lex_state = 2}, [294] = {.lex_state = 50, .external_lex_state = 2}, [295] = {.lex_state = 50, .external_lex_state = 2}, [296] = {.lex_state = 50, .external_lex_state = 2}, - [297] = {.lex_state = 50, .external_lex_state = 2}, + [297] = {.lex_state = 14, .external_lex_state = 2}, [298] = {.lex_state = 50, .external_lex_state = 2}, [299] = {.lex_state = 50, .external_lex_state = 2}, - [300] = {.lex_state = 50, .external_lex_state = 4}, - [301] = {.lex_state = 15, .external_lex_state = 6}, + [300] = {.lex_state = 50, .external_lex_state = 2}, + [301] = {.lex_state = 14, .external_lex_state = 2}, [302] = {.lex_state = 50, .external_lex_state = 2}, [303] = {.lex_state = 50, .external_lex_state = 2}, - [304] = {.lex_state = 50, .external_lex_state = 2}, - [305] = {.lex_state = 50, .external_lex_state = 2}, + [304] = {.lex_state = 50, .external_lex_state = 3}, + [305] = {.lex_state = 50, .external_lex_state = 4}, [306] = {.lex_state = 50, .external_lex_state = 4}, [307] = {.lex_state = 50, .external_lex_state = 4}, - [308] = {.lex_state = 50, .external_lex_state = 3}, - [309] = {.lex_state = 50, .external_lex_state = 2}, + [308] = {.lex_state = 50, .external_lex_state = 2}, + [309] = {.lex_state = 15, .external_lex_state = 6}, [310] = {.lex_state = 50, .external_lex_state = 2}, - [311] = {.lex_state = 50, .external_lex_state = 2}, - [312] = {.lex_state = 14, .external_lex_state = 2}, + [311] = {.lex_state = 50, .external_lex_state = 4}, + [312] = {.lex_state = 50, .external_lex_state = 2}, [313] = {.lex_state = 50, .external_lex_state = 2}, - [314] = {.lex_state = 16, .external_lex_state = 6}, - [315] = {.lex_state = 50, .external_lex_state = 2}, - [316] = {.lex_state = 15}, - [317] = {.lex_state = 15}, - [318] = {.lex_state = 16, .external_lex_state = 6}, - [319] = {.lex_state = 14, .external_lex_state = 2}, - [320] = {.lex_state = 50, .external_lex_state = 2}, - [321] = {.lex_state = 50, .external_lex_state = 2}, - [322] = {.lex_state = 50, .external_lex_state = 2}, - [323] = {.lex_state = 50, .external_lex_state = 2}, - [324] = {.lex_state = 50, .external_lex_state = 2}, - [325] = {.lex_state = 50, .external_lex_state = 2}, + [314] = {.lex_state = 50, .external_lex_state = 2}, + [315] = {.lex_state = 50, .external_lex_state = 3}, + [316] = {.lex_state = 50, .external_lex_state = 3}, + [317] = {.lex_state = 50, .external_lex_state = 3}, + [318] = {.lex_state = 50, .external_lex_state = 2}, + [319] = {.lex_state = 50, .external_lex_state = 2}, + [320] = {.lex_state = 15}, + [321] = {.lex_state = 50, .external_lex_state = 3}, + [322] = {.lex_state = 16, .external_lex_state = 6}, + [323] = {.lex_state = 50, .external_lex_state = 3}, + [324] = {.lex_state = 16, .external_lex_state = 6}, + [325] = {.lex_state = 15}, [326] = {.lex_state = 50, .external_lex_state = 2}, [327] = {.lex_state = 50, .external_lex_state = 2}, - [328] = {.lex_state = 50, .external_lex_state = 2}, - [329] = {.lex_state = 50, .external_lex_state = 2}, - [330] = {.lex_state = 15, .external_lex_state = 6}, - [331] = {.lex_state = 15, .external_lex_state = 6}, - [332] = {.lex_state = 50, .external_lex_state = 3}, - [333] = {.lex_state = 50, .external_lex_state = 3}, - [334] = {.lex_state = 50, .external_lex_state = 3}, - [335] = {.lex_state = 50, .external_lex_state = 3}, - [336] = {.lex_state = 50, .external_lex_state = 3}, + [328] = {.lex_state = 50, .external_lex_state = 3}, + [329] = {.lex_state = 50, .external_lex_state = 3}, + [330] = {.lex_state = 50, .external_lex_state = 3}, + [331] = {.lex_state = 50, .external_lex_state = 2}, + [332] = {.lex_state = 50, .external_lex_state = 2}, + [333] = {.lex_state = 50, .external_lex_state = 2}, + [334] = {.lex_state = 15, .external_lex_state = 6}, + [335] = {.lex_state = 50, .external_lex_state = 2}, + [336] = {.lex_state = 50, .external_lex_state = 2}, [337] = {.lex_state = 50, .external_lex_state = 3}, - [338] = {.lex_state = 50, .external_lex_state = 3}, - [339] = {.lex_state = 50, .external_lex_state = 3}, - [340] = {.lex_state = 50, .external_lex_state = 3}, - [341] = {.lex_state = 50, .external_lex_state = 3}, + [338] = {.lex_state = 50, .external_lex_state = 2}, + [339] = {.lex_state = 50, .external_lex_state = 2}, + [340] = {.lex_state = 14, .external_lex_state = 2}, + [341] = {.lex_state = 15, .external_lex_state = 6}, [342] = {.lex_state = 50, .external_lex_state = 3}, [343] = {.lex_state = 50, .external_lex_state = 3}, - [344] = {.lex_state = 14, .external_lex_state = 2}, - [345] = {.lex_state = 50, .external_lex_state = 2}, + [344] = {.lex_state = 50, .external_lex_state = 3}, + [345] = {.lex_state = 14, .external_lex_state = 2}, [346] = {.lex_state = 50, .external_lex_state = 2}, [347] = {.lex_state = 50, .external_lex_state = 2}, - [348] = {.lex_state = 50, .external_lex_state = 2}, + [348] = {.lex_state = 50, .external_lex_state = 3}, [349] = {.lex_state = 50, .external_lex_state = 2}, [350] = {.lex_state = 50, .external_lex_state = 2}, [351] = {.lex_state = 50, .external_lex_state = 2}, - [352] = {.lex_state = 50, .external_lex_state = 2}, + [352] = {.lex_state = 50, .external_lex_state = 3}, [353] = {.lex_state = 50, .external_lex_state = 2}, [354] = {.lex_state = 16, .external_lex_state = 6}, [355] = {.lex_state = 50, .external_lex_state = 2}, @@ -8041,14 +6455,14 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [359] = {.lex_state = 50, .external_lex_state = 2}, [360] = {.lex_state = 50, .external_lex_state = 2}, [361] = {.lex_state = 50, .external_lex_state = 2}, - [362] = {.lex_state = 50, .external_lex_state = 2}, + [362] = {.lex_state = 50, .external_lex_state = 3}, [363] = {.lex_state = 50, .external_lex_state = 2}, [364] = {.lex_state = 50, .external_lex_state = 2}, [365] = {.lex_state = 50, .external_lex_state = 2}, [366] = {.lex_state = 50, .external_lex_state = 2}, [367] = {.lex_state = 50, .external_lex_state = 2}, [368] = {.lex_state = 50, .external_lex_state = 2}, - [369] = {.lex_state = 50, .external_lex_state = 2}, + [369] = {.lex_state = 50, .external_lex_state = 3}, [370] = {.lex_state = 50, .external_lex_state = 2}, [371] = {.lex_state = 50, .external_lex_state = 2}, [372] = {.lex_state = 50, .external_lex_state = 2}, @@ -8056,7 +6470,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [374] = {.lex_state = 50, .external_lex_state = 2}, [375] = {.lex_state = 50, .external_lex_state = 2}, [376] = {.lex_state = 50, .external_lex_state = 2}, - [377] = {.lex_state = 16}, + [377] = {.lex_state = 50, .external_lex_state = 2}, [378] = {.lex_state = 50, .external_lex_state = 2}, [379] = {.lex_state = 50, .external_lex_state = 2}, [380] = {.lex_state = 50, .external_lex_state = 2}, @@ -8069,21 +6483,21 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [387] = {.lex_state = 50, .external_lex_state = 2}, [388] = {.lex_state = 50, .external_lex_state = 2}, [389] = {.lex_state = 50, .external_lex_state = 2}, - [390] = {.lex_state = 50, .external_lex_state = 3}, + [390] = {.lex_state = 50, .external_lex_state = 2}, [391] = {.lex_state = 50, .external_lex_state = 3}, - [392] = {.lex_state = 50, .external_lex_state = 3}, - [393] = {.lex_state = 50, .external_lex_state = 3}, + [392] = {.lex_state = 16}, + [393] = {.lex_state = 50, .external_lex_state = 2}, [394] = {.lex_state = 50, .external_lex_state = 2}, - [395] = {.lex_state = 50, .external_lex_state = 3}, - [396] = {.lex_state = 50, .external_lex_state = 3}, - [397] = {.lex_state = 50, .external_lex_state = 3}, + [395] = {.lex_state = 50, .external_lex_state = 2}, + [396] = {.lex_state = 50, .external_lex_state = 2}, + [397] = {.lex_state = 50, .external_lex_state = 2}, [398] = {.lex_state = 50, .external_lex_state = 2}, [399] = {.lex_state = 50, .external_lex_state = 2}, - [400] = {.lex_state = 50, .external_lex_state = 3}, - [401] = {.lex_state = 50, .external_lex_state = 3}, + [400] = {.lex_state = 50, .external_lex_state = 2}, + [401] = {.lex_state = 50, .external_lex_state = 2}, [402] = {.lex_state = 50, .external_lex_state = 2}, - [403] = {.lex_state = 16, .external_lex_state = 6}, - [404] = {.lex_state = 50, .external_lex_state = 3}, + [403] = {.lex_state = 50, .external_lex_state = 2}, + [404] = {.lex_state = 50, .external_lex_state = 2}, [405] = {.lex_state = 50, .external_lex_state = 2}, [406] = {.lex_state = 50, .external_lex_state = 2}, [407] = {.lex_state = 50, .external_lex_state = 2}, @@ -8093,24 +6507,24 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [411] = {.lex_state = 50, .external_lex_state = 2}, [412] = {.lex_state = 50, .external_lex_state = 2}, [413] = {.lex_state = 50, .external_lex_state = 2}, - [414] = {.lex_state = 50, .external_lex_state = 2}, + [414] = {.lex_state = 16, .external_lex_state = 6}, [415] = {.lex_state = 50, .external_lex_state = 2}, [416] = {.lex_state = 50, .external_lex_state = 2}, - [417] = {.lex_state = 50, .external_lex_state = 2}, - [418] = {.lex_state = 50, .external_lex_state = 2}, + [417] = {.lex_state = 50, .external_lex_state = 3}, + [418] = {.lex_state = 50, .external_lex_state = 3}, [419] = {.lex_state = 50, .external_lex_state = 2}, [420] = {.lex_state = 50, .external_lex_state = 2}, [421] = {.lex_state = 50, .external_lex_state = 2}, - [422] = {.lex_state = 50, .external_lex_state = 2}, + [422] = {.lex_state = 50, .external_lex_state = 3}, [423] = {.lex_state = 50, .external_lex_state = 2}, [424] = {.lex_state = 50, .external_lex_state = 2}, - [425] = {.lex_state = 50, .external_lex_state = 2}, + [425] = {.lex_state = 50, .external_lex_state = 3}, [426] = {.lex_state = 50, .external_lex_state = 2}, - [427] = {.lex_state = 50, .external_lex_state = 2}, + [427] = {.lex_state = 16, .external_lex_state = 6}, [428] = {.lex_state = 50, .external_lex_state = 2}, [429] = {.lex_state = 50, .external_lex_state = 2}, [430] = {.lex_state = 50, .external_lex_state = 2}, - [431] = {.lex_state = 16, .external_lex_state = 6}, + [431] = {.lex_state = 50, .external_lex_state = 2}, [432] = {.lex_state = 50, .external_lex_state = 2}, [433] = {.lex_state = 50, .external_lex_state = 2}, [434] = {.lex_state = 50, .external_lex_state = 2}, @@ -8120,124 +6534,124 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [438] = {.lex_state = 50, .external_lex_state = 2}, [439] = {.lex_state = 50, .external_lex_state = 2}, [440] = {.lex_state = 50, .external_lex_state = 2}, - [441] = {.lex_state = 50, .external_lex_state = 2}, + [441] = {.lex_state = 50, .external_lex_state = 3}, [442] = {.lex_state = 50, .external_lex_state = 2}, [443] = {.lex_state = 50, .external_lex_state = 2}, [444] = {.lex_state = 50, .external_lex_state = 2}, [445] = {.lex_state = 50, .external_lex_state = 2}, - [446] = {.lex_state = 50, .external_lex_state = 2}, - [447] = {.lex_state = 50, .external_lex_state = 2}, - [448] = {.lex_state = 50, .external_lex_state = 3}, + [446] = {.lex_state = 50, .external_lex_state = 3}, + [447] = {.lex_state = 50, .external_lex_state = 3}, + [448] = {.lex_state = 50, .external_lex_state = 2}, [449] = {.lex_state = 50, .external_lex_state = 2}, - [450] = {.lex_state = 50, .external_lex_state = 3}, + [450] = {.lex_state = 50, .external_lex_state = 2}, [451] = {.lex_state = 50, .external_lex_state = 3}, - [452] = {.lex_state = 50, .external_lex_state = 3}, + [452] = {.lex_state = 50, .external_lex_state = 2}, [453] = {.lex_state = 50, .external_lex_state = 3}, - [454] = {.lex_state = 50, .external_lex_state = 2}, - [455] = {.lex_state = 50, .external_lex_state = 3}, + [454] = {.lex_state = 50, .external_lex_state = 3}, + [455] = {.lex_state = 50, .external_lex_state = 2}, [456] = {.lex_state = 50, .external_lex_state = 2}, - [457] = {.lex_state = 50, .external_lex_state = 2}, + [457] = {.lex_state = 50, .external_lex_state = 3}, [458] = {.lex_state = 50, .external_lex_state = 3}, [459] = {.lex_state = 50, .external_lex_state = 2}, [460] = {.lex_state = 50, .external_lex_state = 3}, [461] = {.lex_state = 50, .external_lex_state = 3}, [462] = {.lex_state = 50, .external_lex_state = 2}, - [463] = {.lex_state = 50, .external_lex_state = 3}, + [463] = {.lex_state = 50, .external_lex_state = 2}, [464] = {.lex_state = 50, .external_lex_state = 3}, - [465] = {.lex_state = 50, .external_lex_state = 2}, - [466] = {.lex_state = 50, .external_lex_state = 2}, + [465] = {.lex_state = 50, .external_lex_state = 3}, + [466] = {.lex_state = 50, .external_lex_state = 3}, [467] = {.lex_state = 50, .external_lex_state = 2}, [468] = {.lex_state = 50, .external_lex_state = 3}, - [469] = {.lex_state = 50, .external_lex_state = 2}, - [470] = {.lex_state = 50, .external_lex_state = 3}, - [471] = {.lex_state = 50, .external_lex_state = 3}, + [469] = {.lex_state = 50, .external_lex_state = 3}, + [470] = {.lex_state = 50, .external_lex_state = 2}, + [471] = {.lex_state = 50, .external_lex_state = 2}, [472] = {.lex_state = 50, .external_lex_state = 2}, - [473] = {.lex_state = 50, .external_lex_state = 2}, - [474] = {.lex_state = 50, .external_lex_state = 3}, - [475] = {.lex_state = 50, .external_lex_state = 3}, - [476] = {.lex_state = 50, .external_lex_state = 3}, - [477] = {.lex_state = 50, .external_lex_state = 3}, - [478] = {.lex_state = 50, .external_lex_state = 3}, - [479] = {.lex_state = 50, .external_lex_state = 3}, - [480] = {.lex_state = 50, .external_lex_state = 3}, - [481] = {.lex_state = 50, .external_lex_state = 3}, - [482] = {.lex_state = 50, .external_lex_state = 3}, + [473] = {.lex_state = 50, .external_lex_state = 3}, + [474] = {.lex_state = 50, .external_lex_state = 2}, + [475] = {.lex_state = 50, .external_lex_state = 2}, + [476] = {.lex_state = 50, .external_lex_state = 2}, + [477] = {.lex_state = 50, .external_lex_state = 2}, + [478] = {.lex_state = 50, .external_lex_state = 2}, + [479] = {.lex_state = 50, .external_lex_state = 2}, + [480] = {.lex_state = 50, .external_lex_state = 2}, + [481] = {.lex_state = 50, .external_lex_state = 2}, + [482] = {.lex_state = 50, .external_lex_state = 2}, [483] = {.lex_state = 50, .external_lex_state = 3}, - [484] = {.lex_state = 50, .external_lex_state = 3}, - [485] = {.lex_state = 50, .external_lex_state = 2}, - [486] = {.lex_state = 50, .external_lex_state = 3}, - [487] = {.lex_state = 50, .external_lex_state = 3}, - [488] = {.lex_state = 50, .external_lex_state = 3}, + [484] = {.lex_state = 50, .external_lex_state = 2}, + [485] = {.lex_state = 50, .external_lex_state = 3}, + [486] = {.lex_state = 50, .external_lex_state = 2}, + [487] = {.lex_state = 50, .external_lex_state = 2}, + [488] = {.lex_state = 50, .external_lex_state = 2}, [489] = {.lex_state = 50, .external_lex_state = 2}, - [490] = {.lex_state = 50, .external_lex_state = 3}, - [491] = {.lex_state = 50, .external_lex_state = 3}, + [490] = {.lex_state = 50, .external_lex_state = 2}, + [491] = {.lex_state = 50, .external_lex_state = 2}, [492] = {.lex_state = 50, .external_lex_state = 3}, [493] = {.lex_state = 50, .external_lex_state = 3}, [494] = {.lex_state = 50, .external_lex_state = 3}, [495] = {.lex_state = 50, .external_lex_state = 3}, - [496] = {.lex_state = 50, .external_lex_state = 3}, - [497] = {.lex_state = 50, .external_lex_state = 2}, - [498] = {.lex_state = 50, .external_lex_state = 3}, - [499] = {.lex_state = 50, .external_lex_state = 3}, + [496] = {.lex_state = 50, .external_lex_state = 2}, + [497] = {.lex_state = 50, .external_lex_state = 3}, + [498] = {.lex_state = 50, .external_lex_state = 2}, + [499] = {.lex_state = 50, .external_lex_state = 2}, [500] = {.lex_state = 50, .external_lex_state = 3}, - [501] = {.lex_state = 50, .external_lex_state = 3}, + [501] = {.lex_state = 50, .external_lex_state = 2}, [502] = {.lex_state = 50, .external_lex_state = 2}, [503] = {.lex_state = 50, .external_lex_state = 2}, - [504] = {.lex_state = 50, .external_lex_state = 3}, + [504] = {.lex_state = 50, .external_lex_state = 2}, [505] = {.lex_state = 50, .external_lex_state = 3}, [506] = {.lex_state = 50, .external_lex_state = 3}, - [507] = {.lex_state = 50, .external_lex_state = 2}, + [507] = {.lex_state = 50, .external_lex_state = 3}, [508] = {.lex_state = 50, .external_lex_state = 3}, [509] = {.lex_state = 50, .external_lex_state = 2}, - [510] = {.lex_state = 50, .external_lex_state = 3}, - [511] = {.lex_state = 50, .external_lex_state = 2}, - [512] = {.lex_state = 50, .external_lex_state = 3}, - [513] = {.lex_state = 50, .external_lex_state = 3}, - [514] = {.lex_state = 50, .external_lex_state = 3}, - [515] = {.lex_state = 50, .external_lex_state = 2}, - [516] = {.lex_state = 50, .external_lex_state = 2}, + [510] = {.lex_state = 50, .external_lex_state = 2}, + [511] = {.lex_state = 50, .external_lex_state = 3}, + [512] = {.lex_state = 50, .external_lex_state = 2}, + [513] = {.lex_state = 50, .external_lex_state = 2}, + [514] = {.lex_state = 50, .external_lex_state = 2}, + [515] = {.lex_state = 50, .external_lex_state = 3}, + [516] = {.lex_state = 50, .external_lex_state = 3}, [517] = {.lex_state = 50, .external_lex_state = 3}, - [518] = {.lex_state = 50, .external_lex_state = 3}, - [519] = {.lex_state = 50, .external_lex_state = 3}, - [520] = {.lex_state = 50, .external_lex_state = 3}, - [521] = {.lex_state = 50, .external_lex_state = 3}, + [518] = {.lex_state = 50, .external_lex_state = 2}, + [519] = {.lex_state = 50, .external_lex_state = 2}, + [520] = {.lex_state = 50, .external_lex_state = 2}, + [521] = {.lex_state = 50, .external_lex_state = 2}, [522] = {.lex_state = 50, .external_lex_state = 2}, [523] = {.lex_state = 50, .external_lex_state = 2}, - [524] = {.lex_state = 50, .external_lex_state = 3}, + [524] = {.lex_state = 50, .external_lex_state = 2}, [525] = {.lex_state = 50, .external_lex_state = 3}, - [526] = {.lex_state = 50, .external_lex_state = 2}, - [527] = {.lex_state = 50, .external_lex_state = 2}, + [526] = {.lex_state = 50, .external_lex_state = 3}, + [527] = {.lex_state = 50, .external_lex_state = 3}, [528] = {.lex_state = 50, .external_lex_state = 2}, [529] = {.lex_state = 50, .external_lex_state = 2}, [530] = {.lex_state = 50, .external_lex_state = 2}, [531] = {.lex_state = 50, .external_lex_state = 2}, - [532] = {.lex_state = 50, .external_lex_state = 2}, - [533] = {.lex_state = 50, .external_lex_state = 2}, - [534] = {.lex_state = 50, .external_lex_state = 2}, - [535] = {.lex_state = 50, .external_lex_state = 2}, - [536] = {.lex_state = 50, .external_lex_state = 2}, - [537] = {.lex_state = 50, .external_lex_state = 2}, - [538] = {.lex_state = 50, .external_lex_state = 2}, + [532] = {.lex_state = 50, .external_lex_state = 3}, + [533] = {.lex_state = 50, .external_lex_state = 3}, + [534] = {.lex_state = 50, .external_lex_state = 3}, + [535] = {.lex_state = 50, .external_lex_state = 3}, + [536] = {.lex_state = 50, .external_lex_state = 3}, + [537] = {.lex_state = 50, .external_lex_state = 3}, + [538] = {.lex_state = 50, .external_lex_state = 3}, [539] = {.lex_state = 50, .external_lex_state = 2}, - [540] = {.lex_state = 50, .external_lex_state = 2}, - [541] = {.lex_state = 50, .external_lex_state = 2}, - [542] = {.lex_state = 50, .external_lex_state = 2}, + [540] = {.lex_state = 50, .external_lex_state = 3}, + [541] = {.lex_state = 50, .external_lex_state = 3}, + [542] = {.lex_state = 50, .external_lex_state = 3}, [543] = {.lex_state = 50, .external_lex_state = 2}, - [544] = {.lex_state = 50, .external_lex_state = 2}, - [545] = {.lex_state = 50, .external_lex_state = 2}, - [546] = {.lex_state = 50, .external_lex_state = 2}, - [547] = {.lex_state = 50, .external_lex_state = 2}, - [548] = {.lex_state = 50, .external_lex_state = 2}, + [544] = {.lex_state = 50, .external_lex_state = 3}, + [545] = {.lex_state = 50, .external_lex_state = 3}, + [546] = {.lex_state = 50, .external_lex_state = 3}, + [547] = {.lex_state = 50, .external_lex_state = 3}, + [548] = {.lex_state = 50, .external_lex_state = 3}, [549] = {.lex_state = 50, .external_lex_state = 2}, [550] = {.lex_state = 50, .external_lex_state = 2}, - [551] = {.lex_state = 50, .external_lex_state = 2}, - [552] = {.lex_state = 50, .external_lex_state = 2}, - [553] = {.lex_state = 50, .external_lex_state = 2}, - [554] = {.lex_state = 50, .external_lex_state = 2}, - [555] = {.lex_state = 50, .external_lex_state = 2}, - [556] = {.lex_state = 50, .external_lex_state = 2}, + [551] = {.lex_state = 50, .external_lex_state = 3}, + [552] = {.lex_state = 50, .external_lex_state = 3}, + [553] = {.lex_state = 50, .external_lex_state = 3}, + [554] = {.lex_state = 50, .external_lex_state = 3}, + [555] = {.lex_state = 50, .external_lex_state = 3}, + [556] = {.lex_state = 50, .external_lex_state = 3}, [557] = {.lex_state = 50, .external_lex_state = 2}, - [558] = {.lex_state = 50, .external_lex_state = 3}, + [558] = {.lex_state = 50, .external_lex_state = 2}, [559] = {.lex_state = 50, .external_lex_state = 2}, [560] = {.lex_state = 50, .external_lex_state = 2}, [561] = {.lex_state = 50, .external_lex_state = 2}, @@ -8245,8 +6659,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [563] = {.lex_state = 50, .external_lex_state = 2}, [564] = {.lex_state = 50, .external_lex_state = 2}, [565] = {.lex_state = 16, .external_lex_state = 2}, - [566] = {.lex_state = 16, .external_lex_state = 2}, - [567] = {.lex_state = 50, .external_lex_state = 2}, + [566] = {.lex_state = 50, .external_lex_state = 2}, + [567] = {.lex_state = 16, .external_lex_state = 2}, [568] = {.lex_state = 50, .external_lex_state = 2}, [569] = {.lex_state = 16, .external_lex_state = 2}, [570] = {.lex_state = 16, .external_lex_state = 2}, @@ -8286,19 +6700,19 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [604] = {.lex_state = 16}, [605] = {.lex_state = 16}, [606] = {.lex_state = 16}, - [607] = {.lex_state = 50, .external_lex_state = 2}, + [607] = {.lex_state = 16}, [608] = {.lex_state = 16}, [609] = {.lex_state = 16}, [610] = {.lex_state = 50, .external_lex_state = 2}, [611] = {.lex_state = 16}, [612] = {.lex_state = 16}, [613] = {.lex_state = 16}, - [614] = {.lex_state = 16}, - [615] = {.lex_state = 16}, + [614] = {.lex_state = 50, .external_lex_state = 2}, + [615] = {.lex_state = 50, .external_lex_state = 2}, [616] = {.lex_state = 16}, - [617] = {.lex_state = 50, .external_lex_state = 2}, + [617] = {.lex_state = 16}, [618] = {.lex_state = 16}, - [619] = {.lex_state = 50, .external_lex_state = 2}, + [619] = {.lex_state = 16}, [620] = {.lex_state = 16}, [621] = {.lex_state = 16}, [622] = {.lex_state = 16}, @@ -8307,37 +6721,37 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [625] = {.lex_state = 16}, [626] = {.lex_state = 16}, [627] = {.lex_state = 16}, - [628] = {.lex_state = 16}, + [628] = {.lex_state = 50, .external_lex_state = 2}, [629] = {.lex_state = 16}, [630] = {.lex_state = 16}, [631] = {.lex_state = 16}, [632] = {.lex_state = 16}, [633] = {.lex_state = 16}, - [634] = {.lex_state = 16}, + [634] = {.lex_state = 50, .external_lex_state = 2}, [635] = {.lex_state = 50, .external_lex_state = 2}, [636] = {.lex_state = 50, .external_lex_state = 2}, [637] = {.lex_state = 50, .external_lex_state = 2}, [638] = {.lex_state = 50, .external_lex_state = 2}, [639] = {.lex_state = 50, .external_lex_state = 2}, [640] = {.lex_state = 50, .external_lex_state = 2}, - [641] = {.lex_state = 50, .external_lex_state = 2}, + [641] = {.lex_state = 15}, [642] = {.lex_state = 50, .external_lex_state = 2}, - [643] = {.lex_state = 16, .external_lex_state = 2}, + [643] = {.lex_state = 50, .external_lex_state = 2}, [644] = {.lex_state = 50, .external_lex_state = 2}, [645] = {.lex_state = 50, .external_lex_state = 2}, [646] = {.lex_state = 50, .external_lex_state = 2}, - [647] = {.lex_state = 16, .external_lex_state = 2}, + [647] = {.lex_state = 50, .external_lex_state = 2}, [648] = {.lex_state = 50, .external_lex_state = 2}, [649] = {.lex_state = 50, .external_lex_state = 2}, [650] = {.lex_state = 50, .external_lex_state = 2}, - [651] = {.lex_state = 50, .external_lex_state = 2}, + [651] = {.lex_state = 16}, [652] = {.lex_state = 50, .external_lex_state = 2}, - [653] = {.lex_state = 50, .external_lex_state = 2}, + [653] = {.lex_state = 16}, [654] = {.lex_state = 50, .external_lex_state = 2}, [655] = {.lex_state = 50, .external_lex_state = 2}, - [656] = {.lex_state = 16}, - [657] = {.lex_state = 15}, - [658] = {.lex_state = 15}, + [656] = {.lex_state = 50, .external_lex_state = 2}, + [657] = {.lex_state = 50, .external_lex_state = 2}, + [658] = {.lex_state = 16, .external_lex_state = 2}, [659] = {.lex_state = 50, .external_lex_state = 2}, [660] = {.lex_state = 50, .external_lex_state = 2}, [661] = {.lex_state = 50, .external_lex_state = 2}, @@ -8350,11 +6764,11 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [668] = {.lex_state = 50, .external_lex_state = 2}, [669] = {.lex_state = 50, .external_lex_state = 2}, [670] = {.lex_state = 50, .external_lex_state = 2}, - [671] = {.lex_state = 15}, + [671] = {.lex_state = 50, .external_lex_state = 2}, [672] = {.lex_state = 50, .external_lex_state = 2}, - [673] = {.lex_state = 50, .external_lex_state = 2}, - [674] = {.lex_state = 15}, - [675] = {.lex_state = 50, .external_lex_state = 2}, + [673] = {.lex_state = 15}, + [674] = {.lex_state = 50, .external_lex_state = 2}, + [675] = {.lex_state = 15}, [676] = {.lex_state = 50, .external_lex_state = 2}, [677] = {.lex_state = 50, .external_lex_state = 2}, [678] = {.lex_state = 50, .external_lex_state = 2}, @@ -8362,75 +6776,75 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [680] = {.lex_state = 50, .external_lex_state = 2}, [681] = {.lex_state = 50, .external_lex_state = 2}, [682] = {.lex_state = 50, .external_lex_state = 2}, - [683] = {.lex_state = 50, .external_lex_state = 2}, + [683] = {.lex_state = 16, .external_lex_state = 2}, [684] = {.lex_state = 50, .external_lex_state = 2}, - [685] = {.lex_state = 50, .external_lex_state = 2}, + [685] = {.lex_state = 15}, [686] = {.lex_state = 50, .external_lex_state = 2}, [687] = {.lex_state = 50, .external_lex_state = 2}, - [688] = {.lex_state = 16, .external_lex_state = 4}, - [689] = {.lex_state = 16, .external_lex_state = 6}, - [690] = {.lex_state = 16}, - [691] = {.lex_state = 16}, - [692] = {.lex_state = 16, .external_lex_state = 4}, + [688] = {.lex_state = 16}, + [689] = {.lex_state = 16}, + [690] = {.lex_state = 16, .external_lex_state = 4}, + [691] = {.lex_state = 16, .external_lex_state = 4}, + [692] = {.lex_state = 16, .external_lex_state = 6}, [693] = {.lex_state = 16, .external_lex_state = 4}, [694] = {.lex_state = 16, .external_lex_state = 6}, [695] = {.lex_state = 16, .external_lex_state = 2}, - [696] = {.lex_state = 16, .external_lex_state = 6}, + [696] = {.lex_state = 16, .external_lex_state = 2}, [697] = {.lex_state = 16, .external_lex_state = 6}, - [698] = {.lex_state = 16}, - [699] = {.lex_state = 16, .external_lex_state = 2}, - [700] = {.lex_state = 16, .external_lex_state = 2}, + [698] = {.lex_state = 16, .external_lex_state = 6}, + [699] = {.lex_state = 16, .external_lex_state = 6}, + [700] = {.lex_state = 16, .external_lex_state = 6}, [701] = {.lex_state = 16, .external_lex_state = 6}, [702] = {.lex_state = 16, .external_lex_state = 6}, [703] = {.lex_state = 16, .external_lex_state = 6}, [704] = {.lex_state = 16, .external_lex_state = 6}, - [705] = {.lex_state = 16, .external_lex_state = 6}, + [705] = {.lex_state = 16}, [706] = {.lex_state = 16, .external_lex_state = 6}, [707] = {.lex_state = 16, .external_lex_state = 6}, - [708] = {.lex_state = 16, .external_lex_state = 6}, + [708] = {.lex_state = 16, .external_lex_state = 2}, [709] = {.lex_state = 16, .external_lex_state = 6}, - [710] = {.lex_state = 15}, + [710] = {.lex_state = 16}, [711] = {.lex_state = 16}, - [712] = {.lex_state = 15}, + [712] = {.lex_state = 16}, [713] = {.lex_state = 16}, - [714] = {.lex_state = 15}, - [715] = {.lex_state = 15, .external_lex_state = 6}, - [716] = {.lex_state = 16}, - [717] = {.lex_state = 16, .external_lex_state = 4}, + [714] = {.lex_state = 15, .external_lex_state = 6}, + [715] = {.lex_state = 16}, + [716] = {.lex_state = 16, .external_lex_state = 4}, + [717] = {.lex_state = 16}, [718] = {.lex_state = 16}, - [719] = {.lex_state = 16}, - [720] = {.lex_state = 16}, + [719] = {.lex_state = 16, .external_lex_state = 4}, + [720] = {.lex_state = 15}, [721] = {.lex_state = 16}, - [722] = {.lex_state = 16}, - [723] = {.lex_state = 16}, - [724] = {.lex_state = 16, .external_lex_state = 4}, - [725] = {.lex_state = 15}, + [722] = {.lex_state = 15}, + [723] = {.lex_state = 15}, + [724] = {.lex_state = 15, .external_lex_state = 6}, + [725] = {.lex_state = 16}, [726] = {.lex_state = 16}, [727] = {.lex_state = 16}, [728] = {.lex_state = 16}, [729] = {.lex_state = 16}, [730] = {.lex_state = 16}, [731] = {.lex_state = 16}, - [732] = {.lex_state = 16}, + [732] = {.lex_state = 15}, [733] = {.lex_state = 16}, [734] = {.lex_state = 16}, - [735] = {.lex_state = 15, .external_lex_state = 6}, + [735] = {.lex_state = 16}, [736] = {.lex_state = 16, .external_lex_state = 6}, [737] = {.lex_state = 16, .external_lex_state = 6}, [738] = {.lex_state = 16, .external_lex_state = 6}, [739] = {.lex_state = 16, .external_lex_state = 6}, [740] = {.lex_state = 16, .external_lex_state = 6}, - [741] = {.lex_state = 16}, - [742] = {.lex_state = 16}, - [743] = {.lex_state = 16}, + [741] = {.lex_state = 16, .external_lex_state = 6}, + [742] = {.lex_state = 16, .external_lex_state = 6}, + [743] = {.lex_state = 16, .external_lex_state = 6}, [744] = {.lex_state = 16, .external_lex_state = 6}, - [745] = {.lex_state = 16, .external_lex_state = 6}, - [746] = {.lex_state = 16, .external_lex_state = 6}, + [745] = {.lex_state = 15}, + [746] = {.lex_state = 16}, [747] = {.lex_state = 16, .external_lex_state = 6}, [748] = {.lex_state = 16, .external_lex_state = 6}, [749] = {.lex_state = 16, .external_lex_state = 6}, [750] = {.lex_state = 16, .external_lex_state = 6}, - [751] = {.lex_state = 16, .external_lex_state = 6}, + [751] = {.lex_state = 16}, [752] = {.lex_state = 16, .external_lex_state = 6}, [753] = {.lex_state = 16, .external_lex_state = 6}, [754] = {.lex_state = 16, .external_lex_state = 6}, @@ -8438,7 +6852,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [756] = {.lex_state = 16, .external_lex_state = 6}, [757] = {.lex_state = 16, .external_lex_state = 6}, [758] = {.lex_state = 16, .external_lex_state = 6}, - [759] = {.lex_state = 16, .external_lex_state = 6}, + [759] = {.lex_state = 15}, [760] = {.lex_state = 16, .external_lex_state = 6}, [761] = {.lex_state = 16, .external_lex_state = 6}, [762] = {.lex_state = 16, .external_lex_state = 6}, @@ -8448,15 +6862,15 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [766] = {.lex_state = 16, .external_lex_state = 6}, [767] = {.lex_state = 16, .external_lex_state = 6}, [768] = {.lex_state = 16, .external_lex_state = 6}, - [769] = {.lex_state = 15}, - [770] = {.lex_state = 15}, - [771] = {.lex_state = 16, .external_lex_state = 6}, + [769] = {.lex_state = 16, .external_lex_state = 6}, + [770] = {.lex_state = 16, .external_lex_state = 6}, + [771] = {.lex_state = 16}, [772] = {.lex_state = 16, .external_lex_state = 6}, [773] = {.lex_state = 16, .external_lex_state = 6}, [774] = {.lex_state = 16}, [775] = {.lex_state = 16}, [776] = {.lex_state = 16}, - [777] = {.lex_state = 16}, + [777] = {.lex_state = 15}, [778] = {.lex_state = 16}, [779] = {.lex_state = 16}, [780] = {.lex_state = 16}, @@ -8465,7 +6879,7 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [783] = {.lex_state = 16}, [784] = {.lex_state = 16}, [785] = {.lex_state = 16}, - [786] = {.lex_state = 16}, + [786] = {.lex_state = 15}, [787] = {.lex_state = 16}, [788] = {.lex_state = 16}, [789] = {.lex_state = 16}, @@ -8473,8 +6887,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [791] = {.lex_state = 16}, [792] = {.lex_state = 16}, [793] = {.lex_state = 16}, - [794] = {.lex_state = 15}, - [795] = {.lex_state = 15}, + [794] = {.lex_state = 16}, + [795] = {.lex_state = 16}, [796] = {.lex_state = 16}, [797] = {.lex_state = 16}, [798] = {.lex_state = 16}, @@ -8489,8 +6903,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [807] = {.lex_state = 16}, [808] = {.lex_state = 16}, [809] = {.lex_state = 50, .external_lex_state = 2}, - [810] = {.lex_state = 50, .external_lex_state = 2}, - [811] = {.lex_state = 14, .external_lex_state = 2}, + [810] = {.lex_state = 14, .external_lex_state = 2}, + [811] = {.lex_state = 50, .external_lex_state = 2}, [812] = {.lex_state = 14, .external_lex_state = 2}, [813] = {.lex_state = 50, .external_lex_state = 2}, [814] = {.lex_state = 50, .external_lex_state = 2}, @@ -8512,623 +6926,623 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [830] = {.lex_state = 14}, [831] = {.lex_state = 14}, [832] = {.lex_state = 14}, - [833] = {.lex_state = 14}, + [833] = {.lex_state = 0, .external_lex_state = 6}, [834] = {.lex_state = 14}, - [835] = {.lex_state = 0, .external_lex_state = 6}, + [835] = {.lex_state = 16}, [836] = {.lex_state = 14}, - [837] = {.lex_state = 0, .external_lex_state = 6}, - [838] = {.lex_state = 16}, - [839] = {.lex_state = 16}, - [840] = {.lex_state = 14}, + [837] = {.lex_state = 14}, + [838] = {.lex_state = 14}, + [839] = {.lex_state = 0, .external_lex_state = 6}, + [840] = {.lex_state = 16}, [841] = {.lex_state = 14}, [842] = {.lex_state = 14}, - [843] = {.lex_state = 14}, - [844] = {.lex_state = 16}, + [843] = {.lex_state = 16}, + [844] = {.lex_state = 14}, [845] = {.lex_state = 14}, [846] = {.lex_state = 14}, [847] = {.lex_state = 14}, [848] = {.lex_state = 14}, [849] = {.lex_state = 14}, [850] = {.lex_state = 14}, - [851] = {.lex_state = 0}, + [851] = {.lex_state = 50, .external_lex_state = 2}, [852] = {.lex_state = 50, .external_lex_state = 2}, [853] = {.lex_state = 50, .external_lex_state = 2}, - [854] = {.lex_state = 50, .external_lex_state = 2}, + [854] = {.lex_state = 0}, [855] = {.lex_state = 14}, - [856] = {.lex_state = 14}, - [857] = {.lex_state = 0}, + [856] = {.lex_state = 0}, + [857] = {.lex_state = 14}, [858] = {.lex_state = 14}, [859] = {.lex_state = 0}, [860] = {.lex_state = 14}, [861] = {.lex_state = 0}, - [862] = {.lex_state = 0}, - [863] = {.lex_state = 14}, + [862] = {.lex_state = 14}, + [863] = {.lex_state = 0}, [864] = {.lex_state = 50, .external_lex_state = 2}, [865] = {.lex_state = 16}, [866] = {.lex_state = 14}, - [867] = {.lex_state = 14}, + [867] = {.lex_state = 16}, [868] = {.lex_state = 14}, - [869] = {.lex_state = 16}, + [869] = {.lex_state = 14}, [870] = {.lex_state = 14}, [871] = {.lex_state = 14}, [872] = {.lex_state = 14}, [873] = {.lex_state = 14}, [874] = {.lex_state = 14}, - [875] = {.lex_state = 14}, + [875] = {.lex_state = 0}, [876] = {.lex_state = 14}, [877] = {.lex_state = 14}, [878] = {.lex_state = 14}, [879] = {.lex_state = 14}, [880] = {.lex_state = 14}, [881] = {.lex_state = 14}, - [882] = {.lex_state = 16}, - [883] = {.lex_state = 16}, - [884] = {.lex_state = 0}, - [885] = {.lex_state = 14}, - [886] = {.lex_state = 14, .external_lex_state = 2}, - [887] = {.lex_state = 14}, + [882] = {.lex_state = 14}, + [883] = {.lex_state = 14}, + [884] = {.lex_state = 16}, + [885] = {.lex_state = 14, .external_lex_state = 2}, + [886] = {.lex_state = 14}, + [887] = {.lex_state = 16}, [888] = {.lex_state = 14}, [889] = {.lex_state = 18, .external_lex_state = 7}, - [890] = {.lex_state = 18, .external_lex_state = 7}, + [890] = {.lex_state = 14}, [891] = {.lex_state = 18, .external_lex_state = 7}, - [892] = {.lex_state = 18, .external_lex_state = 7}, + [892] = {.lex_state = 14}, [893] = {.lex_state = 0}, - [894] = {.lex_state = 0}, - [895] = {.lex_state = 0}, - [896] = {.lex_state = 14}, + [894] = {.lex_state = 14}, + [895] = {.lex_state = 18, .external_lex_state = 7}, + [896] = {.lex_state = 0}, [897] = {.lex_state = 14}, - [898] = {.lex_state = 14}, - [899] = {.lex_state = 14}, + [898] = {.lex_state = 0}, + [899] = {.lex_state = 18, .external_lex_state = 7}, [900] = {.lex_state = 0}, - [901] = {.lex_state = 0}, - [902] = {.lex_state = 14}, - [903] = {.lex_state = 18, .external_lex_state = 7}, - [904] = {.lex_state = 18, .external_lex_state = 7}, + [901] = {.lex_state = 14}, + [902] = {.lex_state = 18, .external_lex_state = 7}, + [903] = {.lex_state = 0}, + [904] = {.lex_state = 0}, [905] = {.lex_state = 0}, - [906] = {.lex_state = 0}, + [906] = {.lex_state = 18, .external_lex_state = 7}, [907] = {.lex_state = 18, .external_lex_state = 7}, - [908] = {.lex_state = 14}, - [909] = {.lex_state = 18, .external_lex_state = 7}, - [910] = {.lex_state = 0}, + [908] = {.lex_state = 18, .external_lex_state = 7}, + [909] = {.lex_state = 14}, + [910] = {.lex_state = 18, .external_lex_state = 7}, [911] = {.lex_state = 0}, - [912] = {.lex_state = 18, .external_lex_state = 7}, + [912] = {.lex_state = 0}, [913] = {.lex_state = 0}, [914] = {.lex_state = 14}, [915] = {.lex_state = 14}, - [916] = {.lex_state = 0}, - [917] = {.lex_state = 14}, + [916] = {.lex_state = 14}, + [917] = {.lex_state = 0}, [918] = {.lex_state = 14}, [919] = {.lex_state = 0}, [920] = {.lex_state = 0}, [921] = {.lex_state = 0}, [922] = {.lex_state = 0}, - [923] = {.lex_state = 14}, - [924] = {.lex_state = 14}, + [923] = {.lex_state = 0, .external_lex_state = 6}, + [924] = {.lex_state = 0}, [925] = {.lex_state = 14}, - [926] = {.lex_state = 14}, - [927] = {.lex_state = 0, .external_lex_state = 6}, + [926] = {.lex_state = 0}, + [927] = {.lex_state = 14}, [928] = {.lex_state = 0}, [929] = {.lex_state = 14}, [930] = {.lex_state = 14}, - [931] = {.lex_state = 0}, - [932] = {.lex_state = 0}, + [931] = {.lex_state = 14}, + [932] = {.lex_state = 0, .external_lex_state = 6}, [933] = {.lex_state = 14}, - [934] = {.lex_state = 14}, - [935] = {.lex_state = 14}, + [934] = {.lex_state = 0, .external_lex_state = 6}, + [935] = {.lex_state = 0}, [936] = {.lex_state = 14}, - [937] = {.lex_state = 14}, - [938] = {.lex_state = 0}, - [939] = {.lex_state = 0, .external_lex_state = 6}, - [940] = {.lex_state = 0, .external_lex_state = 6}, - [941] = {.lex_state = 0}, + [937] = {.lex_state = 0, .external_lex_state = 6}, + [938] = {.lex_state = 14}, + [939] = {.lex_state = 14}, + [940] = {.lex_state = 14}, + [941] = {.lex_state = 0, .external_lex_state = 6}, [942] = {.lex_state = 14}, - [943] = {.lex_state = 14}, + [943] = {.lex_state = 0}, [944] = {.lex_state = 14}, - [945] = {.lex_state = 0}, - [946] = {.lex_state = 0, .external_lex_state = 6}, + [945] = {.lex_state = 14}, + [946] = {.lex_state = 14}, [947] = {.lex_state = 14}, - [948] = {.lex_state = 14}, + [948] = {.lex_state = 0, .external_lex_state = 6}, [949] = {.lex_state = 14}, [950] = {.lex_state = 14}, - [951] = {.lex_state = 14}, - [952] = {.lex_state = 0, .external_lex_state = 6}, - [953] = {.lex_state = 14}, + [951] = {.lex_state = 16}, + [952] = {.lex_state = 0}, + [953] = {.lex_state = 0, .external_lex_state = 6}, [954] = {.lex_state = 14}, [955] = {.lex_state = 14}, - [956] = {.lex_state = 0, .external_lex_state = 6}, - [957] = {.lex_state = 0}, - [958] = {.lex_state = 0, .external_lex_state = 6}, - [959] = {.lex_state = 0, .external_lex_state = 6}, + [956] = {.lex_state = 14}, + [957] = {.lex_state = 0, .external_lex_state = 6}, + [958] = {.lex_state = 0}, + [959] = {.lex_state = 14}, [960] = {.lex_state = 0, .external_lex_state = 6}, [961] = {.lex_state = 14}, - [962] = {.lex_state = 14}, - [963] = {.lex_state = 0}, + [962] = {.lex_state = 0, .external_lex_state = 6}, + [963] = {.lex_state = 14}, [964] = {.lex_state = 14}, - [965] = {.lex_state = 16}, + [965] = {.lex_state = 14}, [966] = {.lex_state = 0, .external_lex_state = 6}, - [967] = {.lex_state = 0, .external_lex_state = 6}, - [968] = {.lex_state = 14}, - [969] = {.lex_state = 0}, - [970] = {.lex_state = 14}, - [971] = {.lex_state = 14}, - [972] = {.lex_state = 14}, - [973] = {.lex_state = 0}, - [974] = {.lex_state = 0, .external_lex_state = 6}, - [975] = {.lex_state = 0}, - [976] = {.lex_state = 14}, - [977] = {.lex_state = 0, .external_lex_state = 6}, - [978] = {.lex_state = 0, .external_lex_state = 6}, + [967] = {.lex_state = 14}, + [968] = {.lex_state = 0}, + [969] = {.lex_state = 14}, + [970] = {.lex_state = 0, .external_lex_state = 6}, + [971] = {.lex_state = 0}, + [972] = {.lex_state = 0, .external_lex_state = 6}, + [973] = {.lex_state = 14}, + [974] = {.lex_state = 0}, + [975] = {.lex_state = 0, .external_lex_state = 6}, + [976] = {.lex_state = 0, .external_lex_state = 6}, + [977] = {.lex_state = 0}, + [978] = {.lex_state = 14}, [979] = {.lex_state = 0}, - [980] = {.lex_state = 0, .external_lex_state = 6}, + [980] = {.lex_state = 14}, [981] = {.lex_state = 0}, - [982] = {.lex_state = 14}, - [983] = {.lex_state = 14}, + [982] = {.lex_state = 0}, + [983] = {.lex_state = 18, .external_lex_state = 7}, [984] = {.lex_state = 0}, - [985] = {.lex_state = 0}, + [985] = {.lex_state = 0, .external_lex_state = 6}, [986] = {.lex_state = 0}, - [987] = {.lex_state = 14}, - [988] = {.lex_state = 18, .external_lex_state = 7}, - [989] = {.lex_state = 0}, - [990] = {.lex_state = 0}, - [991] = {.lex_state = 0}, + [987] = {.lex_state = 0}, + [988] = {.lex_state = 14}, + [989] = {.lex_state = 14}, + [990] = {.lex_state = 14}, + [991] = {.lex_state = 0, .external_lex_state = 6}, [992] = {.lex_state = 0}, - [993] = {.lex_state = 0, .external_lex_state = 6}, - [994] = {.lex_state = 0, .external_lex_state = 6}, + [993] = {.lex_state = 0}, + [994] = {.lex_state = 16}, [995] = {.lex_state = 14}, [996] = {.lex_state = 0}, - [997] = {.lex_state = 16}, - [998] = {.lex_state = 0, .external_lex_state = 6}, - [999] = {.lex_state = 0, .external_lex_state = 6}, - [1000] = {.lex_state = 14}, + [997] = {.lex_state = 0}, + [998] = {.lex_state = 14}, + [999] = {.lex_state = 14}, + [1000] = {.lex_state = 0, .external_lex_state = 6}, [1001] = {.lex_state = 14}, - [1002] = {.lex_state = 0}, - [1003] = {.lex_state = 14}, - [1004] = {.lex_state = 0, .external_lex_state = 6}, + [1002] = {.lex_state = 0, .external_lex_state = 6}, + [1003] = {.lex_state = 0, .external_lex_state = 6}, + [1004] = {.lex_state = 18, .external_lex_state = 7}, [1005] = {.lex_state = 14}, [1006] = {.lex_state = 14}, - [1007] = {.lex_state = 14}, - [1008] = {.lex_state = 0, .external_lex_state = 6}, - [1009] = {.lex_state = 18, .external_lex_state = 7}, - [1010] = {.lex_state = 0}, + [1007] = {.lex_state = 0}, + [1008] = {.lex_state = 14}, + [1009] = {.lex_state = 0}, + [1010] = {.lex_state = 0, .external_lex_state = 6}, [1011] = {.lex_state = 14}, - [1012] = {.lex_state = 14}, - [1013] = {.lex_state = 18, .external_lex_state = 7}, + [1012] = {.lex_state = 0}, + [1013] = {.lex_state = 16, .external_lex_state = 6}, [1014] = {.lex_state = 14}, - [1015] = {.lex_state = 14}, - [1016] = {.lex_state = 0, .external_lex_state = 6}, - [1017] = {.lex_state = 16, .external_lex_state = 6}, + [1015] = {.lex_state = 18, .external_lex_state = 7}, + [1016] = {.lex_state = 16}, + [1017] = {.lex_state = 0, .external_lex_state = 6}, [1018] = {.lex_state = 0, .external_lex_state = 6}, - [1019] = {.lex_state = 0}, + [1019] = {.lex_state = 14}, [1020] = {.lex_state = 18, .external_lex_state = 7}, [1021] = {.lex_state = 14}, - [1022] = {.lex_state = 14}, - [1023] = {.lex_state = 18, .external_lex_state = 7}, - [1024] = {.lex_state = 0}, - [1025] = {.lex_state = 0, .external_lex_state = 6}, + [1022] = {.lex_state = 0, .external_lex_state = 6}, + [1023] = {.lex_state = 14}, + [1024] = {.lex_state = 14}, + [1025] = {.lex_state = 14}, [1026] = {.lex_state = 0}, - [1027] = {.lex_state = 14}, + [1027] = {.lex_state = 18, .external_lex_state = 7}, [1028] = {.lex_state = 14}, - [1029] = {.lex_state = 16, .external_lex_state = 6}, + [1029] = {.lex_state = 14}, [1030] = {.lex_state = 14}, - [1031] = {.lex_state = 14}, - [1032] = {.lex_state = 16}, - [1033] = {.lex_state = 14}, - [1034] = {.lex_state = 16, .external_lex_state = 6}, - [1035] = {.lex_state = 0, .external_lex_state = 6}, - [1036] = {.lex_state = 18, .external_lex_state = 7}, - [1037] = {.lex_state = 14}, + [1031] = {.lex_state = 0}, + [1032] = {.lex_state = 18, .external_lex_state = 7}, + [1033] = {.lex_state = 18, .external_lex_state = 7}, + [1034] = {.lex_state = 14}, + [1035] = {.lex_state = 16, .external_lex_state = 6}, + [1036] = {.lex_state = 14}, + [1037] = {.lex_state = 0, .external_lex_state = 6}, [1038] = {.lex_state = 14}, - [1039] = {.lex_state = 14}, - [1040] = {.lex_state = 16}, - [1041] = {.lex_state = 18, .external_lex_state = 7}, - [1042] = {.lex_state = 18, .external_lex_state = 7}, - [1043] = {.lex_state = 14}, + [1039] = {.lex_state = 16, .external_lex_state = 6}, + [1040] = {.lex_state = 18, .external_lex_state = 7}, + [1041] = {.lex_state = 14}, + [1042] = {.lex_state = 14}, + [1043] = {.lex_state = 16}, [1044] = {.lex_state = 14}, [1045] = {.lex_state = 14}, - [1046] = {.lex_state = 14}, + [1046] = {.lex_state = 0, .external_lex_state = 6}, [1047] = {.lex_state = 14}, - [1048] = {.lex_state = 14}, + [1048] = {.lex_state = 0}, [1049] = {.lex_state = 0, .external_lex_state = 6}, [1050] = {.lex_state = 0, .external_lex_state = 6}, - [1051] = {.lex_state = 0}, - [1052] = {.lex_state = 0}, + [1051] = {.lex_state = 8}, + [1052] = {.lex_state = 14}, [1053] = {.lex_state = 14}, - [1054] = {.lex_state = 0}, - [1055] = {.lex_state = 0, .external_lex_state = 6}, + [1054] = {.lex_state = 8}, + [1055] = {.lex_state = 0}, [1056] = {.lex_state = 0}, - [1057] = {.lex_state = 0}, + [1057] = {.lex_state = 16, .external_lex_state = 6}, [1058] = {.lex_state = 8}, - [1059] = {.lex_state = 0}, - [1060] = {.lex_state = 14}, - [1061] = {.lex_state = 0}, - [1062] = {.lex_state = 16, .external_lex_state = 6}, + [1059] = {.lex_state = 0, .external_lex_state = 6}, + [1060] = {.lex_state = 0, .external_lex_state = 6}, + [1061] = {.lex_state = 0, .external_lex_state = 6}, + [1062] = {.lex_state = 0, .external_lex_state = 6}, [1063] = {.lex_state = 0}, [1064] = {.lex_state = 0, .external_lex_state = 6}, - [1065] = {.lex_state = 0, .external_lex_state = 6}, - [1066] = {.lex_state = 0, .external_lex_state = 6}, - [1067] = {.lex_state = 14}, - [1068] = {.lex_state = 0, .external_lex_state = 6}, - [1069] = {.lex_state = 8}, + [1065] = {.lex_state = 0}, + [1066] = {.lex_state = 0}, + [1067] = {.lex_state = 0}, + [1068] = {.lex_state = 0}, + [1069] = {.lex_state = 0}, [1070] = {.lex_state = 0}, - [1071] = {.lex_state = 0}, - [1072] = {.lex_state = 0, .external_lex_state = 6}, + [1071] = {.lex_state = 14}, + [1072] = {.lex_state = 0}, [1073] = {.lex_state = 0}, - [1074] = {.lex_state = 0, .external_lex_state = 6}, + [1074] = {.lex_state = 14}, [1075] = {.lex_state = 0, .external_lex_state = 6}, [1076] = {.lex_state = 0}, [1077] = {.lex_state = 14}, - [1078] = {.lex_state = 14}, - [1079] = {.lex_state = 0, .external_lex_state = 6}, - [1080] = {.lex_state = 8}, - [1081] = {.lex_state = 0}, - [1082] = {.lex_state = 0}, + [1078] = {.lex_state = 0, .external_lex_state = 6}, + [1079] = {.lex_state = 0}, + [1080] = {.lex_state = 0, .external_lex_state = 6}, + [1081] = {.lex_state = 14}, + [1082] = {.lex_state = 14}, [1083] = {.lex_state = 0, .external_lex_state = 6}, [1084] = {.lex_state = 0}, - [1085] = {.lex_state = 14}, - [1086] = {.lex_state = 0}, + [1085] = {.lex_state = 0}, + [1086] = {.lex_state = 0, .external_lex_state = 6}, [1087] = {.lex_state = 0}, - [1088] = {.lex_state = 14}, - [1089] = {.lex_state = 14}, + [1088] = {.lex_state = 0, .external_lex_state = 6}, + [1089] = {.lex_state = 0, .external_lex_state = 6}, [1090] = {.lex_state = 0}, - [1091] = {.lex_state = 14}, + [1091] = {.lex_state = 0}, [1092] = {.lex_state = 0, .external_lex_state = 6}, - [1093] = {.lex_state = 0}, + [1093] = {.lex_state = 14}, [1094] = {.lex_state = 0}, - [1095] = {.lex_state = 0, .external_lex_state = 6}, - [1096] = {.lex_state = 14}, - [1097] = {.lex_state = 0, .external_lex_state = 6}, - [1098] = {.lex_state = 0, .external_lex_state = 6}, - [1099] = {.lex_state = 0, .external_lex_state = 6}, - [1100] = {.lex_state = 0}, - [1101] = {.lex_state = 14, .external_lex_state = 2}, - [1102] = {.lex_state = 14}, - [1103] = {.lex_state = 0}, - [1104] = {.lex_state = 14}, + [1095] = {.lex_state = 14}, + [1096] = {.lex_state = 0}, + [1097] = {.lex_state = 0}, + [1098] = {.lex_state = 14}, + [1099] = {.lex_state = 0}, + [1100] = {.lex_state = 14}, + [1101] = {.lex_state = 14}, + [1102] = {.lex_state = 0}, + [1103] = {.lex_state = 0, .external_lex_state = 6}, + [1104] = {.lex_state = 0, .external_lex_state = 6}, [1105] = {.lex_state = 0}, [1106] = {.lex_state = 0}, - [1107] = {.lex_state = 0, .external_lex_state = 6}, - [1108] = {.lex_state = 16}, + [1107] = {.lex_state = 0}, + [1108] = {.lex_state = 14}, [1109] = {.lex_state = 0}, - [1110] = {.lex_state = 0}, - [1111] = {.lex_state = 0, .external_lex_state = 6}, - [1112] = {.lex_state = 0, .external_lex_state = 6}, + [1110] = {.lex_state = 14}, + [1111] = {.lex_state = 14}, + [1112] = {.lex_state = 0}, [1113] = {.lex_state = 0}, - [1114] = {.lex_state = 14}, + [1114] = {.lex_state = 0, .external_lex_state = 6}, [1115] = {.lex_state = 14}, [1116] = {.lex_state = 0, .external_lex_state = 6}, - [1117] = {.lex_state = 0, .external_lex_state = 6}, + [1117] = {.lex_state = 14}, [1118] = {.lex_state = 0}, - [1119] = {.lex_state = 0}, - [1120] = {.lex_state = 0}, - [1121] = {.lex_state = 0, .external_lex_state = 6}, - [1122] = {.lex_state = 0, .external_lex_state = 6}, - [1123] = {.lex_state = 14}, - [1124] = {.lex_state = 0, .external_lex_state = 6}, - [1125] = {.lex_state = 0}, + [1119] = {.lex_state = 0, .external_lex_state = 6}, + [1120] = {.lex_state = 0, .external_lex_state = 6}, + [1121] = {.lex_state = 0}, + [1122] = {.lex_state = 16}, + [1123] = {.lex_state = 0}, + [1124] = {.lex_state = 16}, + [1125] = {.lex_state = 0, .external_lex_state = 6}, [1126] = {.lex_state = 0, .external_lex_state = 6}, [1127] = {.lex_state = 0, .external_lex_state = 6}, - [1128] = {.lex_state = 0, .external_lex_state = 6}, + [1128] = {.lex_state = 14}, [1129] = {.lex_state = 0}, [1130] = {.lex_state = 0}, [1131] = {.lex_state = 0}, - [1132] = {.lex_state = 0}, - [1133] = {.lex_state = 0, .external_lex_state = 6}, - [1134] = {.lex_state = 14}, - [1135] = {.lex_state = 14}, - [1136] = {.lex_state = 14}, - [1137] = {.lex_state = 0}, - [1138] = {.lex_state = 16}, + [1132] = {.lex_state = 0, .external_lex_state = 6}, + [1133] = {.lex_state = 0}, + [1134] = {.lex_state = 14, .external_lex_state = 2}, + [1135] = {.lex_state = 0, .external_lex_state = 6}, + [1136] = {.lex_state = 0, .external_lex_state = 6}, + [1137] = {.lex_state = 0, .external_lex_state = 6}, + [1138] = {.lex_state = 14}, [1139] = {.lex_state = 14}, - [1140] = {.lex_state = 14}, - [1141] = {.lex_state = 14}, - [1142] = {.lex_state = 14}, + [1140] = {.lex_state = 0}, + [1141] = {.lex_state = 0}, + [1142] = {.lex_state = 0, .external_lex_state = 6}, [1143] = {.lex_state = 14}, - [1144] = {.lex_state = 0, .external_lex_state = 6}, - [1145] = {.lex_state = 0}, + [1144] = {.lex_state = 14}, + [1145] = {.lex_state = 14}, [1146] = {.lex_state = 0}, [1147] = {.lex_state = 0}, [1148] = {.lex_state = 14}, - [1149] = {.lex_state = 0, .external_lex_state = 6}, + [1149] = {.lex_state = 14}, [1150] = {.lex_state = 0}, - [1151] = {.lex_state = 0}, - [1152] = {.lex_state = 0}, - [1153] = {.lex_state = 0, .external_lex_state = 6}, - [1154] = {.lex_state = 14}, + [1151] = {.lex_state = 14}, + [1152] = {.lex_state = 0, .external_lex_state = 6}, + [1153] = {.lex_state = 0}, + [1154] = {.lex_state = 0}, [1155] = {.lex_state = 0}, [1156] = {.lex_state = 0}, - [1157] = {.lex_state = 0}, - [1158] = {.lex_state = 0, .external_lex_state = 6}, + [1157] = {.lex_state = 14}, + [1158] = {.lex_state = 0}, [1159] = {.lex_state = 0}, [1160] = {.lex_state = 0}, - [1161] = {.lex_state = 14}, - [1162] = {.lex_state = 0}, + [1161] = {.lex_state = 0, .external_lex_state = 6}, + [1162] = {.lex_state = 0, .external_lex_state = 6}, [1163] = {.lex_state = 0}, [1164] = {.lex_state = 0}, [1165] = {.lex_state = 0}, [1166] = {.lex_state = 0}, - [1167] = {.lex_state = 0}, + [1167] = {.lex_state = 0, .external_lex_state = 6}, [1168] = {.lex_state = 14}, - [1169] = {.lex_state = 0}, - [1170] = {.lex_state = 0}, - [1171] = {.lex_state = 14}, + [1169] = {.lex_state = 0, .external_lex_state = 6}, + [1170] = {.lex_state = 14}, + [1171] = {.lex_state = 0}, [1172] = {.lex_state = 0}, [1173] = {.lex_state = 0}, [1174] = {.lex_state = 0}, - [1175] = {.lex_state = 8}, + [1175] = {.lex_state = 0, .external_lex_state = 6}, [1176] = {.lex_state = 0}, [1177] = {.lex_state = 0}, - [1178] = {.lex_state = 0, .external_lex_state = 6}, + [1178] = {.lex_state = 0}, [1179] = {.lex_state = 0}, - [1180] = {.lex_state = 8}, + [1180] = {.lex_state = 14}, [1181] = {.lex_state = 14}, - [1182] = {.lex_state = 0, .external_lex_state = 6}, - [1183] = {.lex_state = 0}, - [1184] = {.lex_state = 0}, + [1182] = {.lex_state = 0}, + [1183] = {.lex_state = 14}, + [1184] = {.lex_state = 14}, [1185] = {.lex_state = 0}, [1186] = {.lex_state = 0}, - [1187] = {.lex_state = 0}, - [1188] = {.lex_state = 0}, - [1189] = {.lex_state = 14}, - [1190] = {.lex_state = 0}, + [1187] = {.lex_state = 0, .external_lex_state = 6}, + [1188] = {.lex_state = 0, .external_lex_state = 6}, + [1189] = {.lex_state = 0}, + [1190] = {.lex_state = 14}, [1191] = {.lex_state = 14}, - [1192] = {.lex_state = 14}, - [1193] = {.lex_state = 0, .external_lex_state = 6}, - [1194] = {.lex_state = 0}, - [1195] = {.lex_state = 14}, + [1192] = {.lex_state = 0}, + [1193] = {.lex_state = 14}, + [1194] = {.lex_state = 14}, + [1195] = {.lex_state = 0}, [1196] = {.lex_state = 0}, - [1197] = {.lex_state = 0}, - [1198] = {.lex_state = 14}, + [1197] = {.lex_state = 14}, + [1198] = {.lex_state = 0, .external_lex_state = 6}, [1199] = {.lex_state = 0}, - [1200] = {.lex_state = 14}, + [1200] = {.lex_state = 0, .external_lex_state = 6}, [1201] = {.lex_state = 0}, [1202] = {.lex_state = 0}, - [1203] = {.lex_state = 14}, - [1204] = {.lex_state = 14}, - [1205] = {.lex_state = 0}, - [1206] = {.lex_state = 14}, + [1203] = {.lex_state = 0}, + [1204] = {.lex_state = 0}, + [1205] = {.lex_state = 0, .external_lex_state = 6}, + [1206] = {.lex_state = 16}, [1207] = {.lex_state = 0}, [1208] = {.lex_state = 0}, - [1209] = {.lex_state = 14}, - [1210] = {.lex_state = 0}, - [1211] = {.lex_state = 0}, - [1212] = {.lex_state = 16}, + [1209] = {.lex_state = 8}, + [1210] = {.lex_state = 0, .external_lex_state = 6}, + [1211] = {.lex_state = 0, .external_lex_state = 6}, + [1212] = {.lex_state = 0}, [1213] = {.lex_state = 0}, [1214] = {.lex_state = 0}, [1215] = {.lex_state = 0}, [1216] = {.lex_state = 0}, - [1217] = {.lex_state = 8}, + [1217] = {.lex_state = 0}, [1218] = {.lex_state = 0}, - [1219] = {.lex_state = 8}, - [1220] = {.lex_state = 0, .external_lex_state = 6}, + [1219] = {.lex_state = 0}, + [1220] = {.lex_state = 0}, [1221] = {.lex_state = 0}, - [1222] = {.lex_state = 0}, + [1222] = {.lex_state = 8}, [1223] = {.lex_state = 0}, [1224] = {.lex_state = 0}, - [1225] = {.lex_state = 14}, + [1225] = {.lex_state = 0}, [1226] = {.lex_state = 0}, - [1227] = {.lex_state = 0, .external_lex_state = 6}, - [1228] = {.lex_state = 0, .external_lex_state = 6}, + [1227] = {.lex_state = 0}, + [1228] = {.lex_state = 0}, [1229] = {.lex_state = 0}, [1230] = {.lex_state = 0}, - [1231] = {.lex_state = 14}, + [1231] = {.lex_state = 0}, [1232] = {.lex_state = 0}, [1233] = {.lex_state = 0}, - [1234] = {.lex_state = 0}, - [1235] = {.lex_state = 14}, + [1234] = {.lex_state = 14}, + [1235] = {.lex_state = 0}, [1236] = {.lex_state = 0}, [1237] = {.lex_state = 0}, [1238] = {.lex_state = 0}, - [1239] = {.lex_state = 0}, + [1239] = {.lex_state = 14}, [1240] = {.lex_state = 0}, - [1241] = {.lex_state = 0, .external_lex_state = 6}, - [1242] = {.lex_state = 0}, - [1243] = {.lex_state = 0, .external_lex_state = 6}, - [1244] = {.lex_state = 0, .external_lex_state = 6}, + [1241] = {.lex_state = 0}, + [1242] = {.lex_state = 0, .external_lex_state = 6}, + [1243] = {.lex_state = 0}, + [1244] = {.lex_state = 0}, [1245] = {.lex_state = 0}, - [1246] = {.lex_state = 0}, + [1246] = {.lex_state = 0, .external_lex_state = 6}, [1247] = {.lex_state = 0}, - [1248] = {.lex_state = 0}, - [1249] = {.lex_state = 14}, - [1250] = {.lex_state = 14}, - [1251] = {.lex_state = 0, .external_lex_state = 6}, + [1248] = {.lex_state = 8}, + [1249] = {.lex_state = 0}, + [1250] = {.lex_state = 0}, + [1251] = {.lex_state = 14}, [1252] = {.lex_state = 0}, - [1253] = {.lex_state = 0, .external_lex_state = 6}, - [1254] = {.lex_state = 14}, - [1255] = {.lex_state = 14}, - [1256] = {.lex_state = 14}, - [1257] = {.lex_state = 0}, - [1258] = {.lex_state = 0, .external_lex_state = 6}, - [1259] = {.lex_state = 8}, + [1253] = {.lex_state = 0}, + [1254] = {.lex_state = 0}, + [1255] = {.lex_state = 0}, + [1256] = {.lex_state = 0}, + [1257] = {.lex_state = 14}, + [1258] = {.lex_state = 8}, + [1259] = {.lex_state = 14}, [1260] = {.lex_state = 14}, - [1261] = {.lex_state = 0}, - [1262] = {.lex_state = 14}, + [1261] = {.lex_state = 14}, + [1262] = {.lex_state = 0}, [1263] = {.lex_state = 0}, - [1264] = {.lex_state = 0, .external_lex_state = 6}, - [1265] = {.lex_state = 0}, + [1264] = {.lex_state = 0}, + [1265] = {.lex_state = 14}, [1266] = {.lex_state = 0}, - [1267] = {.lex_state = 0}, - [1268] = {.lex_state = 0, .external_lex_state = 6}, + [1267] = {.lex_state = 14}, + [1268] = {.lex_state = 0}, [1269] = {.lex_state = 0}, - [1270] = {.lex_state = 0}, + [1270] = {.lex_state = 0, .external_lex_state = 6}, [1271] = {.lex_state = 0}, [1272] = {.lex_state = 0}, - [1273] = {.lex_state = 0}, - [1274] = {.lex_state = 0}, - [1275] = {.lex_state = 0}, - [1276] = {.lex_state = 0}, + [1273] = {.lex_state = 14}, + [1274] = {.lex_state = 14}, + [1275] = {.lex_state = 14}, + [1276] = {.lex_state = 14}, [1277] = {.lex_state = 0}, [1278] = {.lex_state = 0}, [1279] = {.lex_state = 0}, [1280] = {.lex_state = 0}, - [1281] = {.lex_state = 0}, - [1282] = {.lex_state = 0}, + [1281] = {.lex_state = 0, .external_lex_state = 6}, + [1282] = {.lex_state = 8}, [1283] = {.lex_state = 0}, [1284] = {.lex_state = 0}, [1285] = {.lex_state = 0}, [1286] = {.lex_state = 0}, [1287] = {.lex_state = 0}, - [1288] = {.lex_state = 17}, - [1289] = {.lex_state = 0}, - [1290] = {.lex_state = 0}, + [1288] = {.lex_state = 0, .external_lex_state = 6}, + [1289] = {.lex_state = 0, .external_lex_state = 6}, + [1290] = {.lex_state = 0, .external_lex_state = 6}, [1291] = {.lex_state = 0, .external_lex_state = 6}, - [1292] = {.lex_state = 0, .external_lex_state = 6}, + [1292] = {.lex_state = 14}, [1293] = {.lex_state = 0, .external_lex_state = 6}, - [1294] = {.lex_state = 0, .external_lex_state = 6}, - [1295] = {.lex_state = 14}, + [1294] = {.lex_state = 0}, + [1295] = {.lex_state = 0}, [1296] = {.lex_state = 0}, - [1297] = {.lex_state = 0, .external_lex_state = 6}, - [1298] = {.lex_state = 0, .external_lex_state = 6}, - [1299] = {.lex_state = 17}, + [1297] = {.lex_state = 0}, + [1298] = {.lex_state = 17}, + [1299] = {.lex_state = 0}, [1300] = {.lex_state = 0}, [1301] = {.lex_state = 0, .external_lex_state = 6}, - [1302] = {.lex_state = 17}, + [1302] = {.lex_state = 0}, [1303] = {.lex_state = 0}, - [1304] = {.lex_state = 0, .external_lex_state = 6}, - [1305] = {.lex_state = 0, .external_lex_state = 6}, + [1304] = {.lex_state = 0}, + [1305] = {.lex_state = 17}, [1306] = {.lex_state = 0}, - [1307] = {.lex_state = 17}, - [1308] = {.lex_state = 0}, + [1307] = {.lex_state = 0}, + [1308] = {.lex_state = 17}, [1309] = {.lex_state = 0}, - [1310] = {.lex_state = 0}, + [1310] = {.lex_state = 17}, [1311] = {.lex_state = 0}, - [1312] = {.lex_state = 0}, + [1312] = {.lex_state = 17}, [1313] = {.lex_state = 0}, [1314] = {.lex_state = 0}, - [1315] = {.lex_state = 0, .external_lex_state = 6}, - [1316] = {.lex_state = 0, .external_lex_state = 6}, - [1317] = {.lex_state = 0}, + [1315] = {.lex_state = 17}, + [1316] = {.lex_state = 0}, + [1317] = {.lex_state = 17}, [1318] = {.lex_state = 0}, [1319] = {.lex_state = 0}, [1320] = {.lex_state = 0}, [1321] = {.lex_state = 0}, - [1322] = {.lex_state = 0}, + [1322] = {.lex_state = 0, .external_lex_state = 6}, [1323] = {.lex_state = 0}, [1324] = {.lex_state = 17}, [1325] = {.lex_state = 0}, - [1326] = {.lex_state = 0}, + [1326] = {.lex_state = 0, .external_lex_state = 6}, [1327] = {.lex_state = 0, .external_lex_state = 6}, - [1328] = {.lex_state = 17}, - [1329] = {.lex_state = 17}, - [1330] = {.lex_state = 17}, - [1331] = {.lex_state = 17}, + [1328] = {.lex_state = 0, .external_lex_state = 6}, + [1329] = {.lex_state = 0}, + [1330] = {.lex_state = 0, .external_lex_state = 6}, + [1331] = {.lex_state = 0}, [1332] = {.lex_state = 0}, [1333] = {.lex_state = 0}, - [1334] = {.lex_state = 17}, + [1334] = {.lex_state = 0}, [1335] = {.lex_state = 0}, [1336] = {.lex_state = 0}, - [1337] = {.lex_state = 0, .external_lex_state = 6}, + [1337] = {.lex_state = 0}, [1338] = {.lex_state = 0, .external_lex_state = 6}, - [1339] = {.lex_state = 0}, - [1340] = {.lex_state = 0, .external_lex_state = 6}, + [1339] = {.lex_state = 0, .external_lex_state = 6}, + [1340] = {.lex_state = 0}, [1341] = {.lex_state = 0, .external_lex_state = 6}, - [1342] = {.lex_state = 0, .external_lex_state = 6}, + [1342] = {.lex_state = 17}, [1343] = {.lex_state = 0}, - [1344] = {.lex_state = 0}, + [1344] = {.lex_state = 0, .external_lex_state = 6}, [1345] = {.lex_state = 0}, - [1346] = {.lex_state = 0}, - [1347] = {.lex_state = 0}, + [1346] = {.lex_state = 0, .external_lex_state = 6}, + [1347] = {.lex_state = 16}, [1348] = {.lex_state = 0}, - [1349] = {.lex_state = 0}, - [1350] = {.lex_state = 0, .external_lex_state = 6}, + [1349] = {.lex_state = 17}, + [1350] = {.lex_state = 0}, [1351] = {.lex_state = 0}, - [1352] = {.lex_state = 16}, - [1353] = {.lex_state = 0}, - [1354] = {.lex_state = 14}, - [1355] = {.lex_state = 0}, + [1352] = {.lex_state = 0, .external_lex_state = 6}, + [1353] = {.lex_state = 0, .external_lex_state = 6}, + [1354] = {.lex_state = 0}, + [1355] = {.lex_state = 14}, [1356] = {.lex_state = 14}, - [1357] = {.lex_state = 14}, + [1357] = {.lex_state = 0}, [1358] = {.lex_state = 14}, [1359] = {.lex_state = 0}, [1360] = {.lex_state = 0}, [1361] = {.lex_state = 0}, [1362] = {.lex_state = 0}, [1363] = {.lex_state = 0}, - [1364] = {.lex_state = 0}, + [1364] = {.lex_state = 14}, [1365] = {.lex_state = 14}, [1366] = {.lex_state = 0}, [1367] = {.lex_state = 0}, [1368] = {.lex_state = 0}, [1369] = {.lex_state = 0}, - [1370] = {.lex_state = 14}, + [1370] = {.lex_state = 0}, [1371] = {.lex_state = 0}, [1372] = {.lex_state = 0}, - [1373] = {.lex_state = 0}, + [1373] = {.lex_state = 14}, [1374] = {.lex_state = 0}, - [1375] = {.lex_state = 0}, + [1375] = {.lex_state = 14}, [1376] = {.lex_state = 0}, [1377] = {.lex_state = 0}, [1378] = {.lex_state = 0}, [1379] = {.lex_state = 0}, [1380] = {.lex_state = 0}, [1381] = {.lex_state = 0}, - [1382] = {.lex_state = 14}, - [1383] = {.lex_state = 0}, - [1384] = {.lex_state = 14}, - [1385] = {.lex_state = 14}, + [1382] = {.lex_state = 0}, + [1383] = {.lex_state = 14}, + [1384] = {.lex_state = 0}, + [1385] = {.lex_state = 0}, [1386] = {.lex_state = 0}, [1387] = {.lex_state = 0}, [1388] = {.lex_state = 0}, [1389] = {.lex_state = 0}, [1390] = {.lex_state = 0}, - [1391] = {.lex_state = 14}, - [1392] = {.lex_state = 0}, - [1393] = {.lex_state = 14}, - [1394] = {.lex_state = 0}, + [1391] = {.lex_state = 0}, + [1392] = {.lex_state = 14}, + [1393] = {.lex_state = 0}, + [1394] = {.lex_state = 14}, [1395] = {.lex_state = 0}, - [1396] = {.lex_state = 0}, - [1397] = {.lex_state = 0}, + [1396] = {.lex_state = 14}, + [1397] = {.lex_state = 14}, [1398] = {.lex_state = 0}, - [1399] = {.lex_state = 0}, - [1400] = {.lex_state = 0}, + [1399] = {.lex_state = 14}, + [1400] = {.lex_state = 14}, [1401] = {.lex_state = 0}, [1402] = {.lex_state = 14}, [1403] = {.lex_state = 14}, [1404] = {.lex_state = 14}, - [1405] = {.lex_state = 0}, + [1405] = {.lex_state = 14}, [1406] = {.lex_state = 0}, [1407] = {.lex_state = 0}, - [1408] = {.lex_state = 14}, + [1408] = {.lex_state = 0}, [1409] = {.lex_state = 0}, - [1410] = {.lex_state = 14}, + [1410] = {.lex_state = 0}, [1411] = {.lex_state = 14}, [1412] = {.lex_state = 14}, [1413] = {.lex_state = 0}, - [1414] = {.lex_state = 14}, - [1415] = {.lex_state = 0}, - [1416] = {.lex_state = 14}, + [1414] = {.lex_state = 0}, + [1415] = {.lex_state = 14}, + [1416] = {.lex_state = 0}, [1417] = {.lex_state = 0}, [1418] = {.lex_state = 0}, - [1419] = {.lex_state = 14}, - [1420] = {.lex_state = 0}, - [1421] = {.lex_state = 14}, + [1419] = {.lex_state = 0}, + [1420] = {.lex_state = 14}, + [1421] = {.lex_state = 0}, [1422] = {.lex_state = 14}, [1423] = {.lex_state = 14}, - [1424] = {.lex_state = 0}, + [1424] = {.lex_state = 14}, [1425] = {.lex_state = 0}, [1426] = {.lex_state = 0}, [1427] = {.lex_state = 0}, - [1428] = {.lex_state = 14}, - [1429] = {.lex_state = 0}, - [1430] = {.lex_state = 14}, + [1428] = {.lex_state = 0}, + [1429] = {.lex_state = 14}, + [1430] = {.lex_state = 0}, [1431] = {.lex_state = 14}, - [1432] = {.lex_state = 14}, + [1432] = {.lex_state = 0}, [1433] = {.lex_state = 14}, [1434] = {.lex_state = 14}, [1435] = {.lex_state = 14}, - [1436] = {.lex_state = 14}, + [1436] = {.lex_state = 0}, [1437] = {.lex_state = 0}, [1438] = {.lex_state = 14}, - [1439] = {.lex_state = 0}, - [1440] = {.lex_state = 0}, - [1441] = {.lex_state = 14}, + [1439] = {.lex_state = 14}, + [1440] = {.lex_state = 14}, + [1441] = {.lex_state = 0}, [1442] = {.lex_state = 0}, [1443] = {.lex_state = 0}, [1444] = {.lex_state = 14}, [1445] = {.lex_state = 0}, [1446] = {.lex_state = 0}, - [1447] = {.lex_state = 14}, - [1448] = {.lex_state = 0}, - [1449] = {.lex_state = 14}, + [1447] = {.lex_state = 0}, + [1448] = {.lex_state = 14}, + [1449] = {.lex_state = 0}, [1450] = {.lex_state = 0}, [1451] = {.lex_state = 0}, [1452] = {.lex_state = 0}, @@ -9136,16 +7550,16 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [1454] = {.lex_state = 0}, [1455] = {.lex_state = 0}, [1456] = {.lex_state = 0}, - [1457] = {.lex_state = 0}, - [1458] = {.lex_state = 0}, - [1459] = {.lex_state = 0}, + [1457] = {.lex_state = 14}, + [1458] = {.lex_state = 14}, + [1459] = {.lex_state = 14}, [1460] = {.lex_state = 0}, [1461] = {.lex_state = 0}, [1462] = {.lex_state = 0}, [1463] = {.lex_state = 0}, [1464] = {.lex_state = 0}, [1465] = {.lex_state = 0}, - [1466] = {.lex_state = 0}, + [1466] = {.lex_state = 14}, [1467] = {.lex_state = 14}, [1468] = {.lex_state = 0}, [1469] = {.lex_state = 0}, @@ -9155,8 +7569,8 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [1473] = {.lex_state = 0}, [1474] = {.lex_state = 0}, [1475] = {.lex_state = 0}, - [1476] = {.lex_state = 14}, - [1477] = {.lex_state = 14}, + [1476] = {.lex_state = 0}, + [1477] = {.lex_state = 0}, [1478] = {.lex_state = 0}, }; @@ -9319,73 +7733,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_end] = ACTIONS(1), }, [1] = { - [sym_module] = STATE(1390), - [sym__statement] = STATE(61), - [sym__simple_statements] = STATE(61), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_class_definition] = STATE(61), - [sym_decorated_definition] = STATE(61), - [sym_decorator] = STATE(957), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_module] = STATE(1455), + [sym__statement] = STATE(60), + [sym__simple_statements] = STATE(60), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_class_definition] = STATE(60), + [sym_decorated_definition] = STATE(60), + [sym_decorator] = STATE(926), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(61), - [aux_sym_decorated_definition_repeat1] = STATE(957), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(60), + [aux_sym_decorated_definition_repeat1] = STATE(926), [ts_builtin_sym_end] = ACTIONS(5), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), @@ -9434,73 +7848,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [2] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(548), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(485), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -9549,73 +7963,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [3] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(502), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(474), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -9660,77 +8074,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(103), [sym__string_start] = ACTIONS(81), }, [4] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(507), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(522), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -9775,77 +8189,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(103), [sym__string_start] = ACTIONS(81), }, [5] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(523), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(520), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -9890,77 +8304,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(103), [sym__string_start] = ACTIONS(81), }, [6] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(551), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(315), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10009,73 +8423,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [7] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(553), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(400), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10120,77 +8534,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(103), [sym__string_start] = ACTIONS(81), }, [8] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(555), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(277), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10235,77 +8649,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(103), [sym__string_start] = ACTIONS(81), }, [9] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(465), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(452), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10350,77 +8764,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(103), [sym__string_start] = ACTIONS(81), }, [10] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(361), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(479), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10465,77 +8879,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(103), [sym__string_start] = ACTIONS(81), }, [11] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(322), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(477), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10580,77 +8994,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(103), [sym__string_start] = ACTIONS(81), }, [12] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(489), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(475), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10695,77 +9109,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(103), [sym__string_start] = ACTIONS(81), }, [13] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(509), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(336), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10810,77 +9224,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(103), [sym__string_start] = ACTIONS(81), }, [14] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(515), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(333), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -10925,77 +9339,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(103), [sym__string_start] = ACTIONS(81), }, [15] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(454), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(481), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11040,77 +9454,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(103), [sym__string_start] = ACTIONS(81), }, [16] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(366), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(462), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11155,77 +9569,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(103), [sym__string_start] = ACTIONS(81), }, [17] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(528), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(557), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11270,77 +9684,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(103), [sym__string_start] = ACTIONS(81), }, [18] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(325), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(436), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11385,77 +9799,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(103), [sym__string_start] = ACTIONS(81), }, [19] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(456), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(332), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11500,77 +9914,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(103), [sym__string_start] = ACTIONS(81), }, [20] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(534), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(958), + [sym_block] = STATE(997), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11615,77 +10029,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), }, [21] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(270), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(532), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11734,73 +10148,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [22] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(371), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(449), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11845,77 +10259,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(103), [sym__string_start] = ACTIONS(81), }, [23] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(539), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(456), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -11960,77 +10374,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(103), [sym__string_start] = ACTIONS(81), }, [24] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(326), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(279), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12079,73 +10493,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [25] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(446), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(418), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12194,73 +10608,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [26] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(547), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(490), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12305,77 +10719,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(103), [sym__string_start] = ACTIONS(81), }, [27] = { - [sym__statement] = STATE(62), - [sym__simple_statements] = STATE(62), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(62), - [sym_decorated_definition] = STATE(62), - [sym_decorator] = STATE(932), - [sym_block] = STATE(1002), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(500), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(62), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12420,77 +10834,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), }, [28] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(329), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(506), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12539,73 +10953,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [29] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(313), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(538), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12654,73 +11068,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [30] = { - [sym__statement] = STATE(62), - [sym__simple_statements] = STATE(62), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(62), - [sym_decorated_definition] = STATE(62), - [sym_decorator] = STATE(932), - [sym_block] = STATE(975), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(548), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(62), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12765,77 +11179,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), }, [31] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(255), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(553), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12880,77 +11294,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [32] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(391), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(555), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -12995,77 +11409,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [33] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(476), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(539), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13110,77 +11524,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [34] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(478), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(549), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13225,77 +11639,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [35] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(483), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(482), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13340,77 +11754,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [36] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(491), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(419), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13455,77 +11869,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [37] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(493), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(318), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13570,77 +11984,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [38] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(495), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(530), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13685,77 +12099,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [39] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(498), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(348), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13800,77 +12214,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [40] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(397), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(487), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -13915,77 +12329,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [41] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(335), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(344), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14030,77 +12444,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [42] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(504), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(464), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14145,77 +12559,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [43] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(458), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(466), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14260,77 +12674,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [44] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(508), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(473), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14375,77 +12789,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [45] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(451), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(447), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14490,77 +12904,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [46] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(401), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(441), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14605,77 +13019,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [47] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(513), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(542), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14720,77 +13134,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [48] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(338), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(329), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14835,77 +13249,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [49] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(452), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(446), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -14950,77 +13364,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [50] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(517), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(339), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15065,77 +13479,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [51] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(404), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(533), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15180,77 +13594,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [52] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(520), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(552), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15295,77 +13709,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [53] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(339), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(65), + [sym__simple_statements] = STATE(65), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(65), + [sym_decorated_definition] = STATE(65), + [sym_decorator] = STATE(958), + [sym_block] = STATE(996), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(65), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15414,73 +13828,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [54] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(455), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(391), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15525,77 +13939,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [55] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(524), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(535), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15640,77 +14054,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [56] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(525), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(323), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15755,77 +14169,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [57] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(342), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(454), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15870,77 +14284,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(105), + [sym__dedent] = ACTIONS(101), [sym__string_start] = ACTIONS(81), }, [58] = { - [sym__statement] = STATE(64), - [sym__simple_statements] = STATE(64), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(64), - [sym_decorated_definition] = STATE(64), - [sym_decorator] = STATE(932), - [sym_block] = STATE(343), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(63), + [sym__simple_statements] = STATE(63), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(63), + [sym_decorated_definition] = STATE(63), + [sym_decorator] = STATE(958), + [sym_block] = STATE(398), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(64), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(63), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -15985,77 +14399,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(105), + [sym__dedent] = ACTIONS(103), [sym__string_start] = ACTIONS(81), }, [59] = { - [sym__statement] = STATE(60), - [sym__simple_statements] = STATE(60), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(60), - [sym_decorated_definition] = STATE(60), - [sym_decorator] = STATE(932), - [sym_block] = STATE(347), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(61), + [sym__simple_statements] = STATE(61), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(61), + [sym_decorated_definition] = STATE(61), + [sym_decorator] = STATE(958), + [sym_block] = STATE(316), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(60), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(61), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16104,72 +14518,73 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [sym__string_start] = ACTIONS(81), }, [60] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(932), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(926), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(926), + [ts_builtin_sym_end] = ACTIONS(107), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16183,24 +14598,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), @@ -16214,77 +14629,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(107), [sym__string_start] = ACTIONS(81), }, [61] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(957), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(958), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(957), - [ts_builtin_sym_end] = ACTIONS(109), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16298,24 +14711,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(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_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(55), + [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(65), + [anon_sym_class] = ACTIONS(99), [anon_sym_AT] = ACTIONS(67), [anon_sym_not] = ACTIONS(69), [anon_sym_TILDE] = ACTIONS(47), @@ -16329,75 +14742,190 @@ 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__string_start] = ACTIONS(81), }, [62] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(932), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(958), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(958), + [sym_identifier] = ACTIONS(111), + [anon_sym_import] = ACTIONS(114), + [anon_sym_from] = ACTIONS(117), + [anon_sym_LPAREN] = ACTIONS(120), + [anon_sym_STAR] = ACTIONS(123), + [anon_sym_print] = ACTIONS(126), + [anon_sym_assert] = ACTIONS(129), + [anon_sym_return] = ACTIONS(132), + [anon_sym_del] = ACTIONS(135), + [anon_sym_raise] = ACTIONS(138), + [anon_sym_pass] = ACTIONS(141), + [anon_sym_break] = ACTIONS(144), + [anon_sym_continue] = ACTIONS(147), + [anon_sym_if] = ACTIONS(150), + [anon_sym_async] = ACTIONS(153), + [anon_sym_for] = ACTIONS(156), + [anon_sym_while] = ACTIONS(159), + [anon_sym_try] = ACTIONS(162), + [anon_sym_with] = ACTIONS(165), + [anon_sym_match] = ACTIONS(168), + [anon_sym_DASH] = ACTIONS(171), + [anon_sym_PLUS] = ACTIONS(171), + [anon_sym_LBRACK] = ACTIONS(174), + [anon_sym_LBRACE] = ACTIONS(177), + [anon_sym_STAR_STAR] = ACTIONS(180), + [anon_sym_def] = ACTIONS(183), + [anon_sym_global] = ACTIONS(186), + [anon_sym_nonlocal] = ACTIONS(189), + [anon_sym_exec] = ACTIONS(192), + [anon_sym_type] = ACTIONS(195), + [anon_sym_class] = ACTIONS(198), + [anon_sym_AT] = ACTIONS(201), + [anon_sym_not] = ACTIONS(204), + [anon_sym_TILDE] = ACTIONS(171), + [anon_sym_lambda] = ACTIONS(207), + [anon_sym_yield] = ACTIONS(210), + [sym_ellipsis] = ACTIONS(213), + [sym_integer] = ACTIONS(216), + [sym_float] = ACTIONS(213), + [anon_sym_await] = ACTIONS(219), + [sym_true] = ACTIONS(216), + [sym_false] = ACTIONS(216), + [sym_none] = ACTIONS(216), + [sym_comment] = ACTIONS(3), + [sym__dedent] = ACTIONS(222), + [sym__string_start] = ACTIONS(224), + }, + [63] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(958), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), + [sym_string] = STATE(693), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16442,190 +14970,190 @@ 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(227), [sym__string_start] = ACTIONS(81), }, - [63] = { - [sym__statement] = STATE(63), - [sym__simple_statements] = STATE(63), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_class_definition] = STATE(63), - [sym_decorated_definition] = STATE(63), - [sym_decorator] = STATE(957), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [64] = { + [sym__statement] = STATE(64), + [sym__simple_statements] = STATE(64), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_class_definition] = STATE(64), + [sym_decorated_definition] = STATE(64), + [sym_decorator] = STATE(926), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(63), - [aux_sym_decorated_definition_repeat1] = STATE(957), - [ts_builtin_sym_end] = ACTIONS(113), - [sym_identifier] = ACTIONS(115), - [anon_sym_import] = ACTIONS(118), - [anon_sym_from] = ACTIONS(121), - [anon_sym_LPAREN] = ACTIONS(124), - [anon_sym_STAR] = ACTIONS(127), - [anon_sym_print] = ACTIONS(130), - [anon_sym_assert] = ACTIONS(133), - [anon_sym_return] = ACTIONS(136), - [anon_sym_del] = ACTIONS(139), - [anon_sym_raise] = ACTIONS(142), - [anon_sym_pass] = ACTIONS(145), - [anon_sym_break] = ACTIONS(148), - [anon_sym_continue] = ACTIONS(151), - [anon_sym_if] = ACTIONS(154), - [anon_sym_async] = ACTIONS(157), - [anon_sym_for] = ACTIONS(160), - [anon_sym_while] = ACTIONS(163), - [anon_sym_try] = ACTIONS(166), - [anon_sym_with] = ACTIONS(169), - [anon_sym_match] = ACTIONS(172), - [anon_sym_DASH] = ACTIONS(175), - [anon_sym_PLUS] = ACTIONS(175), - [anon_sym_LBRACK] = ACTIONS(178), - [anon_sym_LBRACE] = ACTIONS(181), - [anon_sym_STAR_STAR] = ACTIONS(184), - [anon_sym_def] = ACTIONS(187), - [anon_sym_global] = ACTIONS(190), - [anon_sym_nonlocal] = ACTIONS(193), - [anon_sym_exec] = ACTIONS(196), - [anon_sym_type] = ACTIONS(199), - [anon_sym_class] = ACTIONS(202), - [anon_sym_AT] = ACTIONS(205), - [anon_sym_not] = ACTIONS(208), - [anon_sym_TILDE] = ACTIONS(175), - [anon_sym_lambda] = ACTIONS(211), - [anon_sym_yield] = ACTIONS(214), - [sym_ellipsis] = ACTIONS(217), - [sym_integer] = ACTIONS(220), - [sym_float] = ACTIONS(217), - [anon_sym_await] = ACTIONS(223), - [sym_true] = ACTIONS(220), - [sym_false] = ACTIONS(220), - [sym_none] = ACTIONS(220), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(64), + [aux_sym_decorated_definition_repeat1] = STATE(926), + [ts_builtin_sym_end] = ACTIONS(222), + [sym_identifier] = ACTIONS(111), + [anon_sym_import] = ACTIONS(114), + [anon_sym_from] = ACTIONS(117), + [anon_sym_LPAREN] = ACTIONS(120), + [anon_sym_STAR] = ACTIONS(123), + [anon_sym_print] = ACTIONS(126), + [anon_sym_assert] = ACTIONS(129), + [anon_sym_return] = ACTIONS(132), + [anon_sym_del] = ACTIONS(135), + [anon_sym_raise] = ACTIONS(138), + [anon_sym_pass] = ACTIONS(141), + [anon_sym_break] = ACTIONS(144), + [anon_sym_continue] = ACTIONS(147), + [anon_sym_if] = ACTIONS(229), + [anon_sym_async] = ACTIONS(232), + [anon_sym_for] = ACTIONS(235), + [anon_sym_while] = ACTIONS(238), + [anon_sym_try] = ACTIONS(241), + [anon_sym_with] = ACTIONS(244), + [anon_sym_match] = ACTIONS(247), + [anon_sym_DASH] = ACTIONS(171), + [anon_sym_PLUS] = ACTIONS(171), + [anon_sym_LBRACK] = ACTIONS(174), + [anon_sym_LBRACE] = ACTIONS(177), + [anon_sym_STAR_STAR] = ACTIONS(180), + [anon_sym_def] = ACTIONS(250), + [anon_sym_global] = ACTIONS(186), + [anon_sym_nonlocal] = ACTIONS(189), + [anon_sym_exec] = ACTIONS(192), + [anon_sym_type] = ACTIONS(195), + [anon_sym_class] = ACTIONS(253), + [anon_sym_AT] = ACTIONS(201), + [anon_sym_not] = ACTIONS(204), + [anon_sym_TILDE] = ACTIONS(171), + [anon_sym_lambda] = ACTIONS(207), + [anon_sym_yield] = ACTIONS(210), + [sym_ellipsis] = ACTIONS(213), + [sym_integer] = ACTIONS(216), + [sym_float] = ACTIONS(213), + [anon_sym_await] = ACTIONS(219), + [sym_true] = ACTIONS(216), + [sym_false] = ACTIONS(216), + [sym_none] = ACTIONS(216), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(226), + [sym__string_start] = ACTIONS(224), }, - [64] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(932), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [65] = { + [sym__statement] = STATE(62), + [sym__simple_statements] = STATE(62), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [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(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_class_definition] = STATE(62), + [sym_decorated_definition] = STATE(62), + [sym_decorator] = STATE(958), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(932), + [sym_await] = STATE(764), + [aux_sym_module_repeat1] = STATE(62), + [aux_sym_decorated_definition_repeat1] = STATE(958), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -16670,176 +15198,62 @@ 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(229), + [sym__dedent] = ACTIONS(256), [sym__string_start] = ACTIONS(81), }, - [65] = { - [sym__statement] = STATE(65), - [sym__simple_statements] = STATE(65), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [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(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_class_definition] = STATE(65), - [sym_decorated_definition] = STATE(65), - [sym_decorator] = STATE(932), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), - [sym_string] = STATE(693), - [sym_await] = STATE(773), - [aux_sym_module_repeat1] = STATE(65), - [aux_sym_decorated_definition_repeat1] = STATE(932), - [sym_identifier] = ACTIONS(115), - [anon_sym_import] = ACTIONS(118), - [anon_sym_from] = ACTIONS(121), - [anon_sym_LPAREN] = ACTIONS(124), - [anon_sym_STAR] = ACTIONS(127), - [anon_sym_print] = ACTIONS(130), - [anon_sym_assert] = ACTIONS(133), - [anon_sym_return] = ACTIONS(136), - [anon_sym_del] = ACTIONS(139), - [anon_sym_raise] = ACTIONS(142), - [anon_sym_pass] = ACTIONS(145), - [anon_sym_break] = ACTIONS(148), - [anon_sym_continue] = ACTIONS(151), - [anon_sym_if] = ACTIONS(231), - [anon_sym_async] = ACTIONS(234), - [anon_sym_for] = ACTIONS(237), - [anon_sym_while] = ACTIONS(240), - [anon_sym_try] = ACTIONS(243), - [anon_sym_with] = ACTIONS(246), - [anon_sym_match] = ACTIONS(249), - [anon_sym_DASH] = ACTIONS(175), - [anon_sym_PLUS] = ACTIONS(175), - [anon_sym_LBRACK] = ACTIONS(178), - [anon_sym_LBRACE] = ACTIONS(181), - [anon_sym_STAR_STAR] = ACTIONS(184), - [anon_sym_def] = ACTIONS(252), - [anon_sym_global] = ACTIONS(190), - [anon_sym_nonlocal] = ACTIONS(193), - [anon_sym_exec] = ACTIONS(196), - [anon_sym_type] = ACTIONS(199), - [anon_sym_class] = ACTIONS(255), - [anon_sym_AT] = ACTIONS(205), - [anon_sym_not] = ACTIONS(208), - [anon_sym_TILDE] = ACTIONS(175), - [anon_sym_lambda] = ACTIONS(211), - [anon_sym_yield] = ACTIONS(214), - [sym_ellipsis] = ACTIONS(217), - [sym_integer] = ACTIONS(220), - [sym_float] = ACTIONS(217), - [anon_sym_await] = ACTIONS(223), - [sym_true] = ACTIONS(220), - [sym_false] = ACTIONS(220), - [sym_none] = ACTIONS(220), - [sym_comment] = ACTIONS(3), - [sym__dedent] = ACTIONS(113), - [sym__string_start] = ACTIONS(226), - }, [66] = { - [sym_named_expression] = STATE(863), - [sym_list_splat] = STATE(1284), - [sym_dictionary_splat] = STATE(1284), - [sym_expression_list] = STATE(1438), - [sym_expression] = STATE(1014), - [sym_primary_expression] = STATE(595), - [sym_not_operator] = STATE(863), - [sym_boolean_operator] = STATE(863), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_comparison_operator] = STATE(863), - [sym_lambda] = STATE(863), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_conditional_expression] = STATE(863), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), + [sym_named_expression] = STATE(862), + [sym_list_splat] = STATE(1329), + [sym_dictionary_splat] = STATE(1329), + [sym_expression_list] = STATE(1404), + [sym_expression] = STATE(1029), + [sym_primary_expression] = STATE(589), + [sym_not_operator] = STATE(862), + [sym_boolean_operator] = STATE(862), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_comparison_operator] = STATE(862), + [sym_lambda] = STATE(862), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_conditional_expression] = STATE(862), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), [sym_identifier] = ACTIONS(258), [anon_sym_DOT] = ACTIONS(260), [anon_sym_LPAREN] = ACTIONS(262), - [anon_sym_COMMA] = ACTIONS(265), - [anon_sym_STAR] = ACTIONS(268), - [anon_sym_print] = ACTIONS(271), + [anon_sym_COMMA] = ACTIONS(264), + [anon_sym_STAR] = ACTIONS(267), + [anon_sym_print] = ACTIONS(269), [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON_EQ] = ACTIONS(273), + [anon_sym_COLON_EQ] = ACTIONS(271), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(275), - [anon_sym_async] = ACTIONS(271), + [anon_sym_COLON] = ACTIONS(273), + [anon_sym_async] = ACTIONS(269), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(271), + [anon_sym_match] = ACTIONS(269), [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(277), - [anon_sym_PLUS] = ACTIONS(277), - [anon_sym_LBRACK] = ACTIONS(280), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(285), - [anon_sym_EQ] = ACTIONS(275), - [anon_sym_exec] = ACTIONS(271), - [anon_sym_type] = ACTIONS(271), + [anon_sym_DASH] = ACTIONS(275), + [anon_sym_PLUS] = ACTIONS(275), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(281), + [anon_sym_EQ] = ACTIONS(273), + [anon_sym_exec] = ACTIONS(269), + [anon_sym_type] = ACTIONS(269), [anon_sym_AT] = ACTIONS(260), - [anon_sym_not] = ACTIONS(288), + [anon_sym_not] = ACTIONS(283), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), @@ -16848,94 +15262,94 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_AMP] = ACTIONS(260), [anon_sym_CARET] = ACTIONS(260), [anon_sym_LT_LT] = ACTIONS(260), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [anon_sym_lambda] = ACTIONS(295), - [anon_sym_PLUS_EQ] = ACTIONS(297), - [anon_sym_DASH_EQ] = ACTIONS(297), - [anon_sym_STAR_EQ] = ACTIONS(297), - [anon_sym_SLASH_EQ] = ACTIONS(297), - [anon_sym_AT_EQ] = ACTIONS(297), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(297), - [anon_sym_PERCENT_EQ] = ACTIONS(297), - [anon_sym_STAR_STAR_EQ] = ACTIONS(297), - [anon_sym_GT_GT_EQ] = ACTIONS(297), - [anon_sym_LT_LT_EQ] = ACTIONS(297), - [anon_sym_AMP_EQ] = ACTIONS(297), - [anon_sym_CARET_EQ] = ACTIONS(297), - [anon_sym_PIPE_EQ] = ACTIONS(297), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(303), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [anon_sym_lambda] = ACTIONS(289), + [anon_sym_PLUS_EQ] = ACTIONS(291), + [anon_sym_DASH_EQ] = ACTIONS(291), + [anon_sym_STAR_EQ] = ACTIONS(291), + [anon_sym_SLASH_EQ] = ACTIONS(291), + [anon_sym_AT_EQ] = ACTIONS(291), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(291), + [anon_sym_PERCENT_EQ] = ACTIONS(291), + [anon_sym_STAR_STAR_EQ] = ACTIONS(291), + [anon_sym_GT_GT_EQ] = ACTIONS(291), + [anon_sym_LT_LT_EQ] = ACTIONS(291), + [anon_sym_AMP_EQ] = ACTIONS(291), + [anon_sym_CARET_EQ] = ACTIONS(291), + [anon_sym_PIPE_EQ] = ACTIONS(291), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(297), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), - [sym__string_start] = ACTIONS(305), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), + [sym__string_start] = ACTIONS(299), }, [67] = { - [sym_named_expression] = STATE(863), - [sym_list_splat] = STATE(1284), - [sym_dictionary_splat] = STATE(1284), - [sym_expression_list] = STATE(1403), - [sym_expression] = STATE(1022), - [sym_primary_expression] = STATE(595), - [sym_not_operator] = STATE(863), - [sym_boolean_operator] = STATE(863), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_comparison_operator] = STATE(863), - [sym_lambda] = STATE(863), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_conditional_expression] = STATE(863), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), + [sym_named_expression] = STATE(862), + [sym_list_splat] = STATE(1329), + [sym_dictionary_splat] = STATE(1329), + [sym_expression_list] = STATE(1399), + [sym_expression] = STATE(1014), + [sym_primary_expression] = STATE(589), + [sym_not_operator] = STATE(862), + [sym_boolean_operator] = STATE(862), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_comparison_operator] = STATE(862), + [sym_lambda] = STATE(862), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_conditional_expression] = STATE(862), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), [sym_identifier] = ACTIONS(258), [anon_sym_DOT] = ACTIONS(260), [anon_sym_LPAREN] = ACTIONS(262), - [anon_sym_COMMA] = ACTIONS(265), - [anon_sym_STAR] = ACTIONS(268), - [anon_sym_print] = ACTIONS(271), + [anon_sym_COMMA] = ACTIONS(264), + [anon_sym_STAR] = ACTIONS(267), + [anon_sym_print] = ACTIONS(269), [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON_EQ] = ACTIONS(273), + [anon_sym_COLON_EQ] = ACTIONS(271), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(275), - [anon_sym_async] = ACTIONS(271), + [anon_sym_COLON] = ACTIONS(273), + [anon_sym_async] = ACTIONS(269), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(271), + [anon_sym_match] = ACTIONS(269), [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(277), - [anon_sym_PLUS] = ACTIONS(277), - [anon_sym_LBRACK] = ACTIONS(280), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(285), - [anon_sym_EQ] = ACTIONS(275), - [anon_sym_exec] = ACTIONS(271), - [anon_sym_type] = ACTIONS(271), + [anon_sym_DASH] = ACTIONS(275), + [anon_sym_PLUS] = ACTIONS(275), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(281), + [anon_sym_EQ] = ACTIONS(273), + [anon_sym_exec] = ACTIONS(269), + [anon_sym_type] = ACTIONS(269), [anon_sym_AT] = ACTIONS(260), - [anon_sym_not] = ACTIONS(288), + [anon_sym_not] = ACTIONS(283), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), @@ -16944,95 +15358,95 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_AMP] = ACTIONS(260), [anon_sym_CARET] = ACTIONS(260), [anon_sym_LT_LT] = ACTIONS(260), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [anon_sym_lambda] = ACTIONS(295), - [anon_sym_PLUS_EQ] = ACTIONS(297), - [anon_sym_DASH_EQ] = ACTIONS(297), - [anon_sym_STAR_EQ] = ACTIONS(297), - [anon_sym_SLASH_EQ] = ACTIONS(297), - [anon_sym_AT_EQ] = ACTIONS(297), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(297), - [anon_sym_PERCENT_EQ] = ACTIONS(297), - [anon_sym_STAR_STAR_EQ] = ACTIONS(297), - [anon_sym_GT_GT_EQ] = ACTIONS(297), - [anon_sym_LT_LT_EQ] = ACTIONS(297), - [anon_sym_AMP_EQ] = ACTIONS(297), - [anon_sym_CARET_EQ] = ACTIONS(297), - [anon_sym_PIPE_EQ] = ACTIONS(297), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(303), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [anon_sym_lambda] = ACTIONS(289), + [anon_sym_PLUS_EQ] = ACTIONS(291), + [anon_sym_DASH_EQ] = ACTIONS(291), + [anon_sym_STAR_EQ] = ACTIONS(291), + [anon_sym_SLASH_EQ] = ACTIONS(291), + [anon_sym_AT_EQ] = ACTIONS(291), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(291), + [anon_sym_PERCENT_EQ] = ACTIONS(291), + [anon_sym_STAR_STAR_EQ] = ACTIONS(291), + [anon_sym_GT_GT_EQ] = ACTIONS(291), + [anon_sym_LT_LT_EQ] = ACTIONS(291), + [anon_sym_AMP_EQ] = ACTIONS(291), + [anon_sym_CARET_EQ] = ACTIONS(291), + [anon_sym_PIPE_EQ] = ACTIONS(291), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(297), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), - [sym__string_start] = ACTIONS(305), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), + [sym__string_start] = ACTIONS(299), }, [68] = { - [sym__simple_statements] = STATE(973), - [sym_import_statement] = STATE(1228), - [sym_future_import_statement] = STATE(1228), - [sym_import_from_statement] = STATE(1228), - [sym_print_statement] = STATE(1228), - [sym_assert_statement] = STATE(1228), - [sym_expression_statement] = STATE(1228), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1228), - [sym_delete_statement] = STATE(1228), - [sym_raise_statement] = STATE(1228), - [sym_pass_statement] = STATE(1228), - [sym_break_statement] = STATE(1228), - [sym_continue_statement] = STATE(1228), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1228), - [sym_nonlocal_statement] = STATE(1228), - [sym_exec_statement] = STATE(1228), - [sym_type_alias_statement] = STATE(1228), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(386), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17046,8 +15460,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17069,64 +15483,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(309), - [sym__indent] = ACTIONS(311), + [sym__newline] = ACTIONS(303), + [sym__indent] = ACTIONS(305), [sym__string_start] = ACTIONS(81), }, [69] = { - [sym__simple_statements] = STATE(526), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(496), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17140,8 +15554,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17163,64 +15577,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(313), - [sym__indent] = ACTIONS(315), + [sym__newline] = ACTIONS(307), + [sym__indent] = ACTIONS(309), [sym__string_start] = ACTIONS(81), }, [70] = { - [sym__simple_statements] = STATE(324), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(450), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17234,8 +15648,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17257,64 +15671,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(317), - [sym__indent] = ACTIONS(319), + [sym__newline] = ACTIONS(311), + [sym__indent] = ACTIONS(313), [sym__string_start] = ACTIONS(81), }, [71] = { - [sym__simple_statements] = STATE(251), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(326), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17328,8 +15742,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17351,158 +15765,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(321), - [sym__indent] = ACTIONS(323), + [sym__newline] = ACTIONS(315), + [sym__indent] = ACTIONS(317), [sym__string_start] = ACTIONS(81), }, [72] = { - [sym_chevron] = STATE(1149), - [sym_named_expression] = STATE(940), - [sym_expression] = STATE(999), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_attribute] = STATE(773), - [sym_subscript] = STATE(773), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(397), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [sym_identifier] = ACTIONS(325), - [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(265), - [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(327), - [anon_sym_GT_GT] = ACTIONS(329), - [anon_sym_COLON_EQ] = ACTIONS(273), - [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(275), - [anon_sym_async] = ACTIONS(327), - [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(327), - [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(260), - [anon_sym_PLUS] = ACTIONS(260), - [anon_sym_LBRACK] = ACTIONS(293), + [sym_await] = STATE(764), + [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(301), + [anon_sym_match] = ACTIONS(301), + [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(260), - [anon_sym_EQ] = ACTIONS(275), - [anon_sym_exec] = ACTIONS(327), - [anon_sym_type] = ACTIONS(327), - [anon_sym_AT] = ACTIONS(260), - [anon_sym_not] = ACTIONS(260), - [anon_sym_and] = ACTIONS(260), - [anon_sym_or] = ACTIONS(260), - [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(260), - [anon_sym_SLASH_SLASH] = ACTIONS(260), - [anon_sym_AMP] = ACTIONS(260), - [anon_sym_CARET] = ACTIONS(260), - [anon_sym_LT_LT] = ACTIONS(260), + [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_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), - [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), - [anon_sym_is] = ACTIONS(260), [anon_sym_lambda] = ACTIONS(71), - [anon_sym_PLUS_EQ] = ACTIONS(297), - [anon_sym_DASH_EQ] = ACTIONS(297), - [anon_sym_STAR_EQ] = ACTIONS(297), - [anon_sym_SLASH_EQ] = ACTIONS(297), - [anon_sym_AT_EQ] = ACTIONS(297), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(297), - [anon_sym_PERCENT_EQ] = ACTIONS(297), - [anon_sym_STAR_STAR_EQ] = ACTIONS(297), - [anon_sym_GT_GT_EQ] = ACTIONS(297), - [anon_sym_LT_LT_EQ] = ACTIONS(297), - [anon_sym_AMP_EQ] = ACTIONS(297), - [anon_sym_CARET_EQ] = ACTIONS(297), - [anon_sym_PIPE_EQ] = ACTIONS(297), + [anon_sym_yield] = ACTIONS(73), [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(331), + [anon_sym_await] = ACTIONS(79), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), + [sym__newline] = ACTIONS(319), + [sym__indent] = ACTIONS(321), [sym__string_start] = ACTIONS(81), }, [73] = { - [sym__simple_statements] = STATE(457), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(486), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17516,8 +15930,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17539,64 +15953,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(333), - [sym__indent] = ACTIONS(335), + [sym__newline] = ACTIONS(323), + [sym__indent] = ACTIONS(325), [sym__string_start] = ACTIONS(81), }, [74] = { - [sym__simple_statements] = STATE(349), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(471), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17610,8 +16024,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17633,64 +16047,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(337), - [sym__indent] = ACTIONS(339), + [sym__newline] = ACTIONS(327), + [sym__indent] = ACTIONS(329), [sym__string_start] = ACTIONS(81), }, [75] = { - [sym__simple_statements] = STATE(535), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(463), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17704,8 +16118,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17727,64 +16141,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(341), - [sym__indent] = ACTIONS(343), + [sym__newline] = ACTIONS(331), + [sym__indent] = ACTIONS(333), [sym__string_start] = ACTIONS(81), }, [76] = { - [sym__simple_statements] = STATE(536), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(451), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17798,8 +16212,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17821,64 +16235,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(345), - [sym__indent] = ACTIONS(347), + [sym__newline] = ACTIONS(335), + [sym__indent] = ACTIONS(337), [sym__string_start] = ACTIONS(81), }, [77] = { - [sym__simple_statements] = STATE(540), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(448), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17892,8 +16306,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -17915,64 +16329,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(349), - [sym__indent] = ACTIONS(351), + [sym__newline] = ACTIONS(339), + [sym__indent] = ACTIONS(341), [sym__string_start] = ACTIONS(81), }, [78] = { - [sym__simple_statements] = STATE(550), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(319), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -17986,8 +16400,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18009,64 +16423,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(353), - [sym__indent] = ACTIONS(355), + [sym__newline] = ACTIONS(343), + [sym__indent] = ACTIONS(345), [sym__string_start] = ACTIONS(81), }, [79] = { - [sym__simple_statements] = STATE(327), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(476), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18080,8 +16494,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18103,64 +16517,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(357), - [sym__indent] = ACTIONS(359), + [sym__newline] = ACTIONS(347), + [sym__indent] = ACTIONS(349), [sym__string_start] = ACTIONS(81), }, [80] = { - [sym__simple_statements] = STATE(328), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(453), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18174,8 +16588,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18197,64 +16611,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(361), - [sym__indent] = ACTIONS(363), + [sym__newline] = ACTIONS(351), + [sym__indent] = ACTIONS(353), [sym__string_start] = ACTIONS(81), }, [81] = { - [sym__simple_statements] = STATE(546), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(504), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18268,8 +16682,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18291,64 +16705,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(365), - [sym__indent] = ACTIONS(367), + [sym__newline] = ACTIONS(355), + [sym__indent] = ACTIONS(357), [sym__string_start] = ACTIONS(81), }, [82] = { - [sym__simple_statements] = STATE(254), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(478), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18362,8 +16776,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18385,64 +16799,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(369), - [sym__indent] = ACTIONS(371), + [sym__newline] = ACTIONS(359), + [sym__indent] = ACTIONS(361), [sym__string_start] = ACTIONS(81), }, [83] = { - [sym__simple_statements] = STATE(386), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(461), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18456,8 +16870,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18479,64 +16893,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(373), - [sym__indent] = ACTIONS(375), + [sym__newline] = ACTIONS(363), + [sym__indent] = ACTIONS(365), [sym__string_start] = ACTIONS(81), }, [84] = { - [sym__simple_statements] = STATE(461), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(346), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18550,8 +16964,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18573,64 +16987,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(377), - [sym__indent] = ACTIONS(379), + [sym__newline] = ACTIONS(367), + [sym__indent] = ACTIONS(369), [sym__string_start] = ACTIONS(81), }, [85] = { - [sym__simple_statements] = STATE(464), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(545), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18644,8 +17058,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18667,64 +17081,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(381), - [sym__indent] = ACTIONS(383), + [sym__newline] = ACTIONS(371), + [sym__indent] = ACTIONS(373), [sym__string_start] = ACTIONS(81), }, [86] = { - [sym__simple_statements] = STATE(470), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(531), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18738,8 +17152,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18761,64 +17175,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(385), - [sym__indent] = ACTIONS(387), + [sym__newline] = ACTIONS(375), + [sym__indent] = ACTIONS(377), [sym__string_start] = ACTIONS(81), }, [87] = { - [sym__simple_statements] = STATE(549), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(266), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18832,8 +17246,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18855,64 +17269,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(389), - [sym__indent] = ACTIONS(391), + [sym__newline] = ACTIONS(379), + [sym__indent] = ACTIONS(381), [sym__string_start] = ACTIONS(81), }, [88] = { - [sym__simple_statements] = STATE(477), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(252), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -18926,8 +17340,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -18949,64 +17363,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(393), - [sym__indent] = ACTIONS(395), + [sym__newline] = ACTIONS(383), + [sym__indent] = ACTIONS(385), [sym__string_start] = ACTIONS(81), }, [89] = { - [sym__simple_statements] = STATE(479), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(460), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19020,8 +17434,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19043,64 +17457,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(397), - [sym__indent] = ACTIONS(399), + [sym__newline] = ACTIONS(387), + [sym__indent] = ACTIONS(389), [sym__string_start] = ACTIONS(81), }, [90] = { - [sym__simple_statements] = STATE(480), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(343), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19114,8 +17528,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19137,64 +17551,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(401), - [sym__indent] = ACTIONS(403), + [sym__newline] = ACTIONS(391), + [sym__indent] = ACTIONS(393), [sym__string_start] = ACTIONS(81), }, [91] = { - [sym__simple_statements] = STATE(462), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(534), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19208,8 +17622,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19231,64 +17645,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(405), - [sym__indent] = ACTIONS(407), + [sym__newline] = ACTIONS(395), + [sym__indent] = ACTIONS(397), [sym__string_start] = ACTIONS(81), }, [92] = { - [sym__simple_statements] = STATE(484), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(465), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19302,8 +17716,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19325,64 +17739,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(409), - [sym__indent] = ACTIONS(411), + [sym__newline] = ACTIONS(399), + [sym__indent] = ACTIONS(401), [sym__string_start] = ACTIONS(81), }, [93] = { - [sym__simple_statements] = STATE(393), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(327), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19396,8 +17810,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19419,64 +17833,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(413), - [sym__indent] = ACTIONS(415), + [sym__newline] = ACTIONS(403), + [sym__indent] = ACTIONS(405), [sym__string_start] = ACTIONS(81), }, [94] = { - [sym__simple_statements] = STATE(334), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(979), + [sym_import_statement] = STATE(1187), + [sym_future_import_statement] = STATE(1187), + [sym_import_from_statement] = STATE(1187), + [sym_print_statement] = STATE(1187), + [sym_assert_statement] = STATE(1187), + [sym_expression_statement] = STATE(1187), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1187), + [sym_delete_statement] = STATE(1187), + [sym_raise_statement] = STATE(1187), + [sym_pass_statement] = STATE(1187), + [sym_break_statement] = STATE(1187), + [sym_continue_statement] = STATE(1187), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1187), + [sym_nonlocal_statement] = STATE(1187), + [sym_exec_statement] = STATE(1187), + [sym_type_alias_statement] = STATE(1187), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19490,8 +17904,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19513,64 +17927,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(417), - [sym__indent] = ACTIONS(419), + [sym__newline] = ACTIONS(407), + [sym__indent] = ACTIONS(409), [sym__string_start] = ACTIONS(81), }, [95] = { - [sym__simple_statements] = STATE(487), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(493), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19584,8 +17998,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19607,64 +18021,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(421), - [sym__indent] = ACTIONS(423), + [sym__newline] = ACTIONS(411), + [sym__indent] = ACTIONS(413), [sym__string_start] = ACTIONS(81), }, [96] = { - [sym__simple_statements] = STATE(472), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(505), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19678,8 +18092,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19701,64 +18115,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(425), - [sym__indent] = ACTIONS(427), + [sym__newline] = ACTIONS(415), + [sym__indent] = ACTIONS(417), [sym__string_start] = ACTIONS(81), }, [97] = { - [sym__simple_statements] = STATE(365), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(321), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19772,8 +18186,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19795,64 +18209,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(429), - [sym__indent] = ACTIONS(431), + [sym__newline] = ACTIONS(419), + [sym__indent] = ACTIONS(421), [sym__string_start] = ACTIONS(81), }, [98] = { - [sym__simple_statements] = STATE(494), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(507), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19866,8 +18280,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19889,64 +18303,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(433), - [sym__indent] = ACTIONS(435), + [sym__newline] = ACTIONS(423), + [sym__indent] = ACTIONS(425), [sym__string_start] = ACTIONS(81), }, [99] = { - [sym__simple_statements] = STATE(448), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(508), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -19960,8 +18374,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -19983,64 +18397,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(437), - [sym__indent] = ACTIONS(439), + [sym__newline] = ACTIONS(427), + [sym__indent] = ACTIONS(429), [sym__string_start] = ACTIONS(81), }, [100] = { - [sym__simple_statements] = STATE(396), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(540), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20054,8 +18468,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20077,64 +18491,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(441), - [sym__indent] = ACTIONS(443), + [sym__newline] = ACTIONS(431), + [sym__indent] = ACTIONS(433), [sym__string_start] = ACTIONS(81), }, [101] = { - [sym__simple_statements] = STATE(499), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(369), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20148,8 +18562,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20171,64 +18585,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(445), - [sym__indent] = ACTIONS(447), + [sym__newline] = ACTIONS(435), + [sym__indent] = ACTIONS(437), [sym__string_start] = ACTIONS(81), }, [102] = { - [sym__simple_statements] = STATE(531), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(342), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20242,8 +18656,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20265,64 +18679,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(449), - [sym__indent] = ACTIONS(451), + [sym__newline] = ACTIONS(439), + [sym__indent] = ACTIONS(441), [sym__string_start] = ACTIONS(81), }, [103] = { - [sym__simple_statements] = STATE(355), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(544), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20336,8 +18750,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20359,64 +18773,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(453), - [sym__indent] = ACTIONS(455), + [sym__newline] = ACTIONS(443), + [sym__indent] = ACTIONS(445), [sym__string_start] = ACTIONS(81), }, [104] = { - [sym__simple_statements] = STATE(336), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(459), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20430,8 +18844,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20453,64 +18867,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(457), - [sym__indent] = ACTIONS(459), + [sym__newline] = ACTIONS(447), + [sym__indent] = ACTIONS(449), [sym__string_start] = ACTIONS(81), }, [105] = { - [sym__simple_statements] = STATE(321), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(551), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20524,8 +18938,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20547,64 +18961,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(461), - [sym__indent] = ACTIONS(463), + [sym__newline] = ACTIONS(451), + [sym__indent] = ACTIONS(453), [sym__string_start] = ACTIONS(81), }, [106] = { - [sym__simple_statements] = STATE(450), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(420), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20618,8 +19032,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20641,64 +19055,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(465), - [sym__indent] = ACTIONS(467), + [sym__newline] = ACTIONS(455), + [sym__indent] = ACTIONS(457), [sym__string_start] = ACTIONS(81), }, [107] = { - [sym__simple_statements] = STATE(506), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(524), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20712,8 +19126,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20735,64 +19149,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(469), - [sym__indent] = ACTIONS(471), + [sym__newline] = ACTIONS(459), + [sym__indent] = ACTIONS(461), [sym__string_start] = ACTIONS(81), }, [108] = { - [sym__simple_statements] = STATE(541), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(338), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20806,8 +19220,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20829,64 +19243,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(473), - [sym__indent] = ACTIONS(475), + [sym__newline] = ACTIONS(463), + [sym__indent] = ACTIONS(465), [sym__string_start] = ACTIONS(81), }, [109] = { - [sym__simple_statements] = STATE(400), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(554), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20900,8 +19314,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -20923,64 +19337,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(477), - [sym__indent] = ACTIONS(479), + [sym__newline] = ACTIONS(467), + [sym__indent] = ACTIONS(469), [sym__string_start] = ACTIONS(81), }, [110] = { - [sym__simple_statements] = STATE(552), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(558), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -20994,8 +19408,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21017,64 +19431,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(481), - [sym__indent] = ACTIONS(483), + [sym__newline] = ACTIONS(471), + [sym__indent] = ACTIONS(473), [sym__string_start] = ACTIONS(81), }, [111] = { - [sym__simple_statements] = STATE(512), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(457), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21088,8 +19502,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21111,64 +19525,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(485), - [sym__indent] = ACTIONS(487), + [sym__newline] = ACTIONS(475), + [sym__indent] = ACTIONS(477), [sym__string_start] = ACTIONS(81), }, [112] = { - [sym__simple_statements] = STATE(554), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(352), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21182,8 +19596,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21205,64 +19619,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(489), - [sym__indent] = ACTIONS(491), + [sym__newline] = ACTIONS(479), + [sym__indent] = ACTIONS(481), [sym__string_start] = ACTIONS(81), }, [113] = { - [sym__simple_statements] = STATE(337), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(317), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21276,8 +19690,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21299,64 +19713,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(493), - [sym__indent] = ACTIONS(495), + [sym__newline] = ACTIONS(483), + [sym__indent] = ACTIONS(485), [sym__string_start] = ACTIONS(81), }, [114] = { - [sym__simple_statements] = STATE(447), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(483), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21370,8 +19784,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21393,64 +19807,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(497), - [sym__indent] = ACTIONS(499), + [sym__newline] = ACTIONS(487), + [sym__indent] = ACTIONS(489), [sym__string_start] = ACTIONS(81), }, [115] = { - [sym__simple_statements] = STATE(453), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(480), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21464,8 +19878,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21487,64 +19901,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(501), - [sym__indent] = ACTIONS(503), + [sym__newline] = ACTIONS(491), + [sym__indent] = ACTIONS(493), [sym__string_start] = ACTIONS(81), }, [116] = { - [sym__simple_statements] = STATE(360), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(981), + [sym_import_statement] = STATE(1187), + [sym_future_import_statement] = STATE(1187), + [sym_import_from_statement] = STATE(1187), + [sym_print_statement] = STATE(1187), + [sym_assert_statement] = STATE(1187), + [sym_expression_statement] = STATE(1187), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1187), + [sym_delete_statement] = STATE(1187), + [sym_raise_statement] = STATE(1187), + [sym_pass_statement] = STATE(1187), + [sym_break_statement] = STATE(1187), + [sym_continue_statement] = STATE(1187), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1187), + [sym_nonlocal_statement] = STATE(1187), + [sym_exec_statement] = STATE(1187), + [sym_type_alias_statement] = STATE(1187), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21558,8 +19972,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21581,64 +19995,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(505), - [sym__indent] = ACTIONS(507), + [sym__newline] = ACTIONS(495), + [sym__indent] = ACTIONS(497), [sym__string_start] = ACTIONS(81), }, [117] = { - [sym__simple_statements] = STATE(518), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(521), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21652,8 +20066,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21675,64 +20089,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(509), - [sym__indent] = ACTIONS(511), + [sym__newline] = ACTIONS(499), + [sym__indent] = ACTIONS(501), [sym__string_start] = ACTIONS(81), }, [118] = { - [sym__simple_statements] = STATE(466), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(455), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21746,8 +20160,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21769,64 +20183,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(513), - [sym__indent] = ACTIONS(515), + [sym__newline] = ACTIONS(503), + [sym__indent] = ACTIONS(505), [sym__string_start] = ACTIONS(81), }, [119] = { - [sym__simple_statements] = STATE(521), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(501), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21840,8 +20254,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21863,64 +20277,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(517), - [sym__indent] = ACTIONS(519), + [sym__newline] = ACTIONS(507), + [sym__indent] = ACTIONS(509), [sym__string_start] = ACTIONS(81), }, [120] = { - [sym__simple_statements] = STATE(340), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(330), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -21934,8 +20348,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -21957,64 +20371,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(521), - [sym__indent] = ACTIONS(523), + [sym__newline] = ACTIONS(511), + [sym__indent] = ACTIONS(513), [sym__string_start] = ACTIONS(81), }, [121] = { - [sym__simple_statements] = STATE(323), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(428), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22028,8 +20442,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22051,64 +20465,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(525), - [sym__indent] = ACTIONS(527), + [sym__newline] = ACTIONS(515), + [sym__indent] = ACTIONS(517), [sym__string_start] = ACTIONS(81), }, [122] = { - [sym__simple_statements] = STATE(341), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(527), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22122,8 +20536,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22145,64 +20559,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(529), - [sym__indent] = ACTIONS(531), + [sym__newline] = ACTIONS(519), + [sym__indent] = ACTIONS(521), [sym__string_start] = ACTIONS(81), }, [123] = { - [sym__simple_statements] = STATE(449), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(331), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22216,8 +20630,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22239,64 +20653,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(533), - [sym__indent] = ACTIONS(535), + [sym__newline] = ACTIONS(523), + [sym__indent] = ACTIONS(525), [sym__string_start] = ACTIONS(81), }, [124] = { - [sym__simple_statements] = STATE(503), - [sym_import_statement] = STATE(1158), - [sym_future_import_statement] = STATE(1158), - [sym_import_from_statement] = STATE(1158), - [sym_print_statement] = STATE(1158), - [sym_assert_statement] = STATE(1158), - [sym_expression_statement] = STATE(1158), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1158), - [sym_delete_statement] = STATE(1158), - [sym_raise_statement] = STATE(1158), - [sym_pass_statement] = STATE(1158), - [sym_break_statement] = STATE(1158), - [sym_continue_statement] = STATE(1158), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1158), - [sym_nonlocal_statement] = STATE(1158), - [sym_exec_statement] = STATE(1158), - [sym_type_alias_statement] = STATE(1158), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(550), + [sym_import_statement] = STATE(1161), + [sym_future_import_statement] = STATE(1161), + [sym_import_from_statement] = STATE(1161), + [sym_print_statement] = STATE(1161), + [sym_assert_statement] = STATE(1161), + [sym_expression_statement] = STATE(1161), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1161), + [sym_delete_statement] = STATE(1161), + [sym_raise_statement] = STATE(1161), + [sym_pass_statement] = STATE(1161), + [sym_break_statement] = STATE(1161), + [sym_continue_statement] = STATE(1161), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1161), + [sym_nonlocal_statement] = STATE(1161), + [sym_exec_statement] = STATE(1161), + [sym_type_alias_statement] = STATE(1161), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22310,8 +20724,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22333,158 +20747,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(537), - [sym__indent] = ACTIONS(539), + [sym__newline] = ACTIONS(527), + [sym__indent] = ACTIONS(529), [sym__string_start] = ACTIONS(81), }, [125] = { - [sym__simple_statements] = STATE(992), - [sym_import_statement] = STATE(1228), - [sym_future_import_statement] = STATE(1228), - [sym_import_from_statement] = STATE(1228), - [sym_print_statement] = STATE(1228), - [sym_assert_statement] = STATE(1228), - [sym_expression_statement] = STATE(1228), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1228), - [sym_delete_statement] = STATE(1228), - [sym_raise_statement] = STATE(1228), - [sym_pass_statement] = STATE(1228), - [sym_break_statement] = STATE(1228), - [sym_continue_statement] = STATE(1228), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1228), - [sym_nonlocal_statement] = STATE(1228), - [sym_exec_statement] = STATE(1228), - [sym_type_alias_statement] = STATE(1228), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_chevron] = STATE(1114), + [sym_named_expression] = STATE(937), + [sym_expression] = STATE(1003), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_attribute] = STATE(764), + [sym_subscript] = STATE(764), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), - [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(307), - [anon_sym_match] = ACTIONS(307), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(49), + [sym_await] = STATE(764), + [sym_identifier] = ACTIONS(531), + [anon_sym_DOT] = ACTIONS(260), + [anon_sym_LPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(264), + [anon_sym_STAR] = ACTIONS(260), + [anon_sym_print] = ACTIONS(533), + [anon_sym_GT_GT] = ACTIONS(535), + [anon_sym_COLON_EQ] = ACTIONS(271), + [anon_sym_if] = ACTIONS(260), + [anon_sym_COLON] = ACTIONS(273), + [anon_sym_async] = ACTIONS(533), + [anon_sym_in] = ACTIONS(260), + [anon_sym_match] = ACTIONS(533), + [anon_sym_PIPE] = ACTIONS(260), + [anon_sym_DASH] = ACTIONS(260), + [anon_sym_PLUS] = ACTIONS(260), + [anon_sym_LBRACK] = ACTIONS(287), [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_STAR_STAR] = ACTIONS(260), + [anon_sym_EQ] = ACTIONS(273), + [anon_sym_exec] = ACTIONS(533), + [anon_sym_type] = ACTIONS(533), + [anon_sym_AT] = ACTIONS(260), + [anon_sym_not] = ACTIONS(260), + [anon_sym_and] = ACTIONS(260), + [anon_sym_or] = ACTIONS(260), + [anon_sym_SLASH] = ACTIONS(260), + [anon_sym_PERCENT] = ACTIONS(260), + [anon_sym_SLASH_SLASH] = ACTIONS(260), + [anon_sym_AMP] = ACTIONS(260), + [anon_sym_CARET] = ACTIONS(260), + [anon_sym_LT_LT] = ACTIONS(260), [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_LT] = ACTIONS(260), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), + [anon_sym_GT] = ACTIONS(260), + [anon_sym_LT_GT] = ACTIONS(287), + [anon_sym_is] = ACTIONS(260), [anon_sym_lambda] = ACTIONS(71), - [anon_sym_yield] = ACTIONS(73), + [anon_sym_PLUS_EQ] = ACTIONS(291), + [anon_sym_DASH_EQ] = ACTIONS(291), + [anon_sym_STAR_EQ] = ACTIONS(291), + [anon_sym_SLASH_EQ] = ACTIONS(291), + [anon_sym_AT_EQ] = ACTIONS(291), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(291), + [anon_sym_PERCENT_EQ] = ACTIONS(291), + [anon_sym_STAR_STAR_EQ] = ACTIONS(291), + [anon_sym_GT_GT_EQ] = ACTIONS(291), + [anon_sym_LT_LT_EQ] = ACTIONS(291), + [anon_sym_AMP_EQ] = ACTIONS(291), + [anon_sym_CARET_EQ] = ACTIONS(291), + [anon_sym_PIPE_EQ] = ACTIONS(291), [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(79), + [anon_sym_await] = ACTIONS(537), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__newline] = ACTIONS(541), - [sym__indent] = ACTIONS(543), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), [sym__string_start] = ACTIONS(81), }, [126] = { - [sym__simple_statements] = STATE(492), - [sym_import_statement] = STATE(1220), - [sym_future_import_statement] = STATE(1220), - [sym_import_from_statement] = STATE(1220), - [sym_print_statement] = STATE(1220), - [sym_assert_statement] = STATE(1220), - [sym_expression_statement] = STATE(1220), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1220), - [sym_delete_statement] = STATE(1220), - [sym_raise_statement] = STATE(1220), - [sym_pass_statement] = STATE(1220), - [sym_break_statement] = STATE(1220), - [sym_continue_statement] = STATE(1220), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1220), - [sym_nonlocal_statement] = STATE(1220), - [sym_exec_statement] = STATE(1220), - [sym_type_alias_statement] = STATE(1220), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym__simple_statements] = STATE(422), + [sym_import_statement] = STATE(1175), + [sym_future_import_statement] = STATE(1175), + [sym_import_from_statement] = STATE(1175), + [sym_print_statement] = STATE(1175), + [sym_assert_statement] = STATE(1175), + [sym_expression_statement] = STATE(1175), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1175), + [sym_delete_statement] = STATE(1175), + [sym_raise_statement] = STATE(1175), + [sym_pass_statement] = STATE(1175), + [sym_break_statement] = STATE(1175), + [sym_continue_statement] = STATE(1175), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1175), + [sym_nonlocal_statement] = STATE(1175), + [sym_exec_statement] = STATE(1175), + [sym_type_alias_statement] = STATE(1175), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22498,8 +20912,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22521,63 +20935,63 @@ 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(545), - [sym__indent] = ACTIONS(547), + [sym__newline] = ACTIONS(539), + [sym__indent] = ACTIONS(541), [sym__string_start] = ACTIONS(81), }, [127] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22591,8 +21005,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22614,62 +21028,62 @@ 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(549), + [sym__newline] = ACTIONS(543), [sym__string_start] = ACTIONS(81), }, [128] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22683,8 +21097,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22706,62 +21120,62 @@ 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(551), + [sym__newline] = ACTIONS(545), [sym__string_start] = ACTIONS(81), }, [129] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22775,8 +21189,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22798,62 +21212,62 @@ 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(553), + [sym__newline] = ACTIONS(547), [sym__string_start] = ACTIONS(81), }, [130] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22867,8 +21281,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22890,62 +21304,62 @@ 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(555), + [sym__newline] = ACTIONS(549), [sym__string_start] = ACTIONS(81), }, [131] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -22959,8 +21373,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -22982,62 +21396,62 @@ 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(557), + [sym__newline] = ACTIONS(551), [sym__string_start] = ACTIONS(81), }, [132] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23051,8 +21465,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -23074,62 +21488,62 @@ 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(559), + [sym__newline] = ACTIONS(553), [sym__string_start] = ACTIONS(81), }, [133] = { - [sym_import_statement] = STATE(1316), - [sym_future_import_statement] = STATE(1316), - [sym_import_from_statement] = STATE(1316), - [sym_print_statement] = STATE(1316), - [sym_assert_statement] = STATE(1316), - [sym_expression_statement] = STATE(1316), - [sym_named_expression] = STATE(940), - [sym_return_statement] = STATE(1316), - [sym_delete_statement] = STATE(1316), - [sym_raise_statement] = STATE(1316), - [sym_pass_statement] = STATE(1316), - [sym_break_statement] = STATE(1316), - [sym_continue_statement] = STATE(1316), - [sym_list_splat] = STATE(1283), - [sym_dictionary_splat] = STATE(1283), - [sym_global_statement] = STATE(1316), - [sym_nonlocal_statement] = STATE(1316), - [sym_exec_statement] = STATE(1316), - [sym_type_alias_statement] = STATE(1316), - [sym_expression_list] = STATE(1340), - [sym_pattern] = STATE(847), - [sym_tuple_pattern] = STATE(833), - [sym_list_pattern] = STATE(833), - [sym_list_splat_pattern] = STATE(833), - [sym_expression] = STATE(974), - [sym_primary_expression] = STATE(689), - [sym_not_operator] = STATE(940), - [sym_boolean_operator] = STATE(940), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_comparison_operator] = STATE(940), - [sym_lambda] = STATE(940), - [sym_assignment] = STATE(1340), - [sym_augmented_assignment] = STATE(1340), - [sym_pattern_list] = STATE(855), - [sym_yield] = STATE(1340), - [sym_attribute] = STATE(431), - [sym_subscript] = STATE(431), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_conditional_expression] = STATE(940), - [sym_concatenated_string] = STATE(773), + [sym_import_statement] = STATE(1352), + [sym_future_import_statement] = STATE(1352), + [sym_import_from_statement] = STATE(1352), + [sym_print_statement] = STATE(1352), + [sym_assert_statement] = STATE(1352), + [sym_expression_statement] = STATE(1352), + [sym_named_expression] = STATE(937), + [sym_return_statement] = STATE(1352), + [sym_delete_statement] = STATE(1352), + [sym_raise_statement] = STATE(1352), + [sym_pass_statement] = STATE(1352), + [sym_break_statement] = STATE(1352), + [sym_continue_statement] = STATE(1352), + [sym_list_splat] = STATE(1300), + [sym_dictionary_splat] = STATE(1300), + [sym_global_statement] = STATE(1352), + [sym_nonlocal_statement] = STATE(1352), + [sym_exec_statement] = STATE(1352), + [sym_type_alias_statement] = STATE(1352), + [sym_expression_list] = STATE(1301), + [sym_pattern] = STATE(850), + [sym_tuple_pattern] = STATE(837), + [sym_list_pattern] = STATE(837), + [sym_list_splat_pattern] = STATE(837), + [sym_expression] = STATE(1000), + [sym_primary_expression] = STATE(692), + [sym_not_operator] = STATE(937), + [sym_boolean_operator] = STATE(937), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_comparison_operator] = STATE(937), + [sym_lambda] = STATE(937), + [sym_assignment] = STATE(1301), + [sym_augmented_assignment] = STATE(1301), + [sym_pattern_list] = STATE(857), + [sym_yield] = STATE(1301), + [sym_attribute] = STATE(414), + [sym_subscript] = STATE(414), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_conditional_expression] = STATE(937), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(7), [anon_sym_import] = ACTIONS(9), [anon_sym_from] = ACTIONS(11), @@ -23143,8 +21557,8 @@ 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_async] = ACTIONS(307), - [anon_sym_match] = ACTIONS(307), + [anon_sym_async] = ACTIONS(301), + [anon_sym_match] = ACTIONS(301), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), [anon_sym_LBRACK] = ACTIONS(49), @@ -23170,45 +21584,45 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { }, [134] = { [sym_primary_expression] = STATE(709), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_attribute] = STATE(773), - [sym_subscript] = STATE(773), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_concatenated_string] = STATE(773), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_attribute] = STATE(764), + [sym_subscript] = STATE(764), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(77), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(561), - [anon_sym_COMMA] = ACTIONS(265), + [anon_sym_LPAREN] = ACTIONS(555), + [anon_sym_COMMA] = ACTIONS(264), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(563), + [anon_sym_print] = ACTIONS(557), [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON_EQ] = ACTIONS(273), + [anon_sym_COLON_EQ] = ACTIONS(271), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(275), - [anon_sym_async] = ACTIONS(563), + [anon_sym_COLON] = ACTIONS(273), + [anon_sym_async] = ACTIONS(557), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(563), + [anon_sym_match] = ACTIONS(557), [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(565), - [anon_sym_PLUS] = ACTIONS(565), - [anon_sym_LBRACK] = ACTIONS(567), + [anon_sym_DASH] = ACTIONS(559), + [anon_sym_PLUS] = ACTIONS(559), + [anon_sym_LBRACK] = ACTIONS(561), [anon_sym_LBRACE] = ACTIONS(51), [anon_sym_STAR_STAR] = ACTIONS(260), - [anon_sym_EQ] = ACTIONS(275), - [anon_sym_exec] = ACTIONS(563), - [anon_sym_type] = ACTIONS(563), + [anon_sym_EQ] = ACTIONS(273), + [anon_sym_exec] = ACTIONS(557), + [anon_sym_type] = ACTIONS(557), [anon_sym_AT] = ACTIONS(260), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), @@ -23221,81 +21635,81 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_LT_LT] = ACTIONS(260), [anon_sym_TILDE] = ACTIONS(47), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [anon_sym_PLUS_EQ] = ACTIONS(297), - [anon_sym_DASH_EQ] = ACTIONS(297), - [anon_sym_STAR_EQ] = ACTIONS(297), - [anon_sym_SLASH_EQ] = ACTIONS(297), - [anon_sym_AT_EQ] = ACTIONS(297), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(297), - [anon_sym_PERCENT_EQ] = ACTIONS(297), - [anon_sym_STAR_STAR_EQ] = ACTIONS(297), - [anon_sym_GT_GT_EQ] = ACTIONS(297), - [anon_sym_LT_LT_EQ] = ACTIONS(297), - [anon_sym_AMP_EQ] = ACTIONS(297), - [anon_sym_CARET_EQ] = ACTIONS(297), - [anon_sym_PIPE_EQ] = ACTIONS(297), + [anon_sym_PLUS_EQ] = ACTIONS(291), + [anon_sym_DASH_EQ] = ACTIONS(291), + [anon_sym_STAR_EQ] = ACTIONS(291), + [anon_sym_SLASH_EQ] = ACTIONS(291), + [anon_sym_AT_EQ] = ACTIONS(291), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(291), + [anon_sym_PERCENT_EQ] = ACTIONS(291), + [anon_sym_STAR_STAR_EQ] = ACTIONS(291), + [anon_sym_GT_GT_EQ] = ACTIONS(291), + [anon_sym_LT_LT_EQ] = ACTIONS(291), + [anon_sym_AMP_EQ] = ACTIONS(291), + [anon_sym_CARET_EQ] = ACTIONS(291), + [anon_sym_PIPE_EQ] = ACTIONS(291), [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(569), + [anon_sym_await] = ACTIONS(563), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), [sym__string_start] = ACTIONS(81), }, [135] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(573), - [anon_sym_COMMA] = ACTIONS(573), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(565), + [anon_sym_COMMA] = ACTIONS(565), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), + [anon_sym_print] = ACTIONS(568), [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON_EQ] = ACTIONS(578), + [anon_sym_COLON_EQ] = ACTIONS(570), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(580), - [anon_sym_async] = ACTIONS(576), + [anon_sym_COLON] = ACTIONS(572), + [anon_sym_async] = ACTIONS(568), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), + [anon_sym_match] = ACTIONS(568), [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(582), - [anon_sym_PLUS] = ACTIONS(582), - [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_RBRACK] = ACTIONS(573), - [anon_sym_LBRACE] = ACTIONS(283), + [anon_sym_DASH] = ACTIONS(275), + [anon_sym_PLUS] = ACTIONS(275), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_RBRACK] = ACTIONS(565), + [anon_sym_LBRACE] = ACTIONS(279), [anon_sym_STAR_STAR] = ACTIONS(260), - [anon_sym_EQ] = ACTIONS(580), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), + [anon_sym_EQ] = ACTIONS(572), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), [anon_sym_AT] = ACTIONS(260), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), @@ -23306,375 +21720,375 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_AMP] = ACTIONS(260), [anon_sym_CARET] = ACTIONS(260), [anon_sym_LT_LT] = ACTIONS(260), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [anon_sym_PLUS_EQ] = ACTIONS(586), - [anon_sym_DASH_EQ] = ACTIONS(586), - [anon_sym_STAR_EQ] = ACTIONS(586), - [anon_sym_SLASH_EQ] = ACTIONS(586), - [anon_sym_AT_EQ] = ACTIONS(586), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(586), - [anon_sym_PERCENT_EQ] = ACTIONS(586), - [anon_sym_STAR_STAR_EQ] = ACTIONS(586), - [anon_sym_GT_GT_EQ] = ACTIONS(586), - [anon_sym_LT_LT_EQ] = ACTIONS(586), - [anon_sym_AMP_EQ] = ACTIONS(586), - [anon_sym_CARET_EQ] = ACTIONS(586), - [anon_sym_PIPE_EQ] = ACTIONS(586), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [anon_sym_PLUS_EQ] = ACTIONS(574), + [anon_sym_DASH_EQ] = ACTIONS(574), + [anon_sym_STAR_EQ] = ACTIONS(574), + [anon_sym_SLASH_EQ] = ACTIONS(574), + [anon_sym_AT_EQ] = ACTIONS(574), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(574), + [anon_sym_PERCENT_EQ] = ACTIONS(574), + [anon_sym_STAR_STAR_EQ] = ACTIONS(574), + [anon_sym_GT_GT_EQ] = ACTIONS(574), + [anon_sym_LT_LT_EQ] = ACTIONS(574), + [anon_sym_AMP_EQ] = ACTIONS(574), + [anon_sym_CARET_EQ] = ACTIONS(574), + [anon_sym_PIPE_EQ] = ACTIONS(574), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [136] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(578), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(570), [anon_sym_if] = ACTIONS(260), [anon_sym_COLON] = ACTIONS(260), [anon_sym_else] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), + [anon_sym_async] = ACTIONS(568), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(291), - [anon_sym_PLUS] = ACTIONS(291), - [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_RBRACK] = ACTIONS(293), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_RBRACE] = ACTIONS(293), - [anon_sym_STAR_STAR] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(285), + [anon_sym_PLUS] = ACTIONS(285), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_RBRACK] = ACTIONS(287), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_RBRACE] = ACTIONS(287), + [anon_sym_STAR_STAR] = ACTIONS(287), [anon_sym_EQ] = ACTIONS(260), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_type_conversion] = ACTIONS(293), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_type_conversion] = ACTIONS(287), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [137] = { - [sym_primary_expression] = STATE(629), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(590), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), - [anon_sym_as] = ACTIONS(260), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(592), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), - [anon_sym_for] = ACTIONS(260), + [anon_sym_COLON] = ACTIONS(287), + [anon_sym_else] = ACTIONS(260), + [anon_sym_async] = ACTIONS(568), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(594), - [anon_sym_PLUS] = ACTIONS(594), - [anon_sym_LBRACK] = ACTIONS(596), - [anon_sym_RBRACK] = ACTIONS(293), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_RBRACE] = ACTIONS(293), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(285), + [anon_sym_PLUS] = ACTIONS(285), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_RBRACK] = ACTIONS(287), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_RBRACE] = ACTIONS(287), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_EQ] = ACTIONS(260), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(594), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(598), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_type_conversion] = ACTIONS(287), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [138] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(626), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(578), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), + [anon_sym_as] = ACTIONS(260), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(580), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(293), - [anon_sym_else] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), + [anon_sym_COLON] = ACTIONS(260), + [anon_sym_async] = ACTIONS(568), + [anon_sym_for] = ACTIONS(260), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(291), - [anon_sym_PLUS] = ACTIONS(291), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(582), + [anon_sym_PLUS] = ACTIONS(582), [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_RBRACK] = ACTIONS(293), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_RBRACE] = ACTIONS(293), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_EQ] = ACTIONS(260), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_RBRACK] = ACTIONS(287), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_RBRACE] = ACTIONS(287), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(582), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_type_conversion] = ACTIONS(293), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(586), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [139] = { - [sym_primary_expression] = STATE(629), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(626), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(590), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(578), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_as] = ACTIONS(260), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(293), - [anon_sym_async] = ACTIONS(576), + [anon_sym_COLON] = ACTIONS(287), + [anon_sym_async] = ACTIONS(568), [anon_sym_for] = ACTIONS(260), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(594), - [anon_sym_PLUS] = ACTIONS(594), - [anon_sym_LBRACK] = ACTIONS(596), - [anon_sym_RBRACK] = ACTIONS(293), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_RBRACE] = ACTIONS(293), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(582), + [anon_sym_PLUS] = ACTIONS(582), + [anon_sym_LBRACK] = ACTIONS(584), + [anon_sym_RBRACK] = ACTIONS(287), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_RBRACE] = ACTIONS(287), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(594), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(582), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(598), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(586), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [140] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(586), - [anon_sym_COMMA] = ACTIONS(586), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(291), + [anon_sym_COMMA] = ACTIONS(291), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), + [anon_sym_print] = ACTIONS(568), [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(586), - [anon_sym_async] = ACTIONS(576), - [anon_sym_in] = ACTIONS(580), - [anon_sym_match] = ACTIONS(576), + [anon_sym_COLON] = ACTIONS(291), + [anon_sym_async] = ACTIONS(568), + [anon_sym_in] = ACTIONS(273), + [anon_sym_match] = ACTIONS(568), [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(582), - [anon_sym_PLUS] = ACTIONS(582), - [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_RBRACK] = ACTIONS(586), - [anon_sym_LBRACE] = ACTIONS(283), + [anon_sym_DASH] = ACTIONS(275), + [anon_sym_PLUS] = ACTIONS(275), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_RBRACK] = ACTIONS(291), + [anon_sym_LBRACE] = ACTIONS(279), [anon_sym_STAR_STAR] = ACTIONS(260), - [anon_sym_EQ] = ACTIONS(586), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), + [anon_sym_EQ] = ACTIONS(291), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), [anon_sym_AT] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), [anon_sym_PERCENT] = ACTIONS(260), @@ -23682,597 +22096,597 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_AMP] = ACTIONS(260), [anon_sym_CARET] = ACTIONS(260), [anon_sym_LT_LT] = ACTIONS(260), - [anon_sym_TILDE] = ACTIONS(291), - [anon_sym_PLUS_EQ] = ACTIONS(586), - [anon_sym_DASH_EQ] = ACTIONS(586), - [anon_sym_STAR_EQ] = ACTIONS(586), - [anon_sym_SLASH_EQ] = ACTIONS(586), - [anon_sym_AT_EQ] = ACTIONS(586), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(586), - [anon_sym_PERCENT_EQ] = ACTIONS(586), - [anon_sym_STAR_STAR_EQ] = ACTIONS(586), - [anon_sym_GT_GT_EQ] = ACTIONS(586), - [anon_sym_LT_LT_EQ] = ACTIONS(586), - [anon_sym_AMP_EQ] = ACTIONS(586), - [anon_sym_CARET_EQ] = ACTIONS(586), - [anon_sym_PIPE_EQ] = ACTIONS(586), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [anon_sym_TILDE] = ACTIONS(285), + [anon_sym_PLUS_EQ] = ACTIONS(291), + [anon_sym_DASH_EQ] = ACTIONS(291), + [anon_sym_STAR_EQ] = ACTIONS(291), + [anon_sym_SLASH_EQ] = ACTIONS(291), + [anon_sym_AT_EQ] = ACTIONS(291), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(291), + [anon_sym_PERCENT_EQ] = ACTIONS(291), + [anon_sym_STAR_STAR_EQ] = ACTIONS(291), + [anon_sym_GT_GT_EQ] = ACTIONS(291), + [anon_sym_LT_LT_EQ] = ACTIONS(291), + [anon_sym_AMP_EQ] = ACTIONS(291), + [anon_sym_CARET_EQ] = ACTIONS(291), + [anon_sym_PIPE_EQ] = ACTIONS(291), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [141] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), - [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(297), - [anon_sym_COMMA] = ACTIONS(297), - [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(297), - [anon_sym_async] = ACTIONS(576), - [anon_sym_in] = ACTIONS(275), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(260), - [anon_sym_DASH] = ACTIONS(582), - [anon_sym_PLUS] = ACTIONS(582), - [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_RBRACK] = ACTIONS(297), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(260), - [anon_sym_EQ] = ACTIONS(297), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(260), - [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(260), - [anon_sym_SLASH_SLASH] = ACTIONS(260), - [anon_sym_AMP] = ACTIONS(260), - [anon_sym_CARET] = ACTIONS(260), - [anon_sym_LT_LT] = ACTIONS(260), - [anon_sym_TILDE] = ACTIONS(291), - [anon_sym_PLUS_EQ] = ACTIONS(297), - [anon_sym_DASH_EQ] = ACTIONS(297), - [anon_sym_STAR_EQ] = ACTIONS(297), - [anon_sym_SLASH_EQ] = ACTIONS(297), - [anon_sym_AT_EQ] = ACTIONS(297), - [anon_sym_SLASH_SLASH_EQ] = ACTIONS(297), - [anon_sym_PERCENT_EQ] = ACTIONS(297), - [anon_sym_STAR_STAR_EQ] = ACTIONS(297), - [anon_sym_GT_GT_EQ] = ACTIONS(297), - [anon_sym_LT_LT_EQ] = ACTIONS(297), - [anon_sym_AMP_EQ] = ACTIONS(297), - [anon_sym_CARET_EQ] = ACTIONS(297), - [anon_sym_PIPE_EQ] = ACTIONS(297), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), - [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), - }, - [142] = { [sym_primary_expression] = STATE(709), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_attribute] = STATE(773), - [sym_subscript] = STATE(773), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_concatenated_string] = STATE(773), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_attribute] = STATE(764), + [sym_subscript] = STATE(764), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_concatenated_string] = STATE(764), [sym_string] = STATE(693), - [sym_await] = STATE(773), + [sym_await] = STATE(764), [sym_identifier] = ACTIONS(77), [anon_sym_DOT] = ACTIONS(260), [anon_sym_from] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(561), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(555), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(563), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(273), + [anon_sym_print] = ACTIONS(557), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(271), [anon_sym_if] = ACTIONS(260), - [anon_sym_async] = ACTIONS(563), + [anon_sym_async] = ACTIONS(557), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(563), - [anon_sym_PIPE] = ACTIONS(293), + [anon_sym_match] = ACTIONS(557), + [anon_sym_PIPE] = ACTIONS(287), [anon_sym_DASH] = ACTIONS(47), [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(567), + [anon_sym_LBRACK] = ACTIONS(561), [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(293), + [anon_sym_STAR_STAR] = ACTIONS(287), [anon_sym_EQ] = ACTIONS(260), - [anon_sym_exec] = ACTIONS(563), - [anon_sym_type] = ACTIONS(563), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_exec] = ACTIONS(557), + [anon_sym_type] = ACTIONS(557), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), [anon_sym_TILDE] = ACTIONS(47), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), [sym_ellipsis] = ACTIONS(75), [sym_integer] = ACTIONS(77), [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(569), + [anon_sym_await] = ACTIONS(563), [sym_true] = ACTIONS(77), [sym_false] = ACTIONS(77), [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), [sym__string_start] = ACTIONS(81), }, + [142] = { + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), + [anon_sym_DOT] = ACTIONS(260), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(574), + [anon_sym_COMMA] = ACTIONS(574), + [anon_sym_STAR] = ACTIONS(260), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(260), + [anon_sym_COLON] = ACTIONS(574), + [anon_sym_async] = ACTIONS(568), + [anon_sym_in] = ACTIONS(572), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(260), + [anon_sym_DASH] = ACTIONS(275), + [anon_sym_PLUS] = ACTIONS(275), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_RBRACK] = ACTIONS(574), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(260), + [anon_sym_EQ] = ACTIONS(574), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(260), + [anon_sym_SLASH] = ACTIONS(260), + [anon_sym_PERCENT] = ACTIONS(260), + [anon_sym_SLASH_SLASH] = ACTIONS(260), + [anon_sym_AMP] = ACTIONS(260), + [anon_sym_CARET] = ACTIONS(260), + [anon_sym_LT_LT] = ACTIONS(260), + [anon_sym_TILDE] = ACTIONS(285), + [anon_sym_PLUS_EQ] = ACTIONS(574), + [anon_sym_DASH_EQ] = ACTIONS(574), + [anon_sym_STAR_EQ] = ACTIONS(574), + [anon_sym_SLASH_EQ] = ACTIONS(574), + [anon_sym_AT_EQ] = ACTIONS(574), + [anon_sym_SLASH_SLASH_EQ] = ACTIONS(574), + [anon_sym_PERCENT_EQ] = ACTIONS(574), + [anon_sym_STAR_STAR_EQ] = ACTIONS(574), + [anon_sym_GT_GT_EQ] = ACTIONS(574), + [anon_sym_LT_LT_EQ] = ACTIONS(574), + [anon_sym_AMP_EQ] = ACTIONS(574), + [anon_sym_CARET_EQ] = ACTIONS(574), + [anon_sym_PIPE_EQ] = ACTIONS(574), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), + [sym_comment] = ACTIONS(3), + [sym__string_start] = ACTIONS(299), + }, [143] = { - [sym_primary_expression] = STATE(727), - [sym_binary_operator] = STATE(796), - [sym_unary_operator] = STATE(796), - [sym_attribute] = STATE(796), - [sym_subscript] = STATE(796), - [sym_call] = STATE(796), - [sym_list] = STATE(796), - [sym_set] = STATE(796), - [sym_tuple] = STATE(796), - [sym_dictionary] = STATE(796), - [sym_list_comprehension] = STATE(796), - [sym_dictionary_comprehension] = STATE(796), - [sym_set_comprehension] = STATE(796), - [sym_generator_expression] = STATE(796), - [sym_parenthesized_expression] = STATE(796), - [sym_concatenated_string] = STATE(796), - [sym_string] = STATE(699), - [sym_await] = STATE(796), - [sym_identifier] = ACTIONS(600), + [sym_primary_expression] = STATE(709), + [sym_binary_operator] = STATE(764), + [sym_unary_operator] = STATE(764), + [sym_attribute] = STATE(764), + [sym_subscript] = STATE(764), + [sym_call] = STATE(764), + [sym_list] = STATE(764), + [sym_set] = STATE(764), + [sym_tuple] = STATE(764), + [sym_dictionary] = STATE(764), + [sym_list_comprehension] = STATE(764), + [sym_dictionary_comprehension] = STATE(764), + [sym_set_comprehension] = STATE(764), + [sym_generator_expression] = STATE(764), + [sym_parenthesized_expression] = STATE(764), + [sym_concatenated_string] = STATE(764), + [sym_string] = STATE(693), + [sym_await] = STATE(764), + [sym_identifier] = ACTIONS(77), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(602), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), - [anon_sym_as] = ACTIONS(260), + [anon_sym_from] = ACTIONS(260), + [anon_sym_LPAREN] = ACTIONS(555), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(604), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(606), + [anon_sym_print] = ACTIONS(557), + [anon_sym_GT_GT] = ACTIONS(287), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(260), - [anon_sym_async] = ACTIONS(604), + [anon_sym_async] = ACTIONS(557), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(604), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(608), - [anon_sym_PLUS] = ACTIONS(608), - [anon_sym_LBRACK] = ACTIONS(610), - [anon_sym_LBRACE] = ACTIONS(612), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_exec] = ACTIONS(604), - [anon_sym_type] = ACTIONS(604), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(557), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(47), + [anon_sym_PLUS] = ACTIONS(47), + [anon_sym_LBRACK] = ACTIONS(561), + [anon_sym_LBRACE] = ACTIONS(51), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_EQ] = ACTIONS(260), + [anon_sym_exec] = ACTIONS(557), + [anon_sym_type] = ACTIONS(557), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(608), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(47), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(614), - [sym_integer] = ACTIONS(600), - [sym_float] = ACTIONS(614), - [anon_sym_await] = ACTIONS(616), - [sym_true] = ACTIONS(600), - [sym_false] = ACTIONS(600), - [sym_none] = ACTIONS(600), + [sym_ellipsis] = ACTIONS(75), + [sym_integer] = ACTIONS(77), + [sym_float] = ACTIONS(75), + [anon_sym_await] = ACTIONS(563), + [sym_true] = ACTIONS(77), + [sym_false] = ACTIONS(77), + [sym_none] = ACTIONS(77), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(618), + [sym__semicolon] = ACTIONS(287), + [sym__newline] = ACTIONS(287), + [sym__string_start] = ACTIONS(81), }, [144] = { - [sym_primary_expression] = STATE(629), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(626), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(590), - [anon_sym_RPAREN] = ACTIONS(265), - [anon_sym_COMMA] = ACTIONS(265), + [anon_sym_LPAREN] = ACTIONS(578), + [anon_sym_RPAREN] = ACTIONS(264), + [anon_sym_COMMA] = ACTIONS(264), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(592), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(580), [anon_sym_if] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), + [anon_sym_async] = ACTIONS(568), [anon_sym_for] = ACTIONS(260), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(594), - [anon_sym_PLUS] = ACTIONS(594), - [anon_sym_LBRACK] = ACTIONS(596), - [anon_sym_RBRACK] = ACTIONS(265), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(582), + [anon_sym_PLUS] = ACTIONS(582), + [anon_sym_LBRACK] = ACTIONS(584), + [anon_sym_RBRACK] = ACTIONS(264), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(594), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(582), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(598), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(586), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [145] = { - [sym_primary_expression] = STATE(709), - [sym_binary_operator] = STATE(773), - [sym_unary_operator] = STATE(773), - [sym_attribute] = STATE(773), - [sym_subscript] = STATE(773), - [sym_call] = STATE(773), - [sym_list] = STATE(773), - [sym_set] = STATE(773), - [sym_tuple] = STATE(773), - [sym_dictionary] = STATE(773), - [sym_list_comprehension] = STATE(773), - [sym_dictionary_comprehension] = STATE(773), - [sym_set_comprehension] = STATE(773), - [sym_generator_expression] = STATE(773), - [sym_parenthesized_expression] = STATE(773), - [sym_concatenated_string] = STATE(773), - [sym_string] = STATE(693), - [sym_await] = STATE(773), - [sym_identifier] = ACTIONS(77), + [sym_primary_expression] = STATE(718), + [sym_binary_operator] = STATE(787), + [sym_unary_operator] = STATE(787), + [sym_attribute] = STATE(787), + [sym_subscript] = STATE(787), + [sym_call] = STATE(787), + [sym_list] = STATE(787), + [sym_set] = STATE(787), + [sym_tuple] = STATE(787), + [sym_dictionary] = STATE(787), + [sym_list_comprehension] = STATE(787), + [sym_dictionary_comprehension] = STATE(787), + [sym_set_comprehension] = STATE(787), + [sym_generator_expression] = STATE(787), + [sym_parenthesized_expression] = STATE(787), + [sym_concatenated_string] = STATE(787), + [sym_string] = STATE(708), + [sym_await] = STATE(787), + [sym_identifier] = ACTIONS(588), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_from] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(561), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(590), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), + [anon_sym_as] = ACTIONS(260), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(563), - [anon_sym_GT_GT] = ACTIONS(293), + [anon_sym_print] = ACTIONS(592), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(594), [anon_sym_if] = ACTIONS(260), - [anon_sym_async] = ACTIONS(563), + [anon_sym_COLON] = ACTIONS(260), + [anon_sym_async] = ACTIONS(592), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(563), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(47), - [anon_sym_PLUS] = ACTIONS(47), - [anon_sym_LBRACK] = ACTIONS(567), - [anon_sym_LBRACE] = ACTIONS(51), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_EQ] = ACTIONS(260), - [anon_sym_exec] = ACTIONS(563), - [anon_sym_type] = ACTIONS(563), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(592), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(596), + [anon_sym_PLUS] = ACTIONS(596), + [anon_sym_LBRACK] = ACTIONS(598), + [anon_sym_LBRACE] = ACTIONS(600), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_exec] = ACTIONS(592), + [anon_sym_type] = ACTIONS(592), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(47), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(596), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(75), - [sym_integer] = ACTIONS(77), - [sym_float] = ACTIONS(75), - [anon_sym_await] = ACTIONS(569), - [sym_true] = ACTIONS(77), - [sym_false] = ACTIONS(77), - [sym_none] = ACTIONS(77), + [sym_ellipsis] = ACTIONS(602), + [sym_integer] = ACTIONS(588), + [sym_float] = ACTIONS(602), + [anon_sym_await] = ACTIONS(604), + [sym_true] = ACTIONS(588), + [sym_false] = ACTIONS(588), + [sym_none] = ACTIONS(588), [sym_comment] = ACTIONS(3), - [sym__semicolon] = ACTIONS(293), - [sym__newline] = ACTIONS(293), - [sym__string_start] = ACTIONS(81), + [sym__string_start] = ACTIONS(606), }, [146] = { - [sym_primary_expression] = STATE(629), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(626), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(590), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(578), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(592), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(580), [anon_sym_if] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), + [anon_sym_async] = ACTIONS(568), [anon_sym_for] = ACTIONS(260), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(594), - [anon_sym_PLUS] = ACTIONS(594), - [anon_sym_LBRACK] = ACTIONS(596), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_EQ] = ACTIONS(620), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(582), + [anon_sym_PLUS] = ACTIONS(582), + [anon_sym_LBRACK] = ACTIONS(584), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_EQ] = ACTIONS(608), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(594), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(582), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(598), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(586), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, [147] = { - [sym_primary_expression] = STATE(727), - [sym_binary_operator] = STATE(796), - [sym_unary_operator] = STATE(796), - [sym_attribute] = STATE(796), - [sym_subscript] = STATE(796), - [sym_call] = STATE(796), - [sym_list] = STATE(796), - [sym_set] = STATE(796), - [sym_tuple] = STATE(796), - [sym_dictionary] = STATE(796), - [sym_list_comprehension] = STATE(796), - [sym_dictionary_comprehension] = STATE(796), - [sym_set_comprehension] = STATE(796), - [sym_generator_expression] = STATE(796), - [sym_parenthesized_expression] = STATE(796), - [sym_concatenated_string] = STATE(796), - [sym_string] = STATE(699), - [sym_await] = STATE(796), - [sym_identifier] = ACTIONS(600), + [sym_primary_expression] = STATE(718), + [sym_binary_operator] = STATE(787), + [sym_unary_operator] = STATE(787), + [sym_attribute] = STATE(787), + [sym_subscript] = STATE(787), + [sym_call] = STATE(787), + [sym_list] = STATE(787), + [sym_set] = STATE(787), + [sym_tuple] = STATE(787), + [sym_dictionary] = STATE(787), + [sym_list_comprehension] = STATE(787), + [sym_dictionary_comprehension] = STATE(787), + [sym_set_comprehension] = STATE(787), + [sym_generator_expression] = STATE(787), + [sym_parenthesized_expression] = STATE(787), + [sym_concatenated_string] = STATE(787), + [sym_string] = STATE(708), + [sym_await] = STATE(787), + [sym_identifier] = ACTIONS(588), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(602), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(590), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_as] = ACTIONS(260), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(604), - [anon_sym_GT_GT] = ACTIONS(293), + [anon_sym_print] = ACTIONS(592), + [anon_sym_GT_GT] = ACTIONS(287), [anon_sym_if] = ACTIONS(260), - [anon_sym_COLON] = ACTIONS(293), - [anon_sym_async] = ACTIONS(604), + [anon_sym_COLON] = ACTIONS(287), + [anon_sym_async] = ACTIONS(592), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(604), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(608), - [anon_sym_PLUS] = ACTIONS(608), - [anon_sym_LBRACK] = ACTIONS(610), - [anon_sym_LBRACE] = ACTIONS(612), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_exec] = ACTIONS(604), - [anon_sym_type] = ACTIONS(604), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(592), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(596), + [anon_sym_PLUS] = ACTIONS(596), + [anon_sym_LBRACK] = ACTIONS(598), + [anon_sym_LBRACE] = ACTIONS(600), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_exec] = ACTIONS(592), + [anon_sym_type] = ACTIONS(592), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(608), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(596), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(614), - [sym_integer] = ACTIONS(600), - [sym_float] = ACTIONS(614), - [anon_sym_await] = ACTIONS(616), - [sym_true] = ACTIONS(600), - [sym_false] = ACTIONS(600), - [sym_none] = ACTIONS(600), + [sym_ellipsis] = ACTIONS(602), + [sym_integer] = ACTIONS(588), + [sym_float] = ACTIONS(602), + [anon_sym_await] = ACTIONS(604), + [sym_true] = ACTIONS(588), + [sym_false] = ACTIONS(588), + [sym_none] = ACTIONS(588), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(618), + [sym__string_start] = ACTIONS(606), }, [148] = { - [sym_primary_expression] = STATE(631), - [sym_binary_operator] = STATE(589), - [sym_unary_operator] = STATE(589), - [sym_attribute] = STATE(589), - [sym_subscript] = STATE(589), - [sym_call] = STATE(589), - [sym_list] = STATE(589), - [sym_set] = STATE(589), - [sym_tuple] = STATE(589), - [sym_dictionary] = STATE(589), - [sym_list_comprehension] = STATE(589), - [sym_dictionary_comprehension] = STATE(589), - [sym_set_comprehension] = STATE(589), - [sym_generator_expression] = STATE(589), - [sym_parenthesized_expression] = STATE(589), - [sym_concatenated_string] = STATE(589), - [sym_string] = STATE(565), - [sym_await] = STATE(589), - [sym_identifier] = ACTIONS(301), + [sym_primary_expression] = STATE(632), + [sym_binary_operator] = STATE(575), + [sym_unary_operator] = STATE(575), + [sym_attribute] = STATE(575), + [sym_subscript] = STATE(575), + [sym_call] = STATE(575), + [sym_list] = STATE(575), + [sym_set] = STATE(575), + [sym_tuple] = STATE(575), + [sym_dictionary] = STATE(575), + [sym_list_comprehension] = STATE(575), + [sym_dictionary_comprehension] = STATE(575), + [sym_set_comprehension] = STATE(575), + [sym_generator_expression] = STATE(575), + [sym_parenthesized_expression] = STATE(575), + [sym_concatenated_string] = STATE(575), + [sym_string] = STATE(569), + [sym_await] = STATE(575), + [sym_identifier] = ACTIONS(295), [anon_sym_DOT] = ACTIONS(260), - [anon_sym_LPAREN] = ACTIONS(571), - [anon_sym_RPAREN] = ACTIONS(293), - [anon_sym_COMMA] = ACTIONS(293), + [anon_sym_LPAREN] = ACTIONS(262), + [anon_sym_RPAREN] = ACTIONS(287), + [anon_sym_COMMA] = ACTIONS(287), [anon_sym_STAR] = ACTIONS(260), - [anon_sym_print] = ACTIONS(576), - [anon_sym_GT_GT] = ACTIONS(293), - [anon_sym_COLON_EQ] = ACTIONS(578), + [anon_sym_print] = ACTIONS(568), + [anon_sym_GT_GT] = ACTIONS(287), + [anon_sym_COLON_EQ] = ACTIONS(570), [anon_sym_if] = ACTIONS(260), - [anon_sym_async] = ACTIONS(576), + [anon_sym_async] = ACTIONS(568), [anon_sym_in] = ACTIONS(260), - [anon_sym_match] = ACTIONS(576), - [anon_sym_PIPE] = ACTIONS(293), - [anon_sym_DASH] = ACTIONS(291), - [anon_sym_PLUS] = ACTIONS(291), - [anon_sym_LBRACK] = ACTIONS(584), - [anon_sym_LBRACE] = ACTIONS(283), - [anon_sym_STAR_STAR] = ACTIONS(293), - [anon_sym_EQ] = ACTIONS(620), - [anon_sym_exec] = ACTIONS(576), - [anon_sym_type] = ACTIONS(576), - [anon_sym_AT] = ACTIONS(293), + [anon_sym_match] = ACTIONS(568), + [anon_sym_PIPE] = ACTIONS(287), + [anon_sym_DASH] = ACTIONS(285), + [anon_sym_PLUS] = ACTIONS(285), + [anon_sym_LBRACK] = ACTIONS(277), + [anon_sym_LBRACE] = ACTIONS(279), + [anon_sym_STAR_STAR] = ACTIONS(287), + [anon_sym_EQ] = ACTIONS(608), + [anon_sym_exec] = ACTIONS(568), + [anon_sym_type] = ACTIONS(568), + [anon_sym_AT] = ACTIONS(287), [anon_sym_not] = ACTIONS(260), [anon_sym_and] = ACTIONS(260), [anon_sym_or] = ACTIONS(260), [anon_sym_SLASH] = ACTIONS(260), - [anon_sym_PERCENT] = ACTIONS(293), - [anon_sym_SLASH_SLASH] = ACTIONS(293), - [anon_sym_AMP] = ACTIONS(293), - [anon_sym_CARET] = ACTIONS(293), - [anon_sym_LT_LT] = ACTIONS(293), - [anon_sym_TILDE] = ACTIONS(291), + [anon_sym_PERCENT] = ACTIONS(287), + [anon_sym_SLASH_SLASH] = ACTIONS(287), + [anon_sym_AMP] = ACTIONS(287), + [anon_sym_CARET] = ACTIONS(287), + [anon_sym_LT_LT] = ACTIONS(287), + [anon_sym_TILDE] = ACTIONS(285), [anon_sym_LT] = ACTIONS(260), - [anon_sym_LT_EQ] = ACTIONS(293), - [anon_sym_EQ_EQ] = ACTIONS(293), - [anon_sym_BANG_EQ] = ACTIONS(293), - [anon_sym_GT_EQ] = ACTIONS(293), + [anon_sym_LT_EQ] = ACTIONS(287), + [anon_sym_EQ_EQ] = ACTIONS(287), + [anon_sym_BANG_EQ] = ACTIONS(287), + [anon_sym_GT_EQ] = ACTIONS(287), [anon_sym_GT] = ACTIONS(260), - [anon_sym_LT_GT] = ACTIONS(293), + [anon_sym_LT_GT] = ACTIONS(287), [anon_sym_is] = ACTIONS(260), - [sym_ellipsis] = ACTIONS(299), - [sym_integer] = ACTIONS(301), - [sym_float] = ACTIONS(299), - [anon_sym_await] = ACTIONS(588), - [sym_true] = ACTIONS(301), - [sym_false] = ACTIONS(301), - [sym_none] = ACTIONS(301), + [sym_ellipsis] = ACTIONS(293), + [sym_integer] = ACTIONS(295), + [sym_float] = ACTIONS(293), + [anon_sym_await] = ACTIONS(576), + [sym_true] = ACTIONS(295), + [sym_false] = ACTIONS(295), + [sym_none] = ACTIONS(295), [sym_comment] = ACTIONS(3), - [sym__string_start] = ACTIONS(305), + [sym__string_start] = ACTIONS(299), }, }; @@ -24302,30 +22716,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(847), 1, + STATE(850), 1, sym_pattern, - STATE(855), 1, + STATE(857), 1, sym_pattern_list, - STATE(1004), 1, + STATE(976), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(414), 2, sym_attribute, sym_subscript, - STATE(1283), 2, + STATE(1300), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -24334,26 +22748,26 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(307), 5, + ACTIONS(301), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1341), 5, + STATE(1353), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 14, + STATE(764), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24393,30 +22807,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(847), 1, + STATE(850), 1, sym_pattern, - STATE(855), 1, + STATE(857), 1, sym_pattern_list, - STATE(1004), 1, + STATE(976), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(414), 2, sym_attribute, sym_subscript, - STATE(1283), 2, + STATE(1300), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -24425,26 +22839,26 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(307), 5, + ACTIONS(301), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1342), 5, + STATE(1346), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 14, + STATE(764), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24484,30 +22898,30 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_await, ACTIONS(81), 1, sym__string_start, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(847), 1, + STATE(850), 1, sym_pattern, - STATE(855), 1, + STATE(857), 1, sym_pattern_list, - STATE(1004), 1, + STATE(976), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(431), 2, + STATE(414), 2, sym_attribute, sym_subscript, - STATE(1283), 2, + STATE(1300), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, @@ -24516,26 +22930,26 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(307), 5, + ACTIONS(301), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(1304), 5, + STATE(1293), 5, sym_expression_list, sym_assignment, sym_augmented_assignment, sym__right_hand_side, sym_yield, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 14, + STATE(764), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24557,61 +22971,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(622), 1, + ACTIONS(610), 1, anon_sym_from, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(870), 1, + STATE(877), 1, sym_expression, - STATE(1000), 1, + STATE(988), 1, sym_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, + STATE(1329), 2, sym_list_splat, sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - ACTIONS(624), 7, + ACTIONS(612), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -24619,7 +23033,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -24639,78 +23053,78 @@ static const uint16_t ts_small_parse_table[] = { [464] = 28, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(634), 1, + ACTIONS(618), 1, anon_sym_RPAREN, - ACTIONS(636), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(640), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(648), 1, + ACTIONS(632), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(900), 1, + STATE(912), 1, sym_expression, - STATE(1120), 1, + STATE(1112), 1, sym_pattern, - STATE(1156), 1, + STATE(1192), 1, sym_yield, - STATE(1395), 1, + STATE(1380), 1, sym__patterns, - STATE(1420), 1, + STATE(1389), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(771), 2, sym_attribute, sym_subscript, - STATE(1081), 2, + STATE(1065), 2, sym_list_splat, sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24725,81 +23139,80 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [581] = 28, + [581] = 27, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(636), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(640), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(648), 1, + ACTIONS(632), 1, anon_sym_await, - ACTIONS(650), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(634), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(894), 1, + STATE(898), 1, sym_expression, - STATE(1120), 1, + STATE(1112), 1, sym_pattern, - STATE(1242), 1, - sym_yield, - STATE(1378), 1, + STATE(1393), 1, sym__collection_elements, - STATE(1395), 1, + STATE(1406), 1, sym__patterns, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(771), 2, sym_attribute, sym_subscript, - STATE(1081), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24814,58 +23227,58 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [698] = 21, + [696] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(291), 1, + ACTIONS(285), 1, anon_sym_TILDE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(656), 1, + ACTIONS(640), 1, anon_sym_STAR, - ACTIONS(662), 1, + ACTIONS(646), 1, anon_sym_in, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(840), 1, + STATE(834), 1, sym_pattern, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(582), 2, + ACTIONS(275), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(722), 2, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + STATE(712), 2, sym_attribute, sym_subscript, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24880,7 +23293,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - ACTIONS(660), 15, + ACTIONS(644), 15, anon_sym_COLON, anon_sym_EQ, anon_sym_PLUS_EQ, @@ -24896,82 +23309,58 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [801] = 29, + [799] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(285), 1, + anon_sym_TILDE, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(636), 1, - anon_sym_STAR, ACTIONS(640), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, - anon_sym_not, - ACTIONS(644), 1, - anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, + anon_sym_STAR, ACTIONS(648), 1, + anon_sym_LBRACK, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(668), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(654), 1, + anon_sym_in, + STATE(569), 1, sym_string, - STATE(590), 1, - sym_primary_expression, - STATE(894), 1, - sym_expression, - STATE(1120), 1, + STATE(834), 1, sym_pattern, - STATE(1222), 1, - sym_list_splat, - STATE(1223), 1, - sym_parenthesized_list_splat, - STATE(1242), 1, - sym_yield, - STATE(1378), 1, - sym__collection_elements, - STATE(1395), 1, - sym__patterns, - ACTIONS(299), 2, + STATE(843), 1, + sym_primary_expression, + ACTIONS(275), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(594), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -24986,80 +23375,96 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [920] = 27, + ACTIONS(652), 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, + [902] = 27, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(636), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(640), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(648), 1, + ACTIONS(632), 1, anon_sym_await, - ACTIONS(670), 1, + ACTIONS(656), 1, anon_sym_RBRACK, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, STATE(893), 1, sym_expression, - STATE(1120), 1, + STATE(1112), 1, sym_pattern, - STATE(1417), 1, + STATE(1406), 1, sym__patterns, - STATE(1443), 1, + STATE(1413), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(771), 2, sym_attribute, sym_subscript, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - STATE(1081), 3, + STATE(1065), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -25074,80 +23479,82 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1035] = 27, + [1017] = 29, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(636), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(640), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(648), 1, + ACTIONS(632), 1, anon_sym_await, - ACTIONS(672), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(658), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(910), 1, + STATE(912), 1, sym_expression, - STATE(1120), 1, + STATE(1112), 1, sym_pattern, - STATE(1417), 1, + STATE(1192), 1, + sym_yield, + STATE(1243), 1, + sym_parenthesized_list_splat, + STATE(1244), 1, + sym_list_splat, + STATE(1380), 1, sym__patterns, - STATE(1426), 1, + STATE(1389), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(771), 2, sym_attribute, sym_subscript, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - STATE(1081), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -25162,80 +23569,80 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1150] = 27, + [1136] = 27, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(630), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(632), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(636), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(640), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(648), 1, + ACTIONS(632), 1, anon_sym_await, - ACTIONS(674), 1, + ACTIONS(660), 1, anon_sym_RBRACK, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(910), 1, + STATE(898), 1, sym_expression, - STATE(1120), 1, + STATE(1112), 1, sym_pattern, - STATE(1417), 1, - sym__patterns, - STATE(1426), 1, + STATE(1393), 1, sym__collection_elements, - ACTIONS(299), 2, + STATE(1406), 1, + sym__patterns, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(741), 2, + STATE(771), 2, sym_attribute, sym_subscript, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - STATE(1081), 3, + STATE(1065), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(638), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -25250,58 +23657,81 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1265] = 21, + [1251] = 28, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(291), 1, - anon_sym_TILDE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(614), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(616), 1, anon_sym_LPAREN, - ACTIONS(656), 1, + ACTIONS(620), 1, anon_sym_STAR, - ACTIONS(664), 1, + ACTIONS(624), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(626), 1, + anon_sym_not, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(632), 1, anon_sym_await, - ACTIONS(678), 1, - anon_sym_in, - STATE(565), 1, + ACTIONS(662), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(840), 1, - sym_pattern, - STATE(844), 1, + STATE(576), 1, sym_primary_expression, - ACTIONS(299), 2, + STATE(905), 1, + sym_expression, + STATE(1112), 1, + sym_pattern, + STATE(1216), 1, + sym_yield, + STATE(1370), 1, + sym__collection_elements, + STATE(1380), 1, + sym__patterns, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(582), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(722), 2, + STATE(771), 2, sym_attribute, sym_subscript, - STATE(833), 3, + STATE(1065), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(582), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(622), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -25316,88 +23746,77 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - ACTIONS(676), 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, - [1368] = 22, + [1368] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(666), 1, + anon_sym_LPAREN, + ACTIONS(668), 1, + anon_sym_COMMA, + ACTIONS(672), 1, + anon_sym_RBRACE, + ACTIONS(674), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(902), 1, + STATE(873), 1, sym_expression, - ACTIONS(299), 2, + STATE(971), 1, + sym_pair, + STATE(1199), 1, + sym_dictionary_splat, + STATE(1401), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1005), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - ACTIONS(680), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25414,64 +23833,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1472] = 22, + [1482] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(902), 1, + STATE(897), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1005), 2, + STATE(998), 2, sym_list_splat, sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - ACTIONS(680), 7, + ACTIONS(676), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -25479,7 +23898,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25496,72 +23915,77 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1576] = 22, + [1586] = 27, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(666), 1, + anon_sym_LPAREN, + ACTIONS(674), 1, + anon_sym_await, + ACTIONS(678), 1, + anon_sym_COMMA, + ACTIONS(680), 1, + anon_sym_RBRACE, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(902), 1, + STATE(869), 1, sym_expression, - ACTIONS(299), 2, + STATE(974), 1, + sym_pair, + STATE(1207), 1, + sym_dictionary_splat, + STATE(1460), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1005), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - ACTIONS(682), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25578,77 +24002,72 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1680] = 27, + [1700] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, anon_sym_STAR, - ACTIONS(642), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(688), 1, - anon_sym_COMMA, - ACTIONS(692), 1, - anon_sym_RBRACE, - ACTIONS(694), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(868), 1, + STATE(897), 1, sym_expression, - STATE(996), 1, - sym_pair, - STATE(1261), 1, - sym_dictionary_splat, - STATE(1401), 1, - sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + STATE(998), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + ACTIONS(676), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25665,77 +24084,72 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [1794] = 27, + [1804] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, anon_sym_STAR, - ACTIONS(642), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(696), 1, - anon_sym_COMMA, - ACTIONS(698), 1, - anon_sym_RBRACE, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(867), 1, + STATE(897), 1, sym_expression, - STATE(1010), 1, - sym_pair, - STATE(1224), 1, - sym_dictionary_splat, - STATE(1355), 1, - sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + STATE(998), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + ACTIONS(682), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25757,72 +24171,72 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(642), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(700), 1, + ACTIONS(684), 1, anon_sym_COMMA, - ACTIONS(702), 1, + ACTIONS(686), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(888), 1, + STATE(874), 1, sym_expression, - STATE(990), 1, + STATE(986), 1, sym_pair, - STATE(1247), 1, + STATE(1178), 1, sym_dictionary_splat, - STATE(1368), 1, + STATE(1363), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, + STATE(1065), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25839,72 +24253,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2022] = 25, + [2022] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(694), 1, - anon_sym_await, - ACTIONS(704), 1, - anon_sym_RPAREN, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(884), 1, + STATE(1009), 1, sym_expression, - STATE(1179), 1, - sym_with_item, - STATE(1221), 1, - sym_yield, - STATE(1456), 1, - sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1081), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(690), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1133), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -25921,71 +24332,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2129] = 24, + [2123] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(69), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, + ACTIONS(666), 1, + anon_sym_LPAREN, + ACTIONS(694), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(696), 1, + anon_sym_RPAREN, + ACTIONS(698), 1, + anon_sym_COMMA, + ACTIONS(702), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(708), 1, - anon_sym_from, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(956), 1, + STATE(576), 1, + sym_primary_expression, + STATE(904), 1, sym_expression, - STATE(1253), 1, - sym_expression_list, - ACTIONS(75), 2, + STATE(1225), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(710), 2, - sym__newline, - sym__semicolon, - STATE(1283), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + STATE(1218), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(700), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26002,71 +24413,72 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2234] = 24, + [2228] = 25, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(716), 1, - anon_sym_RPAREN, - ACTIONS(718), 1, - anon_sym_COMMA, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(704), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1026), 1, + STATE(875), 1, sym_expression, - STATE(1276), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + STATE(1177), 1, + sym_yield, + STATE(1185), 1, + sym_with_item, + STATE(1359), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(1065), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1275), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26083,71 +24495,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2339] = 24, + [2335] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, anon_sym_STAR, - ACTIONS(642), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(716), 1, - anon_sym_RPAREN, - ACTIONS(718), 1, - anon_sym_COMMA, - ACTIONS(724), 1, - sym_identifier, - ACTIONS(728), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(630), 1, + anon_sym_yield, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(895), 1, + STATE(918), 1, sym_expression, - STATE(1276), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + STATE(1329), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1275), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + STATE(1074), 3, + sym_expression_list, + sym_yield, + sym__f_expression, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(726), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26164,70 +24575,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2444] = 23, + [2438] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(918), 1, + STATE(1009), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1067), 3, - sym_expression_list, + ACTIONS(706), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1133), 3, + sym_list_splat, + sym_parenthesized_list_splat, sym_yield, - sym__f_expression, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26244,71 +24654,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2547] = 24, + [2539] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(724), 1, - sym_identifier, - ACTIONS(728), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(730), 1, - anon_sym_RPAREN, - ACTIONS(732), 1, - anon_sym_COMMA, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(688), 1, + anon_sym_LPAREN, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(906), 1, + STATE(1009), 1, sym_expression, - STATE(1234), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1233), 3, + ACTIONS(690), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + STATE(1133), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(726), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26325,71 +24733,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2652] = 24, + [2640] = 24, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(642), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(724), 1, + ACTIONS(694), 1, sym_identifier, - ACTIONS(728), 1, + ACTIONS(702), 1, anon_sym_await, - ACTIONS(734), 1, + ACTIONS(708), 1, anon_sym_RPAREN, - ACTIONS(736), 1, + ACTIONS(710), 1, anon_sym_COMMA, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(901), 1, + STATE(900), 1, sym_expression, - STATE(1202), 1, + STATE(1230), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1159), 3, + STATE(1229), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(726), 5, + ACTIONS(700), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26406,69 +24814,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2757] = 22, + [2745] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(714), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - STATE(565), 1, + ACTIONS(708), 1, + anon_sym_RPAREN, + ACTIONS(710), 1, + anon_sym_COMMA, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(985), 1, + STATE(1031), 1, sym_expression, - ACTIONS(299), 2, + STATE(1230), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(738), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - STATE(1093), 3, + STATE(1229), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26485,70 +24895,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2858] = 23, + [2850] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(918), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, + STATE(1329), 2, sym_list_splat, sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1060), 3, + STATE(1052), 3, sym_expression_list, sym_yield, sym__f_expression, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26565,69 +24975,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [2961] = 22, + [2953] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(714), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(666), 1, anon_sym_LPAREN, - STATE(565), 1, + ACTIONS(694), 1, + sym_identifier, + ACTIONS(702), 1, + anon_sym_await, + ACTIONS(718), 1, + anon_sym_RPAREN, + ACTIONS(720), 1, + anon_sym_COMMA, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(985), 1, + STATE(903), 1, sym_expression, - ACTIONS(299), 2, + STATE(1220), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(740), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - STATE(1093), 3, + STATE(1219), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(700), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26644,69 +25056,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3062] = 22, + [3058] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(706), 1, + ACTIONS(267), 1, anon_sym_STAR, - ACTIONS(714), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(561), 1, + anon_sym_LBRACK, + ACTIONS(722), 1, + anon_sym_from, + STATE(692), 1, sym_primary_expression, - STATE(985), 1, + STATE(693), 1, + sym_string, + STATE(975), 1, sym_expression, - ACTIONS(299), 2, + STATE(1291), 1, + sym_expression_list, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(612), 2, + sym__newline, + sym__semicolon, + STATE(1300), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(740), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - STATE(1093), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26736,33 +25150,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(742), 1, + ACTIONS(724), 1, anon_sym_from, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1008), 1, + STATE(948), 1, sym_expression, - STATE(1315), 1, + STATE(1167), 1, sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(624), 2, + ACTIONS(726), 2, sym__newline, sym__semicolon, - STATE(1283), 2, + STATE(1300), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -26774,20 +25188,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26804,67 +25218,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3268] = 21, + [3268] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, - anon_sym_not, - ACTIONS(684), 1, + ACTIONS(712), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(748), 1, - anon_sym_lambda, - STATE(565), 1, + ACTIONS(728), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(920), 1, + STATE(1066), 1, sym_expression, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(986), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(744), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(746), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, - ACTIONS(301), 4, + STATE(1287), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 4, + ACTIONS(714), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26881,69 +25297,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3366] = 23, + [3370] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(750), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(730), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(911), 1, + STATE(1066), 1, sym_expression, - STATE(1462), 1, - sym__collection_elements, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, + STATE(1287), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -26960,70 +25376,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3468] = 24, + [3472] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(752), 1, + ACTIONS(732), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(900), 1, + STATE(1066), 1, sym_expression, - STATE(1156), 1, - sym_yield, - STATE(1420), 1, - sym__collection_elements, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1081), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + STATE(1287), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27040,69 +25455,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3572] = 23, + [3574] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, - anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(754), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(738), 1, + anon_sym_lambda, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(893), 1, + STATE(919), 1, sym_expression, - STATE(1443), 1, - sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + STATE(987), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + ACTIONS(734), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(736), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 4, anon_sym_print, - anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27119,71 +25532,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3674] = 25, + [3672] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, + ACTIONS(692), 1, + anon_sym_STAR, ACTIONS(704), 1, anon_sym_RPAREN, - ACTIONS(706), 1, - anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(894), 1, + STATE(896), 1, sym_expression, - STATE(1222), 1, - sym_list_splat, - STATE(1223), 1, - sym_parenthesized_list_splat, - STATE(1242), 1, + STATE(1177), 1, sym_yield, - STATE(1378), 1, + STATE(1359), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + STATE(1065), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27200,69 +25612,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3780] = 23, + [3776] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(688), 1, + anon_sym_LPAREN, + ACTIONS(712), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(756), 1, - anon_sym_from, - ACTIONS(758), 1, - anon_sym_STAR, - ACTIONS(760), 1, - anon_sym_STAR_STAR, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(740), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(998), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1066), 1, sym_expression, - ACTIONS(75), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(680), 2, - sym__newline, - sym__semicolon, - STATE(1128), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + STATE(1287), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27279,69 +25691,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3882] = 23, + [3878] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(331), 1, - anon_sym_await, - ACTIONS(561), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(756), 1, - anon_sym_from, - ACTIONS(758), 1, + ACTIONS(674), 1, + anon_sym_await, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(760), 1, - anon_sym_STAR_STAR, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(704), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(998), 1, + STATE(576), 1, + sym_primary_expression, + STATE(912), 1, sym_expression, - ACTIONS(75), 2, + STATE(1192), 1, + sym_yield, + STATE(1389), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(680), 2, - sym__newline, - sym__semicolon, - STATE(1128), 2, + STATE(1065), 2, sym_list_splat, - sym_dictionary_splat, - ACTIONS(47), 3, + sym_parenthesized_list_splat, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27358,69 +25771,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [3984] = 23, + [3982] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(762), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(742), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1073), 1, + STATE(905), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + STATE(1216), 1, + sym_yield, + STATE(1370), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(1065), 2, + sym_list_splat, + sym_parenthesized_list_splat, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27442,64 +25856,64 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(764), 1, + ACTIONS(744), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27519,66 +25933,66 @@ static const uint16_t ts_small_parse_table[] = { [4188] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(766), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(746), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1073), 1, + STATE(893), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + STATE(1413), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1065), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27600,64 +26014,64 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(768), 1, + ACTIONS(748), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27677,66 +26091,66 @@ static const uint16_t ts_small_parse_table[] = { [4392] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(712), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(770), 1, - anon_sym_RPAREN, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + ACTIONS(750), 1, + anon_sym_from, + ACTIONS(752), 1, + anon_sym_STAR, + ACTIONS(754), 1, + anon_sym_STAR_STAR, + STATE(692), 1, sym_primary_expression, - STATE(1073), 1, + STATE(693), 1, + sym_string, + STATE(972), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(676), 2, + sym__newline, + sym__semicolon, + STATE(1088), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27753,69 +26167,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [4494] = 23, + [4494] = 25, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(772), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(704), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1073), 1, + STATE(912), 1, sym_expression, - STATE(1318), 1, + STATE(1192), 1, + sym_yield, + STATE(1243), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + STATE(1244), 1, + sym_list_splat, + STATE(1389), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -27832,202 +26248,44 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [4596] = 23, - ACTIONS(3), 1, - sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(712), 1, - sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, - anon_sym_await, - ACTIONS(774), 1, - anon_sym_RPAREN, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1073), 1, - sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(720), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [4698] = 23, - ACTIONS(3), 1, - sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(712), 1, - sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, - anon_sym_await, - ACTIONS(776), 1, - anon_sym_RPAREN, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1073), 1, - sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(720), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [4800] = 23, + [4600] = 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(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(752), 1, anon_sym_STAR, - STATE(689), 1, + ACTIONS(754), 1, + anon_sym_STAR_STAR, + ACTIONS(756), 1, + anon_sym_from, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(994), 1, + STATE(972), 1, sym_expression, - STATE(1298), 1, - sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(778), 2, + ACTIONS(682), 2, sym__newline, sym__semicolon, - STATE(1283), 2, + STATE(1088), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -28039,20 +26297,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28069,67 +26327,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [4902] = 21, + [4702] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(666), 1, + anon_sym_LPAREN, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, - anon_sym_lambda, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(758), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(920), 1, + STATE(898), 1, sym_expression, - ACTIONS(299), 2, + STATE(1393), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(986), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - 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(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 4, + ACTIONS(670), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28146,71 +26406,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5000] = 25, + [4804] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(784), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(758), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(894), 1, + STATE(911), 1, sym_expression, - STATE(1222), 1, - sym_list_splat, - STATE(1223), 1, - sym_parenthesized_list_splat, - STATE(1242), 1, - sym_yield, - STATE(1378), 1, + STATE(1361), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28227,70 +26485,70 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5106] = 24, + [4906] = 24, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(704), 1, - anon_sym_RPAREN, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + ACTIONS(760), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(894), 1, + STATE(912), 1, sym_expression, - STATE(1242), 1, + STATE(1192), 1, sym_yield, - STATE(1378), 1, + STATE(1389), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1081), 2, + STATE(1065), 2, sym_list_splat, sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28307,69 +26565,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5210] = 23, + [5010] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(786), 1, + ACTIONS(762), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28386,69 +26644,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5312] = 23, + [5112] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(788), 1, + ACTIONS(764), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28465,67 +26723,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5414] = 21, + [5214] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(666), 1, + anon_sym_LPAREN, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, - anon_sym_lambda, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(766), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(920), 1, + STATE(898), 1, sym_expression, - ACTIONS(299), 2, + STATE(1393), 1, + sym__collection_elements, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(986), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(790), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - ACTIONS(792), 3, - anon_sym_if, - anon_sym_async, - anon_sym_for, - ACTIONS(301), 4, + STATE(1065), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 4, + ACTIONS(670), 5, anon_sym_print, + anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28542,70 +26802,71 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5512] = 24, + [5316] = 25, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(686), 1, + ACTIONS(666), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(784), 1, + ACTIONS(760), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(894), 1, + STATE(912), 1, sym_expression, - STATE(1242), 1, + STATE(1192), 1, sym_yield, - STATE(1378), 1, + STATE(1243), 1, + sym_parenthesized_list_splat, + STATE(1244), 1, + sym_list_splat, + STATE(1389), 1, sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1081), 2, - sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28622,69 +26883,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5616] = 23, + [5422] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(794), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(768), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(910), 1, + STATE(1066), 1, sym_expression, - STATE(1426), 1, - sym__collection_elements, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, + STATE(1287), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28701,44 +26962,44 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5718] = 23, + [5524] = 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(325), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(758), 1, - anon_sym_STAR, - ACTIONS(760), 1, - anon_sym_STAR_STAR, - ACTIONS(796), 1, - anon_sym_from, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(998), 1, + STATE(1010), 1, sym_expression, + STATE(1341), 1, + sym_expression_list, ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(682), 2, + ACTIONS(770), 2, sym__newline, sym__semicolon, - STATE(1128), 2, + STATE(1300), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -28750,20 +27011,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28780,69 +27041,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5820] = 23, + [5626] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(686), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(750), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(772), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(910), 1, + STATE(1066), 1, sym_expression, - STATE(1426), 1, - sym__collection_elements, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1081), 3, + STATE(1287), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28859,69 +27120,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [5922] = 23, + [5728] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(798), 1, + ACTIONS(774), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -28938,69 +27199,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6024] = 23, + [5830] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(800), 1, + ACTIONS(776), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29017,69 +27278,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6126] = 23, + [5932] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(802), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(738), 1, + anon_sym_lambda, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1073), 1, + STATE(919), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(987), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(778), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(780), 3, + anon_sym_if, + anon_sym_async, + anon_sym_for, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(670), 4, anon_sym_print, - anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29096,69 +27355,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6228] = 23, + [6030] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, anon_sym_not, - ACTIONS(712), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(804), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(738), 1, + anon_sym_lambda, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1073), 1, + STATE(919), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(987), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, - sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(720), 5, - anon_sym_print, + ACTIONS(782), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + ACTIONS(784), 3, + anon_sym_if, anon_sym_async, + anon_sym_for, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(670), 4, + anon_sym_print, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29175,69 +27432,148 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6330] = 23, + [6128] = 23, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(688), 1, + anon_sym_LPAREN, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, + anon_sym_await, + ACTIONS(786), 1, + anon_sym_RPAREN, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1066), 1, + sym_expression, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1287), 3, + sym_list_splat, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(714), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [6230] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, anon_sym_STAR, - ACTIONS(628), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(688), 1, + anon_sym_LPAREN, ACTIONS(712), 1, sym_identifier, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(716), 1, anon_sym_await, - ACTIONS(806), 1, + ACTIONS(788), 1, anon_sym_RPAREN, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1066), 1, sym_expression, - STATE(1318), 1, + STATE(1286), 1, sym_parenthesized_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1287), 3, sym_list_splat, sym_dictionary_splat, sym_keyword_argument, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29254,70 +27590,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6432] = 24, + [6332] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(684), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, sym_identifier, - ACTIONS(686), 1, - anon_sym_LPAREN, - ACTIONS(694), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(704), 1, - anon_sym_RPAREN, - ACTIONS(706), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + ACTIONS(750), 1, + anon_sym_from, + ACTIONS(752), 1, anon_sym_STAR, - STATE(565), 1, - sym_string, - STATE(590), 1, + ACTIONS(754), 1, + anon_sym_STAR_STAR, + STATE(692), 1, sym_primary_expression, - STATE(905), 1, + STATE(693), 1, + sym_string, + STATE(972), 1, sym_expression, - STATE(1221), 1, - sym_yield, - STATE(1456), 1, - sym__collection_elements, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(1081), 2, + ACTIONS(676), 2, + sym__newline, + sym__semicolon, + STATE(1088), 2, sym_list_splat, - sym_parenthesized_list_splat, - ACTIONS(594), 3, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29334,67 +27669,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6536] = 21, + [6434] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, + ACTIONS(738), 1, anon_sym_lambda, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(920), 1, + STATE(919), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(986), 2, + STATE(987), 2, sym__expression_within_for_in_clause, sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(808), 3, + ACTIONS(790), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - ACTIONS(810), 3, + ACTIONS(792), 3, anon_sym_if, anon_sym_async, anon_sym_for, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 4, + ACTIONS(670), 4, anon_sym_print, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29411,67 +27746,69 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6634] = 22, + [6532] = 23, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(812), 1, - anon_sym_COLON, - ACTIONS(814), 1, - anon_sym_RBRACK, - STATE(565), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, + anon_sym_await, + ACTIONS(794), 1, + anon_sym_RPAREN, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1043), 1, + STATE(1066), 1, sym_expression, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1332), 3, + STATE(1287), 3, sym_list_splat, - sym__index_expression, - sym_slice, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29488,67 +27825,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6733] = 22, + [6634] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(690), 1, + anon_sym_RPAREN, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(812), 1, - anon_sym_COLON, - ACTIONS(816), 1, - anon_sym_RBRACK, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1043), 1, + STATE(1009), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1332), 3, + STATE(1133), 3, sym_list_splat, - sym__index_expression, - sym_slice, - ACTIONS(301), 4, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29565,67 +27902,125 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6832] = 22, + [6733] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(798), 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(796), 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, + [6794] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(812), 1, + ACTIONS(800), 1, anon_sym_COLON, - STATE(565), 1, + ACTIONS(802), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1043), 1, + STATE(1041), 1, sym_expression, - STATE(1389), 1, - sym_index_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1187), 3, + STATE(1303), 3, sym_list_splat, sym__index_expression, sym_slice, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29642,67 +28037,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [6931] = 22, + [6893] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(714), 1, - anon_sym_LPAREN, - ACTIONS(740), 1, - anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(800), 1, + anon_sym_COLON, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(985), 1, + STATE(1041), 1, sym_expression, - ACTIONS(299), 2, + STATE(1379), 1, + sym_index_expression_list, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1093), 3, + STATE(1236), 3, sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, + sym__index_expression, + sym_slice, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29719,67 +28114,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [7030] = 22, + [6992] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, + ACTIONS(630), 1, anon_sym_yield, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(714), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(740), 1, + ACTIONS(690), 1, anon_sym_RPAREN, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(985), 1, + STATE(1009), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1093), 3, + STATE(1133), 3, sym_list_splat, sym_parenthesized_list_splat, sym_yield, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29796,125 +28191,215 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [7129] = 3, + [7091] = 16, ACTIONS(3), 1, sym_comment, - ACTIONS(820), 17, - anon_sym_as, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, + anon_sym_await, + STATE(569), 1, + sym_string, + STATE(632), 1, + sym_primary_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(260), 3, + anon_sym_DOT, anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + anon_sym_SLASH, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(804), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(295), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(568), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + ACTIONS(287), 9, + anon_sym_GT_GT, + anon_sym_PIPE, 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(818), 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, - [7190] = 22, + STATE(575), 16, + 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, + sym_await, + [7178] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(283), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(305), 1, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(712), 1, + ACTIONS(800), 1, + anon_sym_COLON, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1041), 1, + sym_expression, + STATE(1377), 1, + sym_index_expression_list, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(1227), 3, + sym_list_splat, + sym__index_expression, + sym_slice, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [7277] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, sym_identifier, - ACTIONS(714), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(722), 1, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(692), 1, + anon_sym_STAR, + ACTIONS(800), 1, + anon_sym_COLON, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1073), 1, + STATE(1041), 1, sym_expression, - STATE(1318), 1, - sym_parenthesized_list_splat, - ACTIONS(299), 2, + STATE(1477), 1, + sym_index_expression_list, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1314), 3, + STATE(1232), 3, sym_list_splat, - sym_dictionary_splat, - sym_keyword_argument, - ACTIONS(301), 4, + sym__index_expression, + sym_slice, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(720), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -29931,10 +28416,10 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [7289] = 3, + [7376] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(824), 17, + ACTIONS(808), 17, anon_sym_as, anon_sym_STAR, anon_sym_GT_GT, @@ -29952,7 +28437,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(822), 36, + ACTIONS(806), 36, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -29989,67 +28474,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_CARET_EQ, anon_sym_PIPE_EQ, sym_type_conversion, - [7350] = 22, + [7437] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(688), 1, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(812), 1, - anon_sym_COLON, - STATE(565), 1, + ACTIONS(712), 1, + sym_identifier, + ACTIONS(716), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1043), 1, + STATE(1066), 1, sym_expression, - STATE(1376), 1, - sym_index_expression_list, - ACTIONS(299), 2, + STATE(1286), 1, + sym_parenthesized_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1236), 3, + STATE(1287), 3, sym_list_splat, - sym__index_expression, - sym_slice, - ACTIONS(301), 4, + sym_dictionary_splat, + sym_keyword_argument, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(714), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30066,138 +28551,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [7449] = 16, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(588), 1, - anon_sym_await, - STATE(565), 1, - sym_string, - STATE(631), 1, - sym_primary_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(260), 3, - anon_sym_DOT, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(826), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - ACTIONS(301), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(576), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - ACTIONS(293), 9, - anon_sym_GT_GT, - anon_sym_PIPE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - anon_sym_AMP, - anon_sym_CARET, - anon_sym_LT_LT, - STATE(589), 16, - 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, - sym_await, - [7536] = 22, + [7536] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(812), 1, + ACTIONS(800), 1, anon_sym_COLON, - STATE(565), 1, + ACTIONS(810), 1, + anon_sym_RBRACK, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1043), 1, + STATE(1041), 1, sym_expression, - STATE(1375), 1, - sym_index_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1280), 3, + STATE(1303), 3, sym_list_splat, sym__index_expression, sym_slice, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30217,22 +28631,22 @@ static const uint16_t ts_small_parse_table[] = { [7635] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, + ACTIONS(816), 1, anon_sym_else, - ACTIONS(834), 1, + ACTIONS(818), 1, anon_sym_except, - ACTIONS(836), 1, + ACTIONS(820), 1, anon_sym_finally, - STATE(357), 1, + STATE(362), 1, sym_else_clause, - STATE(545), 1, + STATE(547), 1, sym_finally_clause, - STATE(271), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(828), 12, + STATE(272), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(814), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -30243,7 +28657,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(830), 33, + ACTIONS(812), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -30277,176 +28691,25 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [7707] = 22, - 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(325), 1, - sym_identifier, - ACTIONS(331), 1, - anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, - sym_string, - STATE(993), 1, - sym_expression, - STATE(1327), 1, - sym_expression_list, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - STATE(1283), 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(327), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(940), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(773), 16, - 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, - sym_await, - [7805] = 21, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(646), 1, - anon_sym_yield, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(714), 1, - anon_sym_LPAREN, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(985), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(1093), 3, - sym_list_splat, - sym_parenthesized_list_splat, - sym_yield, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [7901] = 9, + [7707] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(822), 1, anon_sym_else, - ACTIONS(840), 1, + ACTIONS(824), 1, anon_sym_except, - ACTIONS(842), 1, + ACTIONS(826), 1, anon_sym_finally, - STATE(395), 1, + STATE(380), 1, sym_else_clause, - STATE(490), 1, + STATE(512), 1, sym_finally_clause, - STATE(263), 2, + STATE(258), 2, sym_except_clause, aux_sym_try_statement_repeat1, - ACTIONS(828), 12, - sym__dedent, + ACTIONS(814), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -30457,7 +28720,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(830), 33, + ACTIONS(812), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -30491,25 +28754,25 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [7973] = 9, + [7779] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(822), 1, anon_sym_else, - ACTIONS(842), 1, - anon_sym_finally, - ACTIONS(844), 1, + ACTIONS(824), 1, anon_sym_except, - STATE(395), 1, + ACTIONS(826), 1, + anon_sym_finally, + STATE(390), 1, sym_else_clause, - STATE(490), 1, + STATE(510), 1, sym_finally_clause, - STATE(268), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, + STATE(258), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, ACTIONS(828), 12, - sym__dedent, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -30554,66 +28817,65 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8045] = 22, + [7851] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, + ACTIONS(692), 1, anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + ACTIONS(800), 1, + anon_sym_COLON, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1039), 1, + STATE(1041), 1, sym_expression, - STATE(1449), 1, - sym_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + STATE(1303), 3, + sym_list_splat, + sym__index_expression, + sym_slice, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30630,23 +28892,23 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [8143] = 9, + [7947] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(816), 1, anon_sym_else, - ACTIONS(842), 1, - anon_sym_finally, - ACTIONS(844), 1, + ACTIONS(818), 1, anon_sym_except, - STATE(392), 1, + ACTIONS(820), 1, + anon_sym_finally, + STATE(417), 1, sym_else_clause, - STATE(474), 1, + STATE(495), 1, sym_finally_clause, - STATE(268), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(848), 12, + STATE(272), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(828), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -30659,7 +28921,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(846), 33, + ACTIONS(830), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -30693,66 +28955,66 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8215] = 22, + [8019] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1030), 1, + STATE(1042), 1, sym_expression, - STATE(1404), 1, + STATE(1440), 1, sym_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, + STATE(1329), 2, sym_list_splat, sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -30769,86 +29031,174 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [8313] = 9, + [8117] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - ACTIONS(834), 1, - anon_sym_except, - ACTIONS(836), 1, - anon_sym_finally, - STATE(350), 1, - sym_else_clause, - STATE(537), 1, - sym_finally_clause, - STATE(271), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(848), 12, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, sym__string_start, - ts_builtin_sym_end, + ACTIONS(630), 1, + anon_sym_yield, + ACTIONS(688), 1, anon_sym_LPAREN, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1009), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 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(846), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + STATE(1133), 3, + sym_list_splat, + sym_parenthesized_list_splat, + sym_yield, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 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, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [8213] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(297), 1, anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1021), 1, + sym_expression, + STATE(1355), 1, + sym_expression_list, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + STATE(1329), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, sym_true, sym_false, sym_none, - [8385] = 9, + ACTIONS(269), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [8311] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, + ACTIONS(822), 1, anon_sym_else, - ACTIONS(836), 1, + ACTIONS(826), 1, anon_sym_finally, - ACTIONS(850), 1, + ACTIONS(832), 1, anon_sym_except, - STATE(350), 1, + STATE(390), 1, sym_else_clause, - STATE(537), 1, + STATE(510), 1, sym_finally_clause, - STATE(272), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(848), 12, + STATE(260), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(828), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -30861,7 +29211,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(846), 33, + ACTIONS(830), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -30895,25 +29245,25 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8457] = 9, + [8383] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, + ACTIONS(816), 1, anon_sym_else, - ACTIONS(836), 1, + ACTIONS(820), 1, anon_sym_finally, - ACTIONS(850), 1, + ACTIONS(834), 1, anon_sym_except, - STATE(357), 1, + STATE(362), 1, sym_else_clause, - STATE(545), 1, + STATE(547), 1, sym_finally_clause, - STATE(272), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(828), 12, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(814), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -30924,7 +29274,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(830), 33, + ACTIONS(812), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -30958,23 +29308,23 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8529] = 9, + [8455] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(816), 1, anon_sym_else, - ACTIONS(840), 1, - anon_sym_except, - ACTIONS(842), 1, + ACTIONS(820), 1, anon_sym_finally, - STATE(392), 1, + ACTIONS(834), 1, + anon_sym_except, + STATE(417), 1, sym_else_clause, - STATE(474), 1, + STATE(495), 1, sym_finally_clause, - STATE(263), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(848), 12, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(828), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -30987,7 +29337,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(846), 33, + ACTIONS(830), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -31021,65 +29371,66 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [8601] = 21, + [8527] = 22, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - ACTIONS(812), 1, - anon_sym_COLON, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(1043), 1, + STATE(693), 1, + sym_string, + STATE(1002), 1, sym_expression, - ACTIONS(299), 2, + STATE(1338), 1, + sym_expression_list, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(1300), 2, + sym_list_splat, + sym_dictionary_splat, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(1332), 3, - sym_list_splat, - sym__index_expression, - sym_slice, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31096,66 +29447,66 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [8697] = 22, + [8625] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1011), 1, + STATE(1036), 1, sym_expression, - STATE(1416), 1, + STATE(1396), 1, sym_expression_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1284), 2, + STATE(1329), 2, sym_list_splat, sym_dictionary_splat, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31172,140 +29523,129 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [8795] = 22, + [8723] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(822), 1, + anon_sym_else, + ACTIONS(826), 1, + anon_sym_finally, + ACTIONS(832), 1, + anon_sym_except, + STATE(380), 1, + sym_else_clause, + STATE(512), 1, + sym_finally_clause, + STATE(260), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(814), 12, sym__string_start, - ACTIONS(571), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1045), 1, - sym_expression, - STATE(1423), 1, - sym_expression_list, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - STATE(1284), 2, - sym_list_splat, - sym_dictionary_splat, - ACTIONS(291), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, + sym_ellipsis, + sym_float, + ACTIONS(812), 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(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [8893] = 21, + 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, + [8795] = 22, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(852), 1, - anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1030), 1, sym_expression, - ACTIONS(299), 2, + STATE(1424), 1, + sym_expression_list, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1329), 2, + sym_list_splat, sym_dictionary_splat, - sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31322,127 +29662,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [8988] = 10, - ACTIONS(3), 1, - sym_comment, - ACTIONS(265), 1, - anon_sym_COMMA, - ACTIONS(273), 1, - anon_sym_COLON_EQ, - ACTIONS(854), 1, - anon_sym_for, - ACTIONS(856), 1, - anon_sym_with, - ACTIONS(858), 1, - anon_sym_def, - ACTIONS(275), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(297), 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(260), 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(293), 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, - [9061] = 21, + [8893] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(626), 1, - anon_sym_STAR, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + ACTIONS(836), 1, + anon_sym_RBRACE, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(902), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1005), 2, - sym_list_splat, + STATE(1319), 2, sym_dictionary_splat, - ACTIONS(291), 3, + sym_pair, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31459,23 +29736,23 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9156] = 10, + [8988] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(265), 1, + ACTIONS(264), 1, anon_sym_COMMA, - ACTIONS(273), 1, + ACTIONS(271), 1, anon_sym_COLON_EQ, - ACTIONS(860), 1, + ACTIONS(838), 1, anon_sym_for, - ACTIONS(862), 1, + ACTIONS(840), 1, anon_sym_with, - ACTIONS(864), 1, + ACTIONS(842), 1, anon_sym_def, - ACTIONS(275), 2, + ACTIONS(273), 2, anon_sym_COLON, anon_sym_EQ, - ACTIONS(297), 13, + ACTIONS(291), 13, anon_sym_PLUS_EQ, anon_sym_DASH_EQ, anon_sym_STAR_EQ, @@ -31505,7 +29782,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 16, + ACTIONS(287), 16, sym__newline, anon_sym_DOT, anon_sym_LPAREN, @@ -31522,64 +29799,64 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [9229] = 21, + [9061] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(267), 1, + anon_sym_STAR, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(866), 1, - anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(897), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(998), 2, + sym_list_splat, sym_dictionary_splat, - sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31596,64 +29873,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9324] = 21, + [9156] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(868), 1, + ACTIONS(844), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31670,7 +29947,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9419] = 21, + [9251] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -31681,28 +29958,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(758), 1, + ACTIONS(752), 1, anon_sym_STAR, - ACTIONS(760), 1, + ACTIONS(754), 1, anon_sym_STAR_STAR, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(998), 1, + STATE(972), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(1128), 2, + STATE(1088), 2, sym_list_splat, sym_dictionary_splat, ACTIONS(47), 3, @@ -31714,20 +29991,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31744,64 +30021,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9514] = 21, + [9346] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(870), 1, + ACTIONS(846), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31818,64 +30095,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9609] = 21, + [9441] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(872), 1, + ACTIONS(848), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31892,64 +30169,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9704] = 21, + [9536] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(874), 1, + ACTIONS(850), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -31966,64 +30243,127 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9799] = 21, + [9631] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(264), 1, + anon_sym_COMMA, + ACTIONS(271), 1, + anon_sym_COLON_EQ, + ACTIONS(852), 1, + anon_sym_for, + ACTIONS(854), 1, + anon_sym_with, + ACTIONS(856), 1, + anon_sym_def, + ACTIONS(273), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(291), 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(260), 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(287), 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, + [9704] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(876), 1, + ACTIONS(858), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32040,64 +30380,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9894] = 21, + [9799] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(878), 1, + ACTIONS(860), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32114,64 +30454,64 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [9989] = 21, + [9894] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(53), 1, anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(880), 1, + ACTIONS(862), 1, anon_sym_RBRACE, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(1148), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, + STATE(1319), 2, sym_dictionary_splat, sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32188,255 +30528,167 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [10084] = 8, + [9989] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - ACTIONS(886), 1, - anon_sym_elif, - STATE(269), 1, - aux_sym_if_statement_repeat1, - STATE(407), 1, - sym_elif_clause, - STATE(527), 1, - sym_else_clause, - ACTIONS(882), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(884), 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(283), 1, anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(297), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [10152] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(888), 12, + ACTIONS(299), 1, sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, + ACTIONS(864), 1, + anon_sym_RBRACE, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1148), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + STATE(1319), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(285), 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(890), 38, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 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_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, 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, - [10210] = 8, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [10084] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, - anon_sym_else, - ACTIONS(896), 1, - anon_sym_elif, - STATE(308), 1, - aux_sym_if_statement_repeat1, - STATE(390), 1, - sym_elif_clause, - STATE(481), 1, - sym_else_clause, - ACTIONS(894), 12, - sym__dedent, - sym__string_start, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(892), 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(283), 1, anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(297), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [10278] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(838), 1, - anon_sym_else, - ACTIONS(896), 1, - anon_sym_elif, - STATE(253), 1, - aux_sym_if_statement_repeat1, - STATE(390), 1, - sym_elif_clause, - STATE(468), 1, - sym_else_clause, - ACTIONS(882), 12, - sym__dedent, + ACTIONS(299), 1, sym__string_start, - anon_sym_LPAREN, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(995), 1, + sym_expression, + STATE(1115), 1, + sym_list_splat, + STATE(1429), 1, + sym_type, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 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(884), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 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, - [10346] = 8, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [10178] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(816), 1, anon_sym_else, - ACTIONS(896), 1, + ACTIONS(870), 1, anon_sym_elif, - STATE(266), 1, + STATE(280), 1, aux_sym_if_statement_repeat1, - STATE(390), 1, + STATE(425), 1, sym_elif_clause, - STATE(482), 1, + STATE(492), 1, sym_else_clause, - ACTIONS(900), 12, + ACTIONS(868), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -32449,7 +30701,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(898), 33, + ACTIONS(866), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32483,124 +30735,63 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10414] = 9, - ACTIONS(3), 1, - sym_comment, - ACTIONS(265), 1, - anon_sym_COMMA, - ACTIONS(273), 1, - anon_sym_COLON_EQ, - ACTIONS(902), 1, - sym__string_start, - STATE(1264), 1, - sym_string, - ACTIONS(275), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(297), 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(260), 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(293), 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, - [10484] = 21, + [10246] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1382), 1, + STATE(1375), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32617,7 +30808,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [10578] = 21, + [10340] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -32628,26 +30819,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(904), 1, + ACTIONS(872), 1, anon_sym_STAR, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1025), 1, + STATE(1022), 1, sym_expression, - STATE(1153), 1, - sym_type, - STATE(1258), 1, + STATE(1210), 1, sym_list_splat, + STATE(1211), 1, + sym_type, ACTIONS(75), 2, sym_ellipsis, sym_float, @@ -32660,20 +30851,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32690,63 +30881,63 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [10672] = 21, + [10434] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1412), 1, + STATE(1431), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -32763,10 +30954,10 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [10766] = 3, + [10528] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(906), 12, + ACTIONS(874), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -32779,7 +30970,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(908), 38, + ACTIONS(876), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32818,10 +31009,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10824] = 3, + [10586] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(910), 12, + ACTIONS(878), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -32834,7 +31025,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(912), 38, + ACTIONS(880), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32873,10 +31064,15 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10882] = 3, + [10644] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(914), 12, + ACTIONS(886), 1, + anon_sym_except, + STATE(258), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(882), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -32889,7 +31085,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(916), 38, + ACTIONS(884), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -32902,17 +31098,14 @@ 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, @@ -32928,67 +31121,88 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [10940] = 5, + [10706] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(922), 1, - anon_sym_except, - STATE(263), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(920), 12, - sym__dedent, - sym__string_start, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(918), 35, - anon_sym_import, - anon_sym_from, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(692), 1, 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, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(995), 1, + sym_expression, + STATE(1115), 1, + sym_list_splat, + STATE(1467), 1, + sym_type, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, sym_integer, - sym_identifier, - anon_sym_await, sym_true, sym_false, sym_none, - [11002] = 3, + ACTIONS(269), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [10800] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(925), 12, + ACTIONS(893), 1, + anon_sym_except, + STATE(260), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(889), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -33001,7 +31215,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(927), 38, + ACTIONS(891), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33014,17 +31228,14 @@ 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, @@ -33040,92 +31251,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11060] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(931), 1, - anon_sym_COLON, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1038), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(929), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [11152] = 8, + [10862] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, - anon_sym_else, - ACTIONS(896), 1, - anon_sym_elif, - STATE(308), 1, - aux_sym_if_statement_repeat1, - STATE(390), 1, - sym_elif_clause, - STATE(496), 1, - sym_else_clause, - ACTIONS(935), 12, + ACTIONS(878), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -33138,7 +31267,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(933), 33, + ACTIONS(880), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33151,12 +31280,17 @@ 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, @@ -33172,90 +31306,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11220] = 21, + [10920] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(995), 1, - sym_expression, - STATE(1114), 1, - sym_list_splat, - STATE(1434), 1, - sym_type, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [11314] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(941), 1, - anon_sym_except, - STATE(268), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(939), 12, - sym__dedent, + ACTIONS(896), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -33266,7 +31322,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(937), 35, + ACTIONS(898), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33279,14 +31335,17 @@ 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, @@ -33302,22 +31361,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11376] = 8, + [10978] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - ACTIONS(886), 1, - anon_sym_elif, - STATE(292), 1, - aux_sym_if_statement_repeat1, - STATE(407), 1, - sym_elif_clause, - STATE(511), 1, - sym_else_clause, - ACTIONS(894), 12, + ACTIONS(902), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -33328,7 +31377,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(892), 33, + ACTIONS(900), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33341,12 +31390,17 @@ 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, @@ -33362,22 +31416,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11444] = 8, + [11036] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - ACTIONS(886), 1, - anon_sym_elif, - STATE(277), 1, - aux_sym_if_statement_repeat1, - STATE(407), 1, - sym_elif_clause, - STATE(516), 1, - sym_else_clause, - ACTIONS(900), 12, + ACTIONS(906), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -33388,7 +31432,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(898), 33, + ACTIONS(904), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33401,12 +31445,17 @@ 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, @@ -33422,15 +31471,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11512] = 5, + [11094] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(944), 1, - anon_sym_except, - STATE(271), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - ACTIONS(939), 12, + ACTIONS(902), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -33443,7 +31487,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(937), 35, + ACTIONS(900), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33456,14 +31500,17 @@ 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, @@ -33479,15 +31526,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11574] = 5, + [11152] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(947), 1, - anon_sym_except, - STATE(272), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - ACTIONS(920), 12, + ACTIONS(822), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(278), 1, + aux_sym_if_statement_repeat1, + STATE(424), 1, + sym_elif_clause, + STATE(491), 1, + sym_else_clause, + ACTIONS(868), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -33500,7 +31552,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(918), 35, + ACTIONS(866), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33513,12 +31565,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, @@ -33536,62 +31586,63 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11636] = 20, + [11220] = 21, ACTIONS(3), 1, sym_comment, - ACTIONS(53), 1, - anon_sym_STAR_STAR, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1104), 1, + STATE(995), 1, sym_expression, - ACTIONS(299), 2, + STATE(1115), 1, + sym_list_splat, + STATE(1434), 1, + sym_type, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(1335), 2, - sym_dictionary_splat, - sym_pair, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33608,10 +31659,10 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [11728] = 3, + [11314] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(906), 12, + ACTIONS(896), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -33624,7 +31675,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(908), 38, + ACTIONS(898), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33663,10 +31714,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11786] = 3, + [11372] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(888), 12, + ACTIONS(874), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -33679,7 +31730,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(890), 38, + ACTIONS(876), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33718,63 +31769,119 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [11844] = 21, + [11430] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(910), 1, + anon_sym_except, + STATE(270), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + ACTIONS(889), 12, + sym__dedent, + sym__string_start, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, anon_sym_LBRACE, - ACTIONS(295), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(891), 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, - ACTIONS(303), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + sym_true, + sym_false, + sym_none, + [11492] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - STATE(565), 1, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(915), 1, + anon_sym_COLON, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(995), 1, + STATE(1044), 1, sym_expression, - STATE(1114), 1, - sym_list_splat, - STATE(1391), 1, - sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(913), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33791,22 +31898,17 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [11938] = 8, + [11584] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - ACTIONS(886), 1, - anon_sym_elif, - STATE(292), 1, - aux_sym_if_statement_repeat1, - STATE(407), 1, - sym_elif_clause, - STATE(459), 1, - sym_else_clause, - ACTIONS(935), 12, + ACTIONS(917), 1, + anon_sym_except, + STATE(272), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + ACTIONS(882), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -33817,7 +31919,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(933), 33, + ACTIONS(884), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -33830,10 +31932,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, @@ -33851,62 +31955,62 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [12006] = 20, + [11646] = 20, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(952), 1, + ACTIONS(922), 1, anon_sym_COLON, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1033), 1, + STATE(1025), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(950), 2, + ACTIONS(920), 2, anon_sym_COMMA, anon_sym_RBRACK, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -33923,118 +32027,196 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [12098] = 3, + [11738] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(914), 12, - sym__dedent, - sym__string_start, + ACTIONS(53), 1, + anon_sym_STAR_STAR, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1148), 1, + sym_expression, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(916), 38, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + STATE(1319), 2, + sym_dictionary_splat, + sym_pair, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 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_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, anon_sym_exec, anon_sym_type, - anon_sym_class, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [11830] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(264), 1, + anon_sym_COMMA, + ACTIONS(271), 1, + anon_sym_COLON_EQ, + ACTIONS(924), 1, + sym__string_start, + STATE(1281), 1, + sym_string, + ACTIONS(273), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(291), 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(260), 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(287), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [12156] = 21, + 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, + [11900] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1141), 1, + STATE(1383), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34051,12 +32233,22 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [12250] = 3, + [11994] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(925), 12, - sym__dedent, + ACTIONS(822), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(281), 1, + aux_sym_if_statement_repeat1, + STATE(424), 1, + sym_elif_clause, + STATE(523), 1, + sym_else_clause, + ACTIONS(926), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -34067,7 +32259,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(927), 38, + ACTIONS(928), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34080,17 +32272,12 @@ 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, @@ -34106,85 +32293,252 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [12308] = 21, + [12062] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(822), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(303), 1, + aux_sym_if_statement_repeat1, + STATE(424), 1, + sym_elif_clause, + STATE(528), 1, + sym_else_clause, + ACTIONS(930), 12, + sym__string_start, + ts_builtin_sym_end, + anon_sym_LPAREN, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_LBRACK, anon_sym_LBRACE, - ACTIONS(295), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(932), 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, - ACTIONS(303), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - ACTIONS(305), 1, + sym_true, + sym_false, + sym_none, + [12130] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + ACTIONS(870), 1, + anon_sym_elif, + STATE(286), 1, + aux_sym_if_statement_repeat1, + STATE(425), 1, + sym_elif_clause, + STATE(536), 1, + sym_else_clause, + ACTIONS(926), 12, + sym__dedent, sym__string_start, - ACTIONS(571), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(995), 1, - sym_expression, - STATE(1114), 1, - sym_list_splat, - STATE(1444), 1, - sym_type, - ACTIONS(299), 2, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(928), 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, + [12198] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + ACTIONS(870), 1, + anon_sym_elif, + STATE(304), 1, + aux_sym_if_statement_repeat1, + STATE(425), 1, + sym_elif_clause, + STATE(526), 1, + sym_else_clause, + ACTIONS(930), 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(301), 4, + sym_ellipsis, + sym_float, + ACTIONS(932), 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(271), 5, + [12266] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(822), 1, + anon_sym_else, + ACTIONS(908), 1, + anon_sym_elif, + STATE(303), 1, + aux_sym_if_statement_repeat1, + STATE(424), 1, + sym_elif_clause, + STATE(467), 1, + sym_else_clause, + ACTIONS(934), 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(936), 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(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [12402] = 3, + 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, + [12334] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(910), 12, - sym__dedent, + ACTIONS(906), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -34195,7 +32549,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(912), 38, + ACTIONS(904), 38, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -34234,63 +32588,63 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [12460] = 21, + [12392] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1428), 1, + STATE(1151), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34307,63 +32661,63 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [12554] = 21, + [12486] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1430), 1, + STATE(1435), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34380,63 +32734,63 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [12648] = 21, + [12580] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1433), 1, + STATE(1459), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34453,63 +32807,123 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, + [12674] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + ACTIONS(870), 1, + anon_sym_elif, + STATE(304), 1, + aux_sym_if_statement_repeat1, + STATE(425), 1, + sym_elif_clause, + STATE(511), 1, + sym_else_clause, + ACTIONS(934), 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(936), 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, [12742] = 21, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, + ACTIONS(692), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, STATE(995), 1, sym_expression, - STATE(1114), 1, + STATE(1115), 1, sym_list_splat, - STATE(1209), 1, + STATE(1259), 1, sym_type, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34529,58 +32943,58 @@ static const uint16_t ts_small_parse_table[] = { [12836] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(956), 1, - anon_sym_STAR, - ACTIONS(960), 1, - anon_sym_COLON, - ACTIONS(962), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(692), 1, + anon_sym_STAR, + STATE(569), 1, sym_string, - STATE(1028), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1068), 1, sym_expression, - ACTIONS(614), 2, + STATE(1335), 1, + sym_list_splat, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34597,61 +33011,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [12927] = 20, + [12927] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(706), 1, - anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1052), 1, + STATE(1055), 1, sym_expression, - STATE(1320), 1, - sym_list_splat, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(938), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34668,60 +33081,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13018] = 19, + [13016] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, - anon_sym_await, - ACTIONS(748), 1, + ACTIONS(289), 1, anon_sym_lambda, - STATE(565), 1, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(920), 1, + STATE(1072), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(931), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(940), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34738,61 +33151,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13107] = 20, + [13105] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(964), 1, - anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(968), 1, - anon_sym_LPAREN, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(738), 1, + anon_sym_lambda, + STATE(569), 1, sym_string, - STATE(987), 1, + STATE(576), 1, + sym_primary_expression, + STATE(913), 1, sym_expression, - STATE(1206), 1, - sym_with_item, - STATE(1385), 1, - sym_with_clause, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + STATE(982), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34809,117 +33221,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13198] = 6, + [13194] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(974), 1, - anon_sym_elif, - STATE(292), 1, - aux_sym_if_statement_repeat1, - STATE(407), 1, - sym_elif_clause, - ACTIONS(970), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(972), 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, + ACTIONS(283), 1, anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(297), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [13261] = 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, + ACTIONS(299), 1, sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, - anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(1018), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1079), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(977), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, + ACTIONS(942), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -34936,60 +33291,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13350] = 19, + [13283] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, + ACTIONS(738), 1, anon_sym_lambda, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(921), 1, + STATE(919), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(989), 2, + STATE(987), 2, sym__expression_within_for_in_clause, sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35006,61 +33361,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13439] = 20, + [13372] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(946), 1, + anon_sym_LPAREN, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(979), 1, - anon_sym_RPAREN, - STATE(698), 1, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(987), 1, + STATE(980), 1, sym_expression, - STATE(1256), 1, + STATE(1193), 1, sym_with_item, - ACTIONS(614), 2, + STATE(1405), 1, + sym_with_clause, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35077,60 +33432,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13530] = 19, + [13463] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(626), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, + anon_sym_await, + ACTIONS(738), 1, + anon_sym_lambda, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1056), 1, + STATE(919), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(981), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(291), 3, + STATE(943), 2, + sym__expression_within_for_in_clause, + sym_lambda_within_for_in_clause, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35147,60 +33502,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13619] = 19, + [13552] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, + ACTIONS(738), 1, anon_sym_lambda, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(920), 1, + STATE(921), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(945), 2, + STATE(977), 2, sym__expression_within_for_in_clause, sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35217,61 +33572,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13708] = 20, + [13641] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(610), 1, + ACTIONS(590), 1, + anon_sym_LPAREN, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(968), 1, - anon_sym_LPAREN, - STATE(698), 1, + ACTIONS(956), 1, + anon_sym_STAR, + ACTIONS(958), 1, + anon_sym_COLON, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(987), 1, + STATE(1024), 1, sym_expression, - STATE(1206), 1, - sym_with_item, - STATE(1431), 1, - sym_with_clause, - ACTIONS(614), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35288,60 +33643,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13799] = 19, + [13732] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + ACTIONS(960), 1, + anon_sym_RPAREN, + STATE(705), 1, sym_primary_expression, - STATE(1057), 1, + STATE(708), 1, + sym_string, + STATE(980), 1, sym_expression, - ACTIONS(299), 2, + STATE(1265), 1, + sym_with_item, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(983), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35358,60 +33714,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13888] = 19, + [13823] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(598), 1, + anon_sym_LBRACK, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(331), 1, - anon_sym_await, - ACTIONS(561), 1, + ACTIONS(946), 1, anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, sym_primary_expression, - STATE(693), 1, + STATE(708), 1, sym_string, - STATE(1018), 1, + STATE(980), 1, sym_expression, - ACTIONS(75), 2, + STATE(1193), 1, + sym_with_item, + STATE(1403), 1, + sym_with_clause, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(985), 2, - sym__newline, - sym__semicolon, - ACTIONS(47), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35428,120 +33785,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [13977] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(265), 1, - anon_sym_COMMA, - ACTIONS(273), 1, - anon_sym_COLON_EQ, - ACTIONS(987), 1, - sym_identifier, - ACTIONS(275), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(293), 10, - sym__newline, - anon_sym_DOT, - anon_sym_LPAREN, - 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(297), 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(260), 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, - [14044] = 20, + [13914] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(946), 1, + anon_sym_LPAREN, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(989), 1, - anon_sym_RPAREN, - STATE(698), 1, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(987), 1, + STATE(980), 1, sym_expression, - STATE(1256), 1, + STATE(1193), 1, sym_with_item, - ACTIONS(614), 2, + STATE(1411), 1, + sym_with_clause, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35558,61 +33856,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14135] = 20, + [14005] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(610), 1, + ACTIONS(590), 1, + anon_sym_LPAREN, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(968), 1, - anon_sym_LPAREN, - STATE(698), 1, + ACTIONS(962), 1, + anon_sym_STAR, + ACTIONS(964), 1, + anon_sym_COLON, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(987), 1, + STATE(1034), 1, sym_expression, - STATE(1206), 1, - sym_with_item, - STATE(1402), 1, - sym_with_clause, - ACTIONS(614), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35629,60 +33927,61 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14226] = 19, + [14096] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + ACTIONS(966), 1, + anon_sym_RPAREN, + STATE(705), 1, sym_primary_expression, - STATE(1082), 1, + STATE(708), 1, + sym_string, + STATE(980), 1, sym_expression, - ACTIONS(299), 2, + STATE(1265), 1, + sym_with_item, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(991), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35699,78 +33998,121 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14315] = 20, + [14187] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(972), 1, + anon_sym_elif, + STATE(303), 1, + aux_sym_if_statement_repeat1, + STATE(424), 1, + sym_elif_clause, + ACTIONS(968), 12, sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, - anon_sym_not, - ACTIONS(964), 1, - anon_sym_lambda, - ACTIONS(966), 1, - anon_sym_await, - ACTIONS(968), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, - sym_string, - STATE(987), 1, - sym_expression, - STATE(1206), 1, - sym_with_item, - STATE(1410), 1, - sym_with_clause, - ACTIONS(614), 2, - sym_ellipsis, - sym_float, - ACTIONS(608), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(600), 4, + sym_ellipsis, + sym_float, + ACTIONS(970), 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, + anon_sym_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + [14250] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(975), 1, + anon_sym_elif, + STATE(304), 1, + aux_sym_if_statement_repeat1, + STATE(425), 1, + sym_elif_clause, + ACTIONS(968), 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(970), 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, - STATE(982), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(796), 16, - 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, - sym_await, - [14406] = 19, + 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, + [14313] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -35781,15 +34123,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, @@ -35798,7 +34140,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(993), 2, + ACTIONS(978), 2, sym__newline, sym__semicolon, ACTIONS(47), 3, @@ -35810,20 +34152,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35840,7 +34182,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14495] = 19, + [14402] = 19, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -35851,15 +34193,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, @@ -35868,7 +34210,7 @@ static const uint16_t ts_small_parse_table[] = { ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(995), 2, + ACTIONS(980), 2, sym__newline, sym__semicolon, ACTIONS(47), 3, @@ -35880,20 +34222,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -35910,117 +34252,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14584] = 6, + [14491] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(997), 1, - anon_sym_elif, - STATE(308), 1, - aux_sym_if_statement_repeat1, - STATE(390), 1, - sym_elif_clause, - ACTIONS(970), 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(972), 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, + ACTIONS(69), 1, anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, sym_identifier, + ACTIONS(537), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [14647] = 19, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(642), 1, - anon_sym_not, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, - anon_sym_await, - ACTIONS(748), 1, - anon_sym_lambda, - STATE(565), 1, - sym_string, - STATE(590), 1, + STATE(692), 1, sym_primary_expression, - STATE(920), 1, + STATE(693), 1, + sym_string, + STATE(1018), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - STATE(986), 2, - sym__expression_within_for_in_clause, - sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(982), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36037,60 +34322,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14736] = 19, + [14580] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(684), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(748), 1, + ACTIONS(738), 1, anon_sym_lambda, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(576), 1, sym_primary_expression, - STATE(913), 1, + STATE(919), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(979), 2, + STATE(968), 2, sym__expression_within_for_in_clause, sym_lambda_within_for_in_clause, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36107,60 +34392,120 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14825] = 19, + [14669] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, + ACTIONS(264), 1, + anon_sym_COMMA, + ACTIONS(271), 1, + anon_sym_COLON_EQ, + ACTIONS(984), 1, sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(273), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(287), 10, + sym__newline, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + sym__semicolon, + ACTIONS(291), 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(260), 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, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1076), 1, + 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, + [14736] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(598), 1, + anon_sym_LBRACK, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(946), 1, + anon_sym_LPAREN, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, + sym_primary_expression, + STATE(708), 1, + sym_string, + STATE(980), 1, sym_expression, - ACTIONS(299), 2, + STATE(1193), 1, + sym_with_item, + STATE(1392), 1, + sym_with_clause, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(1000), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36177,61 +34522,60 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [14914] = 20, + [14827] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(1002), 1, - anon_sym_STAR, - ACTIONS(1004), 1, - anon_sym_COLON, - STATE(698), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(1012), 1, + STATE(1018), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(986), 2, + sym__newline, + sym__semicolon, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36248,121 +34592,85 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [15005] = 3, + [14916] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(1006), 12, - sym__string_start, - ts_builtin_sym_end, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(277), 1, anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1076), 1, + sym_expression, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(1008), 36, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(988), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 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_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_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [15061] = 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, - [15117] = 5, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [15005] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1014), 1, + ACTIONS(994), 1, anon_sym_case, - STATE(320), 2, + STATE(313), 2, sym_case_block, aux_sym_cases_repeat1, - ACTIONS(1010), 12, + ACTIONS(990), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -36375,7 +34683,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1012), 33, + ACTIONS(992), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36409,226 +34717,59 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15177] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(578), 1, - anon_sym_COLON_EQ, - ACTIONS(580), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(573), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(586), 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(293), 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(260), 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, - [15241] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1023), 1, - anon_sym_COLON_EQ, - ACTIONS(1025), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(1018), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1027), 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(1016), 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(1021), 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, - [15305] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(820), 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(818), 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, - [15361] = 19, + [15065] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(1004), 1, - anon_sym_COLON, - STATE(698), 1, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(1012), 1, + STATE(980), 1, sym_expression, - ACTIONS(614), 2, + STATE(1265), 1, + sym_with_item, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -36645,17 +34786,12 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [15449] = 5, + [15153] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1033), 1, - anon_sym_case, - STATE(320), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1029), 12, + ACTIONS(999), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -36666,7 +34802,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1031), 33, + ACTIONS(997), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36679,10 +34815,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, @@ -36700,12 +34839,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15509] = 3, + [15209] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1036), 12, + ACTIONS(1003), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -36716,7 +34855,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1038), 36, + ACTIONS(1001), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36753,12 +34892,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15565] = 3, + [15265] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1040), 12, + ACTIONS(1007), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -36769,7 +34908,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1042), 36, + ACTIONS(1005), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36806,10 +34945,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15621] = 3, + [15321] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1044), 12, + ACTIONS(1009), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -36822,7 +34961,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1046), 36, + ACTIONS(1011), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36859,10 +34998,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15677] = 3, + [15377] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1048), 12, + ACTIONS(1013), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -36875,7 +35014,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1050), 36, + ACTIONS(1015), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36912,12 +35051,69 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15733] = 3, + [15433] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1052), 12, + ACTIONS(570), 1, + anon_sym_COLON_EQ, + ACTIONS(572), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(565), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(574), 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(287), 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(260), 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, + [15497] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1013), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -36928,7 +35124,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1054), 36, + ACTIONS(1015), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -36965,12 +35161,65 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15789] = 3, + [15553] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(798), 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(796), 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, + [15609] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1056), 12, + ACTIONS(1009), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -36981,7 +35230,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1058), 36, + ACTIONS(1011), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37018,196 +35267,17 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [15845] = 3, + [15665] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1060), 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(1062), 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_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [15901] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1064), 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(1066), 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_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [15957] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1068), 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(1070), 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_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [16013] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(265), 1, - anon_sym_COMMA, - ACTIONS(273), 1, - anon_sym_COLON_EQ, - ACTIONS(275), 2, - anon_sym_COLON, - anon_sym_EQ, - ACTIONS(297), 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(260), 15, - anon_sym_STAR, - anon_sym_GT_GT, - anon_sym_PIPE, + ACTIONS(808), 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, @@ -37217,11 +35287,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 16, + ACTIONS(806), 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, @@ -37233,18 +35306,33 @@ static const uint16_t ts_small_parse_table[] = { 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, - [16077] = 7, + [15721] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1072), 1, - anon_sym_COMMA, - ACTIONS(1075), 1, + ACTIONS(1024), 1, anon_sym_COLON_EQ, - ACTIONS(1077), 2, + ACTIONS(1026), 2, anon_sym_COLON, anon_sym_EQ, - ACTIONS(1079), 13, + ACTIONS(1019), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1028), 13, anon_sym_PLUS_EQ, anon_sym_DASH_EQ, anon_sym_STAR_EQ, @@ -37258,7 +35346,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - ACTIONS(1021), 15, + ACTIONS(1017), 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(1022), 15, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -37274,34 +35377,12 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_LT, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 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, - [16141] = 5, + [15785] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1081), 1, - anon_sym_case, - STATE(333), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1010), 12, - sym__dedent, + ACTIONS(1007), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37312,7 +35393,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1012), 33, + ACTIONS(1005), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37325,10 +35406,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, @@ -37346,17 +35430,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16201] = 5, + [15841] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1083), 1, - anon_sym_case, - STATE(333), 2, - sym_case_block, - aux_sym_cases_repeat1, - ACTIONS(1029), 12, - sym__dedent, + ACTIONS(1030), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37367,7 +35446,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1031), 33, + ACTIONS(1032), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37380,10 +35459,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, @@ -37401,9 +35483,14 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16261] = 3, + [15897] = 5, ACTIONS(3), 1, sym_comment, + ACTIONS(1038), 1, + anon_sym_case, + STATE(337), 2, + sym_case_block, + aux_sym_cases_repeat1, ACTIONS(1036), 12, sym__dedent, sym__string_start, @@ -37417,7 +35504,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1038), 36, + ACTIONS(1034), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37430,13 +35517,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, @@ -37454,10 +35538,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16317] = 3, + [15957] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1040), 12, + ACTIONS(1042), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -37470,7 +35554,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1042), 36, + ACTIONS(1040), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37507,10 +35591,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16373] = 3, + [16013] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1044), 12, + ACTIONS(1046), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -37523,7 +35607,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1046), 36, + ACTIONS(1044), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37560,12 +35644,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16429] = 3, + [16069] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1048), 12, - sym__dedent, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37613,12 +35697,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16485] = 3, + [16125] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1052), 12, - sym__dedent, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37666,12 +35750,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16541] = 3, + [16181] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1056), 12, - sym__dedent, + ACTIONS(1003), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37682,7 +35766,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1058), 36, + ACTIONS(1001), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37719,12 +35803,74 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16597] = 3, + [16237] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1060), 12, - sym__dedent, + ACTIONS(1056), 1, + anon_sym_COMMA, + ACTIONS(1059), 1, + anon_sym_COLON_EQ, + ACTIONS(1061), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(1063), 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(1022), 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(1017), 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, + [16301] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 1, + anon_sym_case, + STATE(313), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(1036), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37735,7 +35881,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1062), 36, + ACTIONS(1034), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37748,13 +35894,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, @@ -37772,12 +35915,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16653] = 3, + [16361] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1064), 12, - sym__dedent, + ACTIONS(999), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37788,7 +35931,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1066), 36, + ACTIONS(997), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37825,10 +35968,15 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16709] = 3, + [16417] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1068), 12, + ACTIONS(1067), 1, + anon_sym_case, + STATE(337), 2, + sym_case_block, + aux_sym_cases_repeat1, + ACTIONS(990), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -37841,7 +35989,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1070), 36, + ACTIONS(992), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37854,13 +36002,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, @@ -37878,12 +36023,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16765] = 3, + [16477] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1006), 12, - sym__dedent, + ACTIONS(1046), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -37894,7 +36039,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1008), 36, + ACTIONS(1044), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -37931,128 +36076,112 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [16821] = 19, + [16533] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(1042), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(610), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(612), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(960), 1, - anon_sym_COLON, - ACTIONS(962), 1, - anon_sym_not, - ACTIONS(964), 1, - anon_sym_lambda, - ACTIONS(966), 1, - anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, - sym_string, - STATE(1028), 1, - sym_expression, - ACTIONS(614), 2, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(608), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(600), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(958), 5, + ACTIONS(1040), 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, - STATE(982), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(796), 16, - 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, - sym_await, - [16909] = 19, + 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, + [16589] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - STATE(698), 1, + ACTIONS(964), 1, + anon_sym_COLON, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(987), 1, + STATE(1034), 1, sym_expression, - STATE(1256), 1, - sym_with_item, - ACTIONS(614), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38069,83 +36198,175 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [16997] = 18, + [16677] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(264), 1, + anon_sym_COMMA, + ACTIONS(271), 1, + anon_sym_COLON_EQ, + ACTIONS(273), 2, + anon_sym_COLON, + anon_sym_EQ, + ACTIONS(291), 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(260), 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(287), 16, + sym__newline, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(596), 1, + anon_sym_if, + anon_sym_in, anon_sym_LBRACK, - ACTIONS(642), 1, anon_sym_not, - ACTIONS(644), 1, - anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, - anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, - sym_primary_expression, - STATE(885), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(594), 3, + 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, + [16741] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 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(301), 4, + sym_ellipsis, + sym_float, + ACTIONS(1050), 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_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + [16797] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1030), 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(1032), 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, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [17082] = 5, + 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, + [16853] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - STATE(533), 1, - sym_else_clause, - ACTIONS(1086), 12, + ACTIONS(1052), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -38156,7 +36377,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1088), 33, + ACTIONS(1054), 36, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38169,10 +36390,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, @@ -38190,57 +36414,59 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17141] = 18, + [16909] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(954), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(954), 1, anon_sym_await, - STATE(698), 1, + ACTIONS(958), 1, + anon_sym_COLON, + STATE(705), 1, sym_primary_expression, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(1047), 1, + STATE(1024), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38257,14 +36483,14 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17226] = 5, + [16997] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, + ACTIONS(822), 1, anon_sym_else, - STATE(556), 1, + STATE(502), 1, sym_else_clause, - ACTIONS(1090), 12, + ACTIONS(1070), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -38277,7 +36503,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1092), 33, + ACTIONS(1072), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38311,16 +36537,84 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17285] = 5, + [17056] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(836), 1, - anon_sym_finally, - STATE(542), 1, - sym_finally_clause, - ACTIONS(1094), 12, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(1074), 1, + sym_identifier, + ACTIONS(1078), 1, + anon_sym_await, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(890), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + STATE(392), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(1076), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 14, + 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, + sym_await, + [17143] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + STATE(556), 1, + sym_else_clause, + ACTIONS(1082), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -38331,7 +36625,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1096), 33, + ACTIONS(1080), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38365,62 +36659,61 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17344] = 19, + [17202] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - ACTIONS(1098), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, sym_identifier, - ACTIONS(1102), 1, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(705), 1, sym_primary_expression, - STATE(908), 1, + STATE(708), 1, + sym_string, + STATE(999), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - STATE(377), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(1100), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 14, + STATE(787), 16, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -38433,57 +36726,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17431] = 18, + [17287] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(1024), 1, + STATE(693), 1, + sym_string, + STATE(966), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38500,57 +36793,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17516] = 18, + [17372] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(898), 1, + STATE(1045), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38567,71 +36860,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17601] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1106), 1, - anon_sym_COMMA, - ACTIONS(1113), 1, - anon_sym_EQ, - ACTIONS(1111), 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(1109), 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(1104), 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, - [17662] = 5, + [17457] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, + ACTIONS(816), 1, anon_sym_else, - STATE(467), 1, + STATE(517), 1, sym_else_clause, - ACTIONS(1115), 12, + ACTIONS(1086), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -38642,7 +36880,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1117), 33, + ACTIONS(1084), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -38676,57 +36914,57 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [17721] = 18, + [17516] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1115), 1, + STATE(1108), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38743,111 +36981,246 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17806] = 5, + [17601] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(836), 1, - anon_sym_finally, - STATE(497), 1, - sym_finally_clause, - ACTIONS(1119), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, + ACTIONS(1090), 1, + anon_sym_COMMA, + ACTIONS(1097), 1, + anon_sym_EQ, + ACTIONS(1095), 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(1093), 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, + 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(1088), 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, + [17662] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(590), 1, + anon_sym_LPAREN, + ACTIONS(598), 1, + anon_sym_LBRACK, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, + sym_primary_expression, + STATE(708), 1, + sym_string, + STATE(990), 1, + sym_expression, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(1121), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(596), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(588), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(948), 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, + STATE(978), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(787), 16, + 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, + sym_await, + [17747] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, + ACTIONS(297), 1, anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1110), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, sym_true, sym_false, sym_none, - [17865] = 18, + ACTIONS(269), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [17832] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1123), 1, + STATE(1095), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38864,7 +37237,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [17950] = 18, + [17917] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -38875,19 +37248,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(946), 1, + STATE(985), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -38901,20 +37274,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -38931,165 +37304,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18035] = 5, + [18002] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - STATE(522), 1, - sym_else_clause, - ACTIONS(1123), 12, - sym__string_start, - ts_builtin_sym_end, - anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1125), 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, - [18094] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(832), 1, - anon_sym_else, - STATE(529), 1, - sym_else_clause, - ACTIONS(1127), 12, + ACTIONS(299), 1, sym__string_start, - ts_builtin_sym_end, + ACTIONS(578), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(584), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1129), 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(626), 1, anon_sym_not, + ACTIONS(628), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [18153] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1085), 1, + STATE(876), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39106,57 +37371,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18238] = 18, + [18087] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(1072), 1, + STATE(589), 1, + sym_primary_expression, + STATE(909), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39173,57 +37438,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18323] = 18, + [18172] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(958), 1, + STATE(576), 1, + sym_primary_expression, + STATE(872), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39240,12 +37505,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18408] = 3, + [18257] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1131), 12, + ACTIONS(820), 1, + anon_sym_finally, + STATE(515), 1, + sym_finally_clause, + ACTIONS(1101), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -39256,7 +37525,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1133), 35, + ACTIONS(1099), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39269,8 +37538,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, @@ -39292,61 +37559,74 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18463] = 5, + [18316] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(832), 1, - anon_sym_else, - STATE(538), 1, - sym_else_clause, - ACTIONS(1135), 12, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, sym__string_start, - ts_builtin_sym_end, + ACTIONS(578), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(584), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, - sym_ellipsis, - sym_float, - ACTIONS(1137), 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(626), 1, anon_sym_not, + ACTIONS(628), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(664), 1, sym_identifier, + ACTIONS(674), 1, anon_sym_await, + STATE(569), 1, + sym_string, + STATE(576), 1, + sym_primary_expression, + STATE(860), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(582), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, sym_true, sym_false, sym_none, - [18522] = 18, + ACTIONS(670), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [18401] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -39357,19 +37637,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1121), 1, + STATE(1083), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -39383,20 +37663,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39413,57 +37693,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18607] = 18, + [18486] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(927), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1026), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39480,57 +37760,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18692] = 18, + [18571] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(684), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(537), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(941), 1, + STATE(693), 1, + sym_string, + STATE(1017), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39547,57 +37827,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18777] = 18, + [18656] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(626), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1147), 1, + STATE(883), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39614,23 +37894,94 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [18862] = 3, + [18741] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(1139), 12, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, sym__string_start, - ts_builtin_sym_end, + ACTIONS(578), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(584), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, + ACTIONS(626), 1, + anon_sym_not, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, + anon_sym_await, + STATE(569), 1, + sym_string, + STATE(576), 1, + sym_primary_expression, + STATE(886), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(582), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(670), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [18826] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + STATE(458), 1, + sym_else_clause, + ACTIONS(1105), 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(1141), 35, + ACTIONS(1103), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -39643,8 +37994,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, @@ -39666,57 +38015,57 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [18917] = 18, + [18885] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(966), 1, + STATE(576), 1, + sym_primary_expression, + STATE(928), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39733,57 +38082,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19002] = 18, + [18970] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(590), 1, + anon_sym_LPAREN, + ACTIONS(598), 1, + anon_sym_LBRACK, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(69), 1, - anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(944), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, + STATE(705), 1, sym_primary_expression, - STATE(693), 1, + STATE(708), 1, sym_string, - STATE(967), 1, + STATE(1001), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39800,57 +38149,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19087] = 18, + [19055] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(977), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1056), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39867,57 +38216,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19172] = 18, + [19140] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(626), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1096), 1, + STATE(984), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -39934,57 +38283,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19257] = 18, + [19225] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(1068), 1, + STATE(589), 1, + sym_primary_expression, + STATE(881), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40001,112 +38350,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19342] = 6, + [19310] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(1025), 1, - anon_sym_EQ, - ACTIONS(1018), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1016), 14, - anon_sym_DOT, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - anon_sym_if, - anon_sym_in, + ACTIONS(277), 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, - ACTIONS(1027), 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(1021), 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, - [19403] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(875), 1, + STATE(901), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40123,57 +38417,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19488] = 18, + [19395] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(960), 1, + STATE(589), 1, + sym_primary_expression, + STATE(880), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40190,57 +38484,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19573] = 18, + [19480] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, + ACTIONS(954), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, + STATE(705), 1, sym_primary_expression, - STATE(877), 1, + STATE(708), 1, + sym_string, + STATE(1053), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40257,57 +38551,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19658] = 18, + [19565] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(899), 1, + STATE(870), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40324,57 +38618,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19743] = 18, + [19650] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, STATE(878), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40391,57 +38685,111 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19828] = 18, + [19735] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(826), 1, + anon_sym_finally, + STATE(470), 1, + sym_finally_clause, + ACTIONS(1101), 12, sym__string_start, - ACTIONS(590), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(596), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(642), 1, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1099), 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(644), 1, anon_sym_lambda, - ACTIONS(684), 1, + anon_sym_yield, + sym_integer, sym_identifier, - ACTIONS(694), 1, anon_sym_await, - STATE(565), 1, + sym_true, + sym_false, + sym_none, + [19794] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(880), 1, + STATE(1101), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40458,57 +38806,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19913] = 18, + [19879] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(952), 1, anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, + ACTIONS(954), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, + STATE(705), 1, sym_primary_expression, - STATE(881), 1, + STATE(708), 1, + sym_string, + STATE(973), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40525,7 +38873,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [19998] = 18, + [19964] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -40536,19 +38884,86 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, + ACTIONS(555), 1, + anon_sym_LPAREN, ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, + sym_primary_expression, + STATE(693), 1, + sym_string, + STATE(1152), 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(533), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(937), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(764), 16, + 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, + sym_await, + [20049] = 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(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1035), 1, + STATE(957), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -40562,20 +38977,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40592,14 +39007,81 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20083] = 5, + [20134] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, + anon_sym_lambda, + ACTIONS(297), 1, + anon_sym_await, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, + sym_string, + STATE(589), 1, + sym_primary_expression, + STATE(1149), 1, + sym_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(269), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(862), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(575), 16, + 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, + sym_await, + [20219] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, anon_sym_else, - STATE(471), 1, + STATE(494), 1, sym_else_clause, - ACTIONS(1090), 12, + ACTIONS(1070), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -40612,7 +39094,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1092), 33, + ACTIONS(1072), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40646,57 +39128,57 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [20142] = 18, + [20278] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(939), 1, + STATE(589), 1, + sym_primary_expression, + STATE(866), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40713,57 +39195,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20227] = 18, + [20363] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(684), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, sym_identifier, - ACTIONS(694), 1, + ACTIONS(537), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(887), 1, + STATE(693), 1, + sym_string, + STATE(970), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40780,57 +39262,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20312] = 18, + [20448] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(1089), 1, + STATE(693), 1, + sym_string, + STATE(960), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -40847,12 +39329,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20397] = 3, + [20533] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1145), 12, - sym__dedent, + ACTIONS(826), 1, + anon_sym_finally, + STATE(513), 1, + sym_finally_clause, + ACTIONS(1107), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -40863,7 +39349,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1143), 35, + ACTIONS(1109), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40876,8 +39362,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, @@ -40899,14 +39383,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [20452] = 5, + [20592] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, - anon_sym_else, - STATE(486), 1, - sym_else_clause, - ACTIONS(1086), 12, + ACTIONS(1113), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -40919,7 +39399,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1088), 33, + ACTIONS(1111), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -40932,6 +39412,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, @@ -40953,115 +39435,62 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [20511] = 5, + [20647] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(842), 1, - anon_sym_finally, - STATE(488), 1, - sym_finally_clause, - ACTIONS(1094), 12, - sym__dedent, - sym__string_start, + ACTIONS(1026), 1, + anon_sym_EQ, + ACTIONS(1019), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1017), 14, + anon_sym_DOT, 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(1096), 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_in, + anon_sym_LBRACK, anon_sym_not, - anon_sym_lambda, - anon_sym_yield, - sym_integer, - sym_identifier, - anon_sym_await, - sym_true, - sym_false, - sym_none, - [20570] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(838), 1, - anon_sym_else, - STATE(500), 1, - sym_else_clause, - ACTIONS(1115), 12, - sym__dedent, - sym__string_start, - anon_sym_LPAREN, + 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(1028), 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(1022), 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(1117), 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, - [20629] = 18, + 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, + [20708] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -41072,19 +39501,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(952), 1, + STATE(1037), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -41098,20 +39527,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41128,219 +39557,124 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20714] = 5, + [20793] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(842), 1, - anon_sym_finally, - STATE(505), 1, - sym_finally_clause, - ACTIONS(1119), 12, - sym__dedent, - sym__string_start, + ACTIONS(590), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(598), 1, anon_sym_LBRACK, + ACTIONS(600), 1, anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, + anon_sym_not, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, + sym_primary_expression, + STATE(708), 1, + sym_string, + STATE(1008), 1, + sym_expression, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(1121), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + ACTIONS(596), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(588), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(948), 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, + STATE(978), 6, + sym_named_expression, + sym_not_operator, + sym_boolean_operator, + sym_comparison_operator, + sym_lambda, + sym_conditional_expression, + STATE(787), 16, + 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, + sym_await, + [20878] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, + ACTIONS(628), 1, anon_sym_lambda, - anon_sym_yield, - sym_integer, + ACTIONS(664), 1, sym_identifier, + ACTIONS(674), 1, anon_sym_await, - sym_true, - sym_false, - sym_none, - [20773] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(838), 1, - anon_sym_else, - STATE(510), 1, - sym_else_clause, - ACTIONS(1123), 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(1125), 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, - [20832] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(838), 1, - anon_sym_else, - STATE(514), 1, - sym_else_clause, - ACTIONS(1127), 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(1129), 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, - [20891] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(1070), 1, + STATE(868), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41357,57 +39691,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [20976] = 18, + [20963] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1071), 1, + STATE(1011), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41424,12 +39758,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21061] = 3, + [21048] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1131), 12, - sym__dedent, + ACTIONS(822), 1, + anon_sym_else, + STATE(484), 1, + sym_else_clause, + ACTIONS(1086), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41440,7 +39778,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1133), 35, + ACTIONS(1084), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41453,8 +39791,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, @@ -41476,16 +39812,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21116] = 5, + [21107] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(838), 1, - anon_sym_else, - STATE(519), 1, - sym_else_clause, - ACTIONS(1135), 12, - sym__dedent, + ACTIONS(1113), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41496,7 +39828,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1137), 33, + ACTIONS(1111), 35, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41509,6 +39841,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, @@ -41530,57 +39864,57 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21175] = 18, + [21162] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, sym_primary_expression, - STATE(908), 1, + STATE(708), 1, + sym_string, + STATE(1047), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41597,67 +39931,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21260] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1149), 1, - anon_sym_COMMA, - ACTIONS(1156), 1, - anon_sym_EQ, - ACTIONS(1154), 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(1152), 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(1147), 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, - [21321] = 3, + [21247] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1139), 12, - sym__dedent, + ACTIONS(822), 1, + anon_sym_else, + STATE(519), 1, + sym_else_clause, + ACTIONS(1115), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -41668,7 +39951,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1141), 35, + ACTIONS(1117), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -41681,8 +39964,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, @@ -41704,57 +39985,57 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [21376] = 18, + [21306] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(626), 1, anon_sym_not, - ACTIONS(71), 1, + ACTIONS(628), 1, anon_sym_lambda, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(325), 1, + ACTIONS(664), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(674), 1, anon_sym_await, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(1018), 1, + STATE(576), 1, + sym_primary_expression, + STATE(882), 1, sym_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41771,57 +40052,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21461] = 18, + [21391] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1148), 1, + STATE(1145), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41838,59 +40119,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21546] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1145), 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(1143), 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, - [21601] = 18, + [21476] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -41901,19 +40130,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1064), 1, + STATE(941), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -41927,20 +40156,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -41957,57 +40186,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21686] = 18, + [21561] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, sym_primary_expression, - STATE(871), 1, + STATE(708), 1, + sym_string, + STATE(1006), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42024,57 +40253,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21771] = 18, + [21646] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(872), 1, + STATE(693), 1, + sym_string, + STATE(923), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42091,57 +40320,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21856] = 18, + [21731] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(873), 1, + STATE(1087), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42158,57 +40387,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [21941] = 18, + [21816] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, sym_primary_expression, - STATE(866), 1, + STATE(708), 1, + sym_string, + STATE(1005), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42225,57 +40454,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22026] = 18, + [21901] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(874), 1, + STATE(1144), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42292,57 +40521,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22111] = 18, + [21986] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(876), 1, + STATE(693), 1, + sym_string, + STATE(934), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42359,57 +40588,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22196] = 18, + [22071] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(879), 1, + STATE(1140), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42426,57 +40655,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22281] = 18, + [22156] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, anon_sym_await, - STATE(698), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(1001), 1, + STATE(1061), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42493,57 +40722,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22366] = 18, + [22241] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(1006), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1085), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42560,57 +40789,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22451] = 18, + [22326] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(1007), 1, + STATE(589), 1, + sym_primary_expression, + STATE(879), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42627,57 +40856,112 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22536] = 18, + [22411] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(1056), 1, + anon_sym_COMMA, + ACTIONS(1061), 1, + anon_sym_EQ, + ACTIONS(1063), 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(1022), 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(1017), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, + 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, + [22472] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, sym_identifier, - ACTIONS(962), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(970), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1138), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42694,57 +40978,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22621] = 18, + [22557] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, anon_sym_await, - STATE(698), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(971), 1, + STATE(932), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42761,124 +41045,273 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22706] = 18, + [22642] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(820), 1, + anon_sym_finally, + STATE(546), 1, + sym_finally_clause, + ACTIONS(1107), 12, + sym__dedent, + sym__string_start, anon_sym_LPAREN, - ACTIONS(610), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(612), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1109), 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(964), 1, anon_sym_lambda, - ACTIONS(966), 1, + anon_sym_yield, + sym_integer, + sym_identifier, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, - sym_string, - STATE(976), 1, - sym_expression, - ACTIONS(614), 2, + sym_true, + sym_false, + sym_none, + [22701] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(816), 1, + anon_sym_else, + STATE(541), 1, + sym_else_clause, + ACTIONS(1115), 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(608), 3, + ACTIONS(1117), 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, + [22760] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(822), 1, + anon_sym_else, + STATE(529), 1, + sym_else_clause, + ACTIONS(1119), 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, - ACTIONS(600), 4, + sym_ellipsis, + sym_float, + ACTIONS(1121), 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(958), 5, + [22819] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(822), 1, + anon_sym_else, + STATE(472), 1, + sym_else_clause, + ACTIONS(1105), 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(1103), 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(982), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(796), 16, - 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, - sym_await, - [22791] = 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, + [22878] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(983), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1107), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42895,7 +41328,59 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22876] = 18, + [22963] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1125), 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(1123), 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, + [23018] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -42906,19 +41391,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(978), 1, + STATE(953), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -42932,20 +41417,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -42962,124 +41447,161 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [22961] = 18, + [23103] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(1127), 12, sym__string_start, - ACTIONS(590), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(596), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(642), 1, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1129), 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(644), 1, anon_sym_lambda, - ACTIONS(684), 1, + anon_sym_yield, + sym_integer, sym_identifier, - ACTIONS(694), 1, anon_sym_await, - STATE(565), 1, - sym_string, - STATE(590), 1, - sym_primary_expression, - STATE(860), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(594), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + [23158] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 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(1129), 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(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [23046] = 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] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1063), 1, + STATE(1093), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43096,74 +41618,114 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23131] = 18, + [23298] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(69), 1, + ACTIONS(1133), 1, + anon_sym_COMMA, + ACTIONS(1140), 1, + anon_sym_EQ, + ACTIONS(1138), 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(1136), 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(1131), 16, + sym__newline, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_if, + anon_sym_in, + anon_sym_LBRACK, anon_sym_not, - ACTIONS(71), 1, - anon_sym_lambda, - ACTIONS(81), 1, + 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, + [23359] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1125), 12, sym__string_start, - ACTIONS(325), 1, - sym_identifier, - ACTIONS(331), 1, - anon_sym_await, - ACTIONS(561), 1, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - STATE(689), 1, - sym_primary_expression, - STATE(693), 1, - sym_string, - STATE(1016), 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_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(327), 5, + sym_ellipsis, + sym_float, + ACTIONS(1123), 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(940), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(773), 16, - 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, - sym_await, - [23216] = 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, + [23414] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43174,19 +41736,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1066), 1, + STATE(1018), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43200,20 +41762,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43230,57 +41792,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23301] = 18, + [23499] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(642), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(644), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(684), 1, - sym_identifier, - ACTIONS(694), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(590), 1, + STATE(589), 1, sym_primary_expression, - STATE(984), 1, + STATE(1098), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(690), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43297,7 +41859,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23386] = 18, + [23584] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43308,19 +41870,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(980), 1, + STATE(1050), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43334,20 +41896,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43364,7 +41926,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23471] = 18, + [23669] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43375,19 +41937,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(1083), 1, + STATE(1078), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43401,20 +41963,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43431,112 +41993,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23556] = 6, + [23754] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(1072), 1, - anon_sym_COMMA, - ACTIONS(1077), 1, - anon_sym_EQ, - ACTIONS(1079), 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(1021), 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(1016), 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, - [23617] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(626), 1, anon_sym_not, - STATE(565), 1, + ACTIONS(628), 1, + anon_sym_lambda, + ACTIONS(664), 1, + sym_identifier, + ACTIONS(674), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(576), 1, sym_primary_expression, - STATE(860), 1, + STATE(871), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(670), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43553,57 +42060,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23702] = 18, + [23839] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1021), 1, + STATE(860), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43620,7 +42127,7 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23787] = 18, + [23924] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, @@ -43631,19 +42138,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_lambda, ACTIONS(81), 1, sym__string_start, - ACTIONS(325), 1, + ACTIONS(531), 1, sym_identifier, - ACTIONS(331), 1, + ACTIONS(537), 1, anon_sym_await, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - STATE(689), 1, + STATE(692), 1, sym_primary_expression, STATE(693), 1, sym_string, - STATE(959), 1, + STATE(991), 1, sym_expression, ACTIONS(75), 2, sym_ellipsis, @@ -43657,20 +42164,20 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(327), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(940), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43687,57 +42194,111 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23872] = 18, + [24009] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(822), 1, + anon_sym_else, + STATE(488), 1, + sym_else_clause, + ACTIONS(1082), 12, + sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, - ACTIONS(610), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(612), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, + anon_sym_STAR_STAR, + anon_sym_AT, + anon_sym_TILDE, + sym_ellipsis, + sym_float, + ACTIONS(1080), 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, - ACTIONS(962), 1, + anon_sym_await, + sym_true, + sym_false, + sym_none, + [24068] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(258), 1, + sym_identifier, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(283), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(297), 1, anon_sym_await, - STATE(698), 1, - sym_primary_expression, - STATE(699), 1, + ACTIONS(299), 1, + sym__string_start, + STATE(569), 1, sym_string, - STATE(1003), 1, + STATE(589), 1, + sym_primary_expression, + STATE(1128), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43754,57 +42315,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [23957] = 18, + [24153] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1090), 1, + STATE(888), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43821,57 +42382,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [24042] = 18, + [24238] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(69), 1, + anon_sym_not, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, + anon_sym_await, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + STATE(692), 1, sym_primary_expression, - STATE(1125), 1, + STATE(693), 1, + sym_string, + STATE(1064), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -43888,124 +42449,57 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [24127] = 18, + [24323] = 18, ACTIONS(3), 1, sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1132), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [24212] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1134), 1, + STATE(890), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44022,191 +42516,111 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [24297] = 18, + [24408] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, + ACTIONS(816), 1, + anon_sym_else, + STATE(537), 1, + sym_else_clause, + ACTIONS(1119), 12, + sym__dedent, sym__string_start, - ACTIONS(571), 1, anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1135), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - ACTIONS(301), 4, - sym_integer, - sym_true, - sym_false, - sym_none, - ACTIONS(271), 5, + sym_ellipsis, + sym_float, + ACTIONS(1121), 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(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, - [24382] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, + anon_sym_class, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, - sym_primary_expression, - STATE(1140), 1, - sym_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 4, + anon_sym_lambda, + anon_sym_yield, sym_integer, + sym_identifier, + anon_sym_await, sym_true, sym_false, sym_none, - ACTIONS(271), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(863), 6, - sym_named_expression, - sym_not_operator, - sym_boolean_operator, - sym_comparison_operator, - sym_lambda, - sym_conditional_expression, - STATE(589), 16, - 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, - sym_await, [24467] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(618), 1, - sym__string_start, - ACTIONS(954), 1, - sym_identifier, - ACTIONS(962), 1, + ACTIONS(69), 1, anon_sym_not, - ACTIONS(964), 1, + ACTIONS(71), 1, anon_sym_lambda, - ACTIONS(966), 1, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(531), 1, + sym_identifier, + ACTIONS(537), 1, anon_sym_await, - STATE(698), 1, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + STATE(692), 1, sym_primary_expression, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(1046), 1, + STATE(962), 1, sym_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 4, + ACTIONS(77), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(958), 5, + ACTIONS(533), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(982), 6, + STATE(937), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44228,52 +42642,52 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1142), 1, + STATE(1069), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44295,52 +42709,52 @@ static const uint16_t ts_small_parse_table[] = { sym_comment, ACTIONS(258), 1, sym_identifier, - ACTIONS(283), 1, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(295), 1, + ACTIONS(283), 1, + anon_sym_not, + ACTIONS(289), 1, anon_sym_lambda, - ACTIONS(303), 1, + ACTIONS(297), 1, anon_sym_await, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(628), 1, - anon_sym_not, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(595), 1, + STATE(589), 1, sym_primary_expression, - STATE(1143), 1, + STATE(1067), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(269), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(862), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44360,54 +42774,54 @@ static const uint16_t ts_small_parse_table[] = { [24722] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(258), 1, - sym_identifier, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(295), 1, - anon_sym_lambda, - ACTIONS(303), 1, - anon_sym_await, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(628), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(606), 1, + sym__string_start, + ACTIONS(944), 1, + sym_identifier, + ACTIONS(950), 1, anon_sym_not, - STATE(565), 1, - sym_string, - STATE(595), 1, + ACTIONS(952), 1, + anon_sym_lambda, + ACTIONS(954), 1, + anon_sym_await, + STATE(705), 1, sym_primary_expression, - STATE(1037), 1, + STATE(708), 1, + sym_string, + STATE(969), 1, sym_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(588), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(271), 5, + ACTIONS(948), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(863), 6, + STATE(978), 6, sym_named_expression, sym_not_operator, sym_boolean_operator, sym_comparison_operator, sym_lambda, sym_conditional_expression, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -44427,9 +42841,9 @@ static const uint16_t ts_small_parse_table[] = { [24807] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1158), 12, + ACTIONS(1144), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44440,7 +42854,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1160), 34, + ACTIONS(1142), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44478,9 +42892,9 @@ static const uint16_t ts_small_parse_table[] = { [24861] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1162), 12, + ACTIONS(1148), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44491,7 +42905,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1164), 34, + ACTIONS(1146), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44529,9 +42943,9 @@ static const uint16_t ts_small_parse_table[] = { [24915] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1162), 12, - sym__dedent, + ACTIONS(1150), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44542,7 +42956,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1164), 34, + ACTIONS(1152), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44559,9 +42973,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, @@ -44580,7 +42994,7 @@ static const uint16_t ts_small_parse_table[] = { [24969] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1166), 12, + ACTIONS(1148), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -44593,7 +43007,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1168), 34, + ACTIONS(1146), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44610,9 +43024,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, @@ -44631,9 +43045,9 @@ static const uint16_t ts_small_parse_table[] = { [25023] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1166), 12, - sym__dedent, + ACTIONS(1154), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44644,7 +43058,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1168), 34, + ACTIONS(1156), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44661,9 +43075,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, @@ -44682,7 +43096,7 @@ static const uint16_t ts_small_parse_table[] = { [25077] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1172), 12, + ACTIONS(1150), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -44695,7 +43109,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1170), 34, + ACTIONS(1152), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44712,9 +43126,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, @@ -44733,9 +43147,9 @@ static const uint16_t ts_small_parse_table[] = { [25131] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1176), 12, - sym__dedent, + ACTIONS(1144), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44746,7 +43160,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1174), 34, + ACTIONS(1142), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44784,7 +43198,7 @@ static const uint16_t ts_small_parse_table[] = { [25185] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1180), 12, + ACTIONS(1160), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -44797,7 +43211,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1178), 34, + ACTIONS(1158), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44835,9 +43249,9 @@ static const uint16_t ts_small_parse_table[] = { [25239] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1172), 12, + ACTIONS(1164), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44848,7 +43262,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1170), 34, + ACTIONS(1162), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44865,9 +43279,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, @@ -44886,9 +43300,9 @@ static const uint16_t ts_small_parse_table[] = { [25293] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1158), 12, - sym__dedent, + ACTIONS(1160), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -44899,7 +43313,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1160), 34, + ACTIONS(1158), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44937,7 +43351,7 @@ static const uint16_t ts_small_parse_table[] = { [25347] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1176), 12, + ACTIONS(1164), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -44950,7 +43364,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1174), 34, + ACTIONS(1162), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -44988,9 +43402,9 @@ static const uint16_t ts_small_parse_table[] = { [25401] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1180), 12, + ACTIONS(1154), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45001,7 +43415,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1178), 34, + ACTIONS(1156), 34, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45018,9 +43432,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, @@ -45039,7 +43453,7 @@ static const uint16_t ts_small_parse_table[] = { [25455] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1184), 12, + ACTIONS(1168), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45052,7 +43466,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1182), 33, + ACTIONS(1166), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45089,7 +43503,7 @@ static const uint16_t ts_small_parse_table[] = { [25508] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1186), 12, + ACTIONS(1170), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -45102,7 +43516,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1188), 33, + ACTIONS(1172), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45139,7 +43553,7 @@ static const uint16_t ts_small_parse_table[] = { [25561] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(848), 12, + ACTIONS(1176), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45152,7 +43566,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(846), 33, + ACTIONS(1174), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45189,7 +43603,7 @@ static const uint16_t ts_small_parse_table[] = { [25614] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1192), 12, + ACTIONS(1180), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45202,7 +43616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1190), 33, + ACTIONS(1178), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45239,7 +43653,7 @@ static const uint16_t ts_small_parse_table[] = { [25667] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1194), 12, + ACTIONS(1182), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -45252,7 +43666,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1196), 33, + ACTIONS(1184), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45289,9 +43703,9 @@ static const uint16_t ts_small_parse_table[] = { [25720] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1200), 12, - sym__dedent, + ACTIONS(1186), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45302,7 +43716,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1198), 33, + ACTIONS(1188), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45339,7 +43753,7 @@ static const uint16_t ts_small_parse_table[] = { [25773] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1204), 12, + ACTIONS(1192), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45352,7 +43766,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1202), 33, + ACTIONS(1190), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45389,9 +43803,9 @@ static const uint16_t ts_small_parse_table[] = { [25826] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1206), 12, + ACTIONS(1186), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45402,7 +43816,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1208), 33, + ACTIONS(1188), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45439,9 +43853,9 @@ static const uint16_t ts_small_parse_table[] = { [25879] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1210), 12, + ACTIONS(1196), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45452,7 +43866,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1212), 33, + ACTIONS(1194), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45489,7 +43903,7 @@ static const uint16_t ts_small_parse_table[] = { [25932] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1214), 12, + ACTIONS(1198), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -45502,7 +43916,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1216), 33, + ACTIONS(1200), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45539,7 +43953,7 @@ static const uint16_t ts_small_parse_table[] = { [25985] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1220), 12, + ACTIONS(1204), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45552,7 +43966,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, @@ -45589,9 +44003,9 @@ static const uint16_t ts_small_parse_table[] = { [26038] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1222), 12, + ACTIONS(828), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45602,7 +44016,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1224), 33, + ACTIONS(830), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45639,9 +44053,9 @@ static const uint16_t ts_small_parse_table[] = { [26091] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1228), 12, - sym__dedent, + ACTIONS(1206), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45652,7 +44066,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1226), 33, + ACTIONS(1208), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45689,9 +44103,9 @@ static const uint16_t ts_small_parse_table[] = { [26144] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1232), 12, - sym__dedent, + ACTIONS(1210), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45702,7 +44116,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1230), 33, + ACTIONS(1212), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45739,7 +44153,7 @@ static const uint16_t ts_small_parse_table[] = { [26197] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1234), 12, + ACTIONS(1168), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -45752,7 +44166,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1236), 33, + ACTIONS(1166), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45786,76 +44200,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26250] = 19, + [26250] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, - anon_sym_LPAREN, - ACTIONS(664), 1, - anon_sym_LBRACK, - ACTIONS(666), 1, - anon_sym_await, - ACTIONS(1240), 1, - anon_sym_STAR, - STATE(565), 1, - sym_string, - STATE(840), 1, - sym_pattern, - STATE(844), 1, - sym_primary_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(1238), 2, - anon_sym_RPAREN, - anon_sym_RBRACK, - STATE(722), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(833), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - ACTIONS(301), 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(589), 14, - 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, - sym_await, - [26335] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1094), 12, + ACTIONS(1216), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -45868,7 +44216,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1096), 33, + ACTIONS(1214), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45902,12 +44250,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26388] = 3, + [26303] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(828), 12, - sym__dedent, + ACTIONS(1192), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45918,7 +44266,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(830), 33, + ACTIONS(1190), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -45952,12 +44300,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26441] = 3, + [26356] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1244), 12, - sym__dedent, + ACTIONS(1218), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -45968,7 +44316,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1242), 33, + ACTIONS(1220), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46002,12 +44350,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26494] = 3, + [26409] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1248), 12, - sym__dedent, + ACTIONS(1222), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46018,7 +44366,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1246), 33, + ACTIONS(1224), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46052,12 +44400,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26547] = 3, + [26462] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1252), 12, - sym__dedent, + ACTIONS(1226), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46068,7 +44416,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1250), 33, + ACTIONS(1228), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46102,12 +44450,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26600] = 3, + [26515] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1194), 12, - sym__dedent, + ACTIONS(1230), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46118,7 +44466,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1196), 33, + ACTIONS(1232), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46152,12 +44500,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26653] = 3, + [26568] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1234), 12, - sym__dedent, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46202,12 +44550,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26706] = 3, + [26621] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1256), 12, - sym__dedent, + ACTIONS(1180), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46218,7 +44566,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1254), 33, + ACTIONS(1178), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46252,12 +44600,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26759] = 3, + [26674] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1260), 12, - sym__dedent, + ACTIONS(1196), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46268,7 +44616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1258), 33, + ACTIONS(1194), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46302,12 +44650,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26812] = 3, + [26727] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1264), 12, - sym__dedent, + ACTIONS(1216), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46318,7 +44666,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1262), 33, + ACTIONS(1214), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46352,10 +44700,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26865] = 3, + [26780] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1268), 12, + ACTIONS(1210), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46368,7 +44716,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1266), 33, + ACTIONS(1212), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46402,10 +44750,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26918] = 3, + [26833] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1270), 12, + ACTIONS(1238), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -46418,7 +44766,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1272), 33, + ACTIONS(1240), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46452,10 +44800,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [26971] = 3, + [26886] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1276), 12, + ACTIONS(1182), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46468,7 +44816,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1274), 33, + ACTIONS(1184), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46502,12 +44850,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27024] = 3, + [26939] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1280), 12, - sym__dedent, + ACTIONS(1242), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46518,7 +44866,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1278), 33, + ACTIONS(1244), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46552,12 +44900,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27077] = 3, + [26992] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1284), 12, - sym__dedent, + ACTIONS(1246), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46568,7 +44916,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1282), 33, + ACTIONS(1248), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46602,10 +44950,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27130] = 3, + [27045] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1286), 12, + ACTIONS(1250), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -46618,7 +44966,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1288), 33, + ACTIONS(1252), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46652,12 +45000,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27183] = 3, + [27098] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1119), 12, - sym__dedent, + ACTIONS(1254), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46668,7 +45016,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1121), 33, + ACTIONS(1256), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46702,12 +45050,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27236] = 3, + [27151] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1292), 12, - sym__dedent, + ACTIONS(1258), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46718,7 +45066,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1290), 33, + ACTIONS(1260), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46752,12 +45100,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27289] = 3, + [27204] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1296), 12, - sym__dedent, + ACTIONS(1262), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -46768,7 +45116,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1294), 33, + ACTIONS(1264), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46802,10 +45150,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27342] = 3, + [27257] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1300), 12, + ACTIONS(1262), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46818,7 +45166,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1298), 33, + ACTIONS(1264), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46852,10 +45200,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27395] = 3, + [27310] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1304), 12, + ACTIONS(1268), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46868,7 +45216,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1302), 33, + ACTIONS(1266), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46902,10 +45250,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27448] = 3, + [27363] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1308), 12, + ACTIONS(1272), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46918,7 +45266,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1306), 33, + ACTIONS(1270), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -46952,10 +45300,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27501] = 3, + [27416] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1186), 12, + ACTIONS(1107), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -46968,7 +45316,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1188), 33, + ACTIONS(1109), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47002,10 +45350,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27554] = 3, + [27469] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1310), 12, + ACTIONS(1268), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -47018,7 +45366,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1312), 33, + ACTIONS(1266), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47052,10 +45400,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27607] = 3, + [27522] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1206), 12, + ACTIONS(814), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47068,7 +45416,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1208), 33, + ACTIONS(812), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47102,12 +45450,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27660] = 3, + [27575] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1210), 12, - sym__dedent, + ACTIONS(1204), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47118,7 +45466,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1212), 33, + ACTIONS(1202), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47152,12 +45500,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27713] = 3, + [27628] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1214), 12, - sym__dedent, + ACTIONS(1274), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47168,7 +45516,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1216), 33, + ACTIONS(1276), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47202,10 +45550,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27766] = 3, + [27681] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1222), 12, + ACTIONS(1280), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47218,7 +45566,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1224), 33, + ACTIONS(1278), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47252,10 +45600,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27819] = 3, + [27734] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1244), 12, + ACTIONS(1282), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -47268,7 +45616,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1242), 33, + ACTIONS(1284), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47302,10 +45650,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [27872] = 3, + [27787] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1314), 12, + ACTIONS(1272), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -47318,7 +45666,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1316), 33, + ACTIONS(1270), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47352,12 +45700,78 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, + [27840] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(636), 1, + sym_identifier, + ACTIONS(638), 1, + anon_sym_LPAREN, + ACTIONS(648), 1, + anon_sym_LBRACK, + ACTIONS(650), 1, + anon_sym_await, + ACTIONS(1288), 1, + anon_sym_STAR, + STATE(569), 1, + sym_string, + STATE(834), 1, + sym_pattern, + STATE(843), 1, + sym_primary_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(1286), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + STATE(712), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(837), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(642), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(575), 14, + 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, + sym_await, [27925] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1286), 12, - sym__dedent, + ACTIONS(1176), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47368,7 +45782,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1288), 33, + ACTIONS(1174), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47405,7 +45819,7 @@ static const uint16_t ts_small_parse_table[] = { [27978] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1310), 12, + ACTIONS(1292), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47418,7 +45832,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1312), 33, + ACTIONS(1290), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47455,7 +45869,7 @@ static const uint16_t ts_small_parse_table[] = { [28031] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1314), 12, + ACTIONS(1296), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47468,7 +45882,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1316), 33, + ACTIONS(1294), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47505,9 +45919,9 @@ static const uint16_t ts_small_parse_table[] = { [28084] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1252), 12, + ACTIONS(1300), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47518,7 +45932,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1250), 33, + ACTIONS(1298), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47555,7 +45969,7 @@ static const uint16_t ts_small_parse_table[] = { [28137] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1320), 12, + ACTIONS(1304), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -47568,7 +45982,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1318), 33, + ACTIONS(1302), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47605,7 +46019,7 @@ static const uint16_t ts_small_parse_table[] = { [28190] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1184), 12, + ACTIONS(828), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -47618,7 +46032,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1182), 33, + ACTIONS(830), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47655,9 +46069,9 @@ static const uint16_t ts_small_parse_table[] = { [28243] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1324), 12, - sym__dedent, + ACTIONS(1107), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47668,7 +46082,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1322), 33, + ACTIONS(1109), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47705,9 +46119,9 @@ static const uint16_t ts_small_parse_table[] = { [28296] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1256), 12, + ACTIONS(1198), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47718,7 +46132,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1254), 33, + ACTIONS(1200), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47755,9 +46169,9 @@ static const uint16_t ts_small_parse_table[] = { [28349] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1328), 12, - sym__dedent, + ACTIONS(1101), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47768,7 +46182,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1326), 33, + ACTIONS(1099), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47805,9 +46219,9 @@ static const uint16_t ts_small_parse_table[] = { [28402] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1332), 12, - sym__dedent, + ACTIONS(1306), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47818,7 +46232,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1330), 33, + ACTIONS(1308), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47855,9 +46269,9 @@ static const uint16_t ts_small_parse_table[] = { [28455] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1336), 12, - sym__dedent, + ACTIONS(814), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47868,7 +46282,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1334), 33, + ACTIONS(812), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47905,9 +46319,9 @@ static const uint16_t ts_small_parse_table[] = { [28508] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1320), 12, + ACTIONS(1206), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47918,7 +46332,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1318), 33, + ACTIONS(1208), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -47955,9 +46369,9 @@ static const uint16_t ts_small_parse_table[] = { [28561] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1260), 12, + ACTIONS(1274), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -47968,7 +46382,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1258), 33, + ACTIONS(1276), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48005,7 +46419,7 @@ static const uint16_t ts_small_parse_table[] = { [28614] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1340), 12, + ACTIONS(1238), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -48018,7 +46432,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1338), 33, + ACTIONS(1240), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48052,62 +46466,79 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28667] = 3, + [28667] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(1344), 12, - sym__dedent, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, sym__string_start, + ACTIONS(636), 1, + sym_identifier, + ACTIONS(638), 1, anon_sym_LPAREN, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(648), 1, anon_sym_LBRACK, - anon_sym_LBRACE, - anon_sym_STAR_STAR, - anon_sym_AT, - anon_sym_TILDE, + ACTIONS(650), 1, + anon_sym_await, + ACTIONS(1288), 1, + anon_sym_STAR, + ACTIONS(1310), 1, + anon_sym_RPAREN, + STATE(569), 1, + sym_string, + STATE(843), 1, + sym_primary_expression, + STATE(1112), 1, + sym_pattern, + STATE(1380), 1, + sym__patterns, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(1342), 33, - anon_sym_import, - anon_sym_from, - anon_sym_STAR, + STATE(712), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(837), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(642), 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, - [28720] = 3, + STATE(575), 14, + 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, + sym_await, + [28754] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1348), 12, - sym__dedent, + ACTIONS(1312), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48118,7 +46549,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1346), 33, + ACTIONS(1314), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48152,12 +46583,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28773] = 3, + [28807] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1352), 12, - sym__dedent, + ACTIONS(1280), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48168,7 +46599,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1350), 33, + ACTIONS(1278), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48202,12 +46633,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28826] = 3, + [28860] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1356), 12, - sym__dedent, + ACTIONS(1316), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48218,7 +46649,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1354), 33, + ACTIONS(1318), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48252,10 +46683,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28879] = 3, + [28913] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1324), 12, + ACTIONS(1320), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48302,10 +46733,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28932] = 3, + [28966] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1264), 12, + ACTIONS(1324), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48318,7 +46749,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1262), 33, + ACTIONS(1326), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48352,12 +46783,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [28985] = 3, + [29019] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1360), 12, - sym__dedent, + ACTIONS(1304), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48368,7 +46799,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1358), 33, + ACTIONS(1302), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48402,10 +46833,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29038] = 3, + [29072] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1364), 12, + ACTIONS(1254), 12, sym__dedent, sym__string_start, anon_sym_LPAREN, @@ -48418,7 +46849,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1362), 33, + ACTIONS(1256), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48452,12 +46883,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29091] = 3, + [29125] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1328), 12, + ACTIONS(1330), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48468,7 +46899,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1326), 33, + ACTIONS(1328), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48502,12 +46933,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29144] = 3, + [29178] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1220), 12, + ACTIONS(1242), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48518,7 +46949,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1218), 33, + ACTIONS(1244), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48552,10 +46983,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29197] = 3, + [29231] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1332), 12, + ACTIONS(1330), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48568,7 +46999,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1330), 33, + ACTIONS(1328), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48602,10 +47033,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29250] = 3, + [29284] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1336), 12, + ACTIONS(1332), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48652,10 +47083,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29303] = 3, + [29337] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1200), 12, + ACTIONS(1336), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48668,7 +47099,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1198), 33, + ACTIONS(1338), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48702,10 +47133,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29356] = 3, + [29390] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1268), 12, + ACTIONS(1340), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -48718,7 +47149,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1266), 33, + ACTIONS(1342), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48752,12 +47183,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29409] = 3, + [29443] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(848), 12, + ACTIONS(1346), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48768,7 +47199,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(846), 33, + ACTIONS(1344), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48802,12 +47233,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29462] = 3, + [29496] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1276), 12, + ACTIONS(1350), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48818,7 +47249,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1274), 33, + ACTIONS(1348), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48852,12 +47283,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29515] = 3, + [29549] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1340), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48868,7 +47299,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1338), 33, + ACTIONS(1342), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48902,12 +47333,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29568] = 3, + [29602] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1344), 12, + ACTIONS(1336), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48918,7 +47349,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1342), 33, + ACTIONS(1338), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -48952,12 +47383,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29621] = 3, + [29655] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1192), 12, + ACTIONS(1324), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -48968,7 +47399,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1190), 33, + ACTIONS(1326), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49002,12 +47433,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29674] = 3, + [29708] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1094), 12, + ACTIONS(1332), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49018,7 +47449,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1096), 33, + ACTIONS(1334), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49052,12 +47483,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29727] = 3, + [29761] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1348), 12, + ACTIONS(1320), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49068,7 +47499,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1346), 33, + ACTIONS(1322), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49102,10 +47533,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29780] = 3, + [29814] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1352), 12, + ACTIONS(1350), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49118,7 +47549,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1350), 33, + ACTIONS(1348), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49152,12 +47583,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29833] = 3, + [29867] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1356), 12, + ACTIONS(1316), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49168,7 +47599,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1354), 33, + ACTIONS(1318), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49202,12 +47633,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29886] = 3, + [29920] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1280), 12, + ACTIONS(1312), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49218,7 +47649,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1278), 33, + ACTIONS(1314), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49252,12 +47683,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29939] = 3, + [29973] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1284), 12, + ACTIONS(1246), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49268,7 +47699,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1282), 33, + ACTIONS(1248), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49302,58 +47733,58 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [29992] = 19, + [30026] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(840), 1, + STATE(834), 1, sym_pattern, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(1366), 2, + ACTIONS(1352), 2, anon_sym_RPAREN, anon_sym_RBRACK, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -49368,62 +47799,12 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [30077] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(828), 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(830), 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, - [30130] = 3, + [30111] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1119), 12, + ACTIONS(1170), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49434,7 +47815,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1121), 33, + ACTIONS(1172), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49468,12 +47849,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30183] = 3, + [30164] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1228), 12, + ACTIONS(1282), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49484,7 +47865,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1226), 33, + ACTIONS(1284), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49518,12 +47899,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30236] = 3, + [30217] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1360), 12, + ACTIONS(1306), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49534,7 +47915,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1358), 33, + ACTIONS(1308), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49568,12 +47949,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30289] = 3, + [30270] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1364), 12, + ACTIONS(1101), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49584,7 +47965,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1362), 33, + ACTIONS(1099), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49618,12 +47999,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30342] = 3, + [30323] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1248), 12, + ACTIONS(1234), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49634,7 +48015,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1246), 33, + ACTIONS(1236), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49668,10 +48049,10 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30395] = 3, + [30376] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1204), 12, + ACTIONS(1346), 12, sym__string_start, ts_builtin_sym_end, anon_sym_LPAREN, @@ -49684,7 +48065,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1202), 33, + ACTIONS(1344), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49718,7 +48099,7 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30448] = 3, + [30429] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1292), 12, @@ -49768,12 +48149,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30501] = 3, + [30482] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1296), 12, + ACTIONS(1230), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49784,7 +48165,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1294), 33, + ACTIONS(1232), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49818,12 +48199,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30554] = 3, + [30535] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1300), 12, + ACTIONS(1258), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49834,7 +48215,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1298), 33, + ACTIONS(1260), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49868,12 +48249,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30607] = 3, + [30588] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1304), 12, + ACTIONS(1226), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49884,7 +48265,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1302), 33, + ACTIONS(1228), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49918,12 +48299,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30660] = 3, + [30641] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1308), 12, + ACTIONS(1222), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49934,7 +48315,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1306), 33, + ACTIONS(1224), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -49968,12 +48349,12 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30713] = 3, + [30694] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1232), 12, + ACTIONS(1218), 12, + sym__dedent, sym__string_start, - ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -49984,7 +48365,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1230), 33, + ACTIONS(1220), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50018,79 +48399,112 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - [30766] = 20, + [30747] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(1250), 12, + sym__dedent, sym__string_start, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, anon_sym_LPAREN, - ACTIONS(664), 1, - anon_sym_LBRACK, - ACTIONS(666), 1, - anon_sym_await, - ACTIONS(1240), 1, - anon_sym_STAR, - ACTIONS(1368), 1, - anon_sym_RPAREN, - STATE(565), 1, - sym_string, - STATE(844), 1, - sym_primary_expression, - STATE(1120), 1, - sym_pattern, - STATE(1395), 1, - sym__patterns, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - STATE(722), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, anon_sym_DASH, anon_sym_PLUS, + anon_sym_LBRACK, + anon_sym_LBRACE, + anon_sym_STAR_STAR, + anon_sym_AT, anon_sym_TILDE, - STATE(833), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - ACTIONS(301), 4, + sym_ellipsis, + sym_float, + ACTIONS(1252), 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(658), 5, + [30800] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1296), 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(1294), 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(589), 14, - 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, - sym_await, + 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, [30853] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1270), 12, - sym__dedent, + ACTIONS(1300), 12, sym__string_start, + ts_builtin_sym_end, anon_sym_LPAREN, anon_sym_DASH, anon_sym_PLUS, @@ -50101,7 +48515,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_TILDE, sym_ellipsis, sym_float, - ACTIONS(1272), 33, + ACTIONS(1298), 33, anon_sym_import, anon_sym_from, anon_sym_STAR, @@ -50138,54 +48552,54 @@ static const uint16_t ts_small_parse_table[] = { [30906] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1272), 1, + STATE(1186), 1, sym_pattern, - STATE(1406), 1, + STATE(1437), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50203,54 +48617,54 @@ static const uint16_t ts_small_parse_table[] = { [30990] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1279), 1, + STATE(1256), 1, sym_pattern, - STATE(1475), 1, + STATE(1391), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50268,54 +48682,54 @@ static const uint16_t ts_small_parse_table[] = { [31074] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1177), 1, + STATE(1262), 1, sym_pattern, - STATE(1437), 1, + STATE(1476), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50333,54 +48747,54 @@ static const uint16_t ts_small_parse_table[] = { [31158] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1172), 1, + STATE(1213), 1, sym_pattern, - STATE(1429), 1, + STATE(1416), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50398,54 +48812,54 @@ static const uint16_t ts_small_parse_table[] = { [31242] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1199), 1, + STATE(1164), 1, sym_pattern, - STATE(1446), 1, + STATE(1388), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50463,54 +48877,54 @@ static const uint16_t ts_small_parse_table[] = { [31326] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1278), 1, + STATE(1241), 1, sym_pattern, - STATE(1472), 1, + STATE(1473), 1, sym_pattern_list, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50528,19 +48942,19 @@ static const uint16_t ts_small_parse_table[] = { [31410] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - STATE(566), 2, + STATE(567), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1021), 6, + ACTIONS(1356), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 34, + ACTIONS(1354), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -50575,168 +48989,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [31465] = 5, + [31465] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, - sym__string_start, - STATE(569), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1372), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1370), 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, - [31520] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(652), 1, + ACTIONS(636), 1, sym_identifier, - ACTIONS(654), 1, + ACTIONS(638), 1, anon_sym_LPAREN, - ACTIONS(664), 1, + ACTIONS(648), 1, anon_sym_LBRACK, - ACTIONS(666), 1, + ACTIONS(650), 1, anon_sym_await, - ACTIONS(1240), 1, + ACTIONS(1288), 1, anon_sym_STAR, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - STATE(1161), 1, - sym_pattern, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - STATE(722), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - STATE(833), 3, - sym_tuple_pattern, - sym_list_pattern, - sym_list_splat_pattern, - ACTIONS(301), 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(589), 14, - 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, - sym_await, - [31601] = 18, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(652), 1, - sym_identifier, - ACTIONS(654), 1, - anon_sym_LPAREN, - ACTIONS(664), 1, - anon_sym_LBRACK, - ACTIONS(666), 1, - anon_sym_await, - ACTIONS(1240), 1, - anon_sym_STAR, - STATE(565), 1, - sym_string, - STATE(840), 1, + STATE(1267), 1, sym_pattern, - STATE(844), 1, - sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(722), 2, + STATE(712), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - STATE(833), 3, + STATE(837), 3, sym_tuple_pattern, sym_list_pattern, sym_list_splat_pattern, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(658), 5, + ACTIONS(642), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50751,22 +49052,135 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [31682] = 5, + [31546] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1378), 1, + ACTIONS(1362), 1, sym__string_start, - STATE(569), 2, + STATE(567), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1376), 6, + ACTIONS(1360), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1374), 34, + ACTIONS(1358), 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, + [31601] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(636), 1, + sym_identifier, + ACTIONS(638), 1, + anon_sym_LPAREN, + ACTIONS(648), 1, + anon_sym_LBRACK, + ACTIONS(650), 1, + anon_sym_await, + ACTIONS(1288), 1, + anon_sym_STAR, + STATE(569), 1, + sym_string, + STATE(834), 1, + sym_pattern, + STATE(843), 1, + sym_primary_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + STATE(712), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + STATE(837), 3, + sym_tuple_pattern, + sym_list_pattern, + sym_list_splat_pattern, + ACTIONS(295), 4, + sym_integer, + sym_true, + sym_false, + sym_none, + ACTIONS(642), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(575), 14, + 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, + sym_await, + [31682] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(299), 1, + sym__string_start, + STATE(565), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1022), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1017), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -50804,14 +49218,14 @@ static const uint16_t ts_small_parse_table[] = { [31737] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1383), 6, + ACTIONS(1367), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1381), 35, + ACTIONS(1365), 35, sym__string_start, anon_sym_DOT, anon_sym_LPAREN, @@ -50850,48 +49264,48 @@ static const uint16_t ts_small_parse_table[] = { [31786] = 16, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(1385), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(1369), 1, sym_identifier, - ACTIONS(1391), 1, + ACTIONS(1375), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(843), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(728), 2, + STATE(734), 2, sym_attribute, sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(1387), 3, + ACTIONS(1371), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - ACTIONS(301), 4, + ACTIONS(295), 4, sym_integer, sym_true, sym_false, sym_none, - ACTIONS(1389), 5, + ACTIONS(1373), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 14, sym_binary_operator, sym_unary_operator, sym_call, @@ -50909,14 +49323,14 @@ static const uint16_t ts_small_parse_table[] = { [31861] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1395), 6, + ACTIONS(1379), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1393), 35, + ACTIONS(1377), 35, sym__string_start, anon_sym_DOT, anon_sym_LPAREN, @@ -50955,14 +49369,14 @@ static const uint16_t ts_small_parse_table[] = { [31910] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1399), 6, + ACTIONS(1383), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 34, + ACTIONS(1381), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51000,14 +49414,14 @@ static const uint16_t ts_small_parse_table[] = { [31958] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1403), 6, + ACTIONS(1387), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1401), 34, + ACTIONS(1385), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51045,14 +49459,14 @@ static const uint16_t ts_small_parse_table[] = { [32006] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1407), 6, + ACTIONS(1022), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1405), 34, + ACTIONS(1017), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51087,17 +49501,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32054] = 3, + [32054] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(1411), 6, + ACTIONS(1389), 1, + anon_sym_DOT, + ACTIONS(1391), 1, + anon_sym_LPAREN, + ACTIONS(1395), 1, + anon_sym_as, + ACTIONS(1403), 1, + anon_sym_PIPE, + ACTIONS(1407), 1, + anon_sym_LBRACK, + ACTIONS(1409), 1, + anon_sym_STAR_STAR, + ACTIONS(1413), 1, + anon_sym_not, + ACTIONS(1415), 1, + anon_sym_AMP, + ACTIONS(1417), 1, + anon_sym_CARET, + ACTIONS(1421), 1, + anon_sym_is, + STATE(830), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1397), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1399), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1405), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1419), 2, + anon_sym_LT, + anon_sym_GT, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1411), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1401), 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(1393), 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, + [32136] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1425), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1409), 34, + ACTIONS(1423), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51132,17 +49608,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32102] = 3, + [32184] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1415), 6, + ACTIONS(1429), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1413), 34, + ACTIONS(1427), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51177,17 +49653,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32150] = 3, + [32232] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1419), 6, + ACTIONS(1433), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1417), 34, + ACTIONS(1431), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51222,17 +49698,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32198] = 3, + [32280] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1399), 6, + ACTIONS(1437), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 34, + ACTIONS(1435), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51267,17 +49743,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32246] = 3, + [32328] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 6, + ACTIONS(1441), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 34, + ACTIONS(1439), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51312,17 +49788,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32294] = 3, + [32376] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1427), 6, + ACTIONS(1445), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1425), 34, + ACTIONS(1443), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51357,17 +49833,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32342] = 3, + [32424] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 6, + ACTIONS(1441), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 34, + ACTIONS(1439), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51402,17 +49878,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32390] = 3, + [32472] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1431), 6, + ACTIONS(260), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1429), 34, + ACTIONS(287), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51447,17 +49923,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32438] = 3, + [32520] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1435), 6, + ACTIONS(1449), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1433), 34, + ACTIONS(1447), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51492,17 +49968,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32486] = 3, + [32568] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1439), 6, + ACTIONS(1453), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1437), 34, + ACTIONS(1451), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51537,17 +50013,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32534] = 3, + [32616] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1443), 6, + ACTIONS(1457), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1441), 34, + ACTIONS(1455), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51582,17 +50058,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32582] = 3, + [32664] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1447), 6, + ACTIONS(1457), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1445), 34, + ACTIONS(1455), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51627,17 +50103,79 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32630] = 3, + [32712] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1389), 1, + anon_sym_DOT, + ACTIONS(1391), 1, + anon_sym_LPAREN, + ACTIONS(1395), 1, + anon_sym_EQ, + ACTIONS(1407), 1, + anon_sym_LBRACK, + ACTIONS(1465), 1, + anon_sym_PIPE, + ACTIONS(1469), 1, + anon_sym_STAR_STAR, + ACTIONS(1473), 1, + anon_sym_not, + ACTIONS(1475), 1, + anon_sym_AMP, + ACTIONS(1477), 1, + anon_sym_CARET, + ACTIONS(1481), 1, + anon_sym_is, + STATE(829), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1459), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1461), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1467), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1479), 2, + anon_sym_LT, + anon_sym_GT, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1471), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1463), 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(1393), 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, + [32794] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1451), 6, + ACTIONS(1485), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1449), 34, + ACTIONS(1483), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51672,17 +50210,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32678] = 3, + [32842] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1021), 6, + ACTIONS(1489), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 34, + ACTIONS(1487), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51717,79 +50255,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32726] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1453), 1, - anon_sym_DOT, - ACTIONS(1455), 1, - anon_sym_LPAREN, - ACTIONS(1459), 1, - anon_sym_as, - ACTIONS(1467), 1, - anon_sym_PIPE, - ACTIONS(1471), 1, - anon_sym_LBRACK, - ACTIONS(1473), 1, - anon_sym_STAR_STAR, - ACTIONS(1477), 1, - anon_sym_not, - ACTIONS(1479), 1, - anon_sym_AMP, - ACTIONS(1481), 1, - anon_sym_CARET, - ACTIONS(1485), 1, - anon_sym_is, - STATE(828), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1461), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1463), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1469), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1483), 2, - anon_sym_LT, - anon_sym_GT, - STATE(593), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1475), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1465), 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(1457), 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, - [32808] = 3, + [32890] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1489), 6, + ACTIONS(1493), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1487), 34, + ACTIONS(1491), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51824,17 +50300,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32856] = 3, + [32938] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 6, + ACTIONS(1497), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 34, + ACTIONS(1495), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51869,17 +50345,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32904] = 3, + [32986] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1497), 6, + ACTIONS(1501), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1495), 34, + ACTIONS(1499), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51914,17 +50390,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [32952] = 3, + [33034] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1501), 6, + ACTIONS(1505), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1499), 34, + ACTIONS(1503), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -51959,79 +50435,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33000] = 20, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1453), 1, - anon_sym_DOT, - ACTIONS(1455), 1, - anon_sym_LPAREN, - ACTIONS(1459), 1, - anon_sym_EQ, - ACTIONS(1471), 1, - anon_sym_LBRACK, - ACTIONS(1509), 1, - anon_sym_PIPE, - ACTIONS(1513), 1, - anon_sym_STAR_STAR, - ACTIONS(1517), 1, - anon_sym_not, - ACTIONS(1519), 1, - anon_sym_AMP, - ACTIONS(1521), 1, - anon_sym_CARET, - ACTIONS(1525), 1, - anon_sym_is, - STATE(830), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1503), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1505), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1511), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1523), 2, - anon_sym_LT, - anon_sym_GT, - STATE(593), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1515), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1507), 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(1457), 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, [33082] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1529), 6, + ACTIONS(1509), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1527), 34, + ACTIONS(1507), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52069,14 +50483,14 @@ static const uint16_t ts_small_parse_table[] = { [33130] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1533), 6, + ACTIONS(1513), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1531), 34, + ACTIONS(1511), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52114,14 +50528,14 @@ static const uint16_t ts_small_parse_table[] = { [33178] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(260), 6, + ACTIONS(1517), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 34, + ACTIONS(1515), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52159,14 +50573,14 @@ static const uint16_t ts_small_parse_table[] = { [33226] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1537), 6, + ACTIONS(1449), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1535), 34, + ACTIONS(1447), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52204,14 +50618,14 @@ static const uint16_t ts_small_parse_table[] = { [33274] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 6, + ACTIONS(1433), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 34, + ACTIONS(1431), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52249,14 +50663,14 @@ static const uint16_t ts_small_parse_table[] = { [33322] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 6, + ACTIONS(1521), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 34, + ACTIONS(1519), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52294,14 +50708,14 @@ static const uint16_t ts_small_parse_table[] = { [33370] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1549), 6, + ACTIONS(1525), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1547), 34, + ACTIONS(1523), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52339,14 +50753,14 @@ static const uint16_t ts_small_parse_table[] = { [33418] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 6, + ACTIONS(1529), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 34, + ACTIONS(1527), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52384,14 +50798,14 @@ static const uint16_t ts_small_parse_table[] = { [33466] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1553), 6, + ACTIONS(1533), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1551), 34, + ACTIONS(1531), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52429,14 +50843,14 @@ static const uint16_t ts_small_parse_table[] = { [33514] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 6, + ACTIONS(1537), 6, anon_sym_as, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 34, + ACTIONS(1535), 34, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -52471,38 +50885,42 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33562] = 11, + [33562] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1503), 2, + ACTIONS(1477), 1, + anon_sym_CARET, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1511), 2, + ACTIONS(1461), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1467), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1471), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 23, + ACTIONS(1539), 20, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_else, @@ -52514,8 +50932,6 @@ static const uint16_t ts_small_parse_table[] = { 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, @@ -52523,101 +50939,99 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [33625] = 14, + [33629] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(1389), 1, + anon_sym_DOT, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(598), 1, - anon_sym_await, - ACTIONS(1559), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(611), 1, - sym_primary_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(594), 3, + ACTIONS(1469), 1, + anon_sym_STAR_STAR, + ACTIONS(1459), 2, + anon_sym_STAR, + anon_sym_SLASH, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1471), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1541), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 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_TILDE, - ACTIONS(301), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(576), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(589), 16, - 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, - sym_await, - [33694] = 8, + 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, + [33690] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - STATE(593), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1557), 5, - anon_sym_as, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(1467), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1471), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1541), 3, + anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 28, + ACTIONS(1539), 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, @@ -52627,35 +51041,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [33751] = 11, + sym_type_conversion, + [33753] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1461), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1469), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 23, + ACTIONS(1539), 25, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -52665,6 +51077,8 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_in, anon_sym_PIPE, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_not, @@ -52682,42 +51096,42 @@ static const uint16_t ts_small_parse_table[] = { [33814] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(600), 1, anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(604), 1, anon_sym_await, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1561), 1, + ACTIONS(1543), 1, anon_sym_not, - STATE(699), 1, + STATE(708), 1, sym_string, - STATE(729), 1, + STATE(727), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -52734,44 +51148,144 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [33883] = 15, + [33883] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1467), 1, + ACTIONS(1407), 1, + anon_sym_LBRACK, + ACTIONS(1469), 1, + anon_sym_STAR_STAR, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1541), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 28, + 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, - ACTIONS(1471), 1, + 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, + [33940] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1389), 1, + anon_sym_DOT, + ACTIONS(1391), 1, + anon_sym_LPAREN, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1479), 1, + ACTIONS(1475), 1, anon_sym_AMP, - ACTIONS(1481), 1, + ACTIONS(1477), 1, anon_sym_CARET, + ACTIONS(1459), 2, + anon_sym_STAR, + anon_sym_SLASH, ACTIONS(1461), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1467), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(601), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1471), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1541), 3, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1539), 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, + 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_type_conversion, + [34009] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1389), 1, + anon_sym_DOT, + ACTIONS(1391), 1, + anon_sym_LPAREN, + ACTIONS(1407), 1, + anon_sym_LBRACK, + ACTIONS(1409), 1, + anon_sym_STAR_STAR, + ACTIONS(1417), 1, + anon_sym_CARET, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1463), 2, + ACTIONS(1399), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1469), 2, + ACTIONS(1405), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1565), 3, + ACTIONS(1541), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1563), 18, + ACTIONS(1539), 20, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -52779,53 +51293,165 @@ 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, 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, - [33954] = 14, + [34076] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, + anon_sym_await, + ACTIONS(1545), 1, + anon_sym_not, + STATE(569), 1, + sym_string, + STATE(620), 1, + sym_primary_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(285), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(568), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(575), 16, + 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, + sym_await, + [34145] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, + anon_sym_LPAREN, + ACTIONS(584), 1, + anon_sym_LBRACK, + ACTIONS(586), 1, + anon_sym_await, + ACTIONS(1547), 1, + anon_sym_not, + STATE(569), 1, + sym_string, + STATE(621), 1, + sym_primary_expression, + ACTIONS(293), 2, + sym_ellipsis, + sym_float, + ACTIONS(582), 3, + anon_sym_DASH, + anon_sym_PLUS, + anon_sym_TILDE, + ACTIONS(295), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(568), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(575), 16, + 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, + sym_await, + [34214] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1479), 1, + ACTIONS(1415), 1, anon_sym_AMP, - ACTIONS(1481), 1, + ACTIONS(1417), 1, anon_sym_CARET, - ACTIONS(1461), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1463), 2, + ACTIONS(1399), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1469), 2, + ACTIONS(1405), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 19, + ACTIONS(1539), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -52845,43 +51471,46 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [34023] = 10, + [34283] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1461), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(593), 2, + ACTIONS(1399), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1405), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1539), 21, 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, @@ -52889,34 +51518,33 @@ 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, - [34084] = 8, + [34348] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 5, + ACTIONS(1541), 5, anon_sym_as, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 28, + ACTIONS(1539), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -52945,314 +51573,213 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [34141] = 13, + [34405] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1481), 1, - anon_sym_CARET, - ACTIONS(1461), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1463), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1469), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1541), 5, anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 20, + ACTIONS(1539), 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_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, - [34208] = 12, + [34462] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1465), 1, + anon_sym_PIPE, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1461), 2, + ACTIONS(1475), 1, + anon_sym_AMP, + ACTIONS(1477), 1, + anon_sym_CARET, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1463), 2, + ACTIONS(1461), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1469), 2, + ACTIONS(1467), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1471), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, - anon_sym_as, + ACTIONS(1551), 3, + anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 21, + ACTIONS(1549), 18, 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, 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, - [34273] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, - anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(569), 1, - anon_sym_await, - ACTIONS(1567), 1, - anon_sym_not, - STATE(693), 1, - sym_string, - STATE(703), 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(563), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(773), 16, - 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, - sym_await, - [34342] = 8, + sym_type_conversion, + [34533] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1403), 1, + anon_sym_PIPE, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - STATE(593), 2, + ACTIONS(1415), 1, + anon_sym_AMP, + ACTIONS(1417), 1, + anon_sym_CARET, + ACTIONS(1397), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1399), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1405), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1571), 5, + ACTIONS(1411), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1551), 3, anon_sym_as, - anon_sym_STAR, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1569), 28, + ACTIONS(1549), 18, 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_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, - [34399] = 14, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(588), 1, - anon_sym_await, - ACTIONS(1573), 1, - anon_sym_not, - STATE(565), 1, - sym_string, - STATE(621), 1, - sym_primary_expression, - ACTIONS(299), 2, - sym_ellipsis, - sym_float, - ACTIONS(291), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(301), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(576), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(589), 16, - 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, - sym_await, - [34468] = 8, + [34604] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - STATE(593), 2, + ACTIONS(1459), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1461), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1467), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 5, - anon_sym_STAR, + ACTIONS(1471), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1541), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 28, + ACTIONS(1539), 21, 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_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, @@ -53260,44 +51787,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34525] = 15, + [34669] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1509), 1, + ACTIONS(1465), 1, anon_sym_PIPE, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1519), 1, + ACTIONS(1475), 1, anon_sym_AMP, - ACTIONS(1521), 1, + ACTIONS(1477), 1, anon_sym_CARET, - ACTIONS(1503), 2, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1505), 2, + ACTIONS(1461), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(1467), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1471), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1565), 3, + ACTIONS(1555), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1563), 18, + ACTIONS(1553), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -53316,49 +51843,50 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34596] = 14, + [34740] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1465), 1, + anon_sym_PIPE, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1519), 1, + ACTIONS(1475), 1, anon_sym_AMP, - ACTIONS(1521), 1, + ACTIONS(1477), 1, anon_sym_CARET, - ACTIONS(1503), 2, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1505), 2, + ACTIONS(1461), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(1467), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1471), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1559), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 19, + ACTIONS(1557), 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, @@ -53371,32 +51899,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34665] = 10, + [34811] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1503), 2, - anon_sym_STAR, - anon_sym_SLASH, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, + ACTIONS(1563), 5, + anon_sym_STAR, anon_sym_EQ, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1561), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -53409,9 +51932,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, @@ -53422,33 +51948,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [34726] = 8, + [34868] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 5, + ACTIONS(1567), 5, + anon_sym_as, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 28, + ACTIONS(1565), 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, @@ -53470,247 +51997,195 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [34783] = 13, + [34925] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1403), 1, + anon_sym_PIPE, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1521), 1, + ACTIONS(1415), 1, + anon_sym_AMP, + ACTIONS(1417), 1, anon_sym_CARET, - ACTIONS(1503), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1505), 2, + ACTIONS(1399), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(1405), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, - anon_sym_EQ, + ACTIONS(1559), 3, + anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 20, + ACTIONS(1557), 18, 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_LT_EQ, anon_sym_EQ_EQ, anon_sym_BANG_EQ, anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym_type_conversion, - [34850] = 12, + [34996] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, - anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, - anon_sym_STAR_STAR, - ACTIONS(1503), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1505), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(563), 1, + anon_sym_await, + ACTIONS(1569), 1, + anon_sym_not, + STATE(693), 1, + sym_string, + STATE(694), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, - sym_argument_list, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(557), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(764), 16, + 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(1515), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1557), 3, - anon_sym_EQ, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1555), 21, - 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, - anon_sym_GT_EQ, - anon_sym_LT_GT, - anon_sym_is, - sym_type_conversion, - [34915] = 15, + sym_parenthesized_expression, + sym_concatenated_string, + sym_await, + [35065] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1509), 1, - anon_sym_PIPE, - ACTIONS(1513), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1519), 1, - anon_sym_AMP, - ACTIONS(1521), 1, - anon_sym_CARET, - ACTIONS(1503), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1505), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1511), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1577), 3, - anon_sym_EQ, + ACTIONS(1563), 5, + anon_sym_as, + anon_sym_STAR, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1575), 18, + ACTIONS(1561), 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, 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, - [34986] = 15, + [35122] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1509), 1, - anon_sym_PIPE, - ACTIONS(1513), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1519), 1, - anon_sym_AMP, - ACTIONS(1521), 1, - anon_sym_CARET, - ACTIONS(1503), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1505), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(1405), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1411), 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), 18, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - 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, - sym_type_conversion, - [35057] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1453), 1, - anon_sym_DOT, - ACTIONS(1455), 1, - anon_sym_LPAREN, - ACTIONS(1471), 1, - anon_sym_LBRACK, - ACTIONS(1473), 1, - anon_sym_STAR_STAR, - STATE(593), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1585), 5, + ACTIONS(1541), 3, anon_sym_as, - anon_sym_STAR, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 28, + ACTIONS(1539), 23, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -53720,16 +52195,11 @@ static const uint16_t ts_small_parse_table[] = { 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, @@ -53739,27 +52209,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35114] = 8, + [35185] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1571), 5, + ACTIONS(1541), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1569), 28, + ACTIONS(1539), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -53788,27 +52258,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35171] = 8, + [35242] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1585), 5, + ACTIONS(1567), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 28, + ACTIONS(1565), 28, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_GT_GT, @@ -53837,44 +52307,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [35228] = 15, + [35299] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1467), 1, + ACTIONS(1403), 1, anon_sym_PIPE, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, + ACTIONS(1409), 1, anon_sym_STAR_STAR, - ACTIONS(1479), 1, + ACTIONS(1415), 1, anon_sym_AMP, - ACTIONS(1481), 1, + ACTIONS(1417), 1, anon_sym_CARET, - ACTIONS(1461), 2, + ACTIONS(1397), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1463), 2, + ACTIONS(1399), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1469), 2, + ACTIONS(1405), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1475), 3, + ACTIONS(1411), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1577), 3, + ACTIONS(1555), 3, anon_sym_as, anon_sym_LT, anon_sym_GT, - ACTIONS(1575), 18, + ACTIONS(1553), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -53893,142 +52363,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35299] = 15, + [35370] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, - anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(1467), 1, - anon_sym_PIPE, - ACTIONS(1471), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(1473), 1, - anon_sym_STAR_STAR, - ACTIONS(1479), 1, - anon_sym_AMP, - ACTIONS(1481), 1, - anon_sym_CARET, - ACTIONS(1461), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1463), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1469), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(593), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1475), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1581), 3, - anon_sym_as, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1579), 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, - [35370] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1109), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1104), 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_COLON, - anon_sym_else, - 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, - [35416] = 13, - ACTIONS(3), 1, - sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, - anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, - sym_string, - STATE(711), 1, - sym_primary_expression, - ACTIONS(614), 2, - sym_ellipsis, - sym_float, - ACTIONS(608), 3, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, + anon_sym_await, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, + sym_string, + STATE(727), 1, + sym_primary_expression, + ACTIONS(602), 2, + sym_ellipsis, + sym_float, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54045,96 +52416,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35482] = 13, + [35436] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, - anon_sym_LPAREN, - ACTIONS(610), 1, - anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(616), 1, - anon_sym_await, - ACTIONS(618), 1, + ACTIONS(81), 1, sym__string_start, - STATE(699), 1, - sym_string, - STATE(713), 1, - sym_primary_expression, - ACTIONS(614), 2, - sym_ellipsis, - sym_float, - ACTIONS(608), 3, - anon_sym_DASH, - anon_sym_PLUS, - anon_sym_TILDE, - ACTIONS(600), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(604), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(796), 16, - 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, - sym_await, - [35548] = 13, - ACTIONS(3), 1, - sym_comment, - ACTIONS(602), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(729), 1, + STATE(694), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54151,43 +52469,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35614] = 13, + [35502] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(731), 1, + STATE(700), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54204,43 +52522,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35680] = 13, + [35568] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(733), 1, + STATE(698), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54257,43 +52575,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35746] = 13, + [35634] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(734), 1, + STATE(701), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54310,43 +52628,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35812] = 13, + [35700] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(718), 1, + STATE(697), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54363,47 +52681,49 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35878] = 13, + [35766] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(616), 1, - anon_sym_await, - ACTIONS(618), 1, + ACTIONS(299), 1, sym__string_start, - STATE(699), 1, + ACTIONS(1571), 1, + sym_identifier, + ACTIONS(1575), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(730), 1, + STATE(843), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + STATE(835), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(295), 4, sym_integer, - sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(1573), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(575), 14, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -54416,28 +52736,26 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [35944] = 5, + [35836] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, - sym__string_start, - STATE(647), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1372), 4, + ACTIONS(570), 1, + anon_sym_COLON_EQ, + ACTIONS(260), 6, anon_sym_STAR, + anon_sym_COLON, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1370), 31, + ACTIONS(287), 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_else, anon_sym_in, anon_sym_PIPE, anon_sym_DASH, @@ -54461,22 +52779,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [35994] = 13, + sym_type_conversion, + [35884] = 13, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(563), 1, anon_sym_await, STATE(693), 1, sym_string, - STATE(704), 1, + STATE(702), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -54491,13 +52810,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54514,43 +52833,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36060] = 13, + [35950] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(563), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(693), 1, sym_string, - STATE(719), 1, + STATE(703), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54567,43 +52886,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36126] = 13, + [36016] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(612), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(616), 1, - anon_sym_await, - ACTIONS(618), 1, + ACTIONS(299), 1, sym__string_start, - STATE(699), 1, + ACTIONS(576), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(721), 1, + STATE(611), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54620,94 +52939,47 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36192] = 5, + [36082] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1587), 1, - sym__string_start, - STATE(647), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1376), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1374), 31, - anon_sym_DOT, + ACTIONS(262), 1, 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, + ACTIONS(277), 1, 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, - [36242] = 15, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(1590), 1, - sym_identifier, - ACTIONS(1594), 1, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(608), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(839), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 5, sym_integer, + sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1592), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 16, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -54720,49 +52992,47 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36312] = 15, + [36148] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(1385), 1, - sym_identifier, - ACTIONS(1391), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(844), 1, + STATE(620), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - STATE(728), 2, - sym_attribute, - sym_subscript, - ACTIONS(291), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 4, + ACTIONS(295), 5, sym_integer, + sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(1389), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 14, + STATE(575), 16, sym_binary_operator, sym_unary_operator, + sym_attribute, + sym_subscript, sym_call, sym_list, sym_set, @@ -54775,43 +53045,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36382] = 13, + [36214] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(632), 1, + STATE(612), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54828,43 +53098,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36448] = 13, + [36280] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(701), 1, + STATE(607), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54881,43 +53151,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36514] = 13, + [36346] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(51), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(81), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(563), 1, anon_sym_await, - STATE(565), 1, + STATE(693), 1, sym_string, - STATE(633), 1, + STATE(704), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(75), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(77), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54934,43 +53204,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36580] = 13, + [36412] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(618), 1, + STATE(631), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -54987,96 +53257,86 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36646] = 13, + [36478] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(1093), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1088), 33, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(567), 1, - anon_sym_LBRACK, - ACTIONS(569), 1, - anon_sym_await, - STATE(693), 1, - sym_string, - STATE(707), 1, - sym_primary_expression, - ACTIONS(75), 2, - sym_ellipsis, - sym_float, - ACTIONS(47), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + 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_TILDE, - ACTIONS(77), 5, - sym_integer, - sym_identifier, - sym_true, - sym_false, - sym_none, - ACTIONS(563), 5, - anon_sym_print, - anon_sym_async, - anon_sym_match, - anon_sym_exec, - anon_sym_type, - STATE(773), 16, - 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, - sym_await, - [36712] = 13, + 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, + [36524] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(708), 1, + STATE(606), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55093,16 +53353,16 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36778] = 3, + [36590] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1152), 5, + ACTIONS(1136), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1147), 33, + ACTIONS(1131), 33, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -55136,131 +53396,43 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym_type_conversion, - [36824] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(578), 1, - anon_sym_COLON_EQ, - ACTIONS(260), 6, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(293), 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_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, - [36872] = 4, + [36636] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1023), 1, - anon_sym_COLON_EQ, - ACTIONS(1021), 6, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1016), 31, - anon_sym_DOT, + ACTIONS(262), 1, anon_sym_LPAREN, - 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, + ACTIONS(277), 1, 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, - [36920] = 13, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, - anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(616), 1, + STATE(622), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55277,43 +53449,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [36986] = 13, + [36702] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(561), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(694), 1, + STATE(629), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55330,43 +53502,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37052] = 13, + [36768] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(620), 1, + STATE(711), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55383,43 +53555,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37118] = 13, + [36834] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(606), 1, + STATE(735), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55436,43 +53608,88 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37184] = 13, + [36900] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(571), 1, + STATE(683), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1356), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1354), 31, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(584), 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_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, + [36950] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(590), 1, + anon_sym_LPAREN, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(621), 1, + STATE(710), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55489,43 +53706,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37250] = 13, + [37016] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(622), 1, + STATE(731), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55542,43 +53759,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37316] = 13, + [37082] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(623), 1, + STATE(730), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55595,43 +53812,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37382] = 13, + [37148] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(624), 1, + STATE(633), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55648,43 +53865,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37448] = 13, + [37214] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(625), 1, + STATE(729), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55701,43 +53918,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37514] = 13, + [37280] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(626), 1, + STATE(728), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55754,43 +53971,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37580] = 13, + [37346] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(693), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(696), 1, + STATE(726), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55807,43 +54024,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37646] = 13, + [37412] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(571), 1, + ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(584), 1, + ACTIONS(598), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(627), 1, + STATE(725), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -55860,91 +54077,49 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37712] = 4, + [37478] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(592), 1, - anon_sym_COLON_EQ, - ACTIONS(260), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(293), 31, - anon_sym_DOT, + ACTIONS(262), 1, 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, - anon_sym_PLUS, + ACTIONS(277), 1, 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, - [37760] = 13, - ACTIONS(3), 1, - sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, - anon_sym_LPAREN, - ACTIONS(584), 1, - anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(1369), 1, + sym_identifier, + ACTIONS(1375), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(628), 1, + STATE(843), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + STATE(734), 2, + sym_attribute, + sym_subscript, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 4, sym_integer, - sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(1373), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 14, sym_binary_operator, sym_unary_operator, - sym_attribute, - sym_subscript, sym_call, sym_list, sym_set, @@ -55957,43 +54132,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37826] = 13, + [37548] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(561), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(702), 1, + STATE(627), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56010,87 +54185,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [37892] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1596), 1, - anon_sym_COLON_EQ, - ACTIONS(1021), 6, - anon_sym_as, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1016), 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_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, - [37940] = 13, + [37614] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(571), 1, + ACTIONS(578), 1, anon_sym_LPAREN, ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(588), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(630), 1, + STATE(617), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(291), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56107,43 +54238,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38006] = 13, + [37680] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(602), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(610), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(612), 1, - anon_sym_LBRACE, - ACTIONS(616), 1, + ACTIONS(586), 1, anon_sym_await, - ACTIONS(618), 1, - sym__string_start, - STATE(699), 1, + STATE(569), 1, sym_string, - STATE(720), 1, + STATE(613), 1, sym_primary_expression, - ACTIONS(614), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(608), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(600), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(604), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(796), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56160,43 +54291,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38072] = 13, + [37746] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(706), 1, + STATE(623), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56213,43 +54344,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38138] = 13, + [37812] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(81), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(561), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(693), 1, + STATE(569), 1, sym_string, - STATE(697), 1, + STATE(619), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56266,43 +54397,87 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38204] = 13, + [37878] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(51), 1, - anon_sym_LBRACE, - ACTIONS(81), 1, - sym__string_start, - ACTIONS(561), 1, + ACTIONS(1577), 1, + anon_sym_COLON_EQ, + ACTIONS(1022), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1017), 31, + anon_sym_DOT, anon_sym_LPAREN, - ACTIONS(567), 1, + 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_LBRACK, - ACTIONS(569), 1, - anon_sym_await, - STATE(693), 1, + 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, + [37926] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(262), 1, + anon_sym_LPAREN, + ACTIONS(277), 1, + anon_sym_LBRACK, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, + anon_sym_await, + STATE(569), 1, sym_string, - STATE(705), 1, + STATE(624), 1, sym_primary_expression, - ACTIONS(75), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(47), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(77), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56319,43 +54494,87 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38270] = 13, + [37992] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(580), 1, + anon_sym_COLON_EQ, + ACTIONS(260), 6, + anon_sym_as, + anon_sym_STAR, + anon_sym_COLON, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(287), 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_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, + [38040] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(608), 1, + STATE(609), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56372,43 +54591,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38336] = 13, + [38106] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(609), 1, + STATE(616), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56425,43 +54644,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38402] = 13, + [38172] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(590), 1, + ACTIONS(262), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(277), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(279), 1, + anon_sym_LBRACE, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(576), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(611), 1, + STATE(625), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(285), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56478,43 +54697,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38468] = 13, + [38238] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, - anon_sym_LBRACE, - ACTIONS(305), 1, - sym__string_start, ACTIONS(590), 1, anon_sym_LPAREN, - ACTIONS(596), 1, - anon_sym_LBRACK, ACTIONS(598), 1, + anon_sym_LBRACK, + ACTIONS(600), 1, + anon_sym_LBRACE, + ACTIONS(604), 1, anon_sym_await, - STATE(565), 1, + ACTIONS(606), 1, + sym__string_start, + STATE(708), 1, sym_string, - STATE(612), 1, + STATE(715), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(602), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(596), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(588), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(592), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(787), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56531,43 +54750,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38534] = 13, + [38304] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(613), 1, + STATE(621), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56584,43 +54803,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38600] = 13, + [38370] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(614), 1, + STATE(630), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56637,43 +54856,43 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38666] = 13, + [38436] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(283), 1, + ACTIONS(279), 1, anon_sym_LBRACE, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(590), 1, + ACTIONS(578), 1, anon_sym_LPAREN, - ACTIONS(596), 1, + ACTIONS(584), 1, anon_sym_LBRACK, - ACTIONS(598), 1, + ACTIONS(586), 1, anon_sym_await, - STATE(565), 1, + STATE(569), 1, sym_string, - STATE(615), 1, + STATE(618), 1, sym_primary_expression, - ACTIONS(299), 2, + ACTIONS(293), 2, sym_ellipsis, sym_float, - ACTIONS(594), 3, + ACTIONS(582), 3, anon_sym_DASH, anon_sym_PLUS, anon_sym_TILDE, - ACTIONS(301), 5, + ACTIONS(295), 5, sym_integer, sym_identifier, sym_true, sym_false, sym_none, - ACTIONS(576), 5, + ACTIONS(568), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(589), 16, + STATE(575), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56690,22 +54909,67 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38732] = 13, + [38502] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1579), 1, + sym__string_start, + STATE(683), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1360), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1358), 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, + [38552] = 13, ACTIONS(3), 1, sym_comment, ACTIONS(51), 1, anon_sym_LBRACE, ACTIONS(81), 1, sym__string_start, - ACTIONS(561), 1, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(567), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(569), 1, + ACTIONS(563), 1, anon_sym_await, STATE(693), 1, sym_string, - STATE(703), 1, + STATE(706), 1, sym_primary_expression, ACTIONS(75), 2, sym_ellipsis, @@ -56720,13 +54984,13 @@ static const uint16_t ts_small_parse_table[] = { sym_true, sym_false, sym_none, - ACTIONS(563), 5, + ACTIONS(557), 5, anon_sym_print, anon_sym_async, anon_sym_match, anon_sym_exec, anon_sym_type, - STATE(773), 16, + STATE(764), 16, sym_binary_operator, sym_unary_operator, sym_attribute, @@ -56743,33 +55007,33 @@ static const uint16_t ts_small_parse_table[] = { sym_parenthesized_expression, sym_concatenated_string, sym_await, - [38798] = 5, + [38618] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(81), 1, - sym__string_start, - STATE(692), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1372), 5, + ACTIONS(1024), 1, + anon_sym_COLON_EQ, + ACTIONS(1022), 6, anon_sym_STAR, + anon_sym_COLON, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1370), 29, - sym__newline, + ACTIONS(1017), 31, anon_sym_DOT, - anon_sym_from, anon_sym_LPAREN, + 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_LBRACK, + anon_sym_RBRACK, + anon_sym_RBRACE, anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, @@ -56786,76 +55050,123 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [38847] = 20, + sym_type_conversion, + [38666] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1459), 1, - anon_sym_EQ, - ACTIONS(1598), 1, - anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, anon_sym_LPAREN, - ACTIONS(1608), 1, - anon_sym_PIPE, - ACTIONS(1612), 1, + ACTIONS(561), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, - anon_sym_STAR_STAR, - ACTIONS(1618), 1, - anon_sym_not, - ACTIONS(1620), 1, - anon_sym_AMP, - ACTIONS(1622), 1, - anon_sym_CARET, - ACTIONS(1626), 1, - anon_sym_is, - STATE(837), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1602), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1604), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1610), 2, + ACTIONS(563), 1, + anon_sym_await, + STATE(693), 1, + sym_string, + STATE(707), 1, + sym_primary_expression, + ACTIONS(75), 2, + sym_ellipsis, + sym_float, + ACTIONS(47), 3, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(1624), 2, - anon_sym_LT, - anon_sym_GT, - STATE(747), 2, - sym_argument_list, + anon_sym_TILDE, + ACTIONS(77), 5, + sym_integer, + sym_identifier, + sym_true, + sym_false, + sym_none, + ACTIONS(557), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(764), 16, + 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(1616), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1606), 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(1457), 7, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, - anon_sym_and, - anon_sym_or, - sym__semicolon, - [38926] = 3, + sym_parenthesized_expression, + sym_concatenated_string, + sym_await, + [38732] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1109), 5, + ACTIONS(51), 1, + anon_sym_LBRACE, + ACTIONS(81), 1, + sym__string_start, + ACTIONS(555), 1, + anon_sym_LPAREN, + ACTIONS(561), 1, + anon_sym_LBRACK, + ACTIONS(563), 1, + anon_sym_await, + STATE(693), 1, + sym_string, + STATE(699), 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(557), 5, + anon_sym_print, + anon_sym_async, + anon_sym_match, + anon_sym_exec, + anon_sym_type, + STATE(764), 16, + 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, + sym_await, + [38798] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1136), 5, anon_sym_as, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1104), 32, + ACTIONS(1131), 32, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -56888,16 +55199,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [38971] = 3, + [38843] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1152), 5, + ACTIONS(1093), 5, anon_sym_as, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1147), 32, + ACTIONS(1088), 32, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -56930,21 +55241,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [39016] = 5, + [38888] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1628), 1, + ACTIONS(81), 1, sym__string_start, - STATE(692), 2, + STATE(691), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1376), 5, + ACTIONS(1356), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1374), 29, + ACTIONS(1354), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -56974,21 +55285,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39065] = 5, + [38937] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(81), 1, + ACTIONS(1582), 1, sym__string_start, - STATE(688), 2, + STATE(691), 2, sym_string, aux_sym_concatenated_string_repeat1, - ACTIONS(1021), 5, + ACTIONS(1360), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 29, + ACTIONS(1358), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -57018,83 +55329,92 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39114] = 14, + [38986] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1395), 1, + anon_sym_EQ, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1595), 1, + anon_sym_PIPE, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1620), 1, + ACTIONS(1605), 1, + anon_sym_not, + ACTIONS(1607), 1, anon_sym_AMP, - ACTIONS(1622), 1, + ACTIONS(1609), 1, anon_sym_CARET, - ACTIONS(1602), 2, + ACTIONS(1613), 1, + anon_sym_is, + STATE(833), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1604), 2, + ACTIONS(1591), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1610), 2, + ACTIONS(1597), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(747), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1557), 3, - anon_sym_EQ, + ACTIONS(1611), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, + STATE(768), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1603), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 16, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_if, + ACTIONS(1593), 6, anon_sym_in, - anon_sym_PIPE, - 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(1393), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, sym__semicolon, - [39180] = 3, + [39065] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1395), 4, + ACTIONS(81), 1, + sym__string_start, + STATE(690), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1022), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1393), 32, - sym__string_start, + ACTIONS(1017), 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, @@ -57111,93 +55431,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [39224] = 11, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1598), 1, - anon_sym_DOT, - ACTIONS(1600), 1, - anon_sym_LPAREN, - ACTIONS(1612), 1, - anon_sym_LBRACK, - ACTIONS(1614), 1, - anon_sym_STAR_STAR, - ACTIONS(1602), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1610), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(747), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1557), 3, - anon_sym_EQ, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1616), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1555), 20, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_in, - anon_sym_PIPE, - 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__semicolon, - [39284] = 15, + [39114] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1608), 1, + ACTIONS(1595), 1, anon_sym_PIPE, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1620), 1, + ACTIONS(1607), 1, anon_sym_AMP, - ACTIONS(1622), 1, + ACTIONS(1609), 1, anon_sym_CARET, - ACTIONS(1602), 2, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1604), 2, + ACTIONS(1591), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1610), 2, + ACTIONS(1597), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1577), 3, + ACTIONS(1551), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, + ACTIONS(1603), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1575), 15, + ACTIONS(1549), 15, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57213,77 +55485,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39352] = 19, + [39182] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, - anon_sym_DOT, - ACTIONS(1633), 1, - anon_sym_LPAREN, - ACTIONS(1641), 1, - anon_sym_PIPE, - ACTIONS(1645), 1, - anon_sym_LBRACK, - ACTIONS(1647), 1, - anon_sym_STAR_STAR, - ACTIONS(1651), 1, - anon_sym_not, - ACTIONS(1653), 1, - anon_sym_AMP, - ACTIONS(1655), 1, - anon_sym_CARET, - ACTIONS(1659), 1, - anon_sym_is, - STATE(843), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1635), 2, + ACTIONS(1379), 4, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1637), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1643), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1657), 2, anon_sym_LT, anon_sym_GT, - STATE(799), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1649), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1639), 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(1457), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_and, - anon_sym_or, - [39428] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(618), 1, + ACTIONS(1377), 32, sym__string_start, - STATE(643), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1021), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1016), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -57297,6 +55508,8 @@ static const uint16_t ts_small_parse_table[] = { 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, @@ -57313,15 +55526,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [39476] = 3, + [39226] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1383), 4, + ACTIONS(1367), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1381), 32, + ACTIONS(1365), 32, sym__string_start, anon_sym_DOT, anon_sym_LPAREN, @@ -57354,52 +55567,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [39520] = 15, + [39270] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1608), 1, - anon_sym_PIPE, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1620), 1, - anon_sym_AMP, - ACTIONS(1622), 1, - anon_sym_CARET, - ACTIONS(1602), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1604), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1610), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1581), 3, + ACTIONS(1541), 5, + anon_sym_STAR, anon_sym_EQ, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1579), 15, + ACTIONS(1539), 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, @@ -57407,27 +55613,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39588] = 8, + [39324] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - STATE(747), 2, + ACTIONS(1589), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1597), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 5, - anon_sym_STAR, + ACTIONS(1541), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1603), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1539), 20, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57435,14 +55649,9 @@ static const uint16_t ts_small_parse_table[] = { 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, @@ -57453,44 +55662,44 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39642] = 15, + [39384] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1608), 1, + ACTIONS(1595), 1, anon_sym_PIPE, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1620), 1, + ACTIONS(1607), 1, anon_sym_AMP, - ACTIONS(1622), 1, + ACTIONS(1609), 1, anon_sym_CARET, - ACTIONS(1602), 2, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1604), 2, + ACTIONS(1591), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1610), 2, + ACTIONS(1597), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1565), 3, + ACTIONS(1559), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, + ACTIONS(1603), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1563), 15, + ACTIONS(1557), 15, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57506,45 +55715,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39710] = 8, + [39452] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - STATE(747), 2, + ACTIONS(1607), 1, + anon_sym_AMP, + ACTIONS(1609), 1, + anon_sym_CARET, + ACTIONS(1589), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1591), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1597), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1571), 5, - anon_sym_STAR, + ACTIONS(1541), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1569), 25, + ACTIONS(1603), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1539), 16, 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, @@ -57552,50 +55767,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39764] = 13, + [39518] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1622), 1, - anon_sym_CARET, - ACTIONS(1602), 2, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1604), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1610), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, + ACTIONS(1603), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 17, + ACTIONS(1539), 22, 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_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, @@ -57603,32 +55815,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39828] = 10, + [39576] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1602), 2, - anon_sym_STAR, - anon_sym_SLASH, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 3, + ACTIONS(1541), 5, + anon_sym_STAR, anon_sym_EQ, + anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1555), 22, + ACTIONS(1539), 25, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57638,9 +55845,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, @@ -57651,38 +55861,40 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39886] = 12, + [39630] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - ACTIONS(1602), 2, + ACTIONS(1609), 1, + anon_sym_CARET, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1604), 2, + ACTIONS(1591), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1610), 2, + ACTIONS(1597), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 3, + ACTIONS(1541), 3, anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1616), 3, + ACTIONS(1603), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 18, + ACTIONS(1539), 17, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57693,7 +55905,6 @@ 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, @@ -57701,45 +55912,49 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [39948] = 8, + [39694] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - STATE(747), 2, + ACTIONS(1589), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1591), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1597), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 5, - anon_sym_STAR, + ACTIONS(1541), 3, anon_sym_EQ, - anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1603), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1539), 18, 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, @@ -57747,27 +55962,84 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [40002] = 8, + [39756] = 19, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1615), 1, + anon_sym_DOT, + ACTIONS(1617), 1, + anon_sym_LPAREN, + ACTIONS(1625), 1, + anon_sym_PIPE, + ACTIONS(1629), 1, + anon_sym_LBRACK, + ACTIONS(1631), 1, + anon_sym_STAR_STAR, + ACTIONS(1635), 1, + anon_sym_not, + ACTIONS(1637), 1, + anon_sym_AMP, + ACTIONS(1639), 1, + anon_sym_CARET, + ACTIONS(1643), 1, + anon_sym_is, + STATE(841), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1619), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1621), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1627), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1641), 2, + anon_sym_LT, + anon_sym_GT, + STATE(789), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1633), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1623), 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(1393), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, + [39832] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1598), 1, + ACTIONS(1585), 1, anon_sym_DOT, - ACTIONS(1600), 1, + ACTIONS(1587), 1, anon_sym_LPAREN, - ACTIONS(1612), 1, + ACTIONS(1599), 1, anon_sym_LBRACK, - ACTIONS(1614), 1, + ACTIONS(1601), 1, anon_sym_STAR_STAR, - STATE(747), 2, + STATE(768), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1585), 5, + ACTIONS(1563), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 25, + ACTIONS(1561), 25, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -57793,68 +56065,75 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [40056] = 5, + [39886] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1596), 1, - anon_sym_COLON_EQ, - ACTIONS(1661), 1, - anon_sym_EQ, - ACTIONS(1021), 4, + ACTIONS(1585), 1, + anon_sym_DOT, + ACTIONS(1587), 1, + anon_sym_LPAREN, + ACTIONS(1595), 1, + anon_sym_PIPE, + ACTIONS(1599), 1, + anon_sym_LBRACK, + ACTIONS(1601), 1, + anon_sym_STAR_STAR, + ACTIONS(1607), 1, + anon_sym_AMP, + ACTIONS(1609), 1, + anon_sym_CARET, + ACTIONS(1589), 2, anon_sym_STAR, anon_sym_SLASH, + ACTIONS(1591), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1597), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(768), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1555), 3, + anon_sym_EQ, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 29, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(1603), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1553), 15, + sym__newline, + anon_sym_from, 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_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, - [40103] = 8, + sym__semicolon, + [39954] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, - anon_sym_DOT, - ACTIONS(1633), 1, - anon_sym_LPAREN, - ACTIONS(1645), 1, - anon_sym_LBRACK, - ACTIONS(1647), 1, - anon_sym_STAR_STAR, - STATE(799), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1557), 4, + ACTIONS(606), 1, + sym__string_start, + STATE(658), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1022), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1017), 29, + anon_sym_DOT, + anon_sym_LPAREN, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -57865,6 +56144,8 @@ static const uint16_t ts_small_parse_table[] = { 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, @@ -57880,33 +56161,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [40156] = 5, + [40002] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(592), 1, - anon_sym_COLON_EQ, - ACTIONS(620), 1, - anon_sym_EQ, - ACTIONS(260), 4, + ACTIONS(1585), 1, + anon_sym_DOT, + ACTIONS(1587), 1, + anon_sym_LPAREN, + ACTIONS(1599), 1, + anon_sym_LBRACK, + ACTIONS(1601), 1, + anon_sym_STAR_STAR, + STATE(768), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1567), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 29, - anon_sym_DOT, - anon_sym_LPAREN, - anon_sym_RPAREN, + ACTIONS(1565), 25, + sym__newline, + anon_sym_from, 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_LBRACK, - anon_sym_STAR_STAR, anon_sym_AT, anon_sym_not, anon_sym_and, @@ -57922,38 +56206,41 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [40203] = 11, + sym__semicolon, + [40056] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - ACTIONS(1557), 2, + ACTIONS(1541), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1619), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1643), 2, + ACTIONS(1621), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1627), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, + ACTIONS(1633), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 20, + ACTIONS(1539), 18, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - anon_sym_GT_GT, anon_sym_if, anon_sym_COLON, anon_sym_in, @@ -57963,104 +56250,113 @@ 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, - [40262] = 5, + [40117] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(592), 1, - anon_sym_COLON_EQ, - ACTIONS(265), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(260), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(293), 27, + ACTIONS(1615), 1, anon_sym_DOT, + ACTIONS(1617), 1, anon_sym_LPAREN, - anon_sym_GT_GT, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_in, + ACTIONS(1625), 1, anon_sym_PIPE, - anon_sym_DASH, - anon_sym_PLUS, + ACTIONS(1629), 1, anon_sym_LBRACK, + ACTIONS(1631), 1, anon_sym_STAR_STAR, + ACTIONS(1637), 1, + anon_sym_AMP, + ACTIONS(1639), 1, + anon_sym_CARET, + ACTIONS(1559), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1619), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1621), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1627), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(789), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1633), 3, anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1557), 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_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, - [40309] = 4, + [40184] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(273), 1, - anon_sym_COLON_EQ, - ACTIONS(260), 5, - anon_sym_STAR, - anon_sym_EQ, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(293), 29, - sym__newline, + ACTIONS(1017), 3, anon_sym_DOT, - anon_sym_from, anon_sym_LPAREN, - anon_sym_COMMA, + anon_sym_LBRACK, + ACTIONS(1022), 13, + anon_sym_STAR, 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_SLASH, 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, - [40354] = 4, + ACTIONS(1063), 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, + [40229] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(293), 3, + ACTIONS(1088), 3, anon_sym_DOT, anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(260), 13, + ACTIONS(1093), 13, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -58074,7 +56370,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(586), 19, + ACTIONS(1095), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -58094,18 +56390,19 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [40399] = 3, + [40274] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1383), 5, + ACTIONS(1059), 1, + anon_sym_COLON_EQ, + ACTIONS(1022), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1381), 30, + ACTIONS(1017), 29, sym__newline, - sym__string_start, anon_sym_DOT, anon_sym_from, anon_sym_LPAREN, @@ -58134,128 +56431,152 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [40442] = 13, + [40319] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - ACTIONS(1655), 1, - anon_sym_CARET, - ACTIONS(1557), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1635), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1637), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1643), 2, - anon_sym_DASH, - anon_sym_PLUS, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, - anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1555), 17, + ACTIONS(1563), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1561), 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, - [40505] = 15, + [40372] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1367), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1365), 30, + sym__newline, + sym__string_start, anon_sym_DOT, - ACTIONS(1633), 1, + anon_sym_from, anon_sym_LPAREN, - ACTIONS(1641), 1, + anon_sym_COMMA, + anon_sym_GT_GT, + anon_sym_if, + anon_sym_in, anon_sym_PIPE, - ACTIONS(1645), 1, + anon_sym_DASH, + anon_sym_PLUS, anon_sym_LBRACK, - ACTIONS(1647), 1, anon_sym_STAR_STAR, - ACTIONS(1653), 1, + anon_sym_AT, + anon_sym_not, + anon_sym_and, + anon_sym_or, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, anon_sym_AMP, - ACTIONS(1655), 1, anon_sym_CARET, - ACTIONS(1577), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1635), 2, + 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, + [40415] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1131), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(1136), 13, anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1637), 2, anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1643), 2, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1649), 3, + anon_sym_STAR_STAR, anon_sym_AT, + anon_sym_SLASH, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1575), 15, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(1138), 19, 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, - [40572] = 8, + 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, + [40460] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1571), 4, + ACTIONS(1567), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1569), 25, + ACTIONS(1565), 25, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -58281,107 +56602,96 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [40625] = 15, + [40513] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, - anon_sym_DOT, - ACTIONS(1633), 1, - anon_sym_LPAREN, - ACTIONS(1641), 1, - anon_sym_PIPE, - ACTIONS(1645), 1, - anon_sym_LBRACK, - ACTIONS(1647), 1, - anon_sym_STAR_STAR, - ACTIONS(1653), 1, - anon_sym_AMP, - ACTIONS(1655), 1, - anon_sym_CARET, - ACTIONS(1581), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1379), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, - ACTIONS(1637), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1377), 30, + sym__newline, + sym__string_start, + anon_sym_DOT, + anon_sym_from, + anon_sym_LPAREN, + anon_sym_COMMA, anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1643), 2, + anon_sym_if, + anon_sym_in, + anon_sym_PIPE, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, - sym_argument_list, - sym_generator_expression, - ACTIONS(1649), 3, + anon_sym_LBRACK, + anon_sym_STAR_STAR, anon_sym_AT, - anon_sym_PERCENT, - anon_sym_SLASH_SLASH, - ACTIONS(1579), 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_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, - [40692] = 4, + sym__semicolon, + [40556] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1016), 3, + ACTIONS(1577), 1, + anon_sym_COLON_EQ, + ACTIONS(1056), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1022), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1017), 27, anon_sym_DOT, anon_sym_LPAREN, - anon_sym_LBRACK, - ACTIONS(1021), 13, - anon_sym_STAR, 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_SLASH, + 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, - ACTIONS(1079), 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, - [40737] = 4, + anon_sym_LT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_GT_EQ, + anon_sym_LT_GT, + anon_sym_is, + [40603] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1104), 3, + ACTIONS(287), 3, anon_sym_DOT, anon_sym_LPAREN, anon_sym_LBRACK, - ACTIONS(1109), 13, + ACTIONS(260), 13, anon_sym_STAR, anon_sym_GT_GT, anon_sym_PIPE, @@ -58395,7 +56705,7 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - ACTIONS(1111), 19, + ACTIONS(574), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -58415,24 +56725,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [40782] = 3, + [40648] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1395), 5, - anon_sym_STAR, + ACTIONS(1577), 1, + anon_sym_COLON_EQ, + ACTIONS(1645), 1, anon_sym_EQ, + ACTIONS(1022), 4, + anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1393), 30, - sym__newline, - sym__string_start, + ACTIONS(1017), 29, 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, @@ -58454,22 +56767,21 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [40825] = 5, + [40695] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1596), 1, + ACTIONS(580), 1, anon_sym_COLON_EQ, - ACTIONS(1072), 3, + ACTIONS(264), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_RBRACK, - ACTIONS(1021), 4, + ACTIONS(260), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 27, + ACTIONS(287), 27, anon_sym_DOT, anon_sym_LPAREN, anon_sym_GT_GT, @@ -58497,67 +56809,67 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [40872] = 4, + [40742] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(293), 3, + ACTIONS(271), 1, + anon_sym_COLON_EQ, + ACTIONS(260), 5, + anon_sym_STAR, + anon_sym_EQ, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(287), 29, + sym__newline, anon_sym_DOT, + anon_sym_from, anon_sym_LPAREN, - anon_sym_LBRACK, - ACTIONS(260), 13, - anon_sym_STAR, + 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_SLASH, + 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, - ACTIONS(297), 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, - [40917] = 8, + 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, + [40787] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1585), 4, + ACTIONS(1541), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1583), 25, + ACTIONS(1539), 25, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -58583,183 +56895,141 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [40970] = 4, + [40840] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1016), 3, + ACTIONS(1615), 1, anon_sym_DOT, + ACTIONS(1617), 1, anon_sym_LPAREN, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1021), 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(1027), 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, - [41015] = 15, - ACTIONS(3), 1, - sym_comment, ACTIONS(1631), 1, - anon_sym_DOT, - ACTIONS(1633), 1, - anon_sym_LPAREN, - ACTIONS(1641), 1, - anon_sym_PIPE, - ACTIONS(1645), 1, - anon_sym_LBRACK, - ACTIONS(1647), 1, anon_sym_STAR_STAR, - ACTIONS(1653), 1, - anon_sym_AMP, - ACTIONS(1655), 1, - anon_sym_CARET, - ACTIONS(1565), 2, + ACTIONS(1541), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1619), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1637), 2, - anon_sym_GT_GT, - anon_sym_LT_LT, - ACTIONS(1643), 2, + ACTIONS(1627), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, + ACTIONS(1633), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1563), 15, + ACTIONS(1539), 20, 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_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, - [41082] = 12, + [40899] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1625), 1, + anon_sym_PIPE, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - ACTIONS(1557), 2, + ACTIONS(1637), 1, + anon_sym_AMP, + ACTIONS(1639), 1, + anon_sym_CARET, + ACTIONS(1551), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1619), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1637), 2, + ACTIONS(1621), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1643), 2, + ACTIONS(1627), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, + ACTIONS(1633), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 18, + ACTIONS(1549), 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, - 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, - [41143] = 14, + [40966] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - ACTIONS(1653), 1, + ACTIONS(1637), 1, anon_sym_AMP, - ACTIONS(1655), 1, + ACTIONS(1639), 1, anon_sym_CARET, - ACTIONS(1557), 2, + ACTIONS(1541), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1619), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1637), 2, + ACTIONS(1621), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1643), 2, + ACTIONS(1627), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, + ACTIONS(1633), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 16, + ACTIONS(1539), 16, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -58776,72 +57046,31 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41208] = 4, + [41031] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1147), 3, + ACTIONS(1615), 1, anon_sym_DOT, + ACTIONS(1617), 1, anon_sym_LPAREN, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1152), 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(1154), 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, - [41253] = 10, - ACTIONS(3), 1, - sym_comment, ACTIONS(1631), 1, - anon_sym_DOT, - ACTIONS(1633), 1, - anon_sym_LPAREN, - ACTIONS(1645), 1, - anon_sym_LBRACK, - ACTIONS(1647), 1, anon_sym_STAR_STAR, - ACTIONS(1557), 2, + ACTIONS(1541), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1635), 2, + ACTIONS(1619), 2, anon_sym_STAR, anon_sym_SLASH, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1649), 3, + ACTIONS(1633), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, - ACTIONS(1555), 22, + ACTIONS(1539), 22, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -58864,26 +57093,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41310] = 8, + [41088] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1631), 1, + ACTIONS(1615), 1, anon_sym_DOT, - ACTIONS(1633), 1, + ACTIONS(1617), 1, anon_sym_LPAREN, - ACTIONS(1645), 1, + ACTIONS(1629), 1, anon_sym_LBRACK, - ACTIONS(1647), 1, + ACTIONS(1631), 1, anon_sym_STAR_STAR, - STATE(799), 2, + STATE(789), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1557), 4, + ACTIONS(1541), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1555), 25, + ACTIONS(1539), 25, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -58909,25 +57138,77 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41363] = 4, + [41141] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1075), 1, - anon_sym_COLON_EQ, - ACTIONS(1021), 5, + ACTIONS(1615), 1, + anon_sym_DOT, + ACTIONS(1617), 1, + anon_sym_LPAREN, + ACTIONS(1629), 1, + anon_sym_LBRACK, + ACTIONS(1631), 1, + anon_sym_STAR_STAR, + ACTIONS(1639), 1, + anon_sym_CARET, + ACTIONS(1541), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1619), 2, anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1621), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1627), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(789), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1633), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1539), 17, + 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, + 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, + [41204] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(580), 1, + anon_sym_COLON_EQ, + ACTIONS(608), 1, anon_sym_EQ, + ACTIONS(260), 4, + anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 29, - sym__newline, + ACTIONS(287), 29, 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, @@ -58949,56 +57230,150 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41408] = 3, + [41251] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1427), 5, + ACTIONS(287), 3, + anon_sym_DOT, + anon_sym_LPAREN, + anon_sym_LBRACK, + ACTIONS(260), 13, anon_sym_STAR, - anon_sym_EQ, + 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_LT, - anon_sym_GT, - ACTIONS(1425), 29, - sym__newline, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT_LT, + ACTIONS(291), 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, + [41296] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1017), 3, anon_sym_DOT, - anon_sym_from, anon_sym_LPAREN, - anon_sym_COMMA, + anon_sym_LBRACK, + ACTIONS(1022), 13, + anon_sym_STAR, 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_SLASH, anon_sym_PERCENT, anon_sym_SLASH_SLASH, anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, + ACTIONS(1028), 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, + [41341] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1615), 1, + anon_sym_DOT, + ACTIONS(1617), 1, + anon_sym_LPAREN, + ACTIONS(1625), 1, + anon_sym_PIPE, + ACTIONS(1629), 1, + anon_sym_LBRACK, + ACTIONS(1631), 1, + anon_sym_STAR_STAR, + ACTIONS(1637), 1, + anon_sym_AMP, + ACTIONS(1639), 1, + anon_sym_CARET, + ACTIONS(1555), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1619), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1621), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1627), 2, + anon_sym_DASH, + anon_sym_PLUS, + STATE(789), 2, + sym_argument_list, + sym_generator_expression, + ACTIONS(1633), 3, + anon_sym_AT, + anon_sym_PERCENT, + anon_sym_SLASH_SLASH, + ACTIONS(1553), 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, - sym__semicolon, - [41450] = 3, + [41408] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1399), 5, + ACTIONS(1457), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 29, + ACTIONS(1455), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59028,16 +57403,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41492] = 3, + [41450] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1553), 5, + ACTIONS(1136), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1551), 29, + ACTIONS(1131), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59067,16 +57442,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41534] = 3, + [41492] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1407), 5, + ACTIONS(1433), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1405), 29, + ACTIONS(1431), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59106,16 +57481,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41576] = 3, + [41534] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1415), 5, + ACTIONS(1437), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1413), 29, + ACTIONS(1435), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59145,25 +57520,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41618] = 4, + [41576] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1072), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1021), 4, + ACTIONS(1493), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 27, + ACTIONS(1491), 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, @@ -59185,25 +57558,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41662] = 4, + sym__semicolon, + [41618] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1149), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1152), 4, + ACTIONS(1433), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1147), 27, + ACTIONS(1431), 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, @@ -59225,25 +57597,24 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41706] = 4, + sym__semicolon, + [41660] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1106), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - ACTIONS(1109), 4, + ACTIONS(1517), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1104), 27, + ACTIONS(1515), 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, @@ -59265,16 +57636,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [41750] = 3, + sym__semicolon, + [41702] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1152), 5, + ACTIONS(1525), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1147), 29, + ACTIONS(1523), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59304,16 +57676,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41792] = 3, + [41744] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1109), 5, + ACTIONS(1505), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1104), 29, + ACTIONS(1503), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59343,21 +57715,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41834] = 3, + [41786] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1451), 5, + ACTIONS(1647), 1, + anon_sym_COLON_EQ, + ACTIONS(1022), 5, anon_sym_STAR, - anon_sym_EQ, + anon_sym_COLON, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1449), 29, - sym__newline, + ACTIONS(1017), 28, 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, @@ -59381,24 +57755,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41876] = 3, + [41830] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1497), 5, + ACTIONS(1090), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1093), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1495), 29, - sym__newline, + ACTIONS(1088), 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, @@ -59420,17 +57795,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [41918] = 3, + [41874] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 5, + ACTIONS(260), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 29, + ACTIONS(287), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59460,16 +57834,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [41960] = 3, + [41916] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 5, + ACTIONS(1453), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 29, + ACTIONS(1451), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59499,16 +57873,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42002] = 3, + [41958] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1489), 5, + ACTIONS(1485), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1487), 29, + ACTIONS(1483), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59538,16 +57912,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42044] = 3, + [42000] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 5, + ACTIONS(1425), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 29, + ACTIONS(1423), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59577,23 +57951,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42086] = 3, + [42042] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(260), 5, + ACTIONS(1133), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_RBRACK, + ACTIONS(1136), 4, anon_sym_STAR, - anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 29, - sym__newline, + ACTIONS(1131), 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, @@ -59615,17 +57991,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42128] = 3, + [42086] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1529), 5, + ACTIONS(1429), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1527), 29, + ACTIONS(1427), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59655,16 +58030,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42170] = 3, + [42128] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1533), 5, + ACTIONS(1501), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1531), 29, + ACTIONS(1499), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59694,16 +58069,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42212] = 3, + [42170] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 5, + ACTIONS(1441), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 29, + ACTIONS(1439), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59733,16 +58108,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42254] = 3, + [42212] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1537), 5, + ACTIONS(1489), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1535), 29, + ACTIONS(1487), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59772,16 +58147,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42296] = 3, + [42254] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 5, + ACTIONS(1093), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 29, + ACTIONS(1088), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59811,16 +58186,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42338] = 3, + [42296] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1549), 5, + ACTIONS(1449), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1547), 29, + ACTIONS(1447), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59850,16 +58225,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42380] = 3, + [42338] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 5, + ACTIONS(1383), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 29, + ACTIONS(1381), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59889,21 +58264,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42422] = 3, + [42380] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1501), 5, + ACTIONS(594), 1, + anon_sym_COLON_EQ, + ACTIONS(260), 5, anon_sym_STAR, - anon_sym_EQ, + anon_sym_COLON, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1499), 29, - sym__newline, + ACTIONS(287), 28, 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, @@ -59927,17 +58304,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - sym__semicolon, - [42464] = 3, + [42424] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1403), 5, + ACTIONS(1509), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1401), 29, + ACTIONS(1507), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -59967,16 +58343,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42506] = 3, + [42466] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1447), 5, + ACTIONS(1387), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1445), 29, + ACTIONS(1385), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60006,16 +58382,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42548] = 3, + [42508] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1419), 5, + ACTIONS(1513), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1417), 29, + ACTIONS(1511), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60045,16 +58421,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42590] = 3, + [42550] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1443), 5, + ACTIONS(1529), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1441), 29, + ACTIONS(1527), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60084,16 +58460,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42632] = 3, + [42592] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1411), 5, + ACTIONS(1022), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1409), 29, + ACTIONS(1017), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60123,16 +58499,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42674] = 3, + [42634] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1431), 5, + ACTIONS(1449), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1429), 29, + ACTIONS(1447), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60162,16 +58538,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42716] = 3, + [42676] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 5, + ACTIONS(1537), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 29, + ACTIONS(1535), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60201,16 +58577,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42758] = 3, + [42718] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1399), 5, + ACTIONS(1533), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 29, + ACTIONS(1531), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60240,96 +58616,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42800] = 4, + [42760] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(606), 1, - anon_sym_COLON_EQ, - ACTIONS(260), 5, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(293), 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, - [42844] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1663), 1, - anon_sym_COLON_EQ, - ACTIONS(1021), 5, - anon_sym_STAR, - anon_sym_COLON, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1016), 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, - [42888] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1435), 5, + ACTIONS(1521), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1433), 29, + ACTIONS(1519), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60359,16 +58655,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42930] = 3, + [42802] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1439), 5, + ACTIONS(1457), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1437), 29, + ACTIONS(1455), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60398,16 +58694,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [42972] = 3, + [42844] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1021), 5, + ACTIONS(1441), 5, anon_sym_STAR, anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 29, + ACTIONS(1439), 29, sym__newline, anon_sym_DOT, anon_sym_from, @@ -60437,137 +58733,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_LT_GT, anon_sym_is, sym__semicolon, - [43014] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1549), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1547), 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, - [43055] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1447), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1445), 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, - [43096] = 3, + [42886] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1419), 4, - anon_sym_STAR, - anon_sym_SLASH, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1417), 29, - anon_sym_DOT, - anon_sym_LPAREN, + ACTIONS(1056), 3, 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, - [43137] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1399), 4, + anon_sym_RBRACK, + ACTIONS(1022), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 29, + ACTIONS(1017), 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, @@ -60589,23 +58773,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43178] = 3, + [42930] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1435), 4, + ACTIONS(1497), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1433), 29, + ACTIONS(1495), 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, @@ -60627,15 +58811,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43219] = 3, + sym__semicolon, + [42972] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1439), 4, + ACTIONS(1445), 5, anon_sym_STAR, + anon_sym_EQ, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1437), 29, + ACTIONS(1443), 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, + [43014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1441), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1439), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60665,15 +58889,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43260] = 3, + [43055] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1399), 4, + ACTIONS(1449), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1397), 29, + ACTIONS(1447), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60703,15 +58927,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43301] = 3, + [43096] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1553), 4, + ACTIONS(1509), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1551), 29, + ACTIONS(1507), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60741,15 +58965,93 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43342] = 3, + [43137] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1407), 4, + ACTIONS(1024), 1, + anon_sym_COLON_EQ, + ACTIONS(1645), 1, + anon_sym_EQ, + ACTIONS(1022), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1405), 29, + ACTIONS(1017), 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, + [43182] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1453), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1451), 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, + [43223] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1513), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1511), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60779,15 +59081,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43383] = 3, + [43264] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1415), 4, + ACTIONS(1529), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1413), 29, + ACTIONS(1527), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60817,15 +59119,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43424] = 3, + [43305] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(820), 4, + ACTIONS(260), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(818), 29, + ACTIONS(287), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60855,15 +59157,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43465] = 3, + [43346] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 4, + ACTIONS(798), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 29, + ACTIONS(796), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60893,15 +59195,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43506] = 3, + [43387] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1423), 4, + ACTIONS(1537), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1421), 29, + ACTIONS(1535), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -60931,7 +59233,45 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43547] = 3, + [43428] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1533), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1531), 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, + [43469] = 3, ACTIONS(3), 1, sym_comment, ACTIONS(1489), 4, @@ -60969,15 +59309,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43588] = 3, + [43510] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 4, + ACTIONS(570), 1, + anon_sym_COLON_EQ, + ACTIONS(608), 1, + anon_sym_EQ, + ACTIONS(260), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 29, + ACTIONS(287), 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, + [43555] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1017), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61007,15 +59387,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43629] = 3, + [43596] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1529), 4, + ACTIONS(1497), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1527), 29, + ACTIONS(1495), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61045,15 +59425,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43670] = 3, + [43637] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1533), 4, + ACTIONS(1521), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1531), 29, + ACTIONS(1519), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61083,15 +59463,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43711] = 3, + [43678] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1493), 4, + ACTIONS(1441), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1491), 29, + ACTIONS(1439), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61121,15 +59501,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43752] = 3, + [43719] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 4, + ACTIONS(1457), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 29, + ACTIONS(1455), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61159,15 +59539,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43793] = 3, + [43760] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1451), 4, + ACTIONS(1383), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1449), 29, + ACTIONS(1381), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61197,25 +59577,23 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43834] = 5, + [43801] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(578), 1, - anon_sym_COLON_EQ, - ACTIONS(620), 1, - anon_sym_EQ, - ACTIONS(260), 4, + ACTIONS(1445), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 27, + ACTIONS(1443), 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, @@ -61237,25 +59615,61 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_GT_EQ, anon_sym_LT_GT, anon_sym_is, - [43879] = 5, + [43842] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1023), 1, - anon_sym_COLON_EQ, - ACTIONS(1661), 1, - anon_sym_EQ, - ACTIONS(1021), 4, + ACTIONS(1387), 4, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1385), 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, + [43883] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1505), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 27, + ACTIONS(1503), 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, @@ -61280,12 +59694,12 @@ static const uint16_t ts_small_parse_table[] = { [43924] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1021), 4, + ACTIONS(1525), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1016), 29, + ACTIONS(1523), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61318,12 +59732,12 @@ static const uint16_t ts_small_parse_table[] = { [43965] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(260), 4, + ACTIONS(1517), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(293), 29, + ACTIONS(1515), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61356,12 +59770,12 @@ static const uint16_t ts_small_parse_table[] = { [44006] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1537), 4, + ACTIONS(1433), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1535), 29, + ACTIONS(1431), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61394,12 +59808,12 @@ static const uint16_t ts_small_parse_table[] = { [44047] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1497), 4, + ACTIONS(1449), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1495), 29, + ACTIONS(1447), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61432,12 +59846,12 @@ static const uint16_t ts_small_parse_table[] = { [44088] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1501), 4, + ACTIONS(1485), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1499), 29, + ACTIONS(1483), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61470,12 +59884,12 @@ static const uint16_t ts_small_parse_table[] = { [44129] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1403), 4, + ACTIONS(1493), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1401), 29, + ACTIONS(1491), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61508,12 +59922,12 @@ static const uint16_t ts_small_parse_table[] = { [44170] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1443), 4, + ACTIONS(1437), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1441), 29, + ACTIONS(1435), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61546,12 +59960,12 @@ static const uint16_t ts_small_parse_table[] = { [44211] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1411), 4, + ACTIONS(1433), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1409), 29, + ACTIONS(1431), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61584,12 +59998,12 @@ static const uint16_t ts_small_parse_table[] = { [44252] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1431), 4, + ACTIONS(1425), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1429), 29, + ACTIONS(1423), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61622,12 +60036,12 @@ static const uint16_t ts_small_parse_table[] = { [44293] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1541), 4, + ACTIONS(1429), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1539), 29, + ACTIONS(1427), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61660,12 +60074,12 @@ static const uint16_t ts_small_parse_table[] = { [44334] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(824), 4, + ACTIONS(1501), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(822), 29, + ACTIONS(1499), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61698,12 +60112,12 @@ static const uint16_t ts_small_parse_table[] = { [44375] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1427), 4, + ACTIONS(808), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1425), 29, + ACTIONS(806), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61736,12 +60150,12 @@ static const uint16_t ts_small_parse_table[] = { [44416] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1545), 4, + ACTIONS(1457), 4, anon_sym_STAR, anon_sym_SLASH, anon_sym_LT, anon_sym_GT, - ACTIONS(1543), 29, + ACTIONS(1455), 29, anon_sym_DOT, anon_sym_LPAREN, anon_sym_RPAREN, @@ -61774,49 +60188,49 @@ static const uint16_t ts_small_parse_table[] = { [44457] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1250), 2, - sym__match_patterns, - sym_open_sequence_match_pattern, - STATE(1254), 2, + STATE(1168), 2, sym__match_pattern, sym_match_as_pattern, - STATE(1317), 2, + STATE(1170), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1299), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -61828,49 +60242,49 @@ static const uint16_t ts_small_parse_table[] = { [44531] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + ACTIONS(1669), 1, + anon_sym_if, + ACTIONS(1671), 1, + anon_sym_COLON, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1254), 2, + ACTIONS(1667), 3, + sym_true, + sym_false, + sym_none, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, - STATE(1262), 2, - sym__match_patterns, - sym_open_sequence_match_pattern, - STATE(1317), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - ACTIONS(1683), 3, - sym_true, - sym_false, - sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -61882,49 +60296,49 @@ static const uint16_t ts_small_parse_table[] = { [44605] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1685), 1, - anon_sym_if, - ACTIONS(1687), 1, - anon_sym_COLON, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, - sym_true, - sym_false, - sym_none, - STATE(1078), 4, + STATE(1168), 2, sym__match_pattern, sym_match_as_pattern, + STATE(1191), 2, + sym__match_patterns, + sym_open_sequence_match_pattern, + STATE(1299), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + ACTIONS(1667), 3, + sym_true, + sym_false, + sym_none, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -61936,49 +60350,49 @@ static const uint16_t ts_small_parse_table[] = { [44679] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1689), 1, + ACTIONS(1673), 1, anon_sym_if, - ACTIONS(1691), 1, + ACTIONS(1675), 1, anon_sym_COLON, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -61987,51 +60401,50 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [44753] = 20, + [44753] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1693), 1, - anon_sym_RPAREN, - STATE(886), 1, + ACTIONS(1677), 1, + anon_sym_RBRACK, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1309), 2, + ACTIONS(1667), 3, + sym_true, + sym_false, + sym_none, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, - STATE(1310), 2, sym__match_maybe_star_pattern, sym_match_star_pattern, - ACTIONS(1683), 3, - sym_true, - sym_false, - sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62040,50 +60453,51 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [44826] = 19, + [44824] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1693), 1, - anon_sym_RBRACK, - STATE(886), 1, + ACTIONS(1679), 1, + anon_sym_RPAREN, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + STATE(1309), 2, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(1351), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1201), 4, - sym__match_pattern, - sym_match_as_pattern, - sym__match_maybe_star_pattern, - sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62095,47 +60509,47 @@ static const uint16_t ts_small_parse_table[] = { [44897] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1695), 1, + ACTIONS(1681), 1, anon_sym_RPAREN, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62147,47 +60561,47 @@ static const uint16_t ts_small_parse_table[] = { [44968] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1695), 1, + ACTIONS(1679), 1, anon_sym_RBRACK, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, + STATE(1182), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62199,47 +60613,47 @@ static const uint16_t ts_small_parse_table[] = { [45039] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1697), 1, + ACTIONS(1677), 1, anon_sym_RPAREN, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62251,47 +60665,47 @@ static const uint16_t ts_small_parse_table[] = { [45110] = 19, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, + ACTIONS(1653), 1, anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1697), 1, + ACTIONS(1681), 1, anon_sym_RBRACK, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, + STATE(1082), 4, sym__match_pattern, sym_match_as_pattern, sym__match_maybe_star_pattern, sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62303,47 +60717,47 @@ static const uint16_t ts_small_parse_table[] = { [45181] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1699), 1, + ACTIONS(1683), 1, sym_identifier, - ACTIONS(1701), 1, + ACTIONS(1685), 1, anon_sym_RPAREN, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1166), 1, + STATE(1271), 1, sym_match_keyword_pattern, - STATE(1306), 1, + STATE(1318), 1, sym_match_positional_pattern, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1339), 2, + STATE(1333), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62355,47 +60769,47 @@ static const uint16_t ts_small_parse_table[] = { [45253] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1699), 1, + ACTIONS(1683), 1, sym_identifier, - ACTIONS(1703), 1, + ACTIONS(1687), 1, anon_sym_RPAREN, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, STATE(1269), 1, - sym_match_positional_pattern, - STATE(1270), 1, sym_match_keyword_pattern, - STATE(1386), 1, + STATE(1318), 1, + sym_match_positional_pattern, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1339), 2, + STATE(1333), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62404,48 +60818,50 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [45325] = 18, + [45325] = 20, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, - sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1669), 1, - anon_sym_STAR, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + ACTIONS(1683), 1, + sym_identifier, + ACTIONS(1689), 1, + anon_sym_RPAREN, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1158), 1, + sym_match_keyword_pattern, + STATE(1159), 1, + sym_match_positional_pattern, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - ACTIONS(1683), 3, + STATE(1333), 2, + sym__match_pattern, + sym_match_as_pattern, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(1078), 4, - sym__match_pattern, - sym_match_as_pattern, - sym__match_maybe_star_pattern, - sym_match_star_pattern, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62454,50 +60870,48 @@ static const uint16_t ts_small_parse_table[] = { sym_match_sequence_pattern, sym_match_mapping_pattern, sym_match_class_pattern, - [45393] = 20, + [45397] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1667), 1, + ACTIONS(1649), 1, + sym_identifier, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1653), 1, + anon_sym_STAR, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1699), 1, - sym_identifier, - ACTIONS(1705), 1, - anon_sym_RPAREN, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1162), 1, - sym_match_keyword_pattern, - STATE(1306), 1, - sym_match_positional_pattern, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1339), 2, - sym__match_pattern, - sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(1082), 4, + sym__match_pattern, + sym_match_as_pattern, + sym__match_maybe_star_pattern, + sym_match_star_pattern, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62509,43 +60923,43 @@ static const uint16_t ts_small_parse_table[] = { [45465] = 18, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1306), 1, + STATE(1318), 1, sym_match_positional_pattern, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1339), 2, + STATE(1333), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62557,41 +60971,41 @@ static const uint16_t ts_small_parse_table[] = { [45531] = 17, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1308), 2, + STATE(1320), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62603,41 +61017,41 @@ static const uint16_t ts_small_parse_table[] = { [45594] = 17, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1673), 1, + ACTIONS(1657), 1, sym_match_wildcard_pattern, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - STATE(972), 2, + STATE(989), 2, sym__match_or_pattern, sym_match_or_pattern, - STATE(1344), 2, + STATE(1350), 2, sym__match_pattern, sym_match_as_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(968), 8, + STATE(936), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62649,35 +61063,35 @@ static const uint16_t ts_small_parse_table[] = { [45657] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1707), 1, + ACTIONS(1691), 1, sym_match_wildcard_pattern, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(929), 8, + STATE(916), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62689,35 +61103,35 @@ static const uint16_t ts_small_parse_table[] = { [45712] = 15, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, + ACTIONS(606), 1, sym__string_start, - ACTIONS(1665), 1, + ACTIONS(1649), 1, sym_identifier, - ACTIONS(1667), 1, + ACTIONS(1651), 1, anon_sym_LPAREN, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1675), 1, + ACTIONS(1659), 1, anon_sym_LBRACK, - ACTIONS(1677), 1, + ACTIONS(1661), 1, anon_sym_LBRACE, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1709), 1, + ACTIONS(1693), 1, sym_match_wildcard_pattern, - STATE(886), 1, + STATE(885), 1, sym_string, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1386), 1, + STATE(1452), 1, sym_pattern_class_name, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - STATE(915), 8, + STATE(933), 8, sym__closed_pattern, sym_match_literal_pattern, sym_match_capture_pattern, @@ -62729,25 +61143,25 @@ static const uint16_t ts_small_parse_table[] = { [45767] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1477), 1, + ACTIONS(1697), 1, + anon_sym_as, + ACTIONS(1702), 1, anon_sym_not, - ACTIONS(1485), 1, + ACTIONS(1708), 1, anon_sym_is, - ACTIONS(1713), 1, - anon_sym_as, - STATE(831), 1, + STATE(828), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1483), 2, + ACTIONS(1705), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1465), 6, + ACTIONS(1699), 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(1711), 10, + ACTIONS(1695), 10, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -62761,25 +61175,25 @@ static const uint16_t ts_small_parse_table[] = { [45807] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1720), 1, - anon_sym_EQ, - ACTIONS(1722), 1, + ACTIONS(1473), 1, anon_sym_not, - ACTIONS(1728), 1, + ACTIONS(1481), 1, anon_sym_is, - STATE(829), 1, + ACTIONS(1713), 1, + anon_sym_EQ, + STATE(831), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1725), 2, + ACTIONS(1479), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1717), 6, + ACTIONS(1463), 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(1715), 10, + ACTIONS(1711), 10, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -62793,18 +61207,18 @@ static const uint16_t ts_small_parse_table[] = { [45847] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1517), 1, + ACTIONS(1413), 1, anon_sym_not, - ACTIONS(1525), 1, + ACTIONS(1421), 1, anon_sym_is, ACTIONS(1713), 1, - anon_sym_EQ, - STATE(829), 1, + anon_sym_as, + STATE(828), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1523), 2, + ACTIONS(1419), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1507), 6, + ACTIONS(1401), 6, anon_sym_in, anon_sym_LT_EQ, anon_sym_EQ_EQ, @@ -62816,52 +61230,52 @@ static const uint16_t ts_small_parse_table[] = { 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, [45887] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1720), 1, - anon_sym_as, - ACTIONS(1734), 1, + ACTIONS(1697), 1, + anon_sym_EQ, + ACTIONS(1718), 1, anon_sym_not, - ACTIONS(1740), 1, + ACTIONS(1724), 1, anon_sym_is, STATE(831), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1737), 2, + ACTIONS(1721), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1731), 6, + ACTIONS(1715), 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(1715), 10, + ACTIONS(1695), 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, + sym_type_conversion, [45927] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1745), 1, + ACTIONS(1729), 1, anon_sym_COMMA, STATE(832), 1, aux_sym__patterns_repeat1, - ACTIONS(1743), 18, + ACTIONS(1727), 18, anon_sym_RPAREN, anon_sym_COLON, anon_sym_in, @@ -62880,10 +61294,39 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [45957] = 2, + [45957] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1605), 1, + anon_sym_not, + ACTIONS(1613), 1, + anon_sym_is, + ACTIONS(1713), 1, + anon_sym_EQ, + STATE(839), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1611), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1593), 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(1711), 7, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_and, + anon_sym_or, + sym__semicolon, + [45994] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1079), 19, + ACTIONS(1732), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62903,10 +61346,35 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [45982] = 2, + [46019] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 2, + anon_sym_STAR, + anon_sym_SLASH, + ACTIONS(1734), 3, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + ACTIONS(1017), 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, + [46048] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1748), 19, + ACTIONS(1736), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62926,39 +61394,33 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [46007] = 8, + [46073] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1720), 1, - anon_sym_EQ, - ACTIONS(1753), 1, - anon_sym_not, - ACTIONS(1759), 1, - anon_sym_is, - STATE(835), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1756), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1750), 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(1715), 7, - sym__newline, - anon_sym_from, + ACTIONS(1063), 19, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, - anon_sym_and, - anon_sym_or, - sym__semicolon, - [46044] = 2, + 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, + [46098] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1762), 19, + ACTIONS(1738), 19, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -62978,28 +61440,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [46069] = 8, + [46123] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(1618), 1, + ACTIONS(1697), 1, + anon_sym_EQ, + ACTIONS(1743), 1, anon_sym_not, - ACTIONS(1626), 1, + ACTIONS(1749), 1, anon_sym_is, - ACTIONS(1713), 1, - anon_sym_EQ, - STATE(835), 1, + STATE(839), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1624), 2, + ACTIONS(1746), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1606), 6, + ACTIONS(1740), 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(1711), 7, + ACTIONS(1695), 7, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -63007,42 +61469,17 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym__semicolon, - [46106] = 4, + [46160] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(260), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(826), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - ACTIONS(293), 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, - [46135] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1021), 2, - anon_sym_STAR, - anon_sym_SLASH, - ACTIONS(1764), 3, + ACTIONS(804), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - ACTIONS(1016), 14, + ACTIONS(287), 14, anon_sym_DOT, anon_sym_LPAREN, anon_sym_GT_GT, @@ -63057,49 +61494,26 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP, anon_sym_CARET, anon_sym_LT_LT, - [46164] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1766), 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, [46189] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1771), 1, + ACTIONS(1635), 1, anon_sym_not, - ACTIONS(1777), 1, + ACTIONS(1643), 1, anon_sym_is, - STATE(841), 1, + STATE(844), 1, aux_sym_comparison_operator_repeat1, - ACTIONS(1774), 2, + ACTIONS(1641), 2, anon_sym_LT, anon_sym_GT, - ACTIONS(1768), 6, + ACTIONS(1623), 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(1715), 7, + ACTIONS(1711), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -63110,11 +61524,11 @@ static const uint16_t ts_small_parse_table[] = { [46223] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1780), 1, + ACTIONS(1752), 1, anon_sym_COMMA, STATE(832), 1, aux_sym__patterns_repeat1, - ACTIONS(1782), 16, + ACTIONS(1754), 16, anon_sym_COLON, anon_sym_in, anon_sym_EQ, @@ -63131,91 +61545,91 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_AMP_EQ, anon_sym_CARET_EQ, anon_sym_PIPE_EQ, - [46251] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1651), 1, - anon_sym_not, - ACTIONS(1659), 1, - anon_sym_is, - STATE(841), 1, - aux_sym_comparison_operator_repeat1, - ACTIONS(1657), 2, - anon_sym_LT, - anon_sym_GT, - ACTIONS(1639), 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(1711), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_and, - anon_sym_or, - [46285] = 13, + [46251] = 13, ACTIONS(3), 1, sym_comment, - ACTIONS(1453), 1, + ACTIONS(1389), 1, anon_sym_DOT, - ACTIONS(1455), 1, + ACTIONS(1391), 1, anon_sym_LPAREN, - ACTIONS(1471), 1, + ACTIONS(1407), 1, anon_sym_LBRACK, - ACTIONS(1509), 1, + ACTIONS(1465), 1, anon_sym_PIPE, - ACTIONS(1513), 1, + ACTIONS(1469), 1, anon_sym_STAR_STAR, - ACTIONS(1519), 1, + ACTIONS(1475), 1, anon_sym_AMP, - ACTIONS(1521), 1, + ACTIONS(1477), 1, anon_sym_CARET, - ACTIONS(1503), 2, + ACTIONS(1459), 2, anon_sym_STAR, anon_sym_SLASH, - ACTIONS(1505), 2, + ACTIONS(1461), 2, anon_sym_GT_GT, anon_sym_LT_LT, - ACTIONS(1511), 2, + ACTIONS(1467), 2, anon_sym_DASH, anon_sym_PLUS, - STATE(593), 2, + STATE(601), 2, sym_argument_list, sym_generator_expression, - ACTIONS(1515), 3, + ACTIONS(1471), 3, anon_sym_AT, anon_sym_PERCENT, anon_sym_SLASH_SLASH, + [46297] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1759), 1, + anon_sym_not, + ACTIONS(1765), 1, + anon_sym_is, + STATE(844), 1, + aux_sym_comparison_operator_repeat1, + ACTIONS(1762), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1756), 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(1695), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_and, + anon_sym_or, [46331] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1790), 1, + ACTIONS(1774), 1, anon_sym_COLON, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - STATE(1195), 1, + STATE(1274), 1, sym_parameter, - STATE(1436), 1, + STATE(1439), 1, sym_lambda_parameters, - STATE(1476), 1, + STATE(1458), 1, sym__parameters, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, @@ -63225,373 +61639,373 @@ static const uint16_t ts_small_parse_table[] = { [46374] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1796), 1, + ACTIONS(1780), 1, anon_sym_COLON, - STATE(1195), 1, + STATE(1274), 1, sym_parameter, - STATE(1370), 1, + STATE(1394), 1, sym_lambda_parameters, - STATE(1476), 1, + STATE(1458), 1, sym__parameters, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [46417] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1798), 1, - anon_sym_COMMA, - ACTIONS(1800), 1, - anon_sym_COLON, - ACTIONS(1802), 1, - anon_sym_EQ, - STATE(842), 1, - aux_sym__patterns_repeat1, - ACTIONS(1804), 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, - [46448] = 12, + [46417] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1806), 1, + ACTIONS(1782), 1, anon_sym_COLON, - STATE(1195), 1, + STATE(1274), 1, sym_parameter, - STATE(1393), 1, + STATE(1364), 1, sym_lambda_parameters, - STATE(1476), 1, + STATE(1458), 1, sym__parameters, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [46491] = 12, + [46460] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1808), 1, + ACTIONS(1784), 1, anon_sym_COLON, - STATE(1195), 1, + STATE(1274), 1, sym_parameter, - STATE(1356), 1, + STATE(1402), 1, sym_lambda_parameters, - STATE(1476), 1, + STATE(1458), 1, sym__parameters, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [46534] = 12, + [46503] = 12, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1810), 1, + ACTIONS(1786), 1, anon_sym_COLON, - STATE(1195), 1, + STATE(1274), 1, sym_parameter, - STATE(1467), 1, + STATE(1457), 1, sym_lambda_parameters, - STATE(1476), 1, + STATE(1458), 1, sym__parameters, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [46577] = 11, + [46546] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1786), 1, - anon_sym_LPAREN, ACTIONS(1788), 1, - anon_sym_STAR, + anon_sym_COMMA, + ACTIONS(1790), 1, + anon_sym_COLON, ACTIONS(1792), 1, - anon_sym_STAR_STAR, - ACTIONS(1794), 1, - anon_sym_SLASH, - ACTIONS(1812), 1, - sym_identifier, - ACTIONS(1814), 1, - anon_sym_RPAREN, - STATE(1248), 1, - sym_parameter, - STATE(1377), 1, - sym__parameters, - STATE(1255), 2, - sym_list_splat_pattern, - sym_dictionary_splat_pattern, - STATE(1204), 6, - sym_tuple_pattern, - sym_default_parameter, - sym_typed_default_parameter, - sym_typed_parameter, - sym_positional_separator, - sym_keyword_separator, - [46617] = 14, + anon_sym_EQ, + STATE(842), 1, + aux_sym__patterns_repeat1, + ACTIONS(1794), 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, + [46577] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1816), 1, + ACTIONS(1796), 1, sym_identifier, - ACTIONS(1818), 1, + ACTIONS(1798), 1, anon_sym_RBRACE, - ACTIONS(1820), 1, + ACTIONS(1800), 1, anon_sym_STAR_STAR, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1101), 1, + STATE(1134), 1, sym_string, - STATE(1287), 1, + STATE(1331), 1, sym_match_double_star_pattern, - STATE(1336), 1, + STATE(1332), 1, sym_match_key_value_pattern, - STATE(1477), 2, + STATE(1358), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - [46663] = 14, + [46623] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1816), 1, + ACTIONS(1796), 1, sym_identifier, - ACTIONS(1820), 1, + ACTIONS(1800), 1, anon_sym_STAR_STAR, - ACTIONS(1822), 1, + ACTIONS(1802), 1, anon_sym_RBRACE, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1101), 1, + STATE(1134), 1, sym_string, - STATE(1232), 1, + STATE(1173), 1, sym_match_key_value_pattern, - STATE(1323), 1, + STATE(1345), 1, sym_match_double_star_pattern, - STATE(1477), 2, + STATE(1358), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - [46709] = 14, + [46669] = 14, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1816), 1, + ACTIONS(1796), 1, sym_identifier, - ACTIONS(1820), 1, + ACTIONS(1800), 1, anon_sym_STAR_STAR, - ACTIONS(1824), 1, + ACTIONS(1804), 1, anon_sym_RBRACE, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1101), 1, + STATE(1134), 1, sym_string, - STATE(1336), 1, - sym_match_key_value_pattern, - STATE(1351), 1, + STATE(1284), 1, sym_match_double_star_pattern, - STATE(1477), 2, + STATE(1332), 1, + sym_match_key_value_pattern, + STATE(1358), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, - [46755] = 4, + [46715] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1800), 1, - anon_sym_COLON, - ACTIONS(1802), 1, - anon_sym_EQ, - ACTIONS(1804), 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, - [46780] = 10, + ACTIONS(1770), 1, + anon_sym_LPAREN, + ACTIONS(1772), 1, + anon_sym_STAR, + ACTIONS(1776), 1, + anon_sym_STAR_STAR, + ACTIONS(1778), 1, + anon_sym_SLASH, + ACTIONS(1806), 1, + sym_identifier, + ACTIONS(1808), 1, + anon_sym_RPAREN, + STATE(1203), 1, + sym_parameter, + STATE(1407), 1, + sym__parameters, + STATE(1184), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1273), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, + [46755] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1826), 1, + ACTIONS(1810), 1, anon_sym_COLON, - STATE(1192), 1, + STATE(1261), 1, sym_parameter, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [46817] = 10, + [46792] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1812), 1, + ACTIONS(1806), 1, sym_identifier, - ACTIONS(1826), 1, + ACTIONS(1810), 1, anon_sym_RPAREN, - STATE(1192), 1, + STATE(1261), 1, sym_parameter, - STATE(1255), 2, + STATE(1184), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, + [46829] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1790), 1, + anon_sym_COLON, + ACTIONS(1792), 1, + anon_sym_EQ, + ACTIONS(1794), 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, [46854] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, + ACTIONS(1768), 1, sym_identifier, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1828), 1, + ACTIONS(1812), 1, anon_sym_COLON, - STATE(1192), 1, + STATE(1261), 1, sym_parameter, - STATE(1295), 2, + STATE(1292), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, @@ -63601,24 +62015,24 @@ static const uint16_t ts_small_parse_table[] = { [46891] = 10, ACTIONS(3), 1, sym_comment, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1812), 1, + ACTIONS(1806), 1, sym_identifier, - ACTIONS(1828), 1, + ACTIONS(1812), 1, anon_sym_RPAREN, - STATE(1192), 1, + STATE(1261), 1, sym_parameter, - STATE(1255), 2, + STATE(1184), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, @@ -63628,9 +62042,9 @@ static const uint16_t ts_small_parse_table[] = { [46928] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1832), 1, + ACTIONS(1816), 1, anon_sym_as, - ACTIONS(1830), 13, + ACTIONS(1814), 13, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -63647,59 +62061,34 @@ static const uint16_t ts_small_parse_table[] = { [46950] = 9, ACTIONS(3), 1, sym_comment, - ACTIONS(1784), 1, - sym_identifier, - ACTIONS(1786), 1, - anon_sym_LPAREN, - ACTIONS(1788), 1, - anon_sym_STAR, - ACTIONS(1792), 1, - anon_sym_STAR_STAR, - ACTIONS(1794), 1, - anon_sym_SLASH, - STATE(1192), 1, - sym_parameter, - STATE(1295), 2, - sym_list_splat_pattern, - sym_dictionary_splat_pattern, - STATE(1204), 6, - sym_tuple_pattern, - sym_default_parameter, - sym_typed_default_parameter, - sym_typed_parameter, - sym_positional_separator, - sym_keyword_separator, - [46984] = 9, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1786), 1, + ACTIONS(1770), 1, anon_sym_LPAREN, - ACTIONS(1788), 1, + ACTIONS(1772), 1, anon_sym_STAR, - ACTIONS(1792), 1, + ACTIONS(1776), 1, anon_sym_STAR_STAR, - ACTIONS(1794), 1, + ACTIONS(1778), 1, anon_sym_SLASH, - ACTIONS(1812), 1, + ACTIONS(1806), 1, sym_identifier, - STATE(1192), 1, + STATE(1261), 1, sym_parameter, - STATE(1255), 2, + STATE(1184), 2, sym_list_splat_pattern, sym_dictionary_splat_pattern, - STATE(1204), 6, + STATE(1273), 6, sym_tuple_pattern, sym_default_parameter, sym_typed_default_parameter, sym_typed_parameter, sym_positional_separator, sym_keyword_separator, - [47018] = 3, + [46984] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1459), 1, + ACTIONS(1395), 1, anon_sym_as, - ACTIONS(1457), 13, + ACTIONS(1393), 13, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -63713,40 +62102,65 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym_type_conversion, + [47006] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1768), 1, + sym_identifier, + ACTIONS(1770), 1, + anon_sym_LPAREN, + ACTIONS(1772), 1, + anon_sym_STAR, + ACTIONS(1776), 1, + anon_sym_STAR_STAR, + ACTIONS(1778), 1, + anon_sym_SLASH, + STATE(1261), 1, + sym_parameter, + STATE(1292), 2, + sym_list_splat_pattern, + sym_dictionary_splat_pattern, + STATE(1273), 6, + sym_tuple_pattern, + sym_default_parameter, + sym_typed_default_parameter, + sym_typed_parameter, + sym_positional_separator, + sym_keyword_separator, [47040] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, + ACTIONS(299), 1, sym__string_start, - ACTIONS(1671), 1, + ACTIONS(1655), 1, anon_sym_DASH, - ACTIONS(1679), 1, + ACTIONS(1663), 1, sym_integer, - ACTIONS(1681), 1, + ACTIONS(1665), 1, sym_float, - ACTIONS(1816), 1, + ACTIONS(1796), 1, sym_identifier, - STATE(942), 1, + STATE(930), 1, sym_concatenated_string, - STATE(1101), 1, + STATE(1134), 1, sym_string, - STATE(1336), 1, + STATE(1332), 1, sym_match_key_value_pattern, - STATE(1477), 2, + STATE(1358), 2, sym_match_literal_pattern, sym_match_value_pattern, - ACTIONS(1683), 3, + ACTIONS(1667), 3, sym_true, sym_false, sym_none, [47077] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1836), 1, + ACTIONS(1820), 1, anon_sym_DOT, STATE(865), 1, aux_sym_match_value_pattern_repeat1, - ACTIONS(1834), 10, + ACTIONS(1818), 10, anon_sym_import, anon_sym_LPAREN, anon_sym_RPAREN, @@ -63757,12 +62171,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [47099] = 3, + [47099] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1839), 10, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1823), 9, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -63771,40 +62187,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACK, anon_sym_RBRACE, anon_sym_EQ, - anon_sym_or, sym_type_conversion, - [47118] = 12, + [47120] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(1829), 1, + anon_sym_DOT, + ACTIONS(1831), 1, + anon_sym_LPAREN, + STATE(865), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1833), 8, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(1845), 1, + anon_sym_as, anon_sym_if, - ACTIONS(1847), 1, anon_sym_COLON, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(1853), 1, + anon_sym_PIPE, + anon_sym_RBRACK, anon_sym_RBRACE, - ACTIONS(1855), 1, + [47143] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1837), 1, + anon_sym_as, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - STATE(916), 1, - sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1366), 1, - sym__comprehension_clauses, - [47155] = 12, + ACTIONS(1835), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [47168] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, ACTIONS(1843), 1, - anon_sym_COMMA, + anon_sym_or, ACTIONS(1845), 1, - anon_sym_if, + anon_sym_COMMA, ACTIONS(1847), 1, anon_sym_COLON, ACTIONS(1849), 1, @@ -63813,206 +62244,241 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, ACTIONS(1853), 1, anon_sym_RBRACE, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - STATE(916), 1, + STATE(922), 1, sym_for_in_clause, - STATE(1061), 1, + STATE(1048), 1, aux_sym__collection_elements_repeat1, - STATE(1439), 1, + STATE(1360), 1, sym__comprehension_clauses, - [47192] = 5, + [47205] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - ACTIONS(1861), 1, - anon_sym_LPAREN, - STATE(865), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1863), 8, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1855), 10, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, anon_sym_if, anon_sym_COLON, - anon_sym_PIPE, + anon_sym_else, anon_sym_RBRACK, anon_sym_RBRACE, - [47215] = 7, + anon_sym_EQ, + anon_sym_or, + sym_type_conversion, + [47224] = 6, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1867), 1, - anon_sym_COMMA, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - STATE(936), 1, - aux_sym_expression_list_repeat1, - ACTIONS(1865), 6, + ACTIONS(1859), 1, + anon_sym_as, + ACTIONS(1857), 7, anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_COLON, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [47242] = 4, + [47249] = 5, ACTIONS(3), 1, sym_comment, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1873), 9, + ACTIONS(1863), 1, + anon_sym_as, + ACTIONS(1861), 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, - [47263] = 5, + [47272] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1875), 8, - anon_sym_RPAREN, + ACTIONS(1845), 1, anon_sym_COMMA, + ACTIONS(1847), 1, anon_sym_COLON, - anon_sym_else, - anon_sym_RBRACK, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(1853), 1, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [47286] = 4, + STATE(922), 1, + sym_for_in_clause, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1382), 1, + sym__comprehension_clauses, + [47309] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1877), 9, - anon_sym_RPAREN, + ACTIONS(1845), 1, anon_sym_COMMA, - anon_sym_if, + ACTIONS(1847), 1, anon_sym_COLON, - anon_sym_else, - anon_sym_RBRACK, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(1853), 1, anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [47307] = 4, + STATE(922), 1, + sym_for_in_clause, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1371), 1, + sym__comprehension_clauses, + [47346] = 12, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1839), 9, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(1865), 1, anon_sym_RPAREN, + ACTIONS(1867), 1, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_else, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [47328] = 5, + ACTIONS(1870), 1, + anon_sym_as, + STATE(922), 1, + sym_for_in_clause, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1368), 1, + sym__comprehension_clauses, + [47383] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1879), 1, + ACTIONS(1874), 1, anon_sym_as, - ACTIONS(1873), 8, + ACTIONS(1872), 7, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, anon_sym_COLON, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [47351] = 5, + [47408] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1878), 1, + anon_sym_COMMA, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, + STATE(944), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1876), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [47435] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1881), 8, + ACTIONS(1855), 9, 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, - [47374] = 6, + [47456] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, - anon_sym_if, - ACTIONS(1855), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1883), 1, - anon_sym_as, - ACTIONS(1875), 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1857), 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, - [47399] = 5, + anon_sym_EQ, + sym_type_conversion, + [47479] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1885), 1, - anon_sym_as, - ACTIONS(1877), 8, + 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, - [47422] = 5, + anon_sym_EQ, + sym_type_conversion, + [47500] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1887), 8, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1872), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -64021,14 +62487,16 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [47445] = 4, + [47523] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1889), 1, + ACTIONS(1843), 1, + anon_sym_or, + ACTIONS(1882), 1, anon_sym_as, - ACTIONS(1839), 9, + ACTIONS(1823), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -64037,17 +62505,14 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - anon_sym_or, - [47466] = 5, + [47546] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1889), 1, + ACTIONS(1884), 1, anon_sym_as, - ACTIONS(1839), 8, + ACTIONS(1855), 9, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -64056,10 +62521,11 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [47489] = 2, + anon_sym_or, + [47567] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1834), 11, + ACTIONS(1818), 11, anon_sym_import, anon_sym_DOT, anon_sym_LPAREN, @@ -64071,16 +62537,15 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [47506] = 5, + [47584] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - ACTIONS(1891), 1, - anon_sym_LPAREN, - STATE(869), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1893), 8, + ACTIONS(606), 1, + sym__string_start, + STATE(658), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + ACTIONS(1886), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64089,59 +62554,34 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [47529] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1845), 1, - anon_sym_if, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1895), 1, - anon_sym_RPAREN, - ACTIONS(1897), 1, - anon_sym_COMMA, - ACTIONS(1900), 1, - anon_sym_as, - STATE(916), 1, - sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1362), 1, - sym__comprehension_clauses, - [47566] = 6, + [47605] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, - anon_sym_if, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1902), 1, + ACTIONS(1884), 1, anon_sym_as, - ACTIONS(1881), 7, + ACTIONS(1855), 8, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_if, anon_sym_COLON, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [47591] = 4, + [47628] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(618), 1, - sym__string_start, - STATE(643), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - ACTIONS(1904), 8, + ACTIONS(1829), 1, + anon_sym_DOT, + ACTIONS(1888), 1, + anon_sym_LPAREN, + STATE(867), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1890), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64150,210 +62590,128 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [47612] = 6, + [47651] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, - anon_sym_if, - ACTIONS(1855), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1906), 1, - anon_sym_as, - ACTIONS(1887), 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1835), 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, - [47637] = 12, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1843), 1, - anon_sym_COMMA, - ACTIONS(1845), 1, - anon_sym_if, - ACTIONS(1847), 1, - anon_sym_COLON, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(1853), 1, - anon_sym_RBRACE, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - STATE(916), 1, - sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1455), 1, - sym__comprehension_clauses, + anon_sym_EQ, + sym_type_conversion, [47674] = 9, - ACTIONS(1908), 1, - anon_sym_LBRACE2, - ACTIONS(1912), 1, - sym__not_escape_sequence, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(1916), 1, - sym__string_end, - STATE(912), 1, - aux_sym_string_repeat1, - STATE(1009), 1, - aux_sym_string_content_repeat1, - STATE(1013), 1, - sym_string_content, - STATE(1020), 1, - sym_interpolation, - ACTIONS(1910), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [47704] = 9, - ACTIONS(1908), 1, + ACTIONS(1892), 1, anon_sym_LBRACE2, - ACTIONS(1912), 1, + ACTIONS(1896), 1, sym__not_escape_sequence, - ACTIONS(1914), 1, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1918), 1, + ACTIONS(1900), 1, sym__string_end, - STATE(912), 1, + STATE(908), 1, aux_sym_string_repeat1, - STATE(1009), 1, + STATE(983), 1, aux_sym_string_content_repeat1, - STATE(1013), 1, + STATE(1015), 1, sym_string_content, - STATE(1020), 1, + STATE(1027), 1, sym_interpolation, - ACTIONS(1910), 3, + ACTIONS(1894), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [47734] = 9, - ACTIONS(1908), 1, - anon_sym_LBRACE2, - ACTIONS(1912), 1, - sym__not_escape_sequence, - ACTIONS(1914), 1, + [47704] = 5, + ACTIONS(3), 1, sym_comment, - ACTIONS(1920), 1, - sym__string_end, - STATE(890), 1, - aux_sym_string_repeat1, - STATE(1009), 1, - aux_sym_string_content_repeat1, - STATE(1013), 1, - sym_string_content, - STATE(1020), 1, - sym_interpolation, - ACTIONS(1910), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [47764] = 9, - ACTIONS(1908), 1, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1902), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [47726] = 9, + ACTIONS(1892), 1, anon_sym_LBRACE2, - ACTIONS(1912), 1, + ACTIONS(1896), 1, sym__not_escape_sequence, - ACTIONS(1914), 1, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1922), 1, + ACTIONS(1904), 1, sym__string_end, - STATE(889), 1, + STATE(895), 1, aux_sym_string_repeat1, - STATE(1009), 1, + STATE(983), 1, aux_sym_string_content_repeat1, - STATE(1013), 1, + STATE(1015), 1, sym_string_content, - STATE(1020), 1, + STATE(1027), 1, sym_interpolation, - ACTIONS(1910), 3, + ACTIONS(1894), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [47794] = 11, + [47756] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(1908), 2, + anon_sym_DASH, + anon_sym_PLUS, + ACTIONS(1906), 8, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(1845), 1, + anon_sym_as, anon_sym_if, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(1853), 1, + anon_sym_COLON, + anon_sym_PIPE, anon_sym_RBRACK, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - STATE(916), 1, - sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1374), 1, - sym__comprehension_clauses, - [47828] = 11, + anon_sym_RBRACE, + [47774] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, - anon_sym_COMMA, - ACTIONS(1845), 1, + ACTIONS(1839), 1, anon_sym_if, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1924), 1, - anon_sym_RPAREN, - STATE(916), 1, - sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1407), 1, - sym__comprehension_clauses, - [47862] = 11, - ACTIONS(3), 1, - sym_comment, ACTIONS(1845), 1, - anon_sym_if, + anon_sym_COMMA, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1926), 1, - anon_sym_RPAREN, - ACTIONS(1928), 1, - anon_sym_COMMA, - STATE(916), 1, + ACTIONS(1853), 1, + anon_sym_RBRACK, + STATE(922), 1, sym_for_in_clause, - STATE(1170), 1, - aux_sym_argument_list_repeat1, - STATE(1407), 1, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1386), 1, sym__comprehension_clauses, - [47896] = 3, + [47808] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1932), 2, + ACTIONS(1912), 2, anon_sym_DASH, anon_sym_PLUS, - ACTIONS(1930), 8, + ACTIONS(1910), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64362,48 +62720,60 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [47914] = 3, - ACTIONS(3), 1, + [47826] = 9, + ACTIONS(1892), 1, + anon_sym_LBRACE2, + ACTIONS(1896), 1, + sym__not_escape_sequence, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1936), 2, - anon_sym_DASH, - anon_sym_PLUS, - ACTIONS(1934), 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, - [47932] = 5, + ACTIONS(1914), 1, + sym__string_end, + STATE(899), 1, + aux_sym_string_repeat1, + STATE(983), 1, + aux_sym_string_content_repeat1, + STATE(1015), 1, + sym_string_content, + STATE(1027), 1, + sym_interpolation, + ACTIONS(1894), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [47856] = 11, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1938), 7, - anon_sym_RPAREN, + ACTIONS(1845), 1, anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [47954] = 5, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(1865), 1, + anon_sym_RPAREN, + STATE(922), 1, + sym_for_in_clause, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1368), 1, + sym__comprehension_clauses, + [47890] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1940), 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1916), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -64411,62 +62781,83 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [47976] = 11, + [47912] = 11, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, ACTIONS(1843), 1, - anon_sym_COMMA, + anon_sym_or, ACTIONS(1845), 1, - anon_sym_if, + anon_sym_COMMA, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1942), 1, - anon_sym_RPAREN, - STATE(916), 1, + ACTIONS(1853), 1, + anon_sym_RBRACK, + STATE(922), 1, sym_for_in_clause, - STATE(1061), 1, + STATE(1048), 1, aux_sym__collection_elements_repeat1, - STATE(1448), 1, + STATE(1428), 1, sym__comprehension_clauses, - [48010] = 11, + [47946] = 9, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(1918), 1, + anon_sym_LBRACE2, + ACTIONS(1924), 1, + sym__not_escape_sequence, + ACTIONS(1927), 1, + sym__string_end, + STATE(899), 1, + aux_sym_string_repeat1, + STATE(983), 1, + aux_sym_string_content_repeat1, + STATE(1015), 1, + sym_string_content, + STATE(1027), 1, + sym_interpolation, + ACTIONS(1921), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [47976] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, + ACTIONS(1839), 1, anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1944), 1, + ACTIONS(1929), 1, anon_sym_RPAREN, - ACTIONS(1946), 1, + ACTIONS(1931), 1, anon_sym_COMMA, - STATE(916), 1, + STATE(922), 1, sym_for_in_clause, - STATE(1155), 1, + STATE(1250), 1, aux_sym_argument_list_repeat1, - STATE(1448), 1, + STATE(1427), 1, sym__comprehension_clauses, - [48044] = 5, + [48010] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1948), 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1933), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -64474,125 +62865,169 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [48066] = 9, - ACTIONS(1908), 1, - anon_sym_LBRACE2, - ACTIONS(1912), 1, - sym__not_escape_sequence, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(1950), 1, - sym__string_end, - STATE(904), 1, - aux_sym_string_repeat1, - STATE(1009), 1, - aux_sym_string_content_repeat1, - STATE(1013), 1, - sym_string_content, - STATE(1020), 1, - sym_interpolation, - ACTIONS(1910), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, - [48096] = 9, - ACTIONS(1908), 1, + [48032] = 9, + ACTIONS(1892), 1, anon_sym_LBRACE2, - ACTIONS(1912), 1, + ACTIONS(1896), 1, sym__not_escape_sequence, - ACTIONS(1914), 1, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1952), 1, + ACTIONS(1935), 1, sym__string_end, - STATE(912), 1, + STATE(906), 1, aux_sym_string_repeat1, - STATE(1009), 1, + STATE(983), 1, aux_sym_string_content_repeat1, - STATE(1013), 1, + STATE(1015), 1, sym_string_content, - STATE(1020), 1, + STATE(1027), 1, sym_interpolation, - ACTIONS(1910), 3, + ACTIONS(1894), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [48126] = 11, + [48062] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, - anon_sym_COMMA, - ACTIONS(1845), 1, + ACTIONS(1839), 1, anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1895), 1, + ACTIONS(1937), 1, anon_sym_RPAREN, - STATE(916), 1, + ACTIONS(1939), 1, + anon_sym_COMMA, + STATE(922), 1, sym_for_in_clause, - STATE(1061), 1, - aux_sym__collection_elements_repeat1, - STATE(1362), 1, + STATE(1237), 1, + aux_sym_argument_list_repeat1, + STATE(1475), 1, sym__comprehension_clauses, - [48160] = 11, + [48096] = 11, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, + ACTIONS(1839), 1, anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1954), 1, + ACTIONS(1941), 1, anon_sym_RPAREN, - ACTIONS(1956), 1, + ACTIONS(1943), 1, anon_sym_COMMA, - STATE(916), 1, + STATE(922), 1, sym_for_in_clause, - STATE(1240), 1, + STATE(1253), 1, aux_sym_argument_list_repeat1, - STATE(1362), 1, + STATE(1368), 1, sym__comprehension_clauses, - [48194] = 9, - ACTIONS(1908), 1, - anon_sym_LBRACE2, - ACTIONS(1912), 1, - sym__not_escape_sequence, - ACTIONS(1914), 1, + [48130] = 11, + ACTIONS(3), 1, sym_comment, - ACTIONS(1958), 1, - sym__string_end, - STATE(909), 1, - aux_sym_string_repeat1, - STATE(1009), 1, - aux_sym_string_content_repeat1, - STATE(1013), 1, - sym_string_content, - STATE(1020), 1, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, + ACTIONS(1845), 1, + anon_sym_COMMA, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(1945), 1, + anon_sym_RPAREN, + STATE(922), 1, + sym_for_in_clause, + STATE(1048), 1, + aux_sym__collection_elements_repeat1, + STATE(1475), 1, + sym__comprehension_clauses, + [48164] = 9, + ACTIONS(1892), 1, + anon_sym_LBRACE2, + ACTIONS(1896), 1, + sym__not_escape_sequence, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(1947), 1, + sym__string_end, + STATE(899), 1, + aux_sym_string_repeat1, + STATE(983), 1, + aux_sym_string_content_repeat1, + STATE(1015), 1, + sym_string_content, + STATE(1027), 1, + sym_interpolation, + ACTIONS(1894), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [48194] = 9, + ACTIONS(1892), 1, + anon_sym_LBRACE2, + ACTIONS(1896), 1, + sym__not_escape_sequence, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(1949), 1, + sym__string_end, + STATE(910), 1, + aux_sym_string_repeat1, + STATE(983), 1, + aux_sym_string_content_repeat1, + STATE(1015), 1, + sym_string_content, + STATE(1027), 1, + sym_interpolation, + ACTIONS(1894), 3, + sym__string_content, + sym__escape_interpolation, + sym_escape_sequence, + [48224] = 9, + ACTIONS(1892), 1, + anon_sym_LBRACE2, + ACTIONS(1896), 1, + sym__not_escape_sequence, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(1951), 1, + sym__string_end, + STATE(899), 1, + aux_sym_string_repeat1, + STATE(983), 1, + aux_sym_string_content_repeat1, + STATE(1015), 1, + sym_string_content, + STATE(1027), 1, sym_interpolation, - ACTIONS(1910), 3, + ACTIONS(1894), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [48224] = 5, + [48254] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(1960), 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1953), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, @@ -64600,102 +63035,81 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [48246] = 9, - ACTIONS(1908), 1, + [48276] = 9, + ACTIONS(1892), 1, anon_sym_LBRACE2, - ACTIONS(1912), 1, + ACTIONS(1896), 1, sym__not_escape_sequence, - ACTIONS(1914), 1, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1962), 1, + ACTIONS(1955), 1, sym__string_end, - STATE(912), 1, + STATE(899), 1, aux_sym_string_repeat1, - STATE(1009), 1, + STATE(983), 1, aux_sym_string_content_repeat1, - STATE(1013), 1, + STATE(1015), 1, sym_string_content, - STATE(1020), 1, + STATE(1027), 1, sym_interpolation, - ACTIONS(1910), 3, + ACTIONS(1894), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [48276] = 11, + [48306] = 11, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, ACTIONS(1843), 1, - anon_sym_COMMA, + anon_sym_or, ACTIONS(1845), 1, - anon_sym_if, + anon_sym_COMMA, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, ACTIONS(1853), 1, anon_sym_RBRACK, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - STATE(916), 1, + STATE(922), 1, sym_for_in_clause, - STATE(1061), 1, + STATE(1048), 1, aux_sym__collection_elements_repeat1, - STATE(1445), 1, + STATE(1369), 1, sym__comprehension_clauses, - [48310] = 11, + [48340] = 11, ACTIONS(3), 1, sym_comment, + ACTIONS(1839), 1, + anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, ACTIONS(1843), 1, - anon_sym_COMMA, + anon_sym_or, ACTIONS(1845), 1, - anon_sym_if, + anon_sym_COMMA, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1853), 1, - anon_sym_RBRACK, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - STATE(916), 1, + ACTIONS(1957), 1, + anon_sym_RPAREN, + STATE(922), 1, sym_for_in_clause, - STATE(1061), 1, + STATE(1048), 1, aux_sym__collection_elements_repeat1, - STATE(1363), 1, + STATE(1427), 1, sym__comprehension_clauses, - [48344] = 9, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(1964), 1, - anon_sym_LBRACE2, - ACTIONS(1970), 1, - sym__not_escape_sequence, - ACTIONS(1973), 1, - sym__string_end, - STATE(912), 1, - aux_sym_string_repeat1, - STATE(1009), 1, - aux_sym_string_content_repeat1, - STATE(1013), 1, - sym_string_content, - STATE(1020), 1, - sym_interpolation, - ACTIONS(1967), 3, - sym__string_content, - sym__escape_interpolation, - sym_escape_sequence, [48374] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1975), 7, + ACTIONS(1959), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -64706,11 +63120,11 @@ static const uint16_t ts_small_parse_table[] = { [48393] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1979), 1, + ACTIONS(1963), 1, anon_sym_PIPE, - STATE(914), 1, + STATE(915), 1, aux_sym_match_or_pattern_repeat1, - ACTIONS(1977), 7, + ACTIONS(1961), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64721,11 +63135,26 @@ static const uint16_t ts_small_parse_table[] = { [48412] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1984), 1, + ACTIONS(1967), 1, + anon_sym_PIPE, + STATE(915), 1, + aux_sym_match_or_pattern_repeat1, + ACTIONS(1965), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48431] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1963), 1, anon_sym_PIPE, - STATE(917), 1, + STATE(914), 1, aux_sym_match_or_pattern_repeat1, - ACTIONS(1982), 7, + ACTIONS(1970), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64733,96 +63162,81 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [48431] = 6, + [48450] = 6, ACTIONS(3), 1, sym_comment, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1988), 1, + ACTIONS(1974), 1, anon_sym_if, - ACTIONS(1986), 3, + ACTIONS(1972), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(922), 3, + STATE(920), 3, sym_for_in_clause, sym_if_clause, aux_sym__comprehension_clauses_repeat1, - [48454] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1984), 1, - anon_sym_PIPE, - STATE(914), 1, - aux_sym_match_or_pattern_repeat1, - ACTIONS(1990), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, [48473] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1878), 1, anon_sym_COMMA, - ACTIONS(1869), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - STATE(936), 1, + STATE(944), 1, aux_sym_expression_list_repeat1, - ACTIONS(1992), 4, + ACTIONS(1976), 4, anon_sym_COLON, anon_sym_RBRACE, anon_sym_EQ, sym_type_conversion, - [48498] = 6, + [48498] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1996), 1, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, + ACTIONS(1959), 7, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_if, - ACTIONS(1999), 1, anon_sym_async, - ACTIONS(2002), 1, anon_sym_for, - ACTIONS(1994), 3, - anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(919), 3, - sym_for_in_clause, - sym_if_clause, - aux_sym__comprehension_clauses_repeat1, - [48521] = 4, + [48517] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(1975), 7, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(1980), 1, anon_sym_if, + ACTIONS(1983), 1, anon_sym_async, + ACTIONS(1986), 1, anon_sym_for, + ACTIONS(1978), 3, + anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, + STATE(920), 3, + sym_for_in_clause, + sym_if_clause, + aux_sym__comprehension_clauses_repeat1, [48540] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, + ACTIONS(1841), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(1843), 1, anon_sym_or, - ACTIONS(1975), 7, + ACTIONS(1959), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -64837,96 +63251,47 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(1988), 1, + ACTIONS(1974), 1, anon_sym_if, - ACTIONS(2005), 3, + ACTIONS(1989), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - STATE(919), 3, + STATE(917), 3, sym_for_in_clause, sym_if_clause, aux_sym__comprehension_clauses_repeat1, - [48582] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2007), 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, - [48596] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2009), 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, - [48610] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2013), 1, - anon_sym_COMMA, - STATE(925), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2011), 6, - anon_sym_RPAREN, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [48628] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2016), 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, - [48642] = 2, + [48582] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1830), 8, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(1855), 7, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_if, anon_sym_EQ, - anon_sym_and, anon_sym_or, sym__semicolon, - [48656] = 4, + [48598] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2020), 1, + ACTIONS(1995), 1, anon_sym_COMMA, - STATE(928), 1, + STATE(935), 1, aux_sym_for_in_clause_repeat1, - ACTIONS(2018), 6, + ACTIONS(1993), 6, anon_sym_RPAREN, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [48674] = 2, + [48616] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1977), 8, + ACTIONS(1997), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64935,10 +63300,27 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48688] = 2, + [48630] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(67), 1, + anon_sym_AT, + ACTIONS(1999), 1, + anon_sym_async, + ACTIONS(2001), 1, + anon_sym_def, + ACTIONS(2003), 1, + anon_sym_class, + STATE(489), 2, + sym_function_definition, + sym_class_definition, + STATE(1012), 2, + sym_decorator, + aux_sym_decorated_definition_repeat1, + [48654] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2023), 8, + ACTIONS(2005), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -64947,55 +63329,36 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48702] = 4, + [48668] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2027), 1, - anon_sym_COMMA, - STATE(963), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2025), 6, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, + ACTIONS(2007), 6, anon_sym_RPAREN, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [48720] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(67), 1, - anon_sym_AT, - ACTIONS(2029), 1, - anon_sym_async, - ACTIONS(2031), 1, - anon_sym_def, - ACTIONS(2033), 1, - anon_sym_class, - STATE(501), 2, - sym_function_definition, - sym_class_definition, - STATE(1019), 2, - sym_decorator, - aux_sym_decorated_definition_repeat1, - [48744] = 4, + [48686] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2037), 1, - anon_sym_COMMA, - STATE(925), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2035), 6, + ACTIONS(2009), 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, - [48762] = 2, + [48700] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2039), 8, + ACTIONS(1886), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65004,10 +63367,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48776] = 2, + [48714] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2041), 8, + ACTIONS(2011), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65016,24 +63379,25 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48790] = 4, + [48728] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2043), 1, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1872), 5, + sym__newline, + anon_sym_from, anon_sym_COMMA, - STATE(925), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2035), 6, - anon_sym_RPAREN, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, anon_sym_EQ, - sym_type_conversion, - [48808] = 2, + sym__semicolon, + [48748] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2045), 8, + ACTIONS(1965), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65042,38 +63406,51 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48822] = 4, + [48762] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1861), 6, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [48780] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2049), 1, + ACTIONS(2019), 1, anon_sym_COMMA, - STATE(928), 1, + STATE(935), 1, aux_sym_for_in_clause_repeat1, - ACTIONS(2047), 6, + ACTIONS(2017), 6, anon_sym_RPAREN, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [48840] = 4, + [48798] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(1873), 6, - sym__newline, - anon_sym_from, + ACTIONS(2024), 1, + anon_sym_PIPE, + ACTIONS(2022), 7, + anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_EQ, - sym__semicolon, - [48858] = 2, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [48814] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1457), 8, + ACTIONS(1393), 8, sym__newline, anon_sym_from, anon_sym_COMMA, @@ -65082,24 +63459,22 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_and, anon_sym_or, sym__semicolon, - [48872] = 4, + [48828] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1855), 1, - anon_sym_and, - ACTIONS(1857), 1, - anon_sym_or, - ACTIONS(2055), 6, + ACTIONS(2026), 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, - [48890] = 2, + [48842] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1904), 8, + ACTIONS(2028), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65108,10 +63483,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48904] = 2, + [48856] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2057), 8, + ACTIONS(2030), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65120,51 +63495,66 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48918] = 2, + [48870] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2059), 8, - anon_sym_RPAREN, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1855), 6, + sym__newline, + anon_sym_from, anon_sym_COMMA, - anon_sym_as, anon_sym_if, + anon_sym_EQ, + sym__semicolon, + [48888] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2034), 1, + anon_sym_COMMA, + STATE(942), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2032), 6, + anon_sym_RPAREN, anon_sym_COLON, - anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48932] = 4, + anon_sym_EQ, + sym_type_conversion, + [48906] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2063), 1, + ACTIONS(2039), 1, anon_sym_COMMA, - STATE(938), 1, + STATE(952), 1, aux_sym_for_in_clause_repeat1, - ACTIONS(2061), 6, + ACTIONS(2037), 6, anon_sym_RPAREN, anon_sym_if, anon_sym_async, anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [48950] = 5, + [48924] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(1875), 5, - sym__newline, - anon_sym_from, + ACTIONS(2043), 1, anon_sym_COMMA, + STATE(942), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2041), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, anon_sym_EQ, - sym__semicolon, - [48970] = 2, + sym_type_conversion, + [48942] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2067), 8, + ACTIONS(2045), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65173,10 +63563,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48984] = 2, + [48956] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2069), 8, + ACTIONS(2047), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65185,10 +63575,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [48998] = 2, + [48970] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2071), 8, + ACTIONS(2049), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65197,10 +63587,28 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49012] = 2, + [48984] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2051), 1, + anon_sym_from, + ACTIONS(2053), 1, + anon_sym_COMMA, + STATE(1059), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2055), 2, + sym__newline, + sym__semicolon, + [49010] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2073), 8, + ACTIONS(2057), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65209,37 +63617,68 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49026] = 2, + [49024] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2059), 1, + anon_sym_COMMA, + STATE(942), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2041), 6, + anon_sym_RPAREN, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49042] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2075), 8, + ACTIONS(1829), 1, + anon_sym_DOT, + ACTIONS(1888), 1, + anon_sym_LPAREN, + ACTIONS(2061), 1, + anon_sym_EQ, + STATE(867), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1890), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - anon_sym_if, - anon_sym_COLON, anon_sym_PIPE, + [49064] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2065), 1, + anon_sym_COMMA, + STATE(935), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2063), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [49040] = 5, + [49082] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(1887), 5, + ACTIONS(1823), 6, sym__newline, anon_sym_from, anon_sym_COMMA, + anon_sym_if, anon_sym_EQ, sym__semicolon, - [49060] = 2, + [49100] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2077), 8, + ACTIONS(2067), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65248,10 +63687,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49074] = 2, + [49114] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2079), 8, + ACTIONS(2069), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65260,10 +63699,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49088] = 2, + [49128] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2081), 8, + ACTIONS(2071), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65272,89 +63711,93 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49102] = 8, + [49142] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2083), 1, + ACTIONS(1814), 8, + sym__newline, anon_sym_from, - ACTIONS(2085), 1, anon_sym_COMMA, - STATE(1079), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2087), 2, - sym__newline, + anon_sym_if, + anon_sym_EQ, + anon_sym_and, + anon_sym_or, sym__semicolon, - [49128] = 7, + [49156] = 7, ACTIONS(3), 1, sym_comment, ACTIONS(67), 1, anon_sym_AT, - ACTIONS(2089), 1, + ACTIONS(2073), 1, anon_sym_async, - ACTIONS(2091), 1, + ACTIONS(2075), 1, anon_sym_def, - ACTIONS(2093), 1, + ACTIONS(2077), 1, anon_sym_class, - STATE(469), 2, + STATE(525), 2, sym_function_definition, sym_class_definition, - STATE(1019), 2, + STATE(1012), 2, sym_decorator, aux_sym_decorated_definition_repeat1, - [49152] = 4, + [49180] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(1877), 6, - sym__newline, - anon_sym_from, + ACTIONS(2079), 8, + anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_as, anon_sym_if, - anon_sym_EQ, - sym__semicolon, - [49170] = 5, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49194] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1881), 5, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1835), 5, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_EQ, sym__semicolon, - [49190] = 5, + [49214] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2081), 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, + [49228] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1960), 5, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1857), 5, sym__newline, anon_sym_from, anon_sym_COMMA, anon_sym_EQ, sym__semicolon, - [49210] = 2, + [49248] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2095), 8, + ACTIONS(2083), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65363,10 +63806,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49224] = 2, + [49262] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2097), 8, + ACTIONS(2085), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65375,24 +63818,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49238] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2101), 1, - anon_sym_COMMA, - STATE(928), 1, - aux_sym_for_in_clause_repeat1, - ACTIONS(2099), 6, - anon_sym_RPAREN, - anon_sym_if, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACK, - anon_sym_RBRACE, - [49256] = 2, + [49276] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2103), 8, + ACTIONS(2087), 8, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65401,207 +63830,172 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_PIPE, anon_sym_RBRACK, anon_sym_RBRACE, - [49270] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - ACTIONS(1891), 1, - anon_sym_LPAREN, - ACTIONS(2105), 1, - anon_sym_EQ, - STATE(869), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1893), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_PIPE, - [49292] = 3, + [49290] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1839), 7, - sym__newline, - anon_sym_from, - anon_sym_COMMA, + ACTIONS(2013), 1, anon_sym_if, - anon_sym_EQ, - anon_sym_or, - sym__semicolon, - [49308] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(1839), 6, + ACTIONS(1902), 5, sym__newline, anon_sym_from, anon_sym_COMMA, - anon_sym_if, anon_sym_EQ, sym__semicolon, - [49326] = 3, + [49310] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2109), 1, - anon_sym_PIPE, - ACTIONS(2107), 7, + ACTIONS(2089), 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, - [49342] = 5, + [49324] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2111), 1, - sym_identifier, - ACTIONS(2113), 1, - anon_sym_STAR, - ACTIONS(2115), 1, - anon_sym_STAR_STAR, - STATE(1277), 4, - sym_typevar_parameter, - sym_typevartuple_parameter, - sym_paramspec_parameter, - sym__type_parameter, - [49361] = 3, + ACTIONS(2093), 1, + anon_sym_COMMA, + STATE(924), 1, + aux_sym_for_in_clause_repeat1, + ACTIONS(2091), 6, + anon_sym_RPAREN, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49342] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(1839), 6, + ACTIONS(2099), 1, + anon_sym_or, + ACTIONS(1872), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - anon_sym_if, anon_sym_COLON, - anon_sym_or, - [49376] = 4, + [49361] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2119), 1, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(1839), 5, - anon_sym_RPAREN, + ACTIONS(2101), 1, anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - [49393] = 3, + STATE(1086), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2103), 2, + sym__newline, + sym__semicolon, + [49384] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(2123), 1, - anon_sym_as, - ACTIONS(2121), 6, - anon_sym_RPAREN, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(2105), 1, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, - anon_sym_RBRACK, + ACTIONS(2107), 1, anon_sym_RBRACE, - [49408] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2125), 1, - anon_sym_except, - ACTIONS(2127), 1, - anon_sym_finally, - STATE(532), 1, - sym_finally_clause, - STATE(231), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - STATE(232), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - [49429] = 7, + STATE(922), 1, + sym_for_in_clause, + STATE(1223), 1, + aux_sym_dictionary_repeat1, + STATE(1446), 1, + sym__comprehension_clauses, + [49409] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2085), 1, - anon_sym_COMMA, - STATE(1079), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2129), 2, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1916), 4, sym__newline, + anon_sym_from, + anon_sym_COMMA, sym__semicolon, - [49452] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2125), 1, - anon_sym_except, - ACTIONS(2127), 1, - anon_sym_finally, - STATE(544), 1, - sym_finally_clause, - STATE(223), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - STATE(233), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - [49473] = 5, + [49428] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, - anon_sym_and, - ACTIONS(2119), 1, - anon_sym_or, - ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(1881), 4, + ACTIONS(1814), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, + anon_sym_if, anon_sym_COLON, - [49492] = 7, + anon_sym_and, + anon_sym_or, + [49441] = 8, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1849), 1, + anon_sym_async, + ACTIONS(1851), 1, + anon_sym_for, + ACTIONS(2109), 1, + anon_sym_COMMA, + ACTIONS(2111), 1, + anon_sym_RBRACE, + STATE(922), 1, + sym_for_in_clause, + STATE(1163), 1, + aux_sym_dictionary_repeat1, + STATE(1354), 1, + sym__comprehension_clauses, + [49466] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2133), 1, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2053), 1, anon_sym_COMMA, - STATE(1098), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2135), 2, + STATE(1059), 1, + aux_sym_expression_list_repeat1, + ACTIONS(1876), 2, sym__newline, sym__semicolon, - [49515] = 5, + [49489] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1938), 4, - sym__newline, - anon_sym_from, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2053), 1, anon_sym_COMMA, + STATE(1059), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2113), 2, + sym__newline, sym__semicolon, - [49534] = 2, + [49512] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2137), 7, + ACTIONS(2115), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -65609,40 +64003,10 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [49547] = 7, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2133), 1, - anon_sym_COMMA, - STATE(1116), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2139), 2, - sym__newline, - sym__semicolon, - [49570] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2111), 1, - sym_identifier, - ACTIONS(2113), 1, - anon_sym_STAR, - ACTIONS(2115), 1, - anon_sym_STAR_STAR, - STATE(1347), 4, - sym_typevar_parameter, - sym_typevartuple_parameter, - sym_paramspec_parameter, - sym__type_parameter, - [49589] = 2, + [49525] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1457), 7, + ACTIONS(1393), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, @@ -65650,52 +64014,55 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_COLON, anon_sym_and, anon_sym_or, - [49602] = 5, + [49538] = 6, ACTIONS(3), 1, sym_comment, ACTIONS(2117), 1, - anon_sym_and, + anon_sym_except, ACTIONS(2119), 1, - anon_sym_or, - ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(1887), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_COLON, - [49621] = 5, + anon_sym_finally, + STATE(469), 1, + sym_finally_clause, + STATE(227), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(233), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [49559] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1845), 1, + ACTIONS(2095), 1, anon_sym_if, - ACTIONS(1855), 1, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(1857), 1, + ACTIONS(2099), 1, anon_sym_or, - ACTIONS(2141), 4, + ACTIONS(2123), 1, + anon_sym_as, + ACTIONS(2121), 3, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_async, - anon_sym_for, - anon_sym_RBRACE, - [49640] = 5, + anon_sym_COLON, + [49580] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2143), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [49659] = 2, + ACTIONS(2125), 1, + anon_sym_except, + ACTIONS(2127), 1, + anon_sym_finally, + STATE(509), 1, + sym_finally_clause, + STATE(225), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(231), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [49601] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2018), 7, + ACTIONS(2129), 7, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, @@ -65703,4168 +64070,4215 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_for, anon_sym_RBRACK, anon_sym_RBRACE, - [49672] = 6, - ACTIONS(3), 1, + [49614] = 6, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2117), 1, - anon_sym_and, - ACTIONS(2119), 1, - anon_sym_or, ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(2147), 1, - anon_sym_as, - ACTIONS(2145), 3, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - [49693] = 6, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2149), 1, anon_sym_LBRACE2, - ACTIONS(2154), 1, + ACTIONS(2135), 1, sym__not_escape_sequence, - ACTIONS(2157), 1, + ACTIONS(2137), 1, sym__string_end, - STATE(988), 1, + STATE(1004), 1, aux_sym_string_content_repeat1, - ACTIONS(2151), 3, + ACTIONS(2133), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [49714] = 2, + [49635] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2159), 7, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(1839), 1, anon_sym_if, + ACTIONS(1841), 1, + anon_sym_and, + ACTIONS(1843), 1, + anon_sym_or, + ACTIONS(2139), 4, + anon_sym_COMMA, anon_sym_async, anon_sym_for, - anon_sym_RBRACK, anon_sym_RBRACE, - [49727] = 8, + [49654] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(1933), 4, + sym__newline, + anon_sym_from, + anon_sym_COMMA, + sym__semicolon, + [49673] = 8, ACTIONS(3), 1, sym_comment, ACTIONS(1849), 1, anon_sym_async, ACTIONS(1851), 1, anon_sym_for, - ACTIONS(2161), 1, + ACTIONS(2141), 1, anon_sym_COMMA, - ACTIONS(2163), 1, + ACTIONS(2143), 1, anon_sym_RBRACE, - STATE(916), 1, + STATE(922), 1, sym_for_in_clause, - STATE(1265), 1, + STATE(1215), 1, aux_sym_dictionary_repeat1, - STATE(1457), 1, + STATE(1372), 1, sym__comprehension_clauses, - [49752] = 8, + [49698] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, - sym_identifier, - ACTIONS(2167), 1, - anon_sym_LPAREN, - ACTIONS(2169), 1, - anon_sym_STAR, - STATE(1055), 1, - sym_dotted_name, - STATE(1117), 1, - sym_aliased_import, - STATE(1293), 1, - sym__import_list, - STATE(1297), 1, - sym_wildcard_import, - [49777] = 6, + ACTIONS(2017), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, + anon_sym_async, + anon_sym_for, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49711] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2171), 1, - anon_sym_except, - ACTIONS(2173), 1, - anon_sym_finally, - STATE(460), 1, - sym_finally_clause, - STATE(229), 2, - sym_except_group_clause, - aux_sym_try_statement_repeat2, - STATE(234), 2, - sym_except_clause, - aux_sym_try_statement_repeat1, - [49798] = 7, + ACTIONS(1876), 7, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49724] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2085), 1, + ACTIONS(2147), 1, + anon_sym_as, + ACTIONS(2145), 6, + anon_sym_RPAREN, anon_sym_COMMA, - STATE(1079), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2175), 2, - sym__newline, - sym__semicolon, - [49821] = 7, + anon_sym_if, + anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + [49739] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2099), 1, anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2085), 1, + ACTIONS(1857), 4, + anon_sym_RPAREN, anon_sym_COMMA, - STATE(1079), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2177), 2, - sym__newline, - sym__semicolon, - [49844] = 5, + anon_sym_as, + anon_sym_COLON, + [49758] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2179), 4, - anon_sym_RPAREN, + ACTIONS(2101), 1, anon_sym_COMMA, - anon_sym_COLON, - anon_sym_EQ, - [49863] = 8, + STATE(1089), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2149), 2, + sym__newline, + sym__semicolon, + [49781] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(2181), 1, - anon_sym_COMMA, - ACTIONS(2183), 1, - anon_sym_RBRACE, - STATE(916), 1, - sym_for_in_clause, - STATE(1190), 1, - aux_sym_dictionary_repeat1, - STATE(1360), 1, - sym__comprehension_clauses, - [49888] = 7, + ACTIONS(2151), 1, + sym_identifier, + ACTIONS(2153), 1, + anon_sym_STAR, + ACTIONS(2155), 1, + anon_sym_STAR_STAR, + STATE(1334), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [49800] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2185), 1, + ACTIONS(2151), 1, sym_identifier, - ACTIONS(2187), 1, + ACTIONS(2153), 1, + anon_sym_STAR, + ACTIONS(2155), 1, + anon_sym_STAR_STAR, + STATE(1278), 4, + sym_typevar_parameter, + sym_typevartuple_parameter, + sym_paramspec_parameter, + sym__type_parameter, + [49819] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2157), 1, + sym_identifier, + ACTIONS(2159), 1, anon_sym_DOT, - ACTIONS(2189), 1, + ACTIONS(2161), 1, anon_sym___future__, - STATE(1108), 1, + STATE(1124), 1, aux_sym_import_prefix_repeat1, - STATE(1173), 1, + STATE(1254), 1, sym_import_prefix, - STATE(1388), 2, + STATE(1387), 2, sym_relative_import, sym_dotted_name, - [49911] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(1948), 4, - sym__newline, - anon_sym_from, - anon_sym_COMMA, - sym__semicolon, - [49930] = 7, + [49842] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(2191), 1, - anon_sym_COMMA, - STATE(1097), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2193), 2, - sym__newline, - sym__semicolon, - [49953] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1865), 7, + ACTIONS(2163), 4, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, anon_sym_EQ, - sym_type_conversion, - [49966] = 4, + [49861] = 6, ACTIONS(3), 1, sym_comment, ACTIONS(2117), 1, - anon_sym_and, + anon_sym_except, ACTIONS(2119), 1, - anon_sym_or, - ACTIONS(1873), 5, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - [49983] = 6, + anon_sym_finally, + STATE(497), 1, + sym_finally_clause, + STATE(223), 2, + sym_except_clause, + aux_sym_try_statement_repeat1, + STATE(232), 2, + sym_except_group_clause, + aux_sym_try_statement_repeat2, + [49882] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2171), 1, + ACTIONS(2125), 1, anon_sym_except, - ACTIONS(2173), 1, + ACTIONS(2127), 1, anon_sym_finally, - STATE(475), 1, + STATE(514), 1, sym_finally_clause, - STATE(226), 2, + STATE(224), 2, sym_except_clause, aux_sym_try_statement_repeat1, - STATE(227), 2, + STATE(236), 2, sym_except_group_clause, aux_sym_try_statement_repeat2, - [50004] = 2, + [49903] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1830), 7, + ACTIONS(1916), 7, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_as, - anon_sym_if, anon_sym_COLON, + anon_sym_RBRACK, + anon_sym_RBRACE, + anon_sym_EQ, + sym_type_conversion, + [49916] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, anon_sym_and, + ACTIONS(2099), 1, anon_sym_or, - [50017] = 7, + ACTIONS(1835), 4, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_as, + anon_sym_COLON, + [49935] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2085), 1, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2053), 1, anon_sym_COMMA, - STATE(1079), 1, + STATE(1059), 1, aux_sym_expression_list_repeat1, - ACTIONS(2195), 2, + ACTIONS(2165), 2, sym__newline, sym__semicolon, - [50040] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1948), 7, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_RBRACK, - anon_sym_RBRACE, - anon_sym_EQ, - sym_type_conversion, - [50053] = 5, + [49958] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(2119), 1, + ACTIONS(2099), 1, anon_sym_or, - ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(1875), 4, + ACTIONS(1823), 5, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, + anon_sym_if, anon_sym_COLON, - [50072] = 4, + [49975] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2119), 1, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(1877), 5, - anon_sym_RPAREN, + ACTIONS(2053), 1, anon_sym_COMMA, - anon_sym_as, - anon_sym_if, - anon_sym_COLON, - [50089] = 7, + STATE(1059), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2167), 2, + sym__newline, + sym__semicolon, + [49998] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2085), 1, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2169), 1, anon_sym_COMMA, - STATE(1079), 1, - aux_sym_expression_list_repeat1, - ACTIONS(1865), 2, + STATE(1103), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2171), 2, sym__newline, sym__semicolon, - [50112] = 6, - ACTIONS(1914), 1, + [50021] = 6, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2197), 1, + ACTIONS(2173), 1, anon_sym_LBRACE2, - ACTIONS(2201), 1, + ACTIONS(2178), 1, sym__not_escape_sequence, - ACTIONS(2203), 1, + ACTIONS(2181), 1, sym__string_end, - STATE(988), 1, + STATE(1004), 1, aux_sym_string_content_repeat1, - ACTIONS(2199), 3, + ACTIONS(2175), 3, sym__string_content, sym__escape_interpolation, sym_escape_sequence, - [50133] = 8, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1849), 1, - anon_sym_async, - ACTIONS(1851), 1, - anon_sym_for, - ACTIONS(2205), 1, - anon_sym_COMMA, - ACTIONS(2207), 1, - anon_sym_RBRACE, - STATE(916), 1, - sym_for_in_clause, - STATE(1230), 1, - aux_sym_dictionary_repeat1, - STATE(1367), 1, - sym__comprehension_clauses, - [50158] = 7, + [50042] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(2099), 1, + anon_sym_or, + ACTIONS(1861), 5, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(1869), 1, + anon_sym_as, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2209), 1, anon_sym_COLON, - STATE(936), 1, - aux_sym_expression_list_repeat1, - [50180] = 6, + [50059] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(2119), 1, - anon_sym_or, - ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(2213), 1, - anon_sym_COLON, - ACTIONS(2211), 2, + ACTIONS(1855), 6, + anon_sym_RPAREN, anon_sym_COMMA, anon_sym_as, - [50200] = 3, - ACTIONS(1914), 1, + anon_sym_if, + anon_sym_COLON, + anon_sym_or, + [50074] = 8, + ACTIONS(3), 1, sym_comment, - ACTIONS(2215), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2217), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [50214] = 7, + ACTIONS(2183), 1, + sym_identifier, + ACTIONS(2185), 1, + anon_sym_LPAREN, + ACTIONS(2187), 1, + anon_sym_STAR, + STATE(1049), 1, + sym_dotted_name, + STATE(1142), 1, + sym_aliased_import, + STATE(1326), 1, + sym_wildcard_import, + STATE(1327), 1, + sym__import_list, + [50099] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(2099), 1, + anon_sym_or, + ACTIONS(1855), 5, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(1869), 1, + anon_sym_as, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2219), 1, anon_sym_COLON, - STATE(936), 1, - aux_sym_expression_list_repeat1, - [50236] = 2, + [50116] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2221), 6, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2189), 4, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [50248] = 5, + [50135] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2223), 3, - sym__newline, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2053), 1, anon_sym_COMMA, - sym__semicolon, - [50266] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2225), 1, - anon_sym_DOT, - STATE(1029), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(2227), 4, + STATE(1059), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2191), 2, sym__newline, - anon_sym_COMMA, - anon_sym_as, sym__semicolon, - [50282] = 5, + [50158] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(2229), 3, - sym__newline, + ACTIONS(2193), 3, + anon_sym_RPAREN, anon_sym_COMMA, - sym__semicolon, - [50300] = 4, + anon_sym_COLON, + [50176] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2233), 1, + ACTIONS(2197), 1, anon_sym_AT, - STATE(1019), 2, + STATE(1012), 2, sym_decorator, aux_sym_decorated_definition_repeat1, - ACTIONS(2231), 3, + ACTIONS(2195), 3, anon_sym_async, anon_sym_def, anon_sym_class, - [50316] = 3, - ACTIONS(1914), 1, + [50192] = 4, + ACTIONS(3), 1, sym_comment, - ACTIONS(2236), 2, - anon_sym_LBRACE2, - sym__not_escape_sequence, - ACTIONS(2238), 4, - sym__string_content, - sym__string_end, - sym__escape_interpolation, - sym_escape_sequence, - [50330] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2240), 3, - anon_sym_RPAREN, + ACTIONS(2200), 1, + anon_sym_DOT, + STATE(1035), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2202), 4, + sym__newline, anon_sym_COMMA, - anon_sym_COLON, - [50348] = 7, + anon_sym_as, + sym__semicolon, + [50208] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1878), 1, anon_sym_COMMA, - ACTIONS(1869), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2242), 1, + ACTIONS(2204), 1, anon_sym_COLON, - STATE(936), 1, + STATE(944), 1, aux_sym_expression_list_repeat1, - [50370] = 3, - ACTIONS(1914), 1, + [50230] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2244), 2, + ACTIONS(2206), 2, anon_sym_LBRACE2, sym__not_escape_sequence, - ACTIONS(2246), 4, + ACTIONS(2208), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [50384] = 5, + [50244] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2248), 3, + ACTIONS(1829), 1, + anon_sym_DOT, + STATE(865), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2202), 4, + anon_sym_import, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_EQ, - [50402] = 5, + anon_sym_as, + [50260] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2179), 3, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2210), 3, sym__newline, - anon_sym_EQ, + anon_sym_COMMA, sym__semicolon, - [50420] = 7, + [50278] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(1926), 1, - anon_sym_RPAREN, - ACTIONS(1928), 1, + ACTIONS(2212), 3, + sym__newline, anon_sym_COMMA, - STATE(1170), 1, - aux_sym_argument_list_repeat1, - [50442] = 2, + sym__semicolon, + [50296] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1893), 6, + ACTIONS(2214), 6, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_RBRACK, anon_sym_RBRACE, - [50454] = 6, + [50308] = 3, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(2216), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2218), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [50322] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(2119), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2131), 1, + ACTIONS(1878), 1, + anon_sym_COMMA, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(2252), 1, + ACTIONS(2220), 1, anon_sym_COLON, - ACTIONS(2250), 2, - anon_sym_COMMA, - anon_sym_as, - [50474] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2254), 1, - anon_sym_DOT, - STATE(1029), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(1834), 4, - sym__newline, - anon_sym_COMMA, - anon_sym_as, - sym__semicolon, - [50490] = 7, + STATE(944), 1, + aux_sym_expression_list_repeat1, + [50344] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1867), 1, - anon_sym_COMMA, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2257), 1, - anon_sym_COLON, - STATE(936), 1, - aux_sym_expression_list_repeat1, - [50512] = 4, + ACTIONS(2163), 3, + sym__newline, + anon_sym_EQ, + sym__semicolon, + [50362] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2261), 1, - anon_sym_COMMA, - STATE(1031), 1, - aux_sym_open_sequence_match_pattern_repeat1, - ACTIONS(2259), 4, - anon_sym_RPAREN, - anon_sym_if, + ACTIONS(2224), 1, anon_sym_COLON, + ACTIONS(2226), 1, + anon_sym_EQ, + STATE(1147), 1, + sym__type_bound, + STATE(1295), 1, + sym__type_param_default, + ACTIONS(2222), 2, + anon_sym_COMMA, anon_sym_RBRACK, - [50528] = 4, + [50382] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - STATE(1040), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(2264), 4, - anon_sym_import, - anon_sym_RPAREN, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, + anon_sym_and, + ACTIONS(2099), 1, + anon_sym_or, + ACTIONS(2230), 1, + anon_sym_COLON, + ACTIONS(2228), 2, anon_sym_COMMA, anon_sym_as, - [50544] = 6, + [50402] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2268), 1, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2234), 1, anon_sym_COLON, - ACTIONS(2266), 2, + ACTIONS(2232), 2, anon_sym_COMMA, anon_sym_RBRACK, - [50564] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2225), 1, - anon_sym_DOT, - STATE(1017), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(2264), 4, - sym__newline, - anon_sym_COMMA, - anon_sym_as, - sym__semicolon, - [50580] = 5, + [50422] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(2270), 3, - sym__newline, + ACTIONS(2236), 3, anon_sym_COMMA, - sym__semicolon, - [50598] = 3, - ACTIONS(1914), 1, + anon_sym_RBRACK, + anon_sym_EQ, + [50440] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2272), 2, + ACTIONS(2238), 2, anon_sym_LBRACE2, sym__not_escape_sequence, - ACTIONS(2274), 4, + ACTIONS(2240), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [50612] = 5, + [50454] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2276), 3, - anon_sym_RPAREN, + ACTIONS(2244), 1, anon_sym_COMMA, + STATE(1028), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(2242), 4, + anon_sym_RPAREN, + anon_sym_if, anon_sym_COLON, - [50630] = 6, + anon_sym_RBRACK, + [50470] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2280), 1, - anon_sym_COLON, - ACTIONS(2278), 2, + ACTIONS(1878), 1, anon_sym_COMMA, - anon_sym_RBRACK, - [50650] = 7, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2247), 1, + anon_sym_COLON, + STATE(944), 1, + aux_sym_expression_list_repeat1, + [50492] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1878), 1, anon_sym_COMMA, - ACTIONS(1869), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2282), 1, + ACTIONS(2249), 1, anon_sym_COLON, - STATE(936), 1, + STATE(944), 1, aux_sym_expression_list_repeat1, - [50672] = 4, + [50514] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - STATE(865), 1, - aux_sym_match_value_pattern_repeat1, - ACTIONS(2227), 4, - anon_sym_import, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(1929), 1, anon_sym_RPAREN, + ACTIONS(1931), 1, anon_sym_COMMA, - anon_sym_as, - [50688] = 3, - ACTIONS(1914), 1, + STATE(1250), 1, + aux_sym_argument_list_repeat1, + [50536] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2284), 2, + ACTIONS(2251), 2, anon_sym_LBRACE2, sym__not_escape_sequence, - ACTIONS(2286), 4, + ACTIONS(2253), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [50702] = 3, - ACTIONS(1914), 1, + [50550] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2288), 2, + ACTIONS(2255), 2, anon_sym_LBRACE2, sym__not_escape_sequence, - ACTIONS(2290), 4, + ACTIONS(2257), 4, sym__string_content, sym__string_end, sym__escape_interpolation, sym_escape_sequence, - [50716] = 6, + [50564] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2095), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2097), 1, + anon_sym_and, + ACTIONS(2099), 1, anon_sym_or, - ACTIONS(2294), 1, + ACTIONS(2261), 1, anon_sym_COLON, - ACTIONS(2292), 2, + ACTIONS(2259), 2, anon_sym_COMMA, - anon_sym_RBRACK, - [50736] = 6, + anon_sym_as, + [50584] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2298), 1, - anon_sym_COLON, - ACTIONS(2300), 1, - anon_sym_EQ, - STATE(1109), 1, - sym__type_bound, - STATE(1285), 1, - sym__type_param_default, - ACTIONS(2296), 2, + ACTIONS(2263), 1, + anon_sym_DOT, + STATE(1035), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(1818), 4, + sym__newline, anon_sym_COMMA, - anon_sym_RBRACK, - [50756] = 7, + anon_sym_as, + sym__semicolon, + [50600] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1867), 1, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1878), 1, anon_sym_COMMA, - ACTIONS(1869), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2302), 1, + ACTIONS(2266), 1, anon_sym_COLON, - STATE(936), 1, + STATE(944), 1, aux_sym_expression_list_repeat1, - [50778] = 6, + [50622] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2117), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(2119), 1, - anon_sym_or, - ACTIONS(2131), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(2304), 1, - anon_sym_as, - ACTIONS(2306), 1, - anon_sym_COLON, - [50797] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2117), 1, - anon_sym_and, - ACTIONS(2119), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2131), 1, - anon_sym_if, - ACTIONS(2308), 1, - anon_sym_as, - ACTIONS(2310), 1, - anon_sym_COLON, - [50816] = 2, + ACTIONS(2268), 3, + sym__newline, + anon_sym_COMMA, + sym__semicolon, + [50640] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2312), 5, + ACTIONS(1890), 6, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_if, anon_sym_COLON, anon_sym_RBRACK, - [50827] = 5, + anon_sym_RBRACE, + [50652] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, - sym_identifier, - STATE(1124), 1, - sym_dotted_name, - STATE(1268), 1, - sym_aliased_import, - ACTIONS(2314), 2, + ACTIONS(2200), 1, + anon_sym_DOT, + STATE(1013), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2270), 4, sym__newline, + anon_sym_COMMA, + anon_sym_as, sym__semicolon, - [50844] = 5, - ACTIONS(3), 1, + [50668] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2165), 1, - sym_identifier, - STATE(1124), 1, - sym_dotted_name, - STATE(1268), 1, - sym_aliased_import, - ACTIONS(2316), 2, - sym__newline, - sym__semicolon, - [50861] = 4, + ACTIONS(2272), 2, + anon_sym_LBRACE2, + sym__not_escape_sequence, + ACTIONS(2274), 4, + sym__string_content, + sym__string_end, + sym__escape_interpolation, + sym_escape_sequence, + [50682] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2320), 1, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2278), 1, + anon_sym_COLON, + ACTIONS(2276), 2, anon_sym_COMMA, - STATE(1051), 1, - aux_sym__collection_elements_repeat1, - ACTIONS(2318), 3, - anon_sym_RPAREN, anon_sym_RBRACK, - anon_sym_RBRACE, - [50876] = 5, + [50702] = 7, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2323), 2, + ACTIONS(1878), 1, anon_sym_COMMA, - anon_sym_RBRACK, - [50893] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2325), 1, - anon_sym_LPAREN, - ACTIONS(2327), 1, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2280), 1, anon_sym_COLON, - ACTIONS(2329), 1, - anon_sym_LBRACK, - STATE(1198), 1, - sym_type_parameters, - STATE(1365), 1, - sym_argument_list, - [50912] = 6, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2165), 1, - sym_identifier, - ACTIONS(2331), 1, - anon_sym_LPAREN, - STATE(1055), 1, - sym_dotted_name, - STATE(1117), 1, - sym_aliased_import, - STATE(1294), 1, - sym__import_list, - [50931] = 5, + STATE(944), 1, + aux_sym_expression_list_repeat1, + [50724] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2333), 1, + ACTIONS(1829), 1, + anon_sym_DOT, + STATE(1016), 1, + aux_sym_match_value_pattern_repeat1, + ACTIONS(2270), 4, + anon_sym_import, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2335), 1, anon_sym_as, - STATE(1107), 1, - aux_sym__import_list_repeat1, - ACTIONS(2337), 2, - sym__newline, - sym__semicolon, - [50948] = 5, + [50740] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2339), 2, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2284), 1, + anon_sym_COLON, + ACTIONS(2282), 2, anon_sym_COMMA, anon_sym_RBRACK, - [50965] = 5, + [50760] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2341), 2, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2286), 3, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - [50982] = 6, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2343), 1, - anon_sym_RBRACE, - ACTIONS(2345), 1, - anon_sym_LBRACE2, - ACTIONS(2347), 1, - aux_sym_format_specifier_token1, - STATE(1069), 1, - aux_sym_format_specifier_repeat1, - STATE(1219), 1, - sym_interpolation, - [51001] = 4, + anon_sym_COLON, + [50778] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2351), 1, - anon_sym_COMMA, - STATE(1051), 1, - aux_sym__collection_elements_repeat1, - ACTIONS(2349), 3, - anon_sym_RPAREN, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51016] = 6, + ACTIONS(2183), 1, + sym_identifier, + STATE(1119), 1, + sym_dotted_name, + STATE(1242), 1, + sym_aliased_import, + ACTIONS(2288), 2, + sym__newline, + sym__semicolon, + [50795] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, + anon_sym_and, + ACTIONS(2099), 1, + anon_sym_or, + ACTIONS(2290), 1, + anon_sym_as, + ACTIONS(2292), 1, anon_sym_COLON, - ACTIONS(2355), 1, - anon_sym_RBRACE, - ACTIONS(2357), 1, - anon_sym_EQ, - ACTIONS(2359), 1, - sym_type_conversion, - STATE(1383), 1, - sym_format_specifier, - [51035] = 4, + [50814] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2361), 1, + ACTIONS(2296), 1, anon_sym_COMMA, - STATE(1051), 1, + STATE(1073), 1, aux_sym__collection_elements_repeat1, - ACTIONS(2349), 3, + ACTIONS(2294), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - [51050] = 2, + [50829] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1834), 5, - sym__newline, - anon_sym_DOT, + ACTIONS(2298), 1, anon_sym_COMMA, + ACTIONS(2300), 1, anon_sym_as, + STATE(1126), 1, + aux_sym__import_list_repeat1, + ACTIONS(2302), 2, + sym__newline, sym__semicolon, - [51061] = 5, + [50846] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2141), 2, - anon_sym_COMMA, - anon_sym_RBRACE, - [51078] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2363), 2, - sym__newline, - sym__semicolon, - [51095] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2365), 1, - anon_sym_COMMA, - STATE(1075), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2035), 3, + ACTIONS(2304), 2, sym__newline, - anon_sym_from, sym__semicolon, - [51110] = 5, - ACTIONS(3), 1, + [50863] = 6, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2367), 2, - sym__newline, - sym__semicolon, - [51127] = 6, + ACTIONS(2306), 1, + anon_sym_RBRACE, + ACTIONS(2308), 1, + anon_sym_LBRACE2, + ACTIONS(2310), 1, + aux_sym_format_specifier_token1, + STATE(1058), 1, + aux_sym_format_specifier_repeat1, + STATE(1222), 1, + sym_interpolation, + [50882] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, + ACTIONS(2312), 1, anon_sym_COLON, - ACTIONS(2369), 1, + ACTIONS(2314), 1, anon_sym_RBRACE, - ACTIONS(2371), 1, + ACTIONS(2316), 1, anon_sym_EQ, - ACTIONS(2373), 1, + ACTIONS(2318), 1, sym_type_conversion, - STATE(1392), 1, + STATE(1384), 1, sym_format_specifier, - [51146] = 5, + [50901] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(2095), 1, + anon_sym_if, + ACTIONS(2097), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(2099), 1, anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2375), 2, - sym__newline, - sym__semicolon, - [51163] = 6, - ACTIONS(1914), 1, + ACTIONS(2320), 1, + anon_sym_as, + ACTIONS(2322), 1, + anon_sym_COLON, + [50920] = 6, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2345), 1, - anon_sym_LBRACE2, - ACTIONS(2377), 1, + ACTIONS(2324), 1, anon_sym_RBRACE, - ACTIONS(2379), 1, + ACTIONS(2326), 1, + anon_sym_LBRACE2, + ACTIONS(2329), 1, aux_sym_format_specifier_token1, - STATE(1080), 1, + STATE(1054), 1, aux_sym_format_specifier_repeat1, - STATE(1219), 1, + STATE(1222), 1, sym_interpolation, - [51182] = 5, + [50939] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2381), 2, - anon_sym_RPAREN, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2332), 2, anon_sym_COMMA, - [51199] = 5, + anon_sym_RBRACK, + [50956] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2383), 2, - anon_sym_RPAREN, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2139), 2, anon_sym_COMMA, - [51216] = 5, + anon_sym_RBRACE, + [50973] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(1940), 2, + ACTIONS(1818), 5, sym__newline, + anon_sym_DOT, + anon_sym_COMMA, + anon_sym_as, sym__semicolon, - [51233] = 5, - ACTIONS(3), 1, + [50984] = 6, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2385), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [51250] = 5, + ACTIONS(2308), 1, + anon_sym_LBRACE2, + ACTIONS(2334), 1, + anon_sym_RBRACE, + ACTIONS(2336), 1, + aux_sym_format_specifier_token1, + STATE(1054), 1, + aux_sym_format_specifier_repeat1, + STATE(1222), 1, + sym_interpolation, + [51003] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, - sym_identifier, - STATE(1124), 1, - sym_dotted_name, - STATE(1268), 1, - sym_aliased_import, - ACTIONS(2314), 2, + ACTIONS(2338), 1, + anon_sym_COMMA, + STATE(1080), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2041), 3, sym__newline, + anon_sym_from, sym__semicolon, - [51267] = 4, + [51018] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2387), 1, + ACTIONS(2340), 1, anon_sym_COMMA, - STATE(1075), 1, + STATE(1080), 1, aux_sym_expression_list_repeat1, - ACTIONS(2011), 3, + ACTIONS(2041), 3, sym__newline, anon_sym_from, sym__semicolon, - [51282] = 5, + [51033] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2390), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [51299] = 6, + ACTIONS(1953), 2, + sym__newline, + sym__semicolon, + [51050] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2325), 1, - anon_sym_LPAREN, - ACTIONS(2329), 1, - anon_sym_LBRACK, - ACTIONS(2392), 1, - anon_sym_COLON, - STATE(1260), 1, - sym_type_parameters, - STATE(1414), 1, - sym_argument_list, - [51318] = 2, + ACTIONS(2183), 1, + sym_identifier, + STATE(1119), 1, + sym_dotted_name, + STATE(1242), 1, + sym_aliased_import, + ACTIONS(2288), 2, + sym__newline, + sym__semicolon, + [51067] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2259), 5, - anon_sym_RPAREN, + ACTIONS(2342), 1, anon_sym_COMMA, - anon_sym_if, - anon_sym_COLON, + STATE(1073), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2294), 3, + anon_sym_RPAREN, anon_sym_RBRACK, - [51329] = 4, + anon_sym_RBRACE, + [51082] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2394), 1, - anon_sym_COMMA, - STATE(1075), 1, - aux_sym_expression_list_repeat1, - ACTIONS(2035), 3, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2344), 2, sym__newline, - anon_sym_from, sym__semicolon, - [51344] = 6, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2396), 1, - anon_sym_RBRACE, - ACTIONS(2398), 1, - anon_sym_LBRACE2, - ACTIONS(2401), 1, - aux_sym_format_specifier_token1, - STATE(1080), 1, - aux_sym_format_specifier_repeat1, - STATE(1219), 1, - sym_interpolation, - [51363] = 4, + [51099] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(1845), 1, anon_sym_COMMA, - STATE(1059), 1, + STATE(1063), 1, aux_sym__collection_elements_repeat1, ACTIONS(1853), 3, anon_sym_RPAREN, anon_sym_RBRACK, anon_sym_RBRACE, - [51378] = 5, + [51114] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2404), 2, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2346), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - [51395] = 5, + [51131] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(2053), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2065), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(2406), 2, - sym__newline, - sym__semicolon, - [51412] = 4, + ACTIONS(2348), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [51148] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2300), 1, - anon_sym_EQ, - STATE(1312), 1, - sym__type_param_default, - ACTIONS(2408), 2, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2350), 2, anon_sym_COMMA, anon_sym_RBRACK, - [51426] = 5, + [51165] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2410), 1, - anon_sym_COLON, - [51442] = 4, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2352), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [51182] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2412), 1, - anon_sym_case, - STATE(558), 1, - sym_cases, - STATE(332), 2, - sym_case_block, - aux_sym_cases_repeat1, - [51456] = 4, + ACTIONS(2183), 1, + sym_identifier, + ACTIONS(2354), 1, + anon_sym_LPAREN, + STATE(1049), 1, + sym_dotted_name, + STATE(1142), 1, + sym_aliased_import, + STATE(1330), 1, + sym__import_list, + [51201] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2412), 1, - anon_sym_case, - STATE(463), 1, - sym_cases, - STATE(332), 2, - sym_case_block, - aux_sym_cases_repeat1, - [51470] = 5, + ACTIONS(2356), 1, + anon_sym_LPAREN, + ACTIONS(2358), 1, + anon_sym_COLON, + ACTIONS(2360), 1, + anon_sym_LBRACK, + STATE(1257), 1, + sym_type_parameters, + STATE(1415), 1, + sym_argument_list, + [51220] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2362), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [51237] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2366), 1, + anon_sym_COMMA, + STATE(1073), 1, + aux_sym__collection_elements_repeat1, + ACTIONS(2364), 3, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_RBRACE, + [51252] = 6, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, + ACTIONS(2312), 1, anon_sym_COLON, - ACTIONS(2414), 1, + ACTIONS(2369), 1, anon_sym_RBRACE, - ACTIONS(2416), 1, + ACTIONS(2371), 1, + anon_sym_EQ, + ACTIONS(2373), 1, sym_type_conversion, - STATE(1424), 1, + STATE(1456), 1, sym_format_specifier, - [51486] = 5, + [51271] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(2183), 1, + sym_identifier, + STATE(1119), 1, + sym_dotted_name, + STATE(1242), 1, + sym_aliased_import, + ACTIONS(2375), 2, + sym__newline, + sym__semicolon, + [51288] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2418), 1, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2377), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [51305] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2379), 5, + anon_sym_RPAREN, + anon_sym_COMMA, + anon_sym_if, anon_sym_COLON, - [51502] = 5, + anon_sym_RBRACK, + [51316] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1991), 1, anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(2013), 1, anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(2015), 1, anon_sym_or, - ACTIONS(2420), 1, - anon_sym_else, - [51518] = 5, + ACTIONS(2381), 2, + sym__newline, + sym__semicolon, + [51333] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, - anon_sym_COLON, - ACTIONS(2422), 1, - anon_sym_RBRACE, - ACTIONS(2424), 1, - sym_type_conversion, - STATE(1413), 1, - sym_format_specifier, - [51534] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2383), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [51350] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2426), 1, + ACTIONS(2385), 1, anon_sym_COMMA, - STATE(1092), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2223), 2, + STATE(1080), 1, + aux_sym_expression_list_repeat1, + ACTIONS(2032), 3, sym__newline, + anon_sym_from, sym__semicolon, - [51548] = 2, + [51365] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2356), 1, + anon_sym_LPAREN, + ACTIONS(2360), 1, + anon_sym_LBRACK, + ACTIONS(2388), 1, + anon_sym_COLON, + STATE(1181), 1, + sym_type_parameters, + STATE(1365), 1, + sym_argument_list, + [51384] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2143), 4, + ACTIONS(2242), 5, anon_sym_RPAREN, anon_sym_COMMA, + anon_sym_if, + anon_sym_COLON, anon_sym_RBRACK, - anon_sym_RBRACE, - [51558] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2429), 1, - sym_identifier, - STATE(1110), 1, - sym_dotted_name, - STATE(1163), 1, - sym_aliased_import, - STATE(1478), 1, - sym__import_list, - [51574] = 4, + [51395] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2431), 1, - anon_sym_COMMA, - STATE(1127), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2433), 2, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2390), 2, sym__newline, sym__semicolon, - [51588] = 5, + [51412] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(2392), 1, + anon_sym_case, + STATE(516), 1, + sym_cases, + STATE(328), 2, + sym_case_block, + aux_sym_cases_repeat1, + [51426] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2435), 1, - anon_sym_COLON, - [51604] = 4, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2394), 1, + anon_sym_else, + [51442] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2437), 1, + ACTIONS(2101), 1, anon_sym_COMMA, - STATE(1127), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2439), 2, + STATE(1137), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2396), 2, sym__newline, sym__semicolon, - [51618] = 4, + [51456] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2133), 1, - anon_sym_COMMA, - STATE(1092), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2441), 2, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2398), 1, + anon_sym_else, + [51472] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1916), 4, sym__newline, + anon_sym_from, + anon_sym_COMMA, sym__semicolon, - [51632] = 4, + [51482] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2443), 1, + ACTIONS(2101), 1, anon_sym_COMMA, - STATE(1111), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2445), 2, + STATE(1137), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2400), 2, sym__newline, sym__semicolon, - [51646] = 5, + [51496] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2329), 1, + ACTIONS(2360), 1, anon_sym_LBRACK, - ACTIONS(2447), 1, + ACTIONS(2402), 1, anon_sym_LPAREN, - STATE(1302), 1, - sym_parameters, - STATE(1303), 1, + STATE(1323), 1, sym_type_parameters, - [51662] = 4, + STATE(1324), 1, + sym_parameters, + [51512] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(305), 1, - sym__string_start, - ACTIONS(1904), 1, - anon_sym_COLON, - STATE(566), 2, - sym_string, - aux_sym_concatenated_string_repeat1, - [51676] = 4, + ACTIONS(2288), 1, + anon_sym_RPAREN, + ACTIONS(2404), 1, + sym_identifier, + STATE(1212), 1, + sym_dotted_name, + STATE(1306), 1, + sym_aliased_import, + [51528] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2451), 1, + ACTIONS(2406), 1, anon_sym_COMMA, - STATE(1102), 1, - aux_sym_with_clause_repeat1, - ACTIONS(2449), 2, - anon_sym_RPAREN, + STATE(1116), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2408), 2, + sym__newline, + sym__semicolon, + [51542] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2410), 1, anon_sym_COLON, - [51690] = 4, + [51558] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2300), 1, + ACTIONS(2226), 1, anon_sym_EQ, - STATE(1313), 1, + STATE(1336), 1, sym__type_param_default, - ACTIONS(2454), 2, + ACTIONS(2412), 2, anon_sym_COMMA, anon_sym_RBRACK, - [51704] = 5, + [51572] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2456), 1, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2414), 1, anon_sym_COLON, - [51720] = 4, + [51588] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2458), 1, - anon_sym_case, - STATE(485), 1, - sym_cases, - STATE(315), 2, - sym_case_block, - aux_sym_cases_repeat1, - [51734] = 4, + ACTIONS(2288), 1, + anon_sym_RPAREN, + ACTIONS(2404), 1, + sym_identifier, + STATE(1212), 1, + sym_dotted_name, + STATE(1306), 1, + sym_aliased_import, + [51604] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2458), 1, + ACTIONS(2392), 1, anon_sym_case, - STATE(530), 1, + STATE(468), 1, sym_cases, - STATE(315), 2, + STATE(328), 2, sym_case_block, aux_sym_cases_repeat1, - [51748] = 4, + [51618] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2460), 1, - anon_sym_COMMA, - STATE(1126), 1, - aux_sym__import_list_repeat1, - ACTIONS(2462), 2, - sym__newline, - sym__semicolon, - [51762] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2416), 1, + anon_sym_COLON, + [51634] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2466), 1, - anon_sym_DOT, - STATE(1138), 1, - aux_sym_import_prefix_repeat1, - ACTIONS(2464), 2, - anon_sym_import, - sym_identifier, - [51776] = 4, + ACTIONS(2418), 4, + anon_sym_async, + anon_sym_def, + anon_sym_class, + anon_sym_AT, + [51644] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2300), 1, + ACTIONS(2422), 1, + anon_sym_COLON, + ACTIONS(2424), 1, anon_sym_EQ, - STATE(1345), 1, - sym__type_param_default, - ACTIONS(2468), 2, + ACTIONS(2420), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - [51790] = 5, + [51658] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, - anon_sym_RPAREN, - ACTIONS(2470), 1, - anon_sym_COMMA, - ACTIONS(2472), 1, - anon_sym_as, - STATE(1164), 1, - aux_sym__import_list_repeat1, - [51806] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2426), 1, + anon_sym_COLON, + [51674] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2360), 1, + anon_sym_LBRACK, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1342), 1, + sym_parameters, + STATE(1343), 1, + sym_type_parameters, + [51690] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2443), 1, + ACTIONS(2428), 1, anon_sym_COMMA, - STATE(1144), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2474), 2, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2430), 2, sym__newline, sym__semicolon, - [51820] = 4, + [51704] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2443), 1, + ACTIONS(2432), 1, anon_sym_COMMA, - STATE(1144), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2476), 2, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2434), 2, sym__newline, sym__semicolon, - [51834] = 2, + [51718] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2478), 4, - anon_sym_async, - anon_sym_def, - anon_sym_class, - anon_sym_AT, - [51844] = 2, + ACTIONS(2436), 1, + anon_sym_case, + STATE(499), 1, + sym_cases, + STATE(335), 2, + sym_case_block, + aux_sym_cases_repeat1, + [51732] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2179), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_COLON, - anon_sym_EQ, - [51854] = 5, + ACTIONS(2436), 1, + anon_sym_case, + STATE(498), 1, + sym_cases, + STATE(335), 2, + sym_case_block, + aux_sym_cases_repeat1, + [51746] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2480), 1, - anon_sym_COLON, - [51870] = 4, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2438), 1, + anon_sym_else, + [51762] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2133), 1, - anon_sym_COMMA, - STATE(1092), 1, - aux_sym_assert_statement_repeat1, - ACTIONS(2482), 2, - sym__newline, - sym__semicolon, - [51884] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2440), 1, + anon_sym_COLON, + [51778] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2333), 1, + ACTIONS(2302), 1, + anon_sym_RPAREN, + ACTIONS(2442), 1, anon_sym_COMMA, - STATE(1133), 1, + ACTIONS(2444), 1, + anon_sym_as, + STATE(1153), 1, aux_sym__import_list_repeat1, - ACTIONS(2337), 2, - sym__newline, - sym__semicolon, - [51898] = 2, + [51794] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2484), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, - anon_sym_RBRACE, - [51908] = 2, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2446), 1, + anon_sym_COLON, + [51810] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2486), 4, - anon_sym_RPAREN, - anon_sym_COMMA, - anon_sym_RBRACK, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2448), 1, anon_sym_RBRACE, - [51918] = 4, + ACTIONS(2450), 1, + sym_type_conversion, + STATE(1454), 1, + sym_format_specifier, + [51826] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2490), 1, + ACTIONS(2454), 1, anon_sym_COMMA, - STATE(1151), 1, + STATE(1118), 1, aux_sym__patterns_repeat1, - ACTIONS(2488), 2, + ACTIONS(2452), 2, anon_sym_RPAREN, anon_sym_RBRACK, - [51932] = 5, + [51840] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2051), 1, - anon_sym_and, - ACTIONS(2053), 1, - anon_sym_or, - ACTIONS(2065), 1, - anon_sym_if, - ACTIONS(2492), 1, - sym__newline, - [51948] = 4, + ACTIONS(2226), 1, + anon_sym_EQ, + STATE(1337), 1, + sym__type_param_default, + ACTIONS(2456), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [51854] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2443), 1, + ACTIONS(2458), 1, anon_sym_COMMA, - STATE(1112), 1, - aux_sym_global_statement_repeat1, - ACTIONS(2494), 2, + STATE(1104), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2460), 2, sym__newline, sym__semicolon, - [51962] = 5, + [51868] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2496), 1, + ACTIONS(2163), 4, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_COLON, - [51978] = 3, + anon_sym_EQ, + [51878] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2335), 1, - anon_sym_as, - ACTIONS(2498), 3, - sym__newline, + ACTIONS(2406), 1, anon_sym_COMMA, + STATE(1125), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2462), 2, + sym__newline, sym__semicolon, - [51990] = 5, + [51892] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2500), 1, - anon_sym_else, - [52006] = 4, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2464), 1, + anon_sym_RBRACE, + ACTIONS(2466), 1, + sym_type_conversion, + STATE(1430), 1, + sym_format_specifier, + [51908] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2502), 1, + ACTIONS(2470), 1, anon_sym_COMMA, - STATE(1126), 1, - aux_sym__import_list_repeat1, - ACTIONS(2505), 2, - sym__newline, - sym__semicolon, - [52020] = 4, + STATE(832), 1, + aux_sym__patterns_repeat1, + ACTIONS(2468), 2, + anon_sym_RPAREN, + anon_sym_RBRACK, + [51922] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2507), 1, - anon_sym_COMMA, - STATE(1127), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2510), 2, + ACTIONS(2300), 1, + anon_sym_as, + ACTIONS(2472), 3, sym__newline, + anon_sym_COMMA, sym__semicolon, - [52034] = 2, + [51934] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1948), 4, - sym__newline, - anon_sym_from, + ACTIONS(2474), 1, anon_sym_COMMA, + STATE(1120), 1, + aux_sym__import_list_repeat1, + ACTIONS(2477), 2, + sym__newline, sym__semicolon, - [52044] = 5, + [51948] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2314), 1, - anon_sym_RPAREN, - ACTIONS(2429), 1, + ACTIONS(2404), 1, sym_identifier, - STATE(1185), 1, + STATE(1109), 1, sym_dotted_name, - STATE(1322), 1, + STATE(1231), 1, sym_aliased_import, - [52060] = 5, + STATE(1432), 1, + sym__import_list, + [51964] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2329), 1, - anon_sym_LBRACK, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1288), 1, - sym_parameters, - STATE(1289), 1, - sym_type_parameters, - [52076] = 5, + ACTIONS(2481), 1, + anon_sym_DOT, + STATE(1122), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2479), 2, + anon_sym_import, + sym_identifier, + [51978] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2429), 1, + ACTIONS(2404), 1, sym_identifier, - STATE(1110), 1, + STATE(1109), 1, sym_dotted_name, - STATE(1163), 1, + STATE(1231), 1, sym_aliased_import, - STATE(1454), 1, + STATE(1436), 1, sym__import_list, - [52092] = 5, + [51994] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2512), 1, - anon_sym_else, - [52108] = 4, + ACTIONS(2486), 1, + anon_sym_DOT, + STATE(1122), 1, + aux_sym_import_prefix_repeat1, + ACTIONS(2484), 2, + anon_sym_import, + sym_identifier, + [52008] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2514), 1, + ACTIONS(2488), 1, anon_sym_COMMA, - STATE(1126), 1, + STATE(1125), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2491), 2, + sym__newline, + sym__semicolon, + [52022] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2493), 1, + anon_sym_COMMA, + STATE(1120), 1, aux_sym__import_list_repeat1, - ACTIONS(2462), 2, + ACTIONS(2495), 2, sym__newline, sym__semicolon, - [52122] = 5, + [52036] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2516), 1, - anon_sym_COLON, - [52138] = 5, + ACTIONS(2406), 1, + anon_sym_COMMA, + STATE(1125), 1, + aux_sym_global_statement_repeat1, + ACTIONS(2497), 2, + sym__newline, + sym__semicolon, + [52050] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2518), 1, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2499), 1, anon_sym_COLON, - [52154] = 4, + [52066] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2522), 1, - anon_sym_COLON, - ACTIONS(2524), 1, - anon_sym_EQ, - ACTIONS(2520), 2, + ACTIONS(2501), 4, anon_sym_RPAREN, anon_sym_COMMA, - [52168] = 5, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52076] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2314), 1, + ACTIONS(2503), 4, anon_sym_RPAREN, - ACTIONS(2429), 1, - sym_identifier, - STATE(1185), 1, - sym_dotted_name, - STATE(1322), 1, - sym_aliased_import, - [52184] = 4, + anon_sym_COMMA, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52086] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2528), 1, - anon_sym_DOT, - STATE(1138), 1, - aux_sym_import_prefix_repeat1, - ACTIONS(2526), 2, - anon_sym_import, + ACTIONS(2375), 1, + anon_sym_RPAREN, + ACTIONS(2404), 1, sym_identifier, - [52198] = 4, + STATE(1212), 1, + sym_dotted_name, + STATE(1306), 1, + sym_aliased_import, + [52102] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2531), 1, + ACTIONS(2505), 1, anon_sym_COMMA, - STATE(1031), 1, - aux_sym_open_sequence_match_pattern_repeat1, - ACTIONS(1687), 2, - anon_sym_if, - anon_sym_COLON, - [52212] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2533), 1, - anon_sym_COLON, - [52228] = 3, + STATE(1120), 1, + aux_sym__import_list_repeat1, + ACTIONS(2495), 2, + sym__newline, + sym__semicolon, + [52116] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2537), 1, - anon_sym_EQ, - ACTIONS(2535), 3, + ACTIONS(2189), 4, anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_COLON, - [52240] = 5, + anon_sym_RBRACK, + anon_sym_RBRACE, + [52126] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2539), 1, + ACTIONS(299), 1, + sym__string_start, + ACTIONS(1886), 1, anon_sym_COLON, - [52256] = 5, + STATE(565), 2, + sym_string, + aux_sym_concatenated_string_repeat1, + [52140] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2541), 1, - anon_sym_COLON, - [52272] = 4, + ACTIONS(2507), 1, + anon_sym_COMMA, + STATE(1135), 1, + aux_sym_print_statement_repeat1, + ACTIONS(2510), 2, + sym__newline, + sym__semicolon, + [52154] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2543), 1, + ACTIONS(2406), 1, anon_sym_COMMA, - STATE(1144), 1, + STATE(1127), 1, aux_sym_global_statement_repeat1, - ACTIONS(2546), 2, + ACTIONS(2512), 2, sym__newline, sym__semicolon, - [52286] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2329), 1, - anon_sym_LBRACK, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1328), 1, - sym_parameters, - STATE(1346), 1, - sym_type_parameters, - [52302] = 5, + [52168] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2329), 1, - anon_sym_LBRACK, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1329), 1, - sym_parameters, - STATE(1348), 1, - sym_type_parameters, - [52318] = 5, + ACTIONS(2514), 1, + anon_sym_COMMA, + STATE(1137), 1, + aux_sym_assert_statement_repeat1, + ACTIONS(2210), 2, + sym__newline, + sym__semicolon, + [52182] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1841), 1, + ACTIONS(1825), 1, anon_sym_and, - ACTIONS(1869), 1, - anon_sym_if, - ACTIONS(1871), 1, + ACTIONS(1827), 1, anon_sym_or, - ACTIONS(2548), 1, - anon_sym_else, - [52334] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1841), 1, - anon_sym_and, - ACTIONS(1869), 1, + ACTIONS(1880), 1, anon_sym_if, - ACTIONS(1871), 1, - anon_sym_or, - ACTIONS(2550), 1, + ACTIONS(2517), 1, anon_sym_COLON, - [52350] = 4, + [52198] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2552), 1, + ACTIONS(2519), 1, anon_sym_COMMA, - STATE(1095), 1, - aux_sym_print_statement_repeat1, - ACTIONS(2554), 2, - sym__newline, - sym__semicolon, - [52364] = 5, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2316), 1, - anon_sym_RPAREN, - ACTIONS(2429), 1, - sym_identifier, - STATE(1185), 1, - sym_dotted_name, - STATE(1322), 1, - sym_aliased_import, - [52380] = 4, + STATE(1028), 1, + aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(1671), 2, + anon_sym_if, + anon_sym_COLON, + [52212] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2558), 1, - anon_sym_COMMA, - STATE(832), 1, - aux_sym__patterns_repeat1, - ACTIONS(2556), 2, - anon_sym_RPAREN, - anon_sym_RBRACK, - [52394] = 5, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2521), 1, + anon_sym_else, + [52228] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2165), 1, - sym_identifier, - STATE(1055), 1, - sym_dotted_name, - STATE(1117), 1, - sym_aliased_import, - STATE(1350), 1, - sym__import_list, - [52410] = 3, + ACTIONS(2360), 1, + anon_sym_LBRACK, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1294), 1, + sym_type_parameters, + STATE(1312), 1, + sym_parameters, + [52244] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2560), 1, - anon_sym_EQ, - ACTIONS(2562), 2, + ACTIONS(2298), 1, + anon_sym_COMMA, + STATE(1132), 1, + aux_sym__import_list_repeat1, + ACTIONS(2302), 2, sym__newline, sym__semicolon, - [52421] = 2, + [52258] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2564), 3, - anon_sym_RPAREN, + ACTIONS(2525), 1, anon_sym_COMMA, + STATE(1143), 1, + aux_sym_with_clause_repeat1, + ACTIONS(2523), 2, + anon_sym_RPAREN, anon_sym_COLON, - [52430] = 4, + [52272] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2566), 1, - anon_sym_RPAREN, - ACTIONS(2568), 1, - anon_sym_COMMA, - STATE(1246), 1, - aux_sym_argument_list_repeat1, - [52443] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2528), 1, + anon_sym_COLON, + [52288] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, - anon_sym_COMMA, - ACTIONS(1942), 1, - anon_sym_RPAREN, - STATE(1274), 1, - aux_sym__collection_elements_repeat1, - [52456] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2530), 1, + anon_sym_COLON, + [52304] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2462), 1, - anon_sym_RPAREN, - ACTIONS(2570), 1, - anon_sym_COMMA, - STATE(1194), 1, - aux_sym__import_list_repeat1, - [52469] = 4, + ACTIONS(2360), 1, + anon_sym_LBRACK, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1296), 1, + sym_type_parameters, + STATE(1315), 1, + sym_parameters, + [52320] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2572), 1, - sym__semicolon, - ACTIONS(2574), 1, - sym__newline, - STATE(1243), 1, - aux_sym__simple_statements_repeat1, - [52482] = 4, + ACTIONS(2226), 1, + anon_sym_EQ, + STATE(1283), 1, + sym__type_param_default, + ACTIONS(2532), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [52334] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(1944), 1, - anon_sym_RPAREN, - ACTIONS(1946), 1, - anon_sym_COMMA, - STATE(1245), 1, - aux_sym_argument_list_repeat1, - [52495] = 4, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2534), 1, + anon_sym_COLON, + [52350] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2576), 1, - anon_sym_RPAREN, - ACTIONS(2578), 1, - anon_sym_COMMA, - STATE(1215), 1, - aux_sym_match_class_pattern_repeat2, - [52508] = 2, + ACTIONS(1825), 1, + anon_sym_and, + ACTIONS(1827), 1, + anon_sym_or, + ACTIONS(1880), 1, + anon_sym_if, + ACTIONS(2536), 1, + anon_sym_COLON, + [52366] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2183), 1, + sym_identifier, + STATE(1049), 1, + sym_dotted_name, + STATE(1142), 1, + sym_aliased_import, + STATE(1322), 1, + sym__import_list, + [52382] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2580), 3, + ACTIONS(2540), 1, + anon_sym_EQ, + ACTIONS(2538), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [52517] = 4, + [52394] = 5, ACTIONS(3), 1, sym_comment, - ACTIONS(2576), 1, - anon_sym_RPAREN, - ACTIONS(2578), 1, - anon_sym_COMMA, - STATE(1207), 1, - aux_sym_match_class_pattern_repeat2, - [52530] = 4, + ACTIONS(1991), 1, + anon_sym_and, + ACTIONS(2013), 1, + anon_sym_if, + ACTIONS(2015), 1, + anon_sym_or, + ACTIONS(2542), 1, + sym__newline, + [52410] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2337), 1, + ACTIONS(2495), 1, anon_sym_RPAREN, - ACTIONS(2470), 1, + ACTIONS(2544), 1, anon_sym_COMMA, - STATE(1157), 1, + STATE(1217), 1, aux_sym__import_list_repeat1, - [52543] = 4, + [52423] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2462), 1, + ACTIONS(2546), 1, + sym_identifier, + ACTIONS(2548), 1, anon_sym_RPAREN, - ACTIONS(2582), 1, - anon_sym_COMMA, - STATE(1194), 1, - aux_sym__import_list_repeat1, - [52556] = 4, + STATE(1311), 1, + sym_match_keyword_pattern, + [52436] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2584), 1, + ACTIONS(2546), 1, + sym_identifier, + ACTIONS(2550), 1, anon_sym_RPAREN, - ACTIONS(2586), 1, - anon_sym_COMMA, - STATE(1165), 1, - aux_sym__parameters_repeat1, - [52569] = 4, + STATE(1311), 1, + sym_match_keyword_pattern, + [52449] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1705), 1, - anon_sym_RPAREN, - ACTIONS(2589), 1, - anon_sym_COMMA, - STATE(1160), 1, - aux_sym_match_class_pattern_repeat2, - [52582] = 4, + ACTIONS(2183), 1, + sym_identifier, + STATE(1119), 1, + sym_dotted_name, + STATE(1242), 1, + sym_aliased_import, + [52462] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2591), 1, - anon_sym_RPAREN, - ACTIONS(2593), 1, - anon_sym_COMMA, - STATE(1246), 1, - aux_sym_argument_list_repeat1, - [52595] = 3, + ACTIONS(2552), 3, + anon_sym_LPAREN, + anon_sym_COLON, + anon_sym_EQ, + [52471] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2524), 1, - anon_sym_EQ, - ACTIONS(2520), 2, + ACTIONS(2554), 1, + anon_sym_RPAREN, + ACTIONS(2556), 1, anon_sym_COMMA, - anon_sym_COLON, - [52606] = 4, + STATE(1208), 1, + aux_sym_match_class_pattern_repeat2, + [52484] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2595), 1, + ACTIONS(2554), 1, anon_sym_RPAREN, - ACTIONS(2597), 1, + ACTIONS(2558), 1, anon_sym_COMMA, - STATE(1246), 1, - aux_sym_argument_list_repeat1, - [52619] = 4, + STATE(1201), 1, + aux_sym_match_class_pattern_repeat1, + [52497] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2599), 1, + ACTIONS(1677), 1, anon_sym_RPAREN, - ACTIONS(2601), 1, + ACTIONS(2560), 1, anon_sym_COMMA, - STATE(1246), 1, - aux_sym_argument_list_repeat1, - [52632] = 4, + STATE(1028), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [52510] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, - anon_sym_COLON, - ACTIONS(2603), 1, - anon_sym_RBRACE, - STATE(1466), 1, - sym_format_specifier, - [52645] = 4, + ACTIONS(2562), 1, + sym__semicolon, + ACTIONS(2564), 1, + sym__newline, + STATE(1270), 1, + aux_sym__simple_statements_repeat1, + [52523] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1798), 1, - anon_sym_COMMA, - ACTIONS(2605), 1, + ACTIONS(1377), 3, + sym__newline, anon_sym_in, - STATE(842), 1, - aux_sym__patterns_repeat1, - [52658] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2185), 1, - sym_identifier, - ACTIONS(2607), 1, - anon_sym_import, - STATE(1369), 1, - sym_dotted_name, - [52671] = 4, + sym__semicolon, + [52532] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2609), 1, + ACTIONS(2566), 1, anon_sym_COMMA, - ACTIONS(2612), 1, - anon_sym_RBRACE, - STATE(1174), 1, - aux_sym_match_mapping_pattern_repeat1, - [52684] = 3, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2244), 1, + ACTIONS(2568), 1, anon_sym_RBRACE, - ACTIONS(2246), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [52695] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2429), 1, - sym_identifier, - STATE(1185), 1, - sym_dotted_name, - STATE(1322), 1, - sym_aliased_import, - [52708] = 4, + STATE(1268), 1, + aux_sym_dictionary_repeat1, + [52545] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1798), 1, + ACTIONS(1788), 1, anon_sym_COMMA, - ACTIONS(2614), 1, + ACTIONS(2570), 1, anon_sym_in, STATE(842), 1, aux_sym__patterns_repeat1, - [52721] = 2, + [52558] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2546), 3, - sym__newline, + ACTIONS(2572), 1, + anon_sym_RPAREN, + ACTIONS(2574), 1, anon_sym_COMMA, - sym__semicolon, - [52730] = 4, + STATE(1226), 1, + aux_sym_match_class_pattern_repeat2, + [52571] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2616), 1, - anon_sym_RPAREN, - ACTIONS(2618), 1, + ACTIONS(2576), 1, anon_sym_COMMA, - STATE(1257), 1, - aux_sym_with_clause_repeat1, - [52743] = 3, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2272), 1, + ACTIONS(2578), 1, anon_sym_RBRACE, - ACTIONS(2274), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [52754] = 4, + STATE(1268), 1, + aux_sym_dictionary_repeat1, + [52584] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2620), 1, + ACTIONS(2051), 1, + anon_sym_from, + ACTIONS(2055), 2, + sym__newline, + sym__semicolon, + [52595] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2580), 1, anon_sym_COMMA, - ACTIONS(2622), 1, + ACTIONS(2582), 2, + anon_sym_if, anon_sym_COLON, - STATE(1102), 1, - aux_sym_with_clause_repeat1, - [52767] = 2, + [52606] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1381), 3, + ACTIONS(1365), 3, sym__newline, anon_sym_in, sym__semicolon, - [52776] = 4, + [52615] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2584), 1, + anon_sym_if, + ACTIONS(2586), 1, + anon_sym_COLON, + STATE(1356), 1, + sym_guard, + [52628] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1701), 1, + ACTIONS(2588), 1, anon_sym_RPAREN, - ACTIONS(2624), 1, + ACTIONS(2590), 1, anon_sym_COMMA, - STATE(1186), 1, - aux_sym_match_class_pattern_repeat1, - [52789] = 4, + STATE(1171), 1, + aux_sym_argument_list_repeat1, + [52641] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1701), 1, + ACTIONS(1685), 1, anon_sym_RPAREN, - ACTIONS(2626), 1, + ACTIONS(2546), 1, sym_identifier, - STATE(1325), 1, + STATE(1311), 1, sym_match_keyword_pattern, - [52802] = 3, + [52654] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2472), 1, - anon_sym_as, - ACTIONS(2498), 2, - anon_sym_RPAREN, + ACTIONS(2593), 1, anon_sym_COMMA, - [52813] = 4, + ACTIONS(2595), 1, + anon_sym_RBRACE, + STATE(1266), 1, + aux_sym_match_mapping_pattern_repeat1, + [52667] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2628), 1, + ACTIONS(2495), 1, anon_sym_RPAREN, - ACTIONS(2630), 1, + ACTIONS(2597), 1, anon_sym_COMMA, - STATE(1186), 1, - aux_sym_match_class_pattern_repeat1, - [52826] = 4, + STATE(1217), 1, + aux_sym__import_list_repeat1, + [52680] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2633), 1, - anon_sym_COMMA, - ACTIONS(2635), 1, - anon_sym_RBRACK, - STATE(1214), 1, - aux_sym_index_expression_list_repeat1, - [52839] = 4, + ACTIONS(2599), 1, + sym__semicolon, + ACTIONS(2601), 1, + sym__newline, + STATE(1198), 1, + aux_sym__simple_statements_repeat1, + [52693] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2603), 1, + sym_identifier, + ACTIONS(2605), 1, + sym_match_wildcard_pattern, + STATE(1077), 1, + sym_match_capture_pattern, + [52706] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2637), 1, + ACTIONS(1845), 1, anon_sym_COMMA, - ACTIONS(2639), 1, - anon_sym_RBRACE, - STATE(1197), 1, - aux_sym_dictionary_repeat1, - [52852] = 4, + ACTIONS(1865), 1, + anon_sym_RPAREN, + STATE(1235), 1, + aux_sym__collection_elements_repeat1, + [52719] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, - anon_sym_COLON, - ACTIONS(2414), 1, + ACTIONS(2141), 1, + anon_sym_COMMA, + ACTIONS(2143), 1, anon_sym_RBRACE, - STATE(1424), 1, - sym_format_specifier, - [52865] = 4, + STATE(1214), 1, + aux_sym_dictionary_repeat1, + [52732] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2641), 1, + ACTIONS(2607), 1, anon_sym_COMMA, - ACTIONS(2643), 1, + ACTIONS(2610), 1, anon_sym_RBRACE, - STATE(1197), 1, - aux_sym_dictionary_repeat1, - [52878] = 2, + STATE(1179), 1, + aux_sym_match_mapping_pattern_repeat1, + [52745] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2645), 3, + ACTIONS(2612), 3, anon_sym_LPAREN, anon_sym_COLON, anon_sym_EQ, - [52887] = 2, + [52754] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2584), 3, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2356), 1, + anon_sym_LPAREN, + ACTIONS(2614), 1, anon_sym_COLON, - [52896] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1393), 3, - sym__newline, - anon_sym_in, - sym__semicolon, - [52905] = 4, + STATE(1412), 1, + sym_argument_list, + [52767] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2505), 1, - anon_sym_RPAREN, - ACTIONS(2647), 1, + ACTIONS(2616), 1, anon_sym_COMMA, - STATE(1194), 1, - aux_sym__import_list_repeat1, - [52918] = 4, + ACTIONS(2618), 1, + anon_sym_RBRACK, + STATE(1202), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [52780] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2650), 1, + ACTIONS(2620), 1, anon_sym_COMMA, - ACTIONS(2652), 1, + ACTIONS(2622), 1, anon_sym_COLON, - STATE(1231), 1, - aux_sym__parameters_repeat1, - [52931] = 4, + STATE(1143), 1, + aux_sym_with_clause_repeat1, + [52793] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2654), 1, + ACTIONS(2624), 1, + anon_sym_COLON, + ACTIONS(2420), 2, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2656), 1, - anon_sym_RBRACK, - STATE(1237), 1, - aux_sym_type_parameters_repeat1, - [52944] = 4, + [52804] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2658), 1, + ACTIONS(2626), 1, + anon_sym_RPAREN, + ACTIONS(2628), 1, anon_sym_COMMA, - ACTIONS(2661), 1, - anon_sym_RBRACE, - STATE(1197), 1, - aux_sym_dictionary_repeat1, - [52957] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2325), 1, - anon_sym_LPAREN, - ACTIONS(2663), 1, - anon_sym_COLON, - STATE(1357), 1, - sym_argument_list, - [52970] = 4, + STATE(1264), 1, + aux_sym_with_clause_repeat1, + [52817] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1798), 1, + ACTIONS(1788), 1, anon_sym_COMMA, - ACTIONS(2665), 1, + ACTIONS(2630), 1, anon_sym_in, STATE(842), 1, aux_sym__patterns_repeat1, - [52983] = 2, + [52830] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1154), 3, - anon_sym_RPAREN, + ACTIONS(2632), 1, + sym__semicolon, + ACTIONS(2634), 1, + sym__newline, + STATE(1205), 1, + aux_sym__simple_statements_repeat1, + [52843] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2491), 3, + sym__newline, anon_sym_COMMA, - anon_sym_COLON, - [52992] = 4, + sym__semicolon, + [52852] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2667), 1, + ACTIONS(2636), 1, anon_sym_COMMA, - ACTIONS(2669), 1, + ACTIONS(2638), 1, anon_sym_RBRACK, - STATE(1211), 1, - aux_sym_open_sequence_match_pattern_repeat1, - [53005] = 4, + STATE(1228), 1, + aux_sym_type_parameters_repeat1, + [52865] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2671), 1, + ACTIONS(1095), 3, anon_sym_RPAREN, - ACTIONS(2673), 1, anon_sym_COMMA, - STATE(1273), 1, - aux_sym_argument_list_repeat1, - [53018] = 4, + anon_sym_COLON, + [52874] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(2584), 1, + anon_sym_if, + ACTIONS(2640), 1, anon_sym_COLON, - ACTIONS(2675), 1, - anon_sym_COMMA, - STATE(1203), 1, - aux_sym__parameters_repeat1, - [53031] = 2, + STATE(1433), 1, + sym_guard, + [52887] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2520), 3, + ACTIONS(1845), 1, + anon_sym_COMMA, + ACTIONS(1957), 1, anon_sym_RPAREN, + STATE(1235), 1, + aux_sym__collection_elements_repeat1, + [52900] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2620), 1, anon_sym_COMMA, + ACTIONS(2642), 1, + anon_sym_COLON, + STATE(1183), 1, + aux_sym_with_clause_repeat1, + [52913] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2312), 1, anon_sym_COLON, - [53040] = 4, + ACTIONS(2644), 1, + anon_sym_RBRACE, + STATE(1378), 1, + sym_format_specifier, + [52926] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2626), 1, + ACTIONS(2546), 1, sym_identifier, - ACTIONS(2678), 1, + ACTIONS(2572), 1, anon_sym_RPAREN, - STATE(1325), 1, + STATE(1311), 1, sym_match_keyword_pattern, - [53053] = 4, + [52939] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2620), 1, + ACTIONS(2646), 1, anon_sym_COMMA, - ACTIONS(2680), 1, - anon_sym_COLON, - STATE(1181), 1, - aux_sym_with_clause_repeat1, - [53066] = 4, + ACTIONS(2649), 1, + anon_sym_RBRACK, + STATE(1196), 1, + aux_sym_index_expression_list_repeat1, + [52952] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2678), 1, - anon_sym_RPAREN, - ACTIONS(2682), 1, + ACTIONS(1810), 1, + anon_sym_COLON, + ACTIONS(2651), 1, anon_sym_COMMA, - STATE(1215), 1, - aux_sym_match_class_pattern_repeat2, - [53079] = 4, + STATE(1260), 1, + aux_sym__parameters_repeat1, + [52965] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1701), 1, - anon_sym_RPAREN, - ACTIONS(2684), 1, - anon_sym_COMMA, - STATE(1215), 1, - aux_sym_match_class_pattern_repeat2, - [53092] = 2, + ACTIONS(545), 1, + sym__newline, + ACTIONS(2653), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [52978] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2535), 3, - anon_sym_RPAREN, + ACTIONS(2105), 1, anon_sym_COMMA, - anon_sym_COLON, - [53101] = 4, + ACTIONS(2107), 1, + anon_sym_RBRACE, + STATE(1221), 1, + aux_sym_dictionary_repeat1, + [52991] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1697), 1, + ACTIONS(2655), 1, + sym__semicolon, + ACTIONS(2658), 1, + sym__newline, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [53004] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1687), 1, anon_sym_RPAREN, - ACTIONS(2686), 1, + ACTIONS(2660), 1, anon_sym_COMMA, - STATE(1031), 1, - aux_sym_open_sequence_match_pattern_repeat1, - [53114] = 4, + STATE(1272), 1, + aux_sym_match_class_pattern_repeat1, + [53017] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1697), 1, + ACTIONS(1677), 1, anon_sym_RBRACK, - ACTIONS(2688), 1, + ACTIONS(2662), 1, anon_sym_COMMA, - STATE(1031), 1, + STATE(1028), 1, aux_sym_open_sequence_match_pattern_repeat1, - [53127] = 4, + [53030] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - ACTIONS(1863), 1, - anon_sym_COLON, - STATE(865), 1, - aux_sym_match_value_pattern_repeat1, - [53140] = 4, + ACTIONS(2664), 1, + anon_sym_RPAREN, + ACTIONS(2666), 1, + anon_sym_COMMA, + STATE(1224), 1, + aux_sym__parameters_repeat1, + [53043] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1705), 1, + ACTIONS(1687), 1, anon_sym_RPAREN, - ACTIONS(2626), 1, + ACTIONS(2546), 1, sym_identifier, - STATE(1325), 1, + STATE(1311), 1, sym_match_keyword_pattern, - [53153] = 4, + [53056] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2690), 1, - anon_sym_COMMA, - ACTIONS(2692), 1, - anon_sym_RBRACK, - STATE(1267), 1, - aux_sym_index_expression_list_repeat1, - [53166] = 4, + ACTIONS(547), 1, + sym__newline, + ACTIONS(2668), 1, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [53069] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2694), 1, - anon_sym_RPAREN, - ACTIONS(2696), 1, - anon_sym_COMMA, - STATE(1215), 1, - aux_sym_match_class_pattern_repeat2, - [53179] = 4, + ACTIONS(1829), 1, + anon_sym_DOT, + ACTIONS(1833), 1, + anon_sym_COLON, + STATE(865), 1, + aux_sym_match_value_pattern_repeat1, + [53082] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1818), 1, - anon_sym_RBRACE, - ACTIONS(2699), 1, + ACTIONS(2109), 1, anon_sym_COMMA, - STATE(1174), 1, - aux_sym_match_mapping_pattern_repeat1, - [53192] = 3, - ACTIONS(1914), 1, - sym_comment, - ACTIONS(2288), 1, + ACTIONS(2111), 1, anon_sym_RBRACE, - ACTIONS(2290), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [53203] = 4, + STATE(1166), 1, + aux_sym_dictionary_repeat1, + [53095] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2349), 1, + ACTIONS(1687), 1, anon_sym_RPAREN, - ACTIONS(2701), 1, + ACTIONS(2670), 1, anon_sym_COMMA, - STATE(1051), 1, - aux_sym__collection_elements_repeat1, - [53216] = 3, - ACTIONS(1914), 1, + STATE(1226), 1, + aux_sym_match_class_pattern_repeat2, + [53108] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2703), 1, + ACTIONS(2272), 1, anon_sym_RBRACE, - ACTIONS(2705), 2, + ACTIONS(2274), 2, anon_sym_LBRACE2, aux_sym_format_specifier_token1, - [53227] = 4, + [53119] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2707), 1, + ACTIONS(2163), 3, + sym__newline, + anon_sym_EQ, sym__semicolon, - ACTIONS(2709), 1, + [53128] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2672), 1, + anon_sym_EQ, + ACTIONS(2674), 2, sym__newline, - STATE(1227), 1, - aux_sym__simple_statements_repeat1, - [53240] = 4, + sym__semicolon, + [53139] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, - anon_sym_COMMA, - ACTIONS(1895), 1, + ACTIONS(2444), 1, + anon_sym_as, + ACTIONS(2472), 2, anon_sym_RPAREN, - STATE(1274), 1, - aux_sym__collection_elements_repeat1, - [53253] = 4, + anon_sym_COMMA, + [53150] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(1788), 1, anon_sym_COMMA, - ACTIONS(2711), 1, - anon_sym_RPAREN, - STATE(1059), 1, - aux_sym__collection_elements_repeat1, - [53266] = 4, + ACTIONS(2676), 1, + anon_sym_in, + STATE(842), 1, + aux_sym__patterns_repeat1, + [53163] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(2678), 1, anon_sym_COMMA, - ACTIONS(2713), 1, - anon_sym_RPAREN, - STATE(1218), 1, - aux_sym__collection_elements_repeat1, - [53279] = 4, + ACTIONS(2680), 1, + anon_sym_RBRACE, + STATE(1268), 1, + aux_sym_dictionary_repeat1, + [53176] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2205), 1, + ACTIONS(2682), 1, anon_sym_COMMA, - ACTIONS(2207), 1, + ACTIONS(2684), 1, anon_sym_RBRACE, - STATE(1229), 1, + STATE(1268), 1, aux_sym_dictionary_repeat1, - [53292] = 4, + [53189] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, - anon_sym_COLON, - ACTIONS(2422), 1, - anon_sym_RBRACE, - STATE(1413), 1, - sym_format_specifier, - [53305] = 4, + ACTIONS(1845), 1, + anon_sym_COMMA, + ACTIONS(1945), 1, + anon_sym_RPAREN, + STATE(1235), 1, + aux_sym__collection_elements_repeat1, + [53202] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2715), 1, - sym_identifier, - ACTIONS(2717), 1, - sym_match_wildcard_pattern, - STATE(1048), 1, - sym_match_capture_pattern, - [53318] = 4, + ACTIONS(2477), 1, + anon_sym_RPAREN, + ACTIONS(2686), 1, + anon_sym_COMMA, + STATE(1217), 1, + aux_sym__import_list_repeat1, + [53215] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(551), 1, - sym__newline, - ACTIONS(2719), 1, - sym__semicolon, - STATE(1241), 1, - aux_sym__simple_statements_repeat1, - [53331] = 4, + ACTIONS(1941), 1, + anon_sym_RPAREN, + ACTIONS(1943), 1, + anon_sym_COMMA, + STATE(1240), 1, + aux_sym_argument_list_repeat1, + [53228] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2721), 1, - sym__semicolon, - ACTIONS(2723), 1, - sym__newline, - STATE(1251), 1, - aux_sym__simple_statements_repeat1, - [53344] = 4, + ACTIONS(1937), 1, + anon_sym_RPAREN, + ACTIONS(1939), 1, + anon_sym_COMMA, + STATE(1263), 1, + aux_sym_argument_list_repeat1, + [53241] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2725), 1, + ACTIONS(2689), 1, + anon_sym_RPAREN, + ACTIONS(2691), 1, anon_sym_COMMA, - ACTIONS(2727), 1, + STATE(1238), 1, + aux_sym_argument_list_repeat1, + [53254] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2693), 1, + anon_sym_COMMA, + ACTIONS(2695), 1, anon_sym_RBRACE, - STATE(1197), 1, + STATE(1268), 1, aux_sym_dictionary_repeat1, - [53357] = 4, + [53267] = 3, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(2697), 1, + anon_sym_RBRACE, + ACTIONS(2699), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [53278] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2729), 1, + ACTIONS(2701), 1, anon_sym_COMMA, - ACTIONS(2731), 1, + ACTIONS(2703), 1, anon_sym_RBRACE, - STATE(1197), 1, + STATE(1268), 1, aux_sym_dictionary_repeat1, - [53370] = 4, + [53291] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1826), 1, - anon_sym_COLON, - ACTIONS(2733), 1, + ACTIONS(1810), 1, + anon_sym_RPAREN, + ACTIONS(2705), 1, anon_sym_COMMA, - STATE(1203), 1, + STATE(1245), 1, aux_sym__parameters_repeat1, - [53383] = 4, + [53304] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2707), 1, + anon_sym_RPAREN, + ACTIONS(2709), 1, + anon_sym_COMMA, + STATE(1252), 1, + aux_sym_argument_list_repeat1, + [53317] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2711), 1, + anon_sym_RPAREN, + ACTIONS(2713), 1, + anon_sym_COMMA, + STATE(1226), 1, + aux_sym_match_class_pattern_repeat2, + [53330] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2716), 1, + anon_sym_COMMA, + ACTIONS(2718), 1, + anon_sym_RBRACK, + STATE(1233), 1, + aux_sym_index_expression_list_repeat1, + [53343] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2720), 1, + anon_sym_COMMA, + ACTIONS(2723), 1, + anon_sym_RBRACK, + STATE(1228), 1, + aux_sym_type_parameters_repeat1, + [53356] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2735), 1, + ACTIONS(1929), 1, + anon_sym_RPAREN, + ACTIONS(1931), 1, anon_sym_COMMA, - ACTIONS(2737), 1, - anon_sym_RBRACE, - STATE(1216), 1, - aux_sym_match_mapping_pattern_repeat1, - [53396] = 4, + STATE(1247), 1, + aux_sym_argument_list_repeat1, + [53369] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1954), 1, + ACTIONS(2725), 1, anon_sym_RPAREN, - ACTIONS(1956), 1, + ACTIONS(2727), 1, anon_sym_COMMA, - STATE(1238), 1, + STATE(1249), 1, aux_sym_argument_list_repeat1, - [53409] = 4, + [53382] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2739), 1, + ACTIONS(2302), 1, anon_sym_RPAREN, - ACTIONS(2741), 1, + ACTIONS(2442), 1, anon_sym_COMMA, - STATE(1239), 1, - aux_sym_argument_list_repeat1, - [53422] = 2, + STATE(1174), 1, + aux_sym__import_list_repeat1, + [53395] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2743), 3, - anon_sym_LPAREN, - anon_sym_COLON, - anon_sym_EQ, - [53431] = 4, + ACTIONS(2716), 1, + anon_sym_COMMA, + ACTIONS(2729), 1, + anon_sym_RBRACK, + STATE(1233), 1, + aux_sym_index_expression_list_repeat1, + [53408] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2633), 1, + ACTIONS(2731), 1, anon_sym_COMMA, - ACTIONS(2745), 1, + ACTIONS(2733), 1, anon_sym_RBRACK, - STATE(1214), 1, + STATE(1196), 1, aux_sym_index_expression_list_repeat1, - [53444] = 4, + [53421] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2747), 1, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2448), 1, + anon_sym_RBRACE, + STATE(1454), 1, + sym_format_specifier, + [53434] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2294), 1, + anon_sym_RPAREN, + ACTIONS(2735), 1, + anon_sym_COMMA, + STATE(1073), 1, + aux_sym__collection_elements_repeat1, + [53447] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2716), 1, anon_sym_COMMA, - ACTIONS(2750), 1, + ACTIONS(2737), 1, anon_sym_RBRACK, - STATE(1237), 1, - aux_sym_type_parameters_repeat1, - [53457] = 4, + STATE(1233), 1, + aux_sym_index_expression_list_repeat1, + [53460] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2752), 1, + ACTIONS(2739), 1, anon_sym_RPAREN, - ACTIONS(2754), 1, + ACTIONS(2741), 1, anon_sym_COMMA, - STATE(1246), 1, + STATE(1171), 1, aux_sym_argument_list_repeat1, - [53470] = 4, + [53473] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2756), 1, + ACTIONS(2743), 1, anon_sym_RPAREN, - ACTIONS(2758), 1, + ACTIONS(2745), 1, anon_sym_COMMA, - STATE(1246), 1, + STATE(1171), 1, aux_sym_argument_list_repeat1, - [53483] = 4, + [53486] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2464), 1, + anon_sym_RBRACE, + STATE(1430), 1, + sym_format_specifier, + [53499] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2760), 1, + ACTIONS(2747), 1, anon_sym_RPAREN, - ACTIONS(2762), 1, + ACTIONS(2749), 1, anon_sym_COMMA, - STATE(1246), 1, + STATE(1171), 1, aux_sym_argument_list_repeat1, - [53496] = 4, + [53512] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2764), 1, - sym__semicolon, - ACTIONS(2767), 1, + ACTIONS(1788), 1, + anon_sym_COMMA, + ACTIONS(2751), 1, + anon_sym_in, + STATE(842), 1, + aux_sym__patterns_repeat1, + [53525] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2472), 3, sym__newline, - STATE(1241), 1, - aux_sym__simple_statements_repeat1, - [53509] = 4, + anon_sym_COMMA, + sym__semicolon, + [53534] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1843), 1, + ACTIONS(1845), 1, anon_sym_COMMA, - ACTIONS(1924), 1, + ACTIONS(2753), 1, anon_sym_RPAREN, - STATE(1274), 1, + STATE(1255), 1, aux_sym__collection_elements_repeat1, - [53522] = 4, + [53547] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(557), 1, - sym__newline, - ACTIONS(2769), 1, - sym__semicolon, - STATE(1241), 1, - aux_sym__simple_statements_repeat1, - [53535] = 2, + ACTIONS(1845), 1, + anon_sym_COMMA, + ACTIONS(2755), 1, + anon_sym_RPAREN, + STATE(1063), 1, + aux_sym__collection_elements_repeat1, + [53560] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2757), 1, + anon_sym_RPAREN, + ACTIONS(2759), 1, + anon_sym_COMMA, + STATE(1245), 1, + aux_sym__parameters_repeat1, + [53573] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2771), 3, + ACTIONS(2762), 3, sym__newline, anon_sym_COMMA, sym__semicolon, - [53544] = 4, + [53582] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2773), 1, + ACTIONS(2764), 1, anon_sym_RPAREN, - ACTIONS(2775), 1, + ACTIONS(2766), 1, anon_sym_COMMA, - STATE(1246), 1, + STATE(1171), 1, aux_sym_argument_list_repeat1, - [53557] = 4, + [53595] = 3, + ACTIONS(1898), 1, + sym_comment, + ACTIONS(2251), 1, + anon_sym_RBRACE, + ACTIONS(2253), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [53606] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2777), 1, + ACTIONS(2768), 1, anon_sym_RPAREN, - ACTIONS(2779), 1, + ACTIONS(2770), 1, anon_sym_COMMA, - STATE(1246), 1, + STATE(1171), 1, aux_sym_argument_list_repeat1, - [53570] = 4, + [53619] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2161), 1, + ACTIONS(2772), 1, + anon_sym_RPAREN, + ACTIONS(2774), 1, anon_sym_COMMA, - ACTIONS(2163), 1, + STATE(1171), 1, + aux_sym_argument_list_repeat1, + [53632] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2312), 1, + anon_sym_COLON, + ACTIONS(2776), 1, anon_sym_RBRACE, - STATE(1263), 1, - aux_sym_dictionary_repeat1, - [53583] = 4, + STATE(1450), 1, + sym_format_specifier, + [53645] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2652), 1, + ACTIONS(2778), 1, anon_sym_RPAREN, - ACTIONS(2782), 1, + ACTIONS(2780), 1, anon_sym_COMMA, - STATE(1266), 1, - aux_sym__parameters_repeat1, - [53596] = 4, + STATE(1171), 1, + aux_sym_argument_list_repeat1, + [53658] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2353), 1, - anon_sym_COLON, + ACTIONS(2782), 1, + anon_sym_RPAREN, ACTIONS(2784), 1, - anon_sym_RBRACE, - STATE(1440), 1, - sym_format_specifier, - [53609] = 4, + anon_sym_COMMA, + STATE(1171), 1, + aux_sym_argument_list_repeat1, + [53671] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(2157), 1, + sym_identifier, ACTIONS(2786), 1, - anon_sym_if, + anon_sym_import, + STATE(1453), 1, + sym_dotted_name, + [53684] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2294), 1, + anon_sym_RPAREN, ACTIONS(2788), 1, - anon_sym_COLON, - STATE(1441), 1, - sym_guard, - [53622] = 4, + anon_sym_COMMA, + STATE(1073), 1, + aux_sym__collection_elements_repeat1, + [53697] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(549), 1, - sym__newline, + ACTIONS(1788), 1, + anon_sym_COMMA, ACTIONS(2790), 1, - sym__semicolon, - STATE(1241), 1, - aux_sym__simple_statements_repeat1, - [53635] = 4, + anon_sym_in, + STATE(842), 1, + aux_sym__patterns_repeat1, + [53710] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2329), 1, - anon_sym_LBRACK, + ACTIONS(2356), 1, + anon_sym_LPAREN, ACTIONS(2792), 1, - anon_sym_EQ, - STATE(1452), 1, - sym_type_parameters, - [53648] = 3, - ACTIONS(3), 1, + anon_sym_COLON, + STATE(1422), 1, + sym_argument_list, + [53723] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(2083), 1, - anon_sym_from, - ACTIONS(2087), 2, - sym__newline, - sym__semicolon, - [53659] = 3, + ACTIONS(2216), 1, + anon_sym_RBRACE, + ACTIONS(2218), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [53734] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2794), 1, + ACTIONS(2538), 3, + anon_sym_RPAREN, anon_sym_COMMA, - ACTIONS(2796), 2, - anon_sym_if, anon_sym_COLON, - [53670] = 3, + [53743] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2798), 1, + ACTIONS(2757), 1, anon_sym_COLON, - ACTIONS(2520), 2, - anon_sym_RPAREN, + ACTIONS(2794), 1, anon_sym_COMMA, - [53681] = 2, + STATE(1260), 1, + aux_sym__parameters_repeat1, + [53756] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2449), 3, + ACTIONS(2757), 3, anon_sym_RPAREN, anon_sym_COMMA, anon_sym_COLON, - [53690] = 4, + [53765] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(989), 1, - anon_sym_RPAREN, - ACTIONS(2800), 1, + ACTIONS(1788), 1, anon_sym_COMMA, - STATE(1102), 1, - aux_sym_with_clause_repeat1, - [53703] = 2, + ACTIONS(2797), 1, + anon_sym_in, + STATE(842), 1, + aux_sym__patterns_repeat1, + [53778] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2179), 3, - sym__newline, - anon_sym_EQ, - sym__semicolon, - [53712] = 3, - ACTIONS(1914), 1, + ACTIONS(2799), 1, + anon_sym_RPAREN, + ACTIONS(2801), 1, + anon_sym_COMMA, + STATE(1171), 1, + aux_sym_argument_list_repeat1, + [53791] = 4, + ACTIONS(3), 1, sym_comment, - ACTIONS(2284), 1, - anon_sym_RBRACE, - ACTIONS(2286), 2, - anon_sym_LBRACE2, - aux_sym_format_specifier_token1, - [53723] = 4, + ACTIONS(960), 1, + anon_sym_RPAREN, + ACTIONS(2803), 1, + anon_sym_COMMA, + STATE(1143), 1, + aux_sym_with_clause_repeat1, + [53804] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2325), 1, - anon_sym_LPAREN, - ACTIONS(2802), 1, + ACTIONS(2523), 3, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_COLON, - STATE(1421), 1, - sym_argument_list, - [53736] = 4, + [53813] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2181), 1, - anon_sym_COMMA, - ACTIONS(2183), 1, + ACTIONS(1804), 1, anon_sym_RBRACE, - STATE(1188), 1, - aux_sym_dictionary_repeat1, - [53749] = 4, + ACTIONS(2805), 1, + anon_sym_COMMA, + STATE(1179), 1, + aux_sym_match_mapping_pattern_repeat1, + [53826] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2786), 1, - anon_sym_if, - ACTIONS(2804), 1, + ACTIONS(2807), 3, + anon_sym_RPAREN, + anon_sym_COMMA, anon_sym_COLON, - STATE(1432), 1, - sym_guard, - [53762] = 4, + [53835] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2806), 1, + ACTIONS(2809), 1, anon_sym_COMMA, - ACTIONS(2808), 1, + ACTIONS(2812), 1, anon_sym_RBRACE, - STATE(1197), 1, + STATE(1268), 1, aux_sym_dictionary_repeat1, - [53775] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2810), 1, - anon_sym_in, - ACTIONS(2812), 2, - sym__newline, - sym__semicolon, - [53786] = 4, + [53848] = 4, ACTIONS(3), 1, sym_comment, + ACTIONS(1685), 1, + anon_sym_RPAREN, ACTIONS(2814), 1, anon_sym_COMMA, + STATE(1277), 1, + aux_sym_match_class_pattern_repeat2, + [53861] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(551), 1, + sym__newline, ACTIONS(2816), 1, - anon_sym_RBRACE, - STATE(1197), 1, - aux_sym_dictionary_repeat1, - [53799] = 4, + sym__semicolon, + STATE(1200), 1, + aux_sym__simple_statements_repeat1, + [53874] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(1826), 1, + ACTIONS(2548), 1, anon_sym_RPAREN, ACTIONS(2818), 1, anon_sym_COMMA, STATE(1165), 1, - aux_sym__parameters_repeat1, - [53812] = 4, + aux_sym_match_class_pattern_repeat2, + [53887] = 4, ACTIONS(3), 1, sym_comment, ACTIONS(2820), 1, - anon_sym_COMMA, - ACTIONS(2823), 1, - anon_sym_RBRACK, - STATE(1267), 1, - aux_sym_index_expression_list_repeat1, - [53825] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2498), 3, - sym__newline, - anon_sym_COMMA, - sym__semicolon, - [53834] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2825), 1, anon_sym_RPAREN, - ACTIONS(2827), 1, + ACTIONS(2822), 1, anon_sym_COMMA, - STATE(1183), 1, + STATE(1272), 1, aux_sym_match_class_pattern_repeat1, - [53847] = 4, + [53900] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2825), 1, + ACTIONS(2420), 3, anon_sym_RPAREN, - ACTIONS(2829), 1, - anon_sym_COMMA, - STATE(1208), 1, - aux_sym_match_class_pattern_repeat2, - [53860] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2165), 1, - sym_identifier, - STATE(1124), 1, - sym_dotted_name, - STATE(1268), 1, - sym_aliased_import, - [53873] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1798), 1, anon_sym_COMMA, - ACTIONS(2831), 1, - anon_sym_in, - STATE(842), 1, - aux_sym__patterns_repeat1, - [53886] = 4, + anon_sym_COLON, + [53909] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2833), 1, - anon_sym_RPAREN, - ACTIONS(2835), 1, + ACTIONS(2664), 1, + anon_sym_COLON, + ACTIONS(2825), 1, anon_sym_COMMA, - STATE(1246), 1, - aux_sym_argument_list_repeat1, - [53899] = 4, + STATE(1197), 1, + aux_sym__parameters_repeat1, + [53922] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2349), 1, - anon_sym_RPAREN, - ACTIONS(2837), 1, + ACTIONS(2424), 1, + anon_sym_EQ, + ACTIONS(2420), 2, anon_sym_COMMA, - STATE(1051), 1, - aux_sym__collection_elements_repeat1, - [53912] = 4, + anon_sym_COLON, + [53933] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1926), 1, + ACTIONS(2827), 3, anon_sym_RPAREN, - ACTIONS(1928), 1, anon_sym_COMMA, - STATE(1167), 1, - aux_sym_argument_list_repeat1, - [53925] = 4, + anon_sym_COLON, + [53942] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2839), 1, + ACTIONS(2548), 1, anon_sym_RPAREN, - ACTIONS(2841), 1, + ACTIONS(2818), 1, anon_sym_COMMA, - STATE(1169), 1, - aux_sym_argument_list_repeat1, - [53938] = 4, + STATE(1226), 1, + aux_sym_match_class_pattern_repeat2, + [53955] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2654), 1, + ACTIONS(2636), 1, anon_sym_COMMA, - ACTIONS(2843), 1, + ACTIONS(2829), 1, anon_sym_RBRACK, - STATE(1196), 1, + STATE(1189), 1, aux_sym_type_parameters_repeat1, - [53951] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1798), 1, - anon_sym_COMMA, - ACTIONS(2845), 1, - anon_sym_in, - STATE(842), 1, - aux_sym__patterns_repeat1, - [53964] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(1798), 1, - anon_sym_COMMA, - ACTIONS(2847), 1, - anon_sym_in, - STATE(842), 1, - aux_sym__patterns_repeat1, - [53977] = 4, + [53968] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2633), 1, - anon_sym_COMMA, - ACTIONS(2849), 1, - anon_sym_RBRACK, - STATE(1214), 1, - aux_sym_index_expression_list_repeat1, - [53990] = 4, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2576), 1, - anon_sym_RPAREN, - ACTIONS(2626), 1, + ACTIONS(2404), 1, sym_identifier, - STATE(1325), 1, - sym_match_keyword_pattern, - [54003] = 4, + STATE(1212), 1, + sym_dotted_name, + STATE(1306), 1, + sym_aliased_import, + [53981] = 4, ACTIONS(3), 1, sym_comment, - ACTIONS(2626), 1, - sym_identifier, - ACTIONS(2851), 1, - anon_sym_RPAREN, - STATE(1325), 1, - sym_match_keyword_pattern, - [54016] = 3, + ACTIONS(2360), 1, + anon_sym_LBRACK, + ACTIONS(2831), 1, + anon_sym_EQ, + STATE(1441), 1, + sym_type_parameters, + [53994] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2085), 1, - anon_sym_COMMA, - STATE(1065), 1, - aux_sym_expression_list_repeat1, - [54026] = 3, - ACTIONS(3), 1, + ACTIONS(2833), 1, + anon_sym_in, + ACTIONS(2835), 2, + sym__newline, + sym__semicolon, + [54005] = 3, + ACTIONS(1898), 1, sym_comment, - ACTIONS(1867), 1, - anon_sym_COMMA, - STATE(933), 1, - aux_sym_expression_list_repeat1, - [54036] = 2, + ACTIONS(2255), 1, + anon_sym_RBRACE, + ACTIONS(2257), 2, + anon_sym_LBRACE2, + aux_sym_format_specifier_token1, + [54016] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2853), 2, + ACTIONS(2837), 2, anon_sym_COMMA, anon_sym_RBRACK, - [54044] = 2, - ACTIONS(3), 1, - sym_comment, - ACTIONS(888), 2, - anon_sym_except, - anon_sym_finally, - [54052] = 3, + [54024] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1824), 1, + ACTIONS(1798), 1, anon_sym_RBRACE, - ACTIONS(2855), 1, + ACTIONS(2839), 1, anon_sym_COMMA, - [54062] = 3, + [54034] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2857), 1, - anon_sym_COLON, - ACTIONS(2859), 1, - anon_sym_DASH_GT, - [54072] = 3, + ACTIONS(2546), 1, + sym_identifier, + STATE(1311), 1, + sym_match_keyword_pattern, + [54044] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1299), 1, - sym_parameters, - [54082] = 3, + ACTIONS(2841), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [54052] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2861), 1, - sym_integer, - ACTIONS(2863), 1, - sym_float, - [54092] = 2, + ACTIONS(2346), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [54060] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2865), 2, + ACTIONS(2843), 2, sym__newline, sym__semicolon, - [54100] = 2, + [54068] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2867), 2, + ACTIONS(2845), 2, sym__newline, sym__semicolon, - [54108] = 2, + [54076] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2869), 2, + ACTIONS(2847), 2, sym__newline, sym__semicolon, - [54116] = 2, + [54084] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2871), 2, + ACTIONS(1876), 2, sym__newline, sym__semicolon, - [54124] = 2, + [54092] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2520), 2, + ACTIONS(2420), 2, anon_sym_COMMA, anon_sym_COLON, - [54132] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2873), 1, - sym_integer, - ACTIONS(2875), 1, - sym_float, - [54142] = 2, + [54100] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2877), 2, + ACTIONS(2849), 2, sym__newline, sym__semicolon, - [54150] = 2, + [54108] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2177), 2, - sym__newline, - sym__semicolon, - [54158] = 3, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1308), 1, + sym_parameters, + [54118] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2879), 1, - anon_sym_COLON, - ACTIONS(2881), 1, - anon_sym_DASH_GT, - [54168] = 2, + ACTIONS(2851), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [54126] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2883), 2, - anon_sym_COMMA, - anon_sym_RBRACE, - [54176] = 2, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1310), 1, + sym_parameters, + [54136] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2885), 2, - sym__newline, - sym__semicolon, - [54184] = 3, + ACTIONS(874), 2, + anon_sym_except, + anon_sym_finally, + [54144] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2887), 1, + ACTIONS(2853), 2, anon_sym_COLON, - ACTIONS(2889), 1, anon_sym_DASH_GT, - [54194] = 3, + [54152] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1324), 1, - sym_parameters, - [54204] = 2, + ACTIONS(2855), 1, + anon_sym_COMMA, + STATE(1139), 1, + aux_sym_open_sequence_match_pattern_repeat1, + [54162] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2891), 2, - sym__newline, - sym__semicolon, - [54212] = 2, + ACTIONS(2053), 1, + anon_sym_COMMA, + STATE(1060), 1, + aux_sym_expression_list_repeat1, + [54172] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2893), 2, + ACTIONS(2165), 2, sym__newline, sym__semicolon, - [54220] = 2, + [54180] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2628), 2, - anon_sym_RPAREN, + ACTIONS(2857), 1, + sym_integer, + ACTIONS(2859), 1, + sym_float, + [54190] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2861), 2, anon_sym_COMMA, - [54228] = 2, + anon_sym_RBRACK, + [54198] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(896), 2, + anon_sym_except, + anon_sym_finally, + [54206] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2895), 2, + ACTIONS(2863), 1, anon_sym_COLON, + ACTIONS(2865), 1, anon_sym_DASH_GT, - [54236] = 2, + [54216] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2897), 2, + ACTIONS(2472), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACE, - [54244] = 3, + [54224] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2794), 1, - anon_sym_COMMA, - ACTIONS(2899), 1, + ACTIONS(2762), 2, anon_sym_RPAREN, - [54254] = 3, + anon_sym_COMMA, + [54232] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2901), 1, + ACTIONS(2867), 1, + anon_sym_COLON, + ACTIONS(2869), 1, + anon_sym_DASH_GT, + [54242] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2871), 1, anon_sym_COMMA, - STATE(1210), 1, + STATE(1160), 1, aux_sym_open_sequence_match_pattern_repeat1, - [54264] = 2, + [54252] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(910), 2, - anon_sym_except, - anon_sym_finally, - [54272] = 2, + ACTIONS(2873), 1, + anon_sym_COLON, + ACTIONS(2875), 1, + anon_sym_DASH_GT, + [54262] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2903), 2, + ACTIONS(2711), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, + [54270] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2877), 1, + anon_sym_COLON, + ACTIONS(2879), 1, + anon_sym_DASH_GT, [54280] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2905), 2, - anon_sym_COMMA, - anon_sym_RBRACK, + ACTIONS(902), 2, + anon_sym_except, + anon_sym_finally, [54288] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2385), 2, - anon_sym_RPAREN, + ACTIONS(2881), 2, anon_sym_COMMA, - [54296] = 2, + anon_sym_RBRACE, + [54296] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(1865), 2, - sym__newline, - sym__semicolon, - [54304] = 2, + ACTIONS(2883), 1, + anon_sym_COLON, + ACTIONS(2885), 1, + anon_sym_DASH_GT, + [54306] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2767), 2, - sym__newline, - sym__semicolon, - [54312] = 3, + ACTIONS(878), 2, + anon_sym_except, + anon_sym_finally, + [54314] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2907), 1, - anon_sym_COMMA, - STATE(1139), 1, - aux_sym_open_sequence_match_pattern_repeat1, + ACTIONS(2887), 2, + anon_sym_COLON, + anon_sym_DASH_GT, [54322] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2909), 2, + ACTIONS(2820), 2, anon_sym_RPAREN, anon_sym_COMMA, - [54330] = 3, + [54330] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2911), 1, - sym_integer, - ACTIONS(2913), 1, - sym_float, - [54340] = 2, + ACTIONS(2889), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [54338] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2323), 2, + ACTIONS(2891), 2, + anon_sym_RPAREN, anon_sym_COMMA, - anon_sym_RBRACK, - [54348] = 2, + [54346] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(914), 2, + ACTIONS(906), 2, anon_sym_except, anon_sym_finally, - [54356] = 2, + [54354] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2498), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [54364] = 3, + ACTIONS(2893), 2, + sym__newline, + sym__semicolon, + [54362] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2737), 1, - anon_sym_RBRACE, - ACTIONS(2915), 1, - anon_sym_COMMA, - [54374] = 3, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1305), 1, + sym_parameters, + [54372] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2917), 1, + ACTIONS(2895), 1, anon_sym_COLON, - ACTIONS(2919), 1, + ACTIONS(2897), 1, anon_sym_DASH_GT, - [54384] = 2, + [54382] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2694), 2, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2899), 1, + sym_integer, + ACTIONS(2901), 1, + sym_float, [54392] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2771), 2, - anon_sym_RPAREN, - anon_sym_COMMA, + ACTIONS(2903), 2, + sym__newline, + sym__semicolon, [54400] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2175), 2, + ACTIONS(2905), 2, sym__newline, sym__semicolon, - [54408] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2921), 1, - anon_sym_COLON, - ACTIONS(2923), 1, - anon_sym_DASH_GT, - [54418] = 3, + [54408] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2925), 1, - anon_sym_COLON, - ACTIONS(2927), 1, - anon_sym_DASH_GT, - [54428] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2929), 1, - anon_sym_COLON, - ACTIONS(2931), 1, - anon_sym_DASH_GT, - [54438] = 3, - ACTIONS(3), 1, - sym_comment, - ACTIONS(2933), 1, - anon_sym_COLON, - ACTIONS(2935), 1, - anon_sym_DASH_GT, - [54448] = 2, + ACTIONS(2907), 2, + sym__newline, + sym__semicolon, + [54416] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2937), 2, + ACTIONS(1878), 1, anon_sym_COMMA, - anon_sym_RBRACK, - [54456] = 2, + STATE(950), 1, + aux_sym_expression_list_repeat1, + [54426] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(925), 2, - anon_sym_except, - anon_sym_finally, - [54464] = 2, + ACTIONS(2909), 2, + sym__newline, + sym__semicolon, + [54434] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2939), 2, - anon_sym_COLON, - anon_sym_DASH_GT, - [54472] = 2, + ACTIONS(2911), 1, + anon_sym_COMMA, + ACTIONS(2913), 1, + anon_sym_RBRACE, + [54444] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2941), 2, + ACTIONS(2610), 2, anon_sym_COMMA, anon_sym_RBRACE, - [54480] = 2, + [54452] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2915), 2, + anon_sym_RPAREN, + anon_sym_COMMA, + [54460] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2612), 2, + ACTIONS(2917), 2, anon_sym_COMMA, - anon_sym_RBRACE, - [54488] = 2, + anon_sym_RBRACK, + [54468] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2943), 2, - sym__newline, - sym__semicolon, - [54496] = 2, + ACTIONS(2350), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [54476] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2945), 2, - sym__newline, - sym__semicolon, - [54504] = 2, + ACTIONS(2919), 2, + anon_sym_COMMA, + anon_sym_RBRACK, + [54484] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2947), 2, - anon_sym_RPAREN, + ACTIONS(2921), 2, anon_sym_COMMA, - [54512] = 2, + anon_sym_RBRACK, + [54492] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2129), 2, + ACTIONS(2167), 2, sym__newline, sym__semicolon, - [54520] = 2, + [54500] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2949), 2, + ACTIONS(2923), 2, sym__newline, sym__semicolon, - [54528] = 2, + [54508] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2925), 1, + sym_integer, + ACTIONS(2927), 1, + sym_float, + [54518] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2951), 2, + ACTIONS(2191), 2, sym__newline, sym__semicolon, + [54526] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2929), 1, + anon_sym_COLON, + ACTIONS(2931), 1, + anon_sym_DASH_GT, [54536] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2953), 1, - sym_identifier, - STATE(1300), 1, - sym_match_capture_pattern, + ACTIONS(2402), 1, + anon_sym_LPAREN, + STATE(1349), 1, + sym_parameters, [54546] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2955), 2, - anon_sym_RPAREN, - anon_sym_COMMA, - [54554] = 2, + ACTIONS(2933), 2, + sym__newline, + sym__semicolon, + [54554] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2957), 2, + ACTIONS(2595), 1, + anon_sym_RBRACE, + ACTIONS(2935), 1, anon_sym_COMMA, - anon_sym_RBRACK, - [54562] = 3, + [54564] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1330), 1, - sym_parameters, - [54572] = 2, + ACTIONS(2937), 2, + sym__newline, + sym__semicolon, + [54572] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2959), 2, - anon_sym_COMMA, - anon_sym_RBRACK, - [54580] = 3, + ACTIONS(1829), 1, + anon_sym_DOT, + STATE(1206), 1, + aux_sym_match_value_pattern_repeat1, + [54582] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2447), 1, - anon_sym_LPAREN, - STATE(1331), 1, - sym_parameters, - [54590] = 2, + ACTIONS(2939), 1, + sym_identifier, + STATE(1314), 1, + sym_match_capture_pattern, + [54592] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(906), 2, - anon_sym_except, - anon_sym_finally, - [54598] = 2, + ACTIONS(2941), 1, + anon_sym_COLON, + ACTIONS(2943), 1, + anon_sym_DASH_GT, + [54602] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2961), 2, - sym__newline, - sym__semicolon, - [54606] = 3, + ACTIONS(2945), 2, + anon_sym_COMMA, + anon_sym_RBRACE, + [54610] = 3, ACTIONS(3), 1, sym_comment, - ACTIONS(2963), 1, + ACTIONS(2580), 1, anon_sym_COMMA, - ACTIONS(2965), 1, - anon_sym_RBRACE, - [54616] = 3, + ACTIONS(2947), 1, + anon_sym_RPAREN, + [54620] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1859), 1, - anon_sym_DOT, - STATE(1212), 1, - aux_sym_match_value_pattern_repeat1, - [54626] = 3, + ACTIONS(2658), 2, + sym__newline, + sym__semicolon, + [54628] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2626), 1, - sym_identifier, - STATE(1325), 1, - sym_match_keyword_pattern, + ACTIONS(2949), 2, + sym__newline, + sym__semicolon, [54636] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2967), 1, - anon_sym_COLON, + ACTIONS(2951), 1, + anon_sym_RBRACE, [54643] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2969), 1, - anon_sym_RBRACE, + ACTIONS(2220), 1, + anon_sym_COLON, [54650] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2971), 1, + ACTIONS(2953), 1, anon_sym_COLON, [54657] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2973), 1, - anon_sym_COLON, + ACTIONS(2955), 1, + sym_identifier, [54664] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2975), 1, + ACTIONS(2957), 1, anon_sym_COLON, [54671] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2977), 1, - sym_identifier, + ACTIONS(2959), 1, + anon_sym_RPAREN, [54678] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2979), 1, + ACTIONS(2961), 1, anon_sym_RBRACE, [54685] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2981), 1, - anon_sym_in, + ACTIONS(2963), 1, + anon_sym_RBRACK, [54692] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2983), 1, - anon_sym_RPAREN, + ACTIONS(2965), 1, + anon_sym_RBRACE, [54699] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2985), 1, - anon_sym_RBRACK, + ACTIONS(2967), 1, + anon_sym_RBRACE, [54706] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2987), 1, - anon_sym_RPAREN, + ACTIONS(2969), 1, + anon_sym_COLON, [54713] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2989), 1, + ACTIONS(2971), 1, anon_sym_COLON, [54720] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2991), 1, - anon_sym_RBRACE, + ACTIONS(2973), 1, + sym_identifier, [54727] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2993), 1, - anon_sym_RBRACE, + ACTIONS(2975), 1, + anon_sym_in, [54734] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2995), 1, - anon_sym_RBRACE, + ACTIONS(2977), 1, + anon_sym_RPAREN, [54741] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2997), 1, - anon_sym_import, + ACTIONS(2979), 1, + anon_sym_RBRACK, [54748] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2999), 1, - anon_sym_COLON, + ACTIONS(2981), 1, + anon_sym_RPAREN, [54755] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3001), 1, - anon_sym_RPAREN, + ACTIONS(2983), 1, + anon_sym_RBRACE, [54762] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3003), 1, - anon_sym_import, + ACTIONS(2985), 1, + anon_sym_RBRACE, [54769] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3005), 1, - sym_identifier, + ACTIONS(2987), 1, + anon_sym_COLON, [54776] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3007), 1, - anon_sym_RBRACK, + ACTIONS(2989), 1, + anon_sym_RPAREN, [54783] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2849), 1, - anon_sym_RBRACK, + ACTIONS(2991), 1, + anon_sym_COLON, [54790] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2745), 1, - anon_sym_RBRACK, + ACTIONS(2993), 1, + anon_sym_RPAREN, [54797] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3009), 1, - anon_sym_RPAREN, + ACTIONS(2718), 1, + anon_sym_RBRACK, [54804] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3011), 1, - anon_sym_RPAREN, + ACTIONS(2995), 1, + anon_sym_RBRACE, [54811] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3013), 1, - sym_identifier, + ACTIONS(2737), 1, + anon_sym_RBRACK, [54818] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3015), 1, - sym_identifier, + ACTIONS(2997), 1, + anon_sym_RPAREN, [54825] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1002), 1, - anon_sym_STAR, + ACTIONS(2913), 1, + anon_sym_RBRACE, [54832] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3017), 1, - anon_sym_COLON, + ACTIONS(2999), 1, + anon_sym_RBRACE, [54839] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2422), 1, - anon_sym_RBRACE, + ACTIONS(3001), 1, + anon_sym_COLON, [54846] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3019), 1, - anon_sym_COLON, + ACTIONS(2464), 1, + anon_sym_RBRACE, [54853] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3021), 1, - anon_sym_COLON, + ACTIONS(3003), 1, + sym_identifier, [54860] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3023), 1, - anon_sym_LPAREN, + ACTIONS(3005), 1, + anon_sym_RBRACK, [54867] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2965), 1, - anon_sym_RBRACE, + ACTIONS(3007), 1, + anon_sym_import, [54874] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3025), 1, - anon_sym_import, + ACTIONS(2570), 1, + anon_sym_in, [54881] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2635), 1, - anon_sym_RBRACK, + ACTIONS(3009), 1, + anon_sym_RPAREN, [54888] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3027), 1, - ts_builtin_sym_end, + ACTIONS(3011), 1, + anon_sym_import, [54895] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3029), 1, - anon_sym_COLON, + ACTIONS(2790), 1, + anon_sym_in, [54902] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2414), 1, - anon_sym_RBRACE, + ACTIONS(3013), 1, + anon_sym_COLON, [54909] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3031), 1, - anon_sym_COLON, + ACTIONS(3015), 1, + anon_sym_RBRACK, [54916] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3033), 1, - anon_sym_in, + ACTIONS(3017), 1, + anon_sym_COLON, [54923] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3035), 1, - anon_sym_RPAREN, + ACTIONS(3019), 1, + anon_sym_in, [54930] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3037), 1, - anon_sym_in, + ACTIONS(2266), 1, + anon_sym_COLON, [54937] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3039), 1, - sym_identifier, + ACTIONS(3021), 1, + anon_sym_COLON, [54944] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2105), 1, - anon_sym_EQ, + ACTIONS(3023), 1, + anon_sym_RBRACE, [54951] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3041), 1, - anon_sym_RBRACE, + ACTIONS(3025), 1, + anon_sym_COLON, [54958] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3043), 1, - sym_identifier, + ACTIONS(3027), 1, + anon_sym_COLON, [54965] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3045), 1, + ACTIONS(3029), 1, anon_sym_RBRACE, [54972] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3047), 1, + ACTIONS(3031), 1, anon_sym_COLON, [54979] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3049), 1, + ACTIONS(3033), 1, anon_sym_COLON, [54986] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2257), 1, + ACTIONS(3035), 1, anon_sym_COLON, [54993] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3051), 1, - sym_identifier, + ACTIONS(3037), 1, + anon_sym_COLON, [55000] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2831), 1, - anon_sym_in, + ACTIONS(3039), 1, + anon_sym_RBRACK, [55007] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3053), 1, + ACTIONS(3041), 1, anon_sym_RPAREN, [55014] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3055), 1, - anon_sym_COLON, + ACTIONS(3043), 1, + sym_identifier, [55021] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3057), 1, + ACTIONS(3045), 1, sym_identifier, [55028] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3059), 1, - anon_sym_COLON, + ACTIONS(3047), 1, + sym_identifier, [55035] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3061), 1, + ACTIONS(3049), 1, anon_sym_COLON, [55042] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3063), 1, + ACTIONS(3051), 1, anon_sym_COLON, [55049] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2603), 1, - anon_sym_RBRACE, + ACTIONS(3053), 1, + anon_sym_RBRACK, [55056] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3065), 1, - anon_sym_COLON, + ACTIONS(3055), 1, + anon_sym_RBRACE, [55063] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3067), 1, - sym_identifier, + ACTIONS(3057), 1, + anon_sym_COLON, [55070] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2209), 1, - anon_sym_COLON, + ACTIONS(2676), 1, + anon_sym_in, [55077] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3069), 1, - anon_sym_RBRACK, + ACTIONS(3059), 1, + sym_identifier, [55084] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3071), 1, - sym_identifier, + ACTIONS(2061), 1, + anon_sym_EQ, [55091] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3073), 1, - anon_sym_COLON, + ACTIONS(1804), 1, + anon_sym_RBRACE, [55098] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3075), 1, - anon_sym_RPAREN, + ACTIONS(3061), 1, + anon_sym_COLON, [55105] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3077), 1, - anon_sym_COLON, + ACTIONS(3063), 1, + anon_sym_in, [55112] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3079), 1, + ACTIONS(3065), 1, anon_sym_COLON, [55119] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2302), 1, + ACTIONS(3067), 1, anon_sym_COLON, [55126] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2784), 1, - anon_sym_RBRACE, + ACTIONS(2249), 1, + anon_sym_COLON, [55133] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3081), 1, - anon_sym_for, + ACTIONS(3069), 1, + sym_identifier, [55140] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3083), 1, - anon_sym_RBRACK, + ACTIONS(3071), 1, + sym_identifier, [55147] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(1818), 1, - anon_sym_RBRACE, + ACTIONS(3073), 1, + anon_sym_RPAREN, [55154] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3085), 1, - anon_sym_COLON, + ACTIONS(3075), 1, + anon_sym_RBRACK, [55161] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2605), 1, - anon_sym_in, + ACTIONS(3077), 1, + anon_sym_COLON, [55168] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3087), 1, - anon_sym_COLON, + ACTIONS(2644), 1, + anon_sym_RBRACE, [55175] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3089), 1, + ACTIONS(3079), 1, anon_sym_COLON, [55182] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3091), 1, - anon_sym_COLON, + ACTIONS(3081), 1, + anon_sym_RPAREN, [55189] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3093), 1, + ACTIONS(3083), 1, anon_sym_COLON, [55196] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3095), 1, + ACTIONS(3085), 1, anon_sym_COLON, [55203] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3097), 1, + ACTIONS(3087), 1, anon_sym_COLON, [55210] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3099), 1, - anon_sym_COLON, + ACTIONS(3089), 1, + anon_sym_RPAREN, [55217] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2614), 1, + ACTIONS(2630), 1, anon_sym_in, [55224] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3101), 1, + ACTIONS(3091), 1, anon_sym_COLON, [55231] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3103), 1, - anon_sym_RBRACE, + ACTIONS(3093), 1, + anon_sym_COLON, [55238] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3105), 1, - anon_sym_RBRACE, + ACTIONS(2280), 1, + anon_sym_COLON, [55245] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3107), 1, - anon_sym_COLON, + ACTIONS(3095), 1, + anon_sym_EQ, [55252] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3109), 1, - sym_identifier, + ACTIONS(3097), 1, + anon_sym_in, [55259] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3111), 1, - anon_sym_RBRACK, + ACTIONS(962), 1, + anon_sym_STAR, [55266] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3113), 1, + ACTIONS(3099), 1, anon_sym_COLON, [55273] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3115), 1, - anon_sym_RBRACK, + ACTIONS(3101), 1, + sym_identifier, [55280] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2665), 1, - anon_sym_in, + ACTIONS(3103), 1, + anon_sym_RBRACE, [55287] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3117), 1, - anon_sym_COLON, + ACTIONS(3105), 1, + anon_sym_RPAREN, [55294] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3119), 1, - anon_sym_RPAREN, + ACTIONS(3107), 1, + anon_sym_COLON, [55301] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2282), 1, - anon_sym_COLON, + ACTIONS(856), 1, + anon_sym_def, [55308] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3121), 1, - sym_identifier, + ACTIONS(3109), 1, + anon_sym_RBRACE, [55315] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3123), 1, - anon_sym_in, + ACTIONS(3111), 1, + sym_identifier, [55322] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3125), 1, - anon_sym_EQ, + ACTIONS(3113), 1, + anon_sym_LPAREN, [55329] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3127), 1, - sym_identifier, + ACTIONS(3115), 1, + anon_sym_import, [55336] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3129), 1, - anon_sym_RPAREN, + ACTIONS(2776), 1, + anon_sym_RBRACE, [55343] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3131), 1, - anon_sym_RBRACE, + ACTIONS(3117), 1, + ts_builtin_sym_end, [55350] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3133), 1, - anon_sym_RPAREN, + ACTIONS(2448), 1, + anon_sym_RBRACE, [55357] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3135), 1, - anon_sym_RBRACE, + ACTIONS(3119), 1, + anon_sym_COLON, [55364] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3137), 1, - anon_sym_RBRACE, + ACTIONS(3121), 1, + anon_sym_COLON, [55371] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(864), 1, - anon_sym_def, + ACTIONS(3123), 1, + anon_sym_COLON, [55378] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3139), 1, - sym_identifier, + ACTIONS(3125), 1, + anon_sym_RBRACE, [55385] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3141), 1, + ACTIONS(3127), 1, sym_identifier, [55392] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3143), 1, - anon_sym_RBRACK, + ACTIONS(3129), 1, + sym_identifier, [55399] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(956), 1, - anon_sym_STAR, + ACTIONS(3131), 1, + sym_identifier, [55406] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3145), 1, - anon_sym_RBRACE, + ACTIONS(956), 1, + anon_sym_STAR, [55413] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3147), 1, + ACTIONS(3133), 1, sym_identifier, [55420] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3149), 1, - anon_sym_RBRACE, + ACTIONS(3135), 1, + anon_sym_COLON, [55427] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3151), 1, + ACTIONS(3137), 1, anon_sym_COLON, [55434] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3153), 1, - anon_sym_RPAREN, + ACTIONS(3139), 1, + sym_identifier, [55441] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3155), 1, + ACTIONS(3141), 1, sym_identifier, [55448] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3157), 1, + ACTIONS(3143), 1, sym_identifier, [55455] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3159), 1, - anon_sym_RBRACE, + ACTIONS(3145), 1, + sym_identifier, [55462] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2845), 1, - anon_sym_in, + ACTIONS(3147), 1, + anon_sym_for, [55469] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(858), 1, - anon_sym_def, + ACTIONS(2751), 1, + anon_sym_in, [55476] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3161), 1, - sym_identifier, + ACTIONS(842), 1, + anon_sym_def, [55483] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(2847), 1, - anon_sym_in, + ACTIONS(3149), 1, + anon_sym_RPAREN, [55490] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3163), 1, - anon_sym_COLON, + ACTIONS(2797), 1, + anon_sym_in, [55497] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3165), 1, - anon_sym_COLON, + ACTIONS(2729), 1, + anon_sym_RBRACK, [55504] = 2, ACTIONS(3), 1, sym_comment, - ACTIONS(3167), 1, - anon_sym_RPAREN, + ACTIONS(3151), 1, + anon_sym_RBRACE, }; static const uint32_t ts_small_parse_table_map[] = { @@ -69874,293 +68288,293 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(152)] = 354, [SMALL_STATE(153)] = 464, [SMALL_STATE(154)] = 581, - [SMALL_STATE(155)] = 698, - [SMALL_STATE(156)] = 801, - [SMALL_STATE(157)] = 920, - [SMALL_STATE(158)] = 1035, - [SMALL_STATE(159)] = 1150, - [SMALL_STATE(160)] = 1265, + [SMALL_STATE(155)] = 696, + [SMALL_STATE(156)] = 799, + [SMALL_STATE(157)] = 902, + [SMALL_STATE(158)] = 1017, + [SMALL_STATE(159)] = 1136, + [SMALL_STATE(160)] = 1251, [SMALL_STATE(161)] = 1368, - [SMALL_STATE(162)] = 1472, - [SMALL_STATE(163)] = 1576, - [SMALL_STATE(164)] = 1680, - [SMALL_STATE(165)] = 1794, + [SMALL_STATE(162)] = 1482, + [SMALL_STATE(163)] = 1586, + [SMALL_STATE(164)] = 1700, + [SMALL_STATE(165)] = 1804, [SMALL_STATE(166)] = 1908, [SMALL_STATE(167)] = 2022, - [SMALL_STATE(168)] = 2129, - [SMALL_STATE(169)] = 2234, - [SMALL_STATE(170)] = 2339, - [SMALL_STATE(171)] = 2444, - [SMALL_STATE(172)] = 2547, - [SMALL_STATE(173)] = 2652, - [SMALL_STATE(174)] = 2757, - [SMALL_STATE(175)] = 2858, - [SMALL_STATE(176)] = 2961, - [SMALL_STATE(177)] = 3062, + [SMALL_STATE(168)] = 2123, + [SMALL_STATE(169)] = 2228, + [SMALL_STATE(170)] = 2335, + [SMALL_STATE(171)] = 2438, + [SMALL_STATE(172)] = 2539, + [SMALL_STATE(173)] = 2640, + [SMALL_STATE(174)] = 2745, + [SMALL_STATE(175)] = 2850, + [SMALL_STATE(176)] = 2953, + [SMALL_STATE(177)] = 3058, [SMALL_STATE(178)] = 3163, [SMALL_STATE(179)] = 3268, - [SMALL_STATE(180)] = 3366, - [SMALL_STATE(181)] = 3468, - [SMALL_STATE(182)] = 3572, - [SMALL_STATE(183)] = 3674, - [SMALL_STATE(184)] = 3780, - [SMALL_STATE(185)] = 3882, - [SMALL_STATE(186)] = 3984, + [SMALL_STATE(180)] = 3370, + [SMALL_STATE(181)] = 3472, + [SMALL_STATE(182)] = 3574, + [SMALL_STATE(183)] = 3672, + [SMALL_STATE(184)] = 3776, + [SMALL_STATE(185)] = 3878, + [SMALL_STATE(186)] = 3982, [SMALL_STATE(187)] = 4086, [SMALL_STATE(188)] = 4188, [SMALL_STATE(189)] = 4290, [SMALL_STATE(190)] = 4392, [SMALL_STATE(191)] = 4494, - [SMALL_STATE(192)] = 4596, - [SMALL_STATE(193)] = 4698, - [SMALL_STATE(194)] = 4800, - [SMALL_STATE(195)] = 4902, - [SMALL_STATE(196)] = 5000, - [SMALL_STATE(197)] = 5106, - [SMALL_STATE(198)] = 5210, - [SMALL_STATE(199)] = 5312, - [SMALL_STATE(200)] = 5414, - [SMALL_STATE(201)] = 5512, - [SMALL_STATE(202)] = 5616, - [SMALL_STATE(203)] = 5718, - [SMALL_STATE(204)] = 5820, - [SMALL_STATE(205)] = 5922, - [SMALL_STATE(206)] = 6024, - [SMALL_STATE(207)] = 6126, - [SMALL_STATE(208)] = 6228, - [SMALL_STATE(209)] = 6330, - [SMALL_STATE(210)] = 6432, - [SMALL_STATE(211)] = 6536, + [SMALL_STATE(192)] = 4600, + [SMALL_STATE(193)] = 4702, + [SMALL_STATE(194)] = 4804, + [SMALL_STATE(195)] = 4906, + [SMALL_STATE(196)] = 5010, + [SMALL_STATE(197)] = 5112, + [SMALL_STATE(198)] = 5214, + [SMALL_STATE(199)] = 5316, + [SMALL_STATE(200)] = 5422, + [SMALL_STATE(201)] = 5524, + [SMALL_STATE(202)] = 5626, + [SMALL_STATE(203)] = 5728, + [SMALL_STATE(204)] = 5830, + [SMALL_STATE(205)] = 5932, + [SMALL_STATE(206)] = 6030, + [SMALL_STATE(207)] = 6128, + [SMALL_STATE(208)] = 6230, + [SMALL_STATE(209)] = 6332, + [SMALL_STATE(210)] = 6434, + [SMALL_STATE(211)] = 6532, [SMALL_STATE(212)] = 6634, [SMALL_STATE(213)] = 6733, - [SMALL_STATE(214)] = 6832, - [SMALL_STATE(215)] = 6931, - [SMALL_STATE(216)] = 7030, - [SMALL_STATE(217)] = 7129, - [SMALL_STATE(218)] = 7190, - [SMALL_STATE(219)] = 7289, - [SMALL_STATE(220)] = 7350, - [SMALL_STATE(221)] = 7449, + [SMALL_STATE(214)] = 6794, + [SMALL_STATE(215)] = 6893, + [SMALL_STATE(216)] = 6992, + [SMALL_STATE(217)] = 7091, + [SMALL_STATE(218)] = 7178, + [SMALL_STATE(219)] = 7277, + [SMALL_STATE(220)] = 7376, + [SMALL_STATE(221)] = 7437, [SMALL_STATE(222)] = 7536, [SMALL_STATE(223)] = 7635, [SMALL_STATE(224)] = 7707, - [SMALL_STATE(225)] = 7805, - [SMALL_STATE(226)] = 7901, - [SMALL_STATE(227)] = 7973, - [SMALL_STATE(228)] = 8045, - [SMALL_STATE(229)] = 8143, - [SMALL_STATE(230)] = 8215, - [SMALL_STATE(231)] = 8313, - [SMALL_STATE(232)] = 8385, - [SMALL_STATE(233)] = 8457, - [SMALL_STATE(234)] = 8529, - [SMALL_STATE(235)] = 8601, - [SMALL_STATE(236)] = 8697, + [SMALL_STATE(225)] = 7779, + [SMALL_STATE(226)] = 7851, + [SMALL_STATE(227)] = 7947, + [SMALL_STATE(228)] = 8019, + [SMALL_STATE(229)] = 8117, + [SMALL_STATE(230)] = 8213, + [SMALL_STATE(231)] = 8311, + [SMALL_STATE(232)] = 8383, + [SMALL_STATE(233)] = 8455, + [SMALL_STATE(234)] = 8527, + [SMALL_STATE(235)] = 8625, + [SMALL_STATE(236)] = 8723, [SMALL_STATE(237)] = 8795, [SMALL_STATE(238)] = 8893, [SMALL_STATE(239)] = 8988, [SMALL_STATE(240)] = 9061, [SMALL_STATE(241)] = 9156, - [SMALL_STATE(242)] = 9229, - [SMALL_STATE(243)] = 9324, - [SMALL_STATE(244)] = 9419, - [SMALL_STATE(245)] = 9514, - [SMALL_STATE(246)] = 9609, + [SMALL_STATE(242)] = 9251, + [SMALL_STATE(243)] = 9346, + [SMALL_STATE(244)] = 9441, + [SMALL_STATE(245)] = 9536, + [SMALL_STATE(246)] = 9631, [SMALL_STATE(247)] = 9704, [SMALL_STATE(248)] = 9799, [SMALL_STATE(249)] = 9894, [SMALL_STATE(250)] = 9989, [SMALL_STATE(251)] = 10084, - [SMALL_STATE(252)] = 10152, - [SMALL_STATE(253)] = 10210, - [SMALL_STATE(254)] = 10278, - [SMALL_STATE(255)] = 10346, - [SMALL_STATE(256)] = 10414, - [SMALL_STATE(257)] = 10484, - [SMALL_STATE(258)] = 10578, - [SMALL_STATE(259)] = 10672, - [SMALL_STATE(260)] = 10766, - [SMALL_STATE(261)] = 10824, - [SMALL_STATE(262)] = 10882, - [SMALL_STATE(263)] = 10940, - [SMALL_STATE(264)] = 11002, - [SMALL_STATE(265)] = 11060, + [SMALL_STATE(252)] = 10178, + [SMALL_STATE(253)] = 10246, + [SMALL_STATE(254)] = 10340, + [SMALL_STATE(255)] = 10434, + [SMALL_STATE(256)] = 10528, + [SMALL_STATE(257)] = 10586, + [SMALL_STATE(258)] = 10644, + [SMALL_STATE(259)] = 10706, + [SMALL_STATE(260)] = 10800, + [SMALL_STATE(261)] = 10862, + [SMALL_STATE(262)] = 10920, + [SMALL_STATE(263)] = 10978, + [SMALL_STATE(264)] = 11036, + [SMALL_STATE(265)] = 11094, [SMALL_STATE(266)] = 11152, [SMALL_STATE(267)] = 11220, [SMALL_STATE(268)] = 11314, - [SMALL_STATE(269)] = 11376, - [SMALL_STATE(270)] = 11444, - [SMALL_STATE(271)] = 11512, - [SMALL_STATE(272)] = 11574, - [SMALL_STATE(273)] = 11636, - [SMALL_STATE(274)] = 11728, - [SMALL_STATE(275)] = 11786, - [SMALL_STATE(276)] = 11844, - [SMALL_STATE(277)] = 11938, - [SMALL_STATE(278)] = 12006, - [SMALL_STATE(279)] = 12098, - [SMALL_STATE(280)] = 12156, - [SMALL_STATE(281)] = 12250, - [SMALL_STATE(282)] = 12308, - [SMALL_STATE(283)] = 12402, - [SMALL_STATE(284)] = 12460, - [SMALL_STATE(285)] = 12554, - [SMALL_STATE(286)] = 12648, + [SMALL_STATE(269)] = 11372, + [SMALL_STATE(270)] = 11430, + [SMALL_STATE(271)] = 11492, + [SMALL_STATE(272)] = 11584, + [SMALL_STATE(273)] = 11646, + [SMALL_STATE(274)] = 11738, + [SMALL_STATE(275)] = 11830, + [SMALL_STATE(276)] = 11900, + [SMALL_STATE(277)] = 11994, + [SMALL_STATE(278)] = 12062, + [SMALL_STATE(279)] = 12130, + [SMALL_STATE(280)] = 12198, + [SMALL_STATE(281)] = 12266, + [SMALL_STATE(282)] = 12334, + [SMALL_STATE(283)] = 12392, + [SMALL_STATE(284)] = 12486, + [SMALL_STATE(285)] = 12580, + [SMALL_STATE(286)] = 12674, [SMALL_STATE(287)] = 12742, [SMALL_STATE(288)] = 12836, [SMALL_STATE(289)] = 12927, - [SMALL_STATE(290)] = 13018, - [SMALL_STATE(291)] = 13107, - [SMALL_STATE(292)] = 13198, - [SMALL_STATE(293)] = 13261, - [SMALL_STATE(294)] = 13350, - [SMALL_STATE(295)] = 13439, - [SMALL_STATE(296)] = 13530, - [SMALL_STATE(297)] = 13619, - [SMALL_STATE(298)] = 13708, - [SMALL_STATE(299)] = 13799, - [SMALL_STATE(300)] = 13888, - [SMALL_STATE(301)] = 13977, - [SMALL_STATE(302)] = 14044, - [SMALL_STATE(303)] = 14135, - [SMALL_STATE(304)] = 14226, - [SMALL_STATE(305)] = 14315, - [SMALL_STATE(306)] = 14406, - [SMALL_STATE(307)] = 14495, - [SMALL_STATE(308)] = 14584, - [SMALL_STATE(309)] = 14647, + [SMALL_STATE(290)] = 13016, + [SMALL_STATE(291)] = 13105, + [SMALL_STATE(292)] = 13194, + [SMALL_STATE(293)] = 13283, + [SMALL_STATE(294)] = 13372, + [SMALL_STATE(295)] = 13463, + [SMALL_STATE(296)] = 13552, + [SMALL_STATE(297)] = 13641, + [SMALL_STATE(298)] = 13732, + [SMALL_STATE(299)] = 13823, + [SMALL_STATE(300)] = 13914, + [SMALL_STATE(301)] = 14005, + [SMALL_STATE(302)] = 14096, + [SMALL_STATE(303)] = 14187, + [SMALL_STATE(304)] = 14250, + [SMALL_STATE(305)] = 14313, + [SMALL_STATE(306)] = 14402, + [SMALL_STATE(307)] = 14491, + [SMALL_STATE(308)] = 14580, + [SMALL_STATE(309)] = 14669, [SMALL_STATE(310)] = 14736, - [SMALL_STATE(311)] = 14825, - [SMALL_STATE(312)] = 14914, + [SMALL_STATE(311)] = 14827, + [SMALL_STATE(312)] = 14916, [SMALL_STATE(313)] = 15005, - [SMALL_STATE(314)] = 15061, - [SMALL_STATE(315)] = 15117, - [SMALL_STATE(316)] = 15177, - [SMALL_STATE(317)] = 15241, - [SMALL_STATE(318)] = 15305, - [SMALL_STATE(319)] = 15361, - [SMALL_STATE(320)] = 15449, - [SMALL_STATE(321)] = 15509, - [SMALL_STATE(322)] = 15565, - [SMALL_STATE(323)] = 15621, - [SMALL_STATE(324)] = 15677, - [SMALL_STATE(325)] = 15733, - [SMALL_STATE(326)] = 15789, - [SMALL_STATE(327)] = 15845, - [SMALL_STATE(328)] = 15901, + [SMALL_STATE(314)] = 15065, + [SMALL_STATE(315)] = 15153, + [SMALL_STATE(316)] = 15209, + [SMALL_STATE(317)] = 15265, + [SMALL_STATE(318)] = 15321, + [SMALL_STATE(319)] = 15377, + [SMALL_STATE(320)] = 15433, + [SMALL_STATE(321)] = 15497, + [SMALL_STATE(322)] = 15553, + [SMALL_STATE(323)] = 15609, + [SMALL_STATE(324)] = 15665, + [SMALL_STATE(325)] = 15721, + [SMALL_STATE(326)] = 15785, + [SMALL_STATE(327)] = 15841, + [SMALL_STATE(328)] = 15897, [SMALL_STATE(329)] = 15957, [SMALL_STATE(330)] = 16013, - [SMALL_STATE(331)] = 16077, - [SMALL_STATE(332)] = 16141, - [SMALL_STATE(333)] = 16201, - [SMALL_STATE(334)] = 16261, - [SMALL_STATE(335)] = 16317, - [SMALL_STATE(336)] = 16373, - [SMALL_STATE(337)] = 16429, - [SMALL_STATE(338)] = 16485, - [SMALL_STATE(339)] = 16541, - [SMALL_STATE(340)] = 16597, - [SMALL_STATE(341)] = 16653, - [SMALL_STATE(342)] = 16709, - [SMALL_STATE(343)] = 16765, - [SMALL_STATE(344)] = 16821, + [SMALL_STATE(331)] = 16069, + [SMALL_STATE(332)] = 16125, + [SMALL_STATE(333)] = 16181, + [SMALL_STATE(334)] = 16237, + [SMALL_STATE(335)] = 16301, + [SMALL_STATE(336)] = 16361, + [SMALL_STATE(337)] = 16417, + [SMALL_STATE(338)] = 16477, + [SMALL_STATE(339)] = 16533, + [SMALL_STATE(340)] = 16589, + [SMALL_STATE(341)] = 16677, + [SMALL_STATE(342)] = 16741, + [SMALL_STATE(343)] = 16797, + [SMALL_STATE(344)] = 16853, [SMALL_STATE(345)] = 16909, [SMALL_STATE(346)] = 16997, - [SMALL_STATE(347)] = 17082, - [SMALL_STATE(348)] = 17141, - [SMALL_STATE(349)] = 17226, - [SMALL_STATE(350)] = 17285, - [SMALL_STATE(351)] = 17344, - [SMALL_STATE(352)] = 17431, + [SMALL_STATE(347)] = 17056, + [SMALL_STATE(348)] = 17143, + [SMALL_STATE(349)] = 17202, + [SMALL_STATE(350)] = 17287, + [SMALL_STATE(351)] = 17372, + [SMALL_STATE(352)] = 17457, [SMALL_STATE(353)] = 17516, [SMALL_STATE(354)] = 17601, [SMALL_STATE(355)] = 17662, - [SMALL_STATE(356)] = 17721, - [SMALL_STATE(357)] = 17806, - [SMALL_STATE(358)] = 17865, - [SMALL_STATE(359)] = 17950, - [SMALL_STATE(360)] = 18035, - [SMALL_STATE(361)] = 18094, - [SMALL_STATE(362)] = 18153, - [SMALL_STATE(363)] = 18238, - [SMALL_STATE(364)] = 18323, - [SMALL_STATE(365)] = 18408, - [SMALL_STATE(366)] = 18463, - [SMALL_STATE(367)] = 18522, - [SMALL_STATE(368)] = 18607, - [SMALL_STATE(369)] = 18692, - [SMALL_STATE(370)] = 18777, - [SMALL_STATE(371)] = 18862, - [SMALL_STATE(372)] = 18917, - [SMALL_STATE(373)] = 19002, - [SMALL_STATE(374)] = 19087, - [SMALL_STATE(375)] = 19172, - [SMALL_STATE(376)] = 19257, - [SMALL_STATE(377)] = 19342, - [SMALL_STATE(378)] = 19403, - [SMALL_STATE(379)] = 19488, - [SMALL_STATE(380)] = 19573, - [SMALL_STATE(381)] = 19658, - [SMALL_STATE(382)] = 19743, - [SMALL_STATE(383)] = 19828, - [SMALL_STATE(384)] = 19913, - [SMALL_STATE(385)] = 19998, - [SMALL_STATE(386)] = 20083, - [SMALL_STATE(387)] = 20142, - [SMALL_STATE(388)] = 20227, - [SMALL_STATE(389)] = 20312, - [SMALL_STATE(390)] = 20397, - [SMALL_STATE(391)] = 20452, - [SMALL_STATE(392)] = 20511, - [SMALL_STATE(393)] = 20570, - [SMALL_STATE(394)] = 20629, - [SMALL_STATE(395)] = 20714, - [SMALL_STATE(396)] = 20773, - [SMALL_STATE(397)] = 20832, - [SMALL_STATE(398)] = 20891, - [SMALL_STATE(399)] = 20976, - [SMALL_STATE(400)] = 21061, - [SMALL_STATE(401)] = 21116, - [SMALL_STATE(402)] = 21175, - [SMALL_STATE(403)] = 21260, - [SMALL_STATE(404)] = 21321, - [SMALL_STATE(405)] = 21376, - [SMALL_STATE(406)] = 21461, - [SMALL_STATE(407)] = 21546, - [SMALL_STATE(408)] = 21601, - [SMALL_STATE(409)] = 21686, - [SMALL_STATE(410)] = 21771, - [SMALL_STATE(411)] = 21856, - [SMALL_STATE(412)] = 21941, - [SMALL_STATE(413)] = 22026, - [SMALL_STATE(414)] = 22111, - [SMALL_STATE(415)] = 22196, - [SMALL_STATE(416)] = 22281, - [SMALL_STATE(417)] = 22366, - [SMALL_STATE(418)] = 22451, - [SMALL_STATE(419)] = 22536, - [SMALL_STATE(420)] = 22621, - [SMALL_STATE(421)] = 22706, - [SMALL_STATE(422)] = 22791, - [SMALL_STATE(423)] = 22876, - [SMALL_STATE(424)] = 22961, - [SMALL_STATE(425)] = 23046, - [SMALL_STATE(426)] = 23131, - [SMALL_STATE(427)] = 23216, - [SMALL_STATE(428)] = 23301, - [SMALL_STATE(429)] = 23386, - [SMALL_STATE(430)] = 23471, - [SMALL_STATE(431)] = 23556, - [SMALL_STATE(432)] = 23617, - [SMALL_STATE(433)] = 23702, - [SMALL_STATE(434)] = 23787, - [SMALL_STATE(435)] = 23872, - [SMALL_STATE(436)] = 23957, - [SMALL_STATE(437)] = 24042, - [SMALL_STATE(438)] = 24127, - [SMALL_STATE(439)] = 24212, - [SMALL_STATE(440)] = 24297, - [SMALL_STATE(441)] = 24382, + [SMALL_STATE(356)] = 17747, + [SMALL_STATE(357)] = 17832, + [SMALL_STATE(358)] = 17917, + [SMALL_STATE(359)] = 18002, + [SMALL_STATE(360)] = 18087, + [SMALL_STATE(361)] = 18172, + [SMALL_STATE(362)] = 18257, + [SMALL_STATE(363)] = 18316, + [SMALL_STATE(364)] = 18401, + [SMALL_STATE(365)] = 18486, + [SMALL_STATE(366)] = 18571, + [SMALL_STATE(367)] = 18656, + [SMALL_STATE(368)] = 18741, + [SMALL_STATE(369)] = 18826, + [SMALL_STATE(370)] = 18885, + [SMALL_STATE(371)] = 18970, + [SMALL_STATE(372)] = 19055, + [SMALL_STATE(373)] = 19140, + [SMALL_STATE(374)] = 19225, + [SMALL_STATE(375)] = 19310, + [SMALL_STATE(376)] = 19395, + [SMALL_STATE(377)] = 19480, + [SMALL_STATE(378)] = 19565, + [SMALL_STATE(379)] = 19650, + [SMALL_STATE(380)] = 19735, + [SMALL_STATE(381)] = 19794, + [SMALL_STATE(382)] = 19879, + [SMALL_STATE(383)] = 19964, + [SMALL_STATE(384)] = 20049, + [SMALL_STATE(385)] = 20134, + [SMALL_STATE(386)] = 20219, + [SMALL_STATE(387)] = 20278, + [SMALL_STATE(388)] = 20363, + [SMALL_STATE(389)] = 20448, + [SMALL_STATE(390)] = 20533, + [SMALL_STATE(391)] = 20592, + [SMALL_STATE(392)] = 20647, + [SMALL_STATE(393)] = 20708, + [SMALL_STATE(394)] = 20793, + [SMALL_STATE(395)] = 20878, + [SMALL_STATE(396)] = 20963, + [SMALL_STATE(397)] = 21048, + [SMALL_STATE(398)] = 21107, + [SMALL_STATE(399)] = 21162, + [SMALL_STATE(400)] = 21247, + [SMALL_STATE(401)] = 21306, + [SMALL_STATE(402)] = 21391, + [SMALL_STATE(403)] = 21476, + [SMALL_STATE(404)] = 21561, + [SMALL_STATE(405)] = 21646, + [SMALL_STATE(406)] = 21731, + [SMALL_STATE(407)] = 21816, + [SMALL_STATE(408)] = 21901, + [SMALL_STATE(409)] = 21986, + [SMALL_STATE(410)] = 22071, + [SMALL_STATE(411)] = 22156, + [SMALL_STATE(412)] = 22241, + [SMALL_STATE(413)] = 22326, + [SMALL_STATE(414)] = 22411, + [SMALL_STATE(415)] = 22472, + [SMALL_STATE(416)] = 22557, + [SMALL_STATE(417)] = 22642, + [SMALL_STATE(418)] = 22701, + [SMALL_STATE(419)] = 22760, + [SMALL_STATE(420)] = 22819, + [SMALL_STATE(421)] = 22878, + [SMALL_STATE(422)] = 22963, + [SMALL_STATE(423)] = 23018, + [SMALL_STATE(424)] = 23103, + [SMALL_STATE(425)] = 23158, + [SMALL_STATE(426)] = 23213, + [SMALL_STATE(427)] = 23298, + [SMALL_STATE(428)] = 23359, + [SMALL_STATE(429)] = 23414, + [SMALL_STATE(430)] = 23499, + [SMALL_STATE(431)] = 23584, + [SMALL_STATE(432)] = 23669, + [SMALL_STATE(433)] = 23754, + [SMALL_STATE(434)] = 23839, + [SMALL_STATE(435)] = 23924, + [SMALL_STATE(436)] = 24009, + [SMALL_STATE(437)] = 24068, + [SMALL_STATE(438)] = 24153, + [SMALL_STATE(439)] = 24238, + [SMALL_STATE(440)] = 24323, + [SMALL_STATE(441)] = 24408, [SMALL_STATE(442)] = 24467, [SMALL_STATE(443)] = 24552, [SMALL_STATE(444)] = 24637, @@ -70193,36 +68607,36 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(471)] = 26144, [SMALL_STATE(472)] = 26197, [SMALL_STATE(473)] = 26250, - [SMALL_STATE(474)] = 26335, - [SMALL_STATE(475)] = 26388, - [SMALL_STATE(476)] = 26441, - [SMALL_STATE(477)] = 26494, - [SMALL_STATE(478)] = 26547, - [SMALL_STATE(479)] = 26600, - [SMALL_STATE(480)] = 26653, - [SMALL_STATE(481)] = 26706, - [SMALL_STATE(482)] = 26759, - [SMALL_STATE(483)] = 26812, - [SMALL_STATE(484)] = 26865, - [SMALL_STATE(485)] = 26918, - [SMALL_STATE(486)] = 26971, - [SMALL_STATE(487)] = 27024, - [SMALL_STATE(488)] = 27077, - [SMALL_STATE(489)] = 27130, - [SMALL_STATE(490)] = 27183, - [SMALL_STATE(491)] = 27236, - [SMALL_STATE(492)] = 27289, - [SMALL_STATE(493)] = 27342, - [SMALL_STATE(494)] = 27395, - [SMALL_STATE(495)] = 27448, - [SMALL_STATE(496)] = 27501, - [SMALL_STATE(497)] = 27554, - [SMALL_STATE(498)] = 27607, - [SMALL_STATE(499)] = 27660, - [SMALL_STATE(500)] = 27713, - [SMALL_STATE(501)] = 27766, - [SMALL_STATE(502)] = 27819, - [SMALL_STATE(503)] = 27872, + [SMALL_STATE(474)] = 26303, + [SMALL_STATE(475)] = 26356, + [SMALL_STATE(476)] = 26409, + [SMALL_STATE(477)] = 26462, + [SMALL_STATE(478)] = 26515, + [SMALL_STATE(479)] = 26568, + [SMALL_STATE(480)] = 26621, + [SMALL_STATE(481)] = 26674, + [SMALL_STATE(482)] = 26727, + [SMALL_STATE(483)] = 26780, + [SMALL_STATE(484)] = 26833, + [SMALL_STATE(485)] = 26886, + [SMALL_STATE(486)] = 26939, + [SMALL_STATE(487)] = 26992, + [SMALL_STATE(488)] = 27045, + [SMALL_STATE(489)] = 27098, + [SMALL_STATE(490)] = 27151, + [SMALL_STATE(491)] = 27204, + [SMALL_STATE(492)] = 27257, + [SMALL_STATE(493)] = 27310, + [SMALL_STATE(494)] = 27363, + [SMALL_STATE(495)] = 27416, + [SMALL_STATE(496)] = 27469, + [SMALL_STATE(497)] = 27522, + [SMALL_STATE(498)] = 27575, + [SMALL_STATE(499)] = 27628, + [SMALL_STATE(500)] = 27681, + [SMALL_STATE(501)] = 27734, + [SMALL_STATE(502)] = 27787, + [SMALL_STATE(503)] = 27840, [SMALL_STATE(504)] = 27925, [SMALL_STATE(505)] = 27978, [SMALL_STATE(506)] = 28031, @@ -70238,45 +68652,45 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(516)] = 28561, [SMALL_STATE(517)] = 28614, [SMALL_STATE(518)] = 28667, - [SMALL_STATE(519)] = 28720, - [SMALL_STATE(520)] = 28773, - [SMALL_STATE(521)] = 28826, - [SMALL_STATE(522)] = 28879, - [SMALL_STATE(523)] = 28932, - [SMALL_STATE(524)] = 28985, - [SMALL_STATE(525)] = 29038, - [SMALL_STATE(526)] = 29091, - [SMALL_STATE(527)] = 29144, - [SMALL_STATE(528)] = 29197, - [SMALL_STATE(529)] = 29250, - [SMALL_STATE(530)] = 29303, - [SMALL_STATE(531)] = 29356, - [SMALL_STATE(532)] = 29409, - [SMALL_STATE(533)] = 29462, - [SMALL_STATE(534)] = 29515, - [SMALL_STATE(535)] = 29568, - [SMALL_STATE(536)] = 29621, - [SMALL_STATE(537)] = 29674, - [SMALL_STATE(538)] = 29727, - [SMALL_STATE(539)] = 29780, - [SMALL_STATE(540)] = 29833, - [SMALL_STATE(541)] = 29886, - [SMALL_STATE(542)] = 29939, - [SMALL_STATE(543)] = 29992, - [SMALL_STATE(544)] = 30077, - [SMALL_STATE(545)] = 30130, - [SMALL_STATE(546)] = 30183, - [SMALL_STATE(547)] = 30236, - [SMALL_STATE(548)] = 30289, - [SMALL_STATE(549)] = 30342, - [SMALL_STATE(550)] = 30395, - [SMALL_STATE(551)] = 30448, - [SMALL_STATE(552)] = 30501, - [SMALL_STATE(553)] = 30554, - [SMALL_STATE(554)] = 30607, - [SMALL_STATE(555)] = 30660, - [SMALL_STATE(556)] = 30713, - [SMALL_STATE(557)] = 30766, + [SMALL_STATE(519)] = 28754, + [SMALL_STATE(520)] = 28807, + [SMALL_STATE(521)] = 28860, + [SMALL_STATE(522)] = 28913, + [SMALL_STATE(523)] = 28966, + [SMALL_STATE(524)] = 29019, + [SMALL_STATE(525)] = 29072, + [SMALL_STATE(526)] = 29125, + [SMALL_STATE(527)] = 29178, + [SMALL_STATE(528)] = 29231, + [SMALL_STATE(529)] = 29284, + [SMALL_STATE(530)] = 29337, + [SMALL_STATE(531)] = 29390, + [SMALL_STATE(532)] = 29443, + [SMALL_STATE(533)] = 29496, + [SMALL_STATE(534)] = 29549, + [SMALL_STATE(535)] = 29602, + [SMALL_STATE(536)] = 29655, + [SMALL_STATE(537)] = 29708, + [SMALL_STATE(538)] = 29761, + [SMALL_STATE(539)] = 29814, + [SMALL_STATE(540)] = 29867, + [SMALL_STATE(541)] = 29920, + [SMALL_STATE(542)] = 29973, + [SMALL_STATE(543)] = 30026, + [SMALL_STATE(544)] = 30111, + [SMALL_STATE(545)] = 30164, + [SMALL_STATE(546)] = 30217, + [SMALL_STATE(547)] = 30270, + [SMALL_STATE(548)] = 30323, + [SMALL_STATE(549)] = 30376, + [SMALL_STATE(550)] = 30429, + [SMALL_STATE(551)] = 30482, + [SMALL_STATE(552)] = 30535, + [SMALL_STATE(553)] = 30588, + [SMALL_STATE(554)] = 30641, + [SMALL_STATE(555)] = 30694, + [SMALL_STATE(556)] = 30747, + [SMALL_STATE(557)] = 30800, [SMALL_STATE(558)] = 30853, [SMALL_STATE(559)] = 30906, [SMALL_STATE(560)] = 30990, @@ -70286,7 +68700,7 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(564)] = 31326, [SMALL_STATE(565)] = 31410, [SMALL_STATE(566)] = 31465, - [SMALL_STATE(567)] = 31520, + [SMALL_STATE(567)] = 31546, [SMALL_STATE(568)] = 31601, [SMALL_STATE(569)] = 31682, [SMALL_STATE(570)] = 31737, @@ -70296,25 +68710,25 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(574)] = 31958, [SMALL_STATE(575)] = 32006, [SMALL_STATE(576)] = 32054, - [SMALL_STATE(577)] = 32102, - [SMALL_STATE(578)] = 32150, - [SMALL_STATE(579)] = 32198, - [SMALL_STATE(580)] = 32246, - [SMALL_STATE(581)] = 32294, - [SMALL_STATE(582)] = 32342, - [SMALL_STATE(583)] = 32390, - [SMALL_STATE(584)] = 32438, - [SMALL_STATE(585)] = 32486, - [SMALL_STATE(586)] = 32534, - [SMALL_STATE(587)] = 32582, - [SMALL_STATE(588)] = 32630, - [SMALL_STATE(589)] = 32678, - [SMALL_STATE(590)] = 32726, - [SMALL_STATE(591)] = 32808, - [SMALL_STATE(592)] = 32856, - [SMALL_STATE(593)] = 32904, - [SMALL_STATE(594)] = 32952, - [SMALL_STATE(595)] = 33000, + [SMALL_STATE(577)] = 32136, + [SMALL_STATE(578)] = 32184, + [SMALL_STATE(579)] = 32232, + [SMALL_STATE(580)] = 32280, + [SMALL_STATE(581)] = 32328, + [SMALL_STATE(582)] = 32376, + [SMALL_STATE(583)] = 32424, + [SMALL_STATE(584)] = 32472, + [SMALL_STATE(585)] = 32520, + [SMALL_STATE(586)] = 32568, + [SMALL_STATE(587)] = 32616, + [SMALL_STATE(588)] = 32664, + [SMALL_STATE(589)] = 32712, + [SMALL_STATE(590)] = 32794, + [SMALL_STATE(591)] = 32842, + [SMALL_STATE(592)] = 32890, + [SMALL_STATE(593)] = 32938, + [SMALL_STATE(594)] = 32986, + [SMALL_STATE(595)] = 33034, [SMALL_STATE(596)] = 33082, [SMALL_STATE(597)] = 33130, [SMALL_STATE(598)] = 33178, @@ -70326,151 +68740,151 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(604)] = 33466, [SMALL_STATE(605)] = 33514, [SMALL_STATE(606)] = 33562, - [SMALL_STATE(607)] = 33625, - [SMALL_STATE(608)] = 33694, - [SMALL_STATE(609)] = 33751, + [SMALL_STATE(607)] = 33629, + [SMALL_STATE(608)] = 33690, + [SMALL_STATE(609)] = 33753, [SMALL_STATE(610)] = 33814, [SMALL_STATE(611)] = 33883, - [SMALL_STATE(612)] = 33954, - [SMALL_STATE(613)] = 34023, - [SMALL_STATE(614)] = 34084, - [SMALL_STATE(615)] = 34141, - [SMALL_STATE(616)] = 34208, - [SMALL_STATE(617)] = 34273, - [SMALL_STATE(618)] = 34342, - [SMALL_STATE(619)] = 34399, - [SMALL_STATE(620)] = 34468, - [SMALL_STATE(621)] = 34525, - [SMALL_STATE(622)] = 34596, - [SMALL_STATE(623)] = 34665, - [SMALL_STATE(624)] = 34726, - [SMALL_STATE(625)] = 34783, - [SMALL_STATE(626)] = 34850, - [SMALL_STATE(627)] = 34915, - [SMALL_STATE(628)] = 34986, - [SMALL_STATE(629)] = 35057, - [SMALL_STATE(630)] = 35114, - [SMALL_STATE(631)] = 35171, - [SMALL_STATE(632)] = 35228, + [SMALL_STATE(612)] = 33940, + [SMALL_STATE(613)] = 34009, + [SMALL_STATE(614)] = 34076, + [SMALL_STATE(615)] = 34145, + [SMALL_STATE(616)] = 34214, + [SMALL_STATE(617)] = 34283, + [SMALL_STATE(618)] = 34348, + [SMALL_STATE(619)] = 34405, + [SMALL_STATE(620)] = 34462, + [SMALL_STATE(621)] = 34533, + [SMALL_STATE(622)] = 34604, + [SMALL_STATE(623)] = 34669, + [SMALL_STATE(624)] = 34740, + [SMALL_STATE(625)] = 34811, + [SMALL_STATE(626)] = 34868, + [SMALL_STATE(627)] = 34925, + [SMALL_STATE(628)] = 34996, + [SMALL_STATE(629)] = 35065, + [SMALL_STATE(630)] = 35122, + [SMALL_STATE(631)] = 35185, + [SMALL_STATE(632)] = 35242, [SMALL_STATE(633)] = 35299, [SMALL_STATE(634)] = 35370, - [SMALL_STATE(635)] = 35416, - [SMALL_STATE(636)] = 35482, - [SMALL_STATE(637)] = 35548, - [SMALL_STATE(638)] = 35614, - [SMALL_STATE(639)] = 35680, - [SMALL_STATE(640)] = 35746, - [SMALL_STATE(641)] = 35812, - [SMALL_STATE(642)] = 35878, - [SMALL_STATE(643)] = 35944, - [SMALL_STATE(644)] = 35994, - [SMALL_STATE(645)] = 36060, - [SMALL_STATE(646)] = 36126, - [SMALL_STATE(647)] = 36192, - [SMALL_STATE(648)] = 36242, - [SMALL_STATE(649)] = 36312, - [SMALL_STATE(650)] = 36382, - [SMALL_STATE(651)] = 36448, - [SMALL_STATE(652)] = 36514, - [SMALL_STATE(653)] = 36580, - [SMALL_STATE(654)] = 36646, - [SMALL_STATE(655)] = 36712, - [SMALL_STATE(656)] = 36778, - [SMALL_STATE(657)] = 36824, - [SMALL_STATE(658)] = 36872, - [SMALL_STATE(659)] = 36920, - [SMALL_STATE(660)] = 36986, - [SMALL_STATE(661)] = 37052, - [SMALL_STATE(662)] = 37118, - [SMALL_STATE(663)] = 37184, - [SMALL_STATE(664)] = 37250, - [SMALL_STATE(665)] = 37316, - [SMALL_STATE(666)] = 37382, - [SMALL_STATE(667)] = 37448, - [SMALL_STATE(668)] = 37514, - [SMALL_STATE(669)] = 37580, - [SMALL_STATE(670)] = 37646, - [SMALL_STATE(671)] = 37712, - [SMALL_STATE(672)] = 37760, - [SMALL_STATE(673)] = 37826, - [SMALL_STATE(674)] = 37892, - [SMALL_STATE(675)] = 37940, - [SMALL_STATE(676)] = 38006, - [SMALL_STATE(677)] = 38072, - [SMALL_STATE(678)] = 38138, - [SMALL_STATE(679)] = 38204, - [SMALL_STATE(680)] = 38270, - [SMALL_STATE(681)] = 38336, - [SMALL_STATE(682)] = 38402, - [SMALL_STATE(683)] = 38468, - [SMALL_STATE(684)] = 38534, - [SMALL_STATE(685)] = 38600, + [SMALL_STATE(635)] = 35436, + [SMALL_STATE(636)] = 35502, + [SMALL_STATE(637)] = 35568, + [SMALL_STATE(638)] = 35634, + [SMALL_STATE(639)] = 35700, + [SMALL_STATE(640)] = 35766, + [SMALL_STATE(641)] = 35836, + [SMALL_STATE(642)] = 35884, + [SMALL_STATE(643)] = 35950, + [SMALL_STATE(644)] = 36016, + [SMALL_STATE(645)] = 36082, + [SMALL_STATE(646)] = 36148, + [SMALL_STATE(647)] = 36214, + [SMALL_STATE(648)] = 36280, + [SMALL_STATE(649)] = 36346, + [SMALL_STATE(650)] = 36412, + [SMALL_STATE(651)] = 36478, + [SMALL_STATE(652)] = 36524, + [SMALL_STATE(653)] = 36590, + [SMALL_STATE(654)] = 36636, + [SMALL_STATE(655)] = 36702, + [SMALL_STATE(656)] = 36768, + [SMALL_STATE(657)] = 36834, + [SMALL_STATE(658)] = 36900, + [SMALL_STATE(659)] = 36950, + [SMALL_STATE(660)] = 37016, + [SMALL_STATE(661)] = 37082, + [SMALL_STATE(662)] = 37148, + [SMALL_STATE(663)] = 37214, + [SMALL_STATE(664)] = 37280, + [SMALL_STATE(665)] = 37346, + [SMALL_STATE(666)] = 37412, + [SMALL_STATE(667)] = 37478, + [SMALL_STATE(668)] = 37548, + [SMALL_STATE(669)] = 37614, + [SMALL_STATE(670)] = 37680, + [SMALL_STATE(671)] = 37746, + [SMALL_STATE(672)] = 37812, + [SMALL_STATE(673)] = 37878, + [SMALL_STATE(674)] = 37926, + [SMALL_STATE(675)] = 37992, + [SMALL_STATE(676)] = 38040, + [SMALL_STATE(677)] = 38106, + [SMALL_STATE(678)] = 38172, + [SMALL_STATE(679)] = 38238, + [SMALL_STATE(680)] = 38304, + [SMALL_STATE(681)] = 38370, + [SMALL_STATE(682)] = 38436, + [SMALL_STATE(683)] = 38502, + [SMALL_STATE(684)] = 38552, + [SMALL_STATE(685)] = 38618, [SMALL_STATE(686)] = 38666, [SMALL_STATE(687)] = 38732, [SMALL_STATE(688)] = 38798, - [SMALL_STATE(689)] = 38847, - [SMALL_STATE(690)] = 38926, - [SMALL_STATE(691)] = 38971, - [SMALL_STATE(692)] = 39016, + [SMALL_STATE(689)] = 38843, + [SMALL_STATE(690)] = 38888, + [SMALL_STATE(691)] = 38937, + [SMALL_STATE(692)] = 38986, [SMALL_STATE(693)] = 39065, [SMALL_STATE(694)] = 39114, - [SMALL_STATE(695)] = 39180, - [SMALL_STATE(696)] = 39224, - [SMALL_STATE(697)] = 39284, - [SMALL_STATE(698)] = 39352, - [SMALL_STATE(699)] = 39428, - [SMALL_STATE(700)] = 39476, - [SMALL_STATE(701)] = 39520, - [SMALL_STATE(702)] = 39588, - [SMALL_STATE(703)] = 39642, - [SMALL_STATE(704)] = 39710, - [SMALL_STATE(705)] = 39764, - [SMALL_STATE(706)] = 39828, + [SMALL_STATE(695)] = 39182, + [SMALL_STATE(696)] = 39226, + [SMALL_STATE(697)] = 39270, + [SMALL_STATE(698)] = 39324, + [SMALL_STATE(699)] = 39384, + [SMALL_STATE(700)] = 39452, + [SMALL_STATE(701)] = 39518, + [SMALL_STATE(702)] = 39576, + [SMALL_STATE(703)] = 39630, + [SMALL_STATE(704)] = 39694, + [SMALL_STATE(705)] = 39756, + [SMALL_STATE(706)] = 39832, [SMALL_STATE(707)] = 39886, - [SMALL_STATE(708)] = 39948, + [SMALL_STATE(708)] = 39954, [SMALL_STATE(709)] = 40002, [SMALL_STATE(710)] = 40056, - [SMALL_STATE(711)] = 40103, - [SMALL_STATE(712)] = 40156, - [SMALL_STATE(713)] = 40203, - [SMALL_STATE(714)] = 40262, - [SMALL_STATE(715)] = 40309, - [SMALL_STATE(716)] = 40354, - [SMALL_STATE(717)] = 40399, - [SMALL_STATE(718)] = 40442, - [SMALL_STATE(719)] = 40505, - [SMALL_STATE(720)] = 40572, - [SMALL_STATE(721)] = 40625, - [SMALL_STATE(722)] = 40692, - [SMALL_STATE(723)] = 40737, - [SMALL_STATE(724)] = 40782, - [SMALL_STATE(725)] = 40825, - [SMALL_STATE(726)] = 40872, - [SMALL_STATE(727)] = 40917, - [SMALL_STATE(728)] = 40970, - [SMALL_STATE(729)] = 41015, - [SMALL_STATE(730)] = 41082, - [SMALL_STATE(731)] = 41143, - [SMALL_STATE(732)] = 41208, - [SMALL_STATE(733)] = 41253, - [SMALL_STATE(734)] = 41310, - [SMALL_STATE(735)] = 41363, + [SMALL_STATE(711)] = 40117, + [SMALL_STATE(712)] = 40184, + [SMALL_STATE(713)] = 40229, + [SMALL_STATE(714)] = 40274, + [SMALL_STATE(715)] = 40319, + [SMALL_STATE(716)] = 40372, + [SMALL_STATE(717)] = 40415, + [SMALL_STATE(718)] = 40460, + [SMALL_STATE(719)] = 40513, + [SMALL_STATE(720)] = 40556, + [SMALL_STATE(721)] = 40603, + [SMALL_STATE(722)] = 40648, + [SMALL_STATE(723)] = 40695, + [SMALL_STATE(724)] = 40742, + [SMALL_STATE(725)] = 40787, + [SMALL_STATE(726)] = 40840, + [SMALL_STATE(727)] = 40899, + [SMALL_STATE(728)] = 40966, + [SMALL_STATE(729)] = 41031, + [SMALL_STATE(730)] = 41088, + [SMALL_STATE(731)] = 41141, + [SMALL_STATE(732)] = 41204, + [SMALL_STATE(733)] = 41251, + [SMALL_STATE(734)] = 41296, + [SMALL_STATE(735)] = 41341, [SMALL_STATE(736)] = 41408, [SMALL_STATE(737)] = 41450, [SMALL_STATE(738)] = 41492, [SMALL_STATE(739)] = 41534, [SMALL_STATE(740)] = 41576, [SMALL_STATE(741)] = 41618, - [SMALL_STATE(742)] = 41662, - [SMALL_STATE(743)] = 41706, - [SMALL_STATE(744)] = 41750, - [SMALL_STATE(745)] = 41792, - [SMALL_STATE(746)] = 41834, - [SMALL_STATE(747)] = 41876, - [SMALL_STATE(748)] = 41918, - [SMALL_STATE(749)] = 41960, - [SMALL_STATE(750)] = 42002, - [SMALL_STATE(751)] = 42044, + [SMALL_STATE(742)] = 41660, + [SMALL_STATE(743)] = 41702, + [SMALL_STATE(744)] = 41744, + [SMALL_STATE(745)] = 41786, + [SMALL_STATE(746)] = 41830, + [SMALL_STATE(747)] = 41874, + [SMALL_STATE(748)] = 41916, + [SMALL_STATE(749)] = 41958, + [SMALL_STATE(750)] = 42000, + [SMALL_STATE(751)] = 42042, [SMALL_STATE(752)] = 42086, [SMALL_STATE(753)] = 42128, [SMALL_STATE(754)] = 42170, @@ -70479,42 +68893,42 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(757)] = 42296, [SMALL_STATE(758)] = 42338, [SMALL_STATE(759)] = 42380, - [SMALL_STATE(760)] = 42422, - [SMALL_STATE(761)] = 42464, - [SMALL_STATE(762)] = 42506, - [SMALL_STATE(763)] = 42548, - [SMALL_STATE(764)] = 42590, - [SMALL_STATE(765)] = 42632, - [SMALL_STATE(766)] = 42674, - [SMALL_STATE(767)] = 42716, - [SMALL_STATE(768)] = 42758, - [SMALL_STATE(769)] = 42800, + [SMALL_STATE(760)] = 42424, + [SMALL_STATE(761)] = 42466, + [SMALL_STATE(762)] = 42508, + [SMALL_STATE(763)] = 42550, + [SMALL_STATE(764)] = 42592, + [SMALL_STATE(765)] = 42634, + [SMALL_STATE(766)] = 42676, + [SMALL_STATE(767)] = 42718, + [SMALL_STATE(768)] = 42760, + [SMALL_STATE(769)] = 42802, [SMALL_STATE(770)] = 42844, - [SMALL_STATE(771)] = 42888, + [SMALL_STATE(771)] = 42886, [SMALL_STATE(772)] = 42930, [SMALL_STATE(773)] = 42972, [SMALL_STATE(774)] = 43014, [SMALL_STATE(775)] = 43055, [SMALL_STATE(776)] = 43096, [SMALL_STATE(777)] = 43137, - [SMALL_STATE(778)] = 43178, - [SMALL_STATE(779)] = 43219, - [SMALL_STATE(780)] = 43260, - [SMALL_STATE(781)] = 43301, - [SMALL_STATE(782)] = 43342, - [SMALL_STATE(783)] = 43383, - [SMALL_STATE(784)] = 43424, - [SMALL_STATE(785)] = 43465, - [SMALL_STATE(786)] = 43506, - [SMALL_STATE(787)] = 43547, - [SMALL_STATE(788)] = 43588, - [SMALL_STATE(789)] = 43629, - [SMALL_STATE(790)] = 43670, - [SMALL_STATE(791)] = 43711, - [SMALL_STATE(792)] = 43752, - [SMALL_STATE(793)] = 43793, - [SMALL_STATE(794)] = 43834, - [SMALL_STATE(795)] = 43879, + [SMALL_STATE(778)] = 43182, + [SMALL_STATE(779)] = 43223, + [SMALL_STATE(780)] = 43264, + [SMALL_STATE(781)] = 43305, + [SMALL_STATE(782)] = 43346, + [SMALL_STATE(783)] = 43387, + [SMALL_STATE(784)] = 43428, + [SMALL_STATE(785)] = 43469, + [SMALL_STATE(786)] = 43510, + [SMALL_STATE(787)] = 43555, + [SMALL_STATE(788)] = 43596, + [SMALL_STATE(789)] = 43637, + [SMALL_STATE(790)] = 43678, + [SMALL_STATE(791)] = 43719, + [SMALL_STATE(792)] = 43760, + [SMALL_STATE(793)] = 43801, + [SMALL_STATE(794)] = 43842, + [SMALL_STATE(795)] = 43883, [SMALL_STATE(796)] = 43924, [SMALL_STATE(797)] = 43965, [SMALL_STATE(798)] = 44006, @@ -70533,7 +68947,7 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(811)] = 44605, [SMALL_STATE(812)] = 44679, [SMALL_STATE(813)] = 44753, - [SMALL_STATE(814)] = 44826, + [SMALL_STATE(814)] = 44824, [SMALL_STATE(815)] = 44897, [SMALL_STATE(816)] = 44968, [SMALL_STATE(817)] = 45039, @@ -70541,7 +68955,7 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(819)] = 45181, [SMALL_STATE(820)] = 45253, [SMALL_STATE(821)] = 45325, - [SMALL_STATE(822)] = 45393, + [SMALL_STATE(822)] = 45397, [SMALL_STATE(823)] = 45465, [SMALL_STATE(824)] = 45531, [SMALL_STATE(825)] = 45594, @@ -70553,526 +68967,526 @@ static const uint32_t ts_small_parse_table_map[] = { [SMALL_STATE(831)] = 45887, [SMALL_STATE(832)] = 45927, [SMALL_STATE(833)] = 45957, - [SMALL_STATE(834)] = 45982, - [SMALL_STATE(835)] = 46007, - [SMALL_STATE(836)] = 46044, - [SMALL_STATE(837)] = 46069, - [SMALL_STATE(838)] = 46106, - [SMALL_STATE(839)] = 46135, - [SMALL_STATE(840)] = 46164, + [SMALL_STATE(834)] = 45994, + [SMALL_STATE(835)] = 46019, + [SMALL_STATE(836)] = 46048, + [SMALL_STATE(837)] = 46073, + [SMALL_STATE(838)] = 46098, + [SMALL_STATE(839)] = 46123, + [SMALL_STATE(840)] = 46160, [SMALL_STATE(841)] = 46189, [SMALL_STATE(842)] = 46223, [SMALL_STATE(843)] = 46251, - [SMALL_STATE(844)] = 46285, + [SMALL_STATE(844)] = 46297, [SMALL_STATE(845)] = 46331, [SMALL_STATE(846)] = 46374, [SMALL_STATE(847)] = 46417, - [SMALL_STATE(848)] = 46448, - [SMALL_STATE(849)] = 46491, - [SMALL_STATE(850)] = 46534, + [SMALL_STATE(848)] = 46460, + [SMALL_STATE(849)] = 46503, + [SMALL_STATE(850)] = 46546, [SMALL_STATE(851)] = 46577, - [SMALL_STATE(852)] = 46617, - [SMALL_STATE(853)] = 46663, - [SMALL_STATE(854)] = 46709, + [SMALL_STATE(852)] = 46623, + [SMALL_STATE(853)] = 46669, + [SMALL_STATE(854)] = 46715, [SMALL_STATE(855)] = 46755, - [SMALL_STATE(856)] = 46780, - [SMALL_STATE(857)] = 46817, + [SMALL_STATE(856)] = 46792, + [SMALL_STATE(857)] = 46829, [SMALL_STATE(858)] = 46854, [SMALL_STATE(859)] = 46891, [SMALL_STATE(860)] = 46928, [SMALL_STATE(861)] = 46950, [SMALL_STATE(862)] = 46984, - [SMALL_STATE(863)] = 47018, + [SMALL_STATE(863)] = 47006, [SMALL_STATE(864)] = 47040, [SMALL_STATE(865)] = 47077, [SMALL_STATE(866)] = 47099, - [SMALL_STATE(867)] = 47118, - [SMALL_STATE(868)] = 47155, - [SMALL_STATE(869)] = 47192, - [SMALL_STATE(870)] = 47215, - [SMALL_STATE(871)] = 47242, - [SMALL_STATE(872)] = 47263, - [SMALL_STATE(873)] = 47286, - [SMALL_STATE(874)] = 47307, - [SMALL_STATE(875)] = 47328, - [SMALL_STATE(876)] = 47351, - [SMALL_STATE(877)] = 47374, - [SMALL_STATE(878)] = 47399, - [SMALL_STATE(879)] = 47422, - [SMALL_STATE(880)] = 47445, - [SMALL_STATE(881)] = 47466, - [SMALL_STATE(882)] = 47489, - [SMALL_STATE(883)] = 47506, - [SMALL_STATE(884)] = 47529, - [SMALL_STATE(885)] = 47566, - [SMALL_STATE(886)] = 47591, - [SMALL_STATE(887)] = 47612, - [SMALL_STATE(888)] = 47637, + [SMALL_STATE(867)] = 47120, + [SMALL_STATE(868)] = 47143, + [SMALL_STATE(869)] = 47168, + [SMALL_STATE(870)] = 47205, + [SMALL_STATE(871)] = 47224, + [SMALL_STATE(872)] = 47249, + [SMALL_STATE(873)] = 47272, + [SMALL_STATE(874)] = 47309, + [SMALL_STATE(875)] = 47346, + [SMALL_STATE(876)] = 47383, + [SMALL_STATE(877)] = 47408, + [SMALL_STATE(878)] = 47435, + [SMALL_STATE(879)] = 47456, + [SMALL_STATE(880)] = 47479, + [SMALL_STATE(881)] = 47500, + [SMALL_STATE(882)] = 47523, + [SMALL_STATE(883)] = 47546, + [SMALL_STATE(884)] = 47567, + [SMALL_STATE(885)] = 47584, + [SMALL_STATE(886)] = 47605, + [SMALL_STATE(887)] = 47628, + [SMALL_STATE(888)] = 47651, [SMALL_STATE(889)] = 47674, [SMALL_STATE(890)] = 47704, - [SMALL_STATE(891)] = 47734, - [SMALL_STATE(892)] = 47764, - [SMALL_STATE(893)] = 47794, - [SMALL_STATE(894)] = 47828, - [SMALL_STATE(895)] = 47862, - [SMALL_STATE(896)] = 47896, - [SMALL_STATE(897)] = 47914, - [SMALL_STATE(898)] = 47932, - [SMALL_STATE(899)] = 47954, + [SMALL_STATE(891)] = 47726, + [SMALL_STATE(892)] = 47756, + [SMALL_STATE(893)] = 47774, + [SMALL_STATE(894)] = 47808, + [SMALL_STATE(895)] = 47826, + [SMALL_STATE(896)] = 47856, + [SMALL_STATE(897)] = 47890, + [SMALL_STATE(898)] = 47912, + [SMALL_STATE(899)] = 47946, [SMALL_STATE(900)] = 47976, [SMALL_STATE(901)] = 48010, - [SMALL_STATE(902)] = 48044, - [SMALL_STATE(903)] = 48066, + [SMALL_STATE(902)] = 48032, + [SMALL_STATE(903)] = 48062, [SMALL_STATE(904)] = 48096, - [SMALL_STATE(905)] = 48126, - [SMALL_STATE(906)] = 48160, + [SMALL_STATE(905)] = 48130, + [SMALL_STATE(906)] = 48164, [SMALL_STATE(907)] = 48194, [SMALL_STATE(908)] = 48224, - [SMALL_STATE(909)] = 48246, + [SMALL_STATE(909)] = 48254, [SMALL_STATE(910)] = 48276, - [SMALL_STATE(911)] = 48310, - [SMALL_STATE(912)] = 48344, + [SMALL_STATE(911)] = 48306, + [SMALL_STATE(912)] = 48340, [SMALL_STATE(913)] = 48374, [SMALL_STATE(914)] = 48393, [SMALL_STATE(915)] = 48412, [SMALL_STATE(916)] = 48431, - [SMALL_STATE(917)] = 48454, + [SMALL_STATE(917)] = 48450, [SMALL_STATE(918)] = 48473, [SMALL_STATE(919)] = 48498, - [SMALL_STATE(920)] = 48521, + [SMALL_STATE(920)] = 48517, [SMALL_STATE(921)] = 48540, [SMALL_STATE(922)] = 48559, [SMALL_STATE(923)] = 48582, - [SMALL_STATE(924)] = 48596, - [SMALL_STATE(925)] = 48610, - [SMALL_STATE(926)] = 48628, - [SMALL_STATE(927)] = 48642, - [SMALL_STATE(928)] = 48656, - [SMALL_STATE(929)] = 48674, - [SMALL_STATE(930)] = 48688, - [SMALL_STATE(931)] = 48702, - [SMALL_STATE(932)] = 48720, - [SMALL_STATE(933)] = 48744, + [SMALL_STATE(924)] = 48598, + [SMALL_STATE(925)] = 48616, + [SMALL_STATE(926)] = 48630, + [SMALL_STATE(927)] = 48654, + [SMALL_STATE(928)] = 48668, + [SMALL_STATE(929)] = 48686, + [SMALL_STATE(930)] = 48700, + [SMALL_STATE(931)] = 48714, + [SMALL_STATE(932)] = 48728, + [SMALL_STATE(933)] = 48748, [SMALL_STATE(934)] = 48762, - [SMALL_STATE(935)] = 48776, - [SMALL_STATE(936)] = 48790, - [SMALL_STATE(937)] = 48808, - [SMALL_STATE(938)] = 48822, - [SMALL_STATE(939)] = 48840, - [SMALL_STATE(940)] = 48858, - [SMALL_STATE(941)] = 48872, - [SMALL_STATE(942)] = 48890, - [SMALL_STATE(943)] = 48904, - [SMALL_STATE(944)] = 48918, - [SMALL_STATE(945)] = 48932, - [SMALL_STATE(946)] = 48950, + [SMALL_STATE(935)] = 48780, + [SMALL_STATE(936)] = 48798, + [SMALL_STATE(937)] = 48814, + [SMALL_STATE(938)] = 48828, + [SMALL_STATE(939)] = 48842, + [SMALL_STATE(940)] = 48856, + [SMALL_STATE(941)] = 48870, + [SMALL_STATE(942)] = 48888, + [SMALL_STATE(943)] = 48906, + [SMALL_STATE(944)] = 48924, + [SMALL_STATE(945)] = 48942, + [SMALL_STATE(946)] = 48956, [SMALL_STATE(947)] = 48970, [SMALL_STATE(948)] = 48984, - [SMALL_STATE(949)] = 48998, - [SMALL_STATE(950)] = 49012, - [SMALL_STATE(951)] = 49026, - [SMALL_STATE(952)] = 49040, - [SMALL_STATE(953)] = 49060, - [SMALL_STATE(954)] = 49074, - [SMALL_STATE(955)] = 49088, - [SMALL_STATE(956)] = 49102, - [SMALL_STATE(957)] = 49128, - [SMALL_STATE(958)] = 49152, - [SMALL_STATE(959)] = 49170, - [SMALL_STATE(960)] = 49190, - [SMALL_STATE(961)] = 49210, - [SMALL_STATE(962)] = 49224, - [SMALL_STATE(963)] = 49238, - [SMALL_STATE(964)] = 49256, - [SMALL_STATE(965)] = 49270, - [SMALL_STATE(966)] = 49292, - [SMALL_STATE(967)] = 49308, - [SMALL_STATE(968)] = 49326, + [SMALL_STATE(949)] = 49010, + [SMALL_STATE(950)] = 49024, + [SMALL_STATE(951)] = 49042, + [SMALL_STATE(952)] = 49064, + [SMALL_STATE(953)] = 49082, + [SMALL_STATE(954)] = 49100, + [SMALL_STATE(955)] = 49114, + [SMALL_STATE(956)] = 49128, + [SMALL_STATE(957)] = 49142, + [SMALL_STATE(958)] = 49156, + [SMALL_STATE(959)] = 49180, + [SMALL_STATE(960)] = 49194, + [SMALL_STATE(961)] = 49214, + [SMALL_STATE(962)] = 49228, + [SMALL_STATE(963)] = 49248, + [SMALL_STATE(964)] = 49262, + [SMALL_STATE(965)] = 49276, + [SMALL_STATE(966)] = 49290, + [SMALL_STATE(967)] = 49310, + [SMALL_STATE(968)] = 49324, [SMALL_STATE(969)] = 49342, [SMALL_STATE(970)] = 49361, - [SMALL_STATE(971)] = 49376, - [SMALL_STATE(972)] = 49393, - [SMALL_STATE(973)] = 49408, - [SMALL_STATE(974)] = 49429, - [SMALL_STATE(975)] = 49452, - [SMALL_STATE(976)] = 49473, - [SMALL_STATE(977)] = 49492, - [SMALL_STATE(978)] = 49515, - [SMALL_STATE(979)] = 49534, - [SMALL_STATE(980)] = 49547, - [SMALL_STATE(981)] = 49570, - [SMALL_STATE(982)] = 49589, - [SMALL_STATE(983)] = 49602, - [SMALL_STATE(984)] = 49621, - [SMALL_STATE(985)] = 49640, - [SMALL_STATE(986)] = 49659, - [SMALL_STATE(987)] = 49672, - [SMALL_STATE(988)] = 49693, - [SMALL_STATE(989)] = 49714, - [SMALL_STATE(990)] = 49727, - [SMALL_STATE(991)] = 49752, - [SMALL_STATE(992)] = 49777, - [SMALL_STATE(993)] = 49798, - [SMALL_STATE(994)] = 49821, - [SMALL_STATE(995)] = 49844, - [SMALL_STATE(996)] = 49863, - [SMALL_STATE(997)] = 49888, - [SMALL_STATE(998)] = 49911, - [SMALL_STATE(999)] = 49930, - [SMALL_STATE(1000)] = 49953, - [SMALL_STATE(1001)] = 49966, - [SMALL_STATE(1002)] = 49983, - [SMALL_STATE(1003)] = 50004, - [SMALL_STATE(1004)] = 50017, - [SMALL_STATE(1005)] = 50040, - [SMALL_STATE(1006)] = 50053, - [SMALL_STATE(1007)] = 50072, - [SMALL_STATE(1008)] = 50089, - [SMALL_STATE(1009)] = 50112, - [SMALL_STATE(1010)] = 50133, + [SMALL_STATE(971)] = 49384, + [SMALL_STATE(972)] = 49409, + [SMALL_STATE(973)] = 49428, + [SMALL_STATE(974)] = 49441, + [SMALL_STATE(975)] = 49466, + [SMALL_STATE(976)] = 49489, + [SMALL_STATE(977)] = 49512, + [SMALL_STATE(978)] = 49525, + [SMALL_STATE(979)] = 49538, + [SMALL_STATE(980)] = 49559, + [SMALL_STATE(981)] = 49580, + [SMALL_STATE(982)] = 49601, + [SMALL_STATE(983)] = 49614, + [SMALL_STATE(984)] = 49635, + [SMALL_STATE(985)] = 49654, + [SMALL_STATE(986)] = 49673, + [SMALL_STATE(987)] = 49698, + [SMALL_STATE(988)] = 49711, + [SMALL_STATE(989)] = 49724, + [SMALL_STATE(990)] = 49739, + [SMALL_STATE(991)] = 49758, + [SMALL_STATE(992)] = 49781, + [SMALL_STATE(993)] = 49800, + [SMALL_STATE(994)] = 49819, + [SMALL_STATE(995)] = 49842, + [SMALL_STATE(996)] = 49861, + [SMALL_STATE(997)] = 49882, + [SMALL_STATE(998)] = 49903, + [SMALL_STATE(999)] = 49916, + [SMALL_STATE(1000)] = 49935, + [SMALL_STATE(1001)] = 49958, + [SMALL_STATE(1002)] = 49975, + [SMALL_STATE(1003)] = 49998, + [SMALL_STATE(1004)] = 50021, + [SMALL_STATE(1005)] = 50042, + [SMALL_STATE(1006)] = 50059, + [SMALL_STATE(1007)] = 50074, + [SMALL_STATE(1008)] = 50099, + [SMALL_STATE(1009)] = 50116, + [SMALL_STATE(1010)] = 50135, [SMALL_STATE(1011)] = 50158, - [SMALL_STATE(1012)] = 50180, - [SMALL_STATE(1013)] = 50200, - [SMALL_STATE(1014)] = 50214, - [SMALL_STATE(1015)] = 50236, - [SMALL_STATE(1016)] = 50248, - [SMALL_STATE(1017)] = 50266, - [SMALL_STATE(1018)] = 50282, - [SMALL_STATE(1019)] = 50300, - [SMALL_STATE(1020)] = 50316, - [SMALL_STATE(1021)] = 50330, - [SMALL_STATE(1022)] = 50348, - [SMALL_STATE(1023)] = 50370, - [SMALL_STATE(1024)] = 50384, + [SMALL_STATE(1012)] = 50176, + [SMALL_STATE(1013)] = 50192, + [SMALL_STATE(1014)] = 50208, + [SMALL_STATE(1015)] = 50230, + [SMALL_STATE(1016)] = 50244, + [SMALL_STATE(1017)] = 50260, + [SMALL_STATE(1018)] = 50278, + [SMALL_STATE(1019)] = 50296, + [SMALL_STATE(1020)] = 50308, + [SMALL_STATE(1021)] = 50322, + [SMALL_STATE(1022)] = 50344, + [SMALL_STATE(1023)] = 50362, + [SMALL_STATE(1024)] = 50382, [SMALL_STATE(1025)] = 50402, - [SMALL_STATE(1026)] = 50420, - [SMALL_STATE(1027)] = 50442, + [SMALL_STATE(1026)] = 50422, + [SMALL_STATE(1027)] = 50440, [SMALL_STATE(1028)] = 50454, - [SMALL_STATE(1029)] = 50474, - [SMALL_STATE(1030)] = 50490, - [SMALL_STATE(1031)] = 50512, - [SMALL_STATE(1032)] = 50528, - [SMALL_STATE(1033)] = 50544, + [SMALL_STATE(1029)] = 50470, + [SMALL_STATE(1030)] = 50492, + [SMALL_STATE(1031)] = 50514, + [SMALL_STATE(1032)] = 50536, + [SMALL_STATE(1033)] = 50550, [SMALL_STATE(1034)] = 50564, - [SMALL_STATE(1035)] = 50580, - [SMALL_STATE(1036)] = 50598, - [SMALL_STATE(1037)] = 50612, - [SMALL_STATE(1038)] = 50630, - [SMALL_STATE(1039)] = 50650, - [SMALL_STATE(1040)] = 50672, - [SMALL_STATE(1041)] = 50688, + [SMALL_STATE(1035)] = 50584, + [SMALL_STATE(1036)] = 50600, + [SMALL_STATE(1037)] = 50622, + [SMALL_STATE(1038)] = 50640, + [SMALL_STATE(1039)] = 50652, + [SMALL_STATE(1040)] = 50668, + [SMALL_STATE(1041)] = 50682, [SMALL_STATE(1042)] = 50702, - [SMALL_STATE(1043)] = 50716, - [SMALL_STATE(1044)] = 50736, - [SMALL_STATE(1045)] = 50756, + [SMALL_STATE(1043)] = 50724, + [SMALL_STATE(1044)] = 50740, + [SMALL_STATE(1045)] = 50760, [SMALL_STATE(1046)] = 50778, - [SMALL_STATE(1047)] = 50797, - [SMALL_STATE(1048)] = 50816, - [SMALL_STATE(1049)] = 50827, - [SMALL_STATE(1050)] = 50844, - [SMALL_STATE(1051)] = 50861, - [SMALL_STATE(1052)] = 50876, - [SMALL_STATE(1053)] = 50893, - [SMALL_STATE(1054)] = 50912, - [SMALL_STATE(1055)] = 50931, - [SMALL_STATE(1056)] = 50948, - [SMALL_STATE(1057)] = 50965, - [SMALL_STATE(1058)] = 50982, - [SMALL_STATE(1059)] = 51001, - [SMALL_STATE(1060)] = 51016, - [SMALL_STATE(1061)] = 51035, + [SMALL_STATE(1047)] = 50795, + [SMALL_STATE(1048)] = 50814, + [SMALL_STATE(1049)] = 50829, + [SMALL_STATE(1050)] = 50846, + [SMALL_STATE(1051)] = 50863, + [SMALL_STATE(1052)] = 50882, + [SMALL_STATE(1053)] = 50901, + [SMALL_STATE(1054)] = 50920, + [SMALL_STATE(1055)] = 50939, + [SMALL_STATE(1056)] = 50956, + [SMALL_STATE(1057)] = 50973, + [SMALL_STATE(1058)] = 50984, + [SMALL_STATE(1059)] = 51003, + [SMALL_STATE(1060)] = 51018, + [SMALL_STATE(1061)] = 51033, [SMALL_STATE(1062)] = 51050, - [SMALL_STATE(1063)] = 51061, - [SMALL_STATE(1064)] = 51078, - [SMALL_STATE(1065)] = 51095, - [SMALL_STATE(1066)] = 51110, - [SMALL_STATE(1067)] = 51127, - [SMALL_STATE(1068)] = 51146, - [SMALL_STATE(1069)] = 51163, + [SMALL_STATE(1063)] = 51067, + [SMALL_STATE(1064)] = 51082, + [SMALL_STATE(1065)] = 51099, + [SMALL_STATE(1066)] = 51114, + [SMALL_STATE(1067)] = 51131, + [SMALL_STATE(1068)] = 51148, + [SMALL_STATE(1069)] = 51165, [SMALL_STATE(1070)] = 51182, - [SMALL_STATE(1071)] = 51199, - [SMALL_STATE(1072)] = 51216, - [SMALL_STATE(1073)] = 51233, - [SMALL_STATE(1074)] = 51250, - [SMALL_STATE(1075)] = 51267, - [SMALL_STATE(1076)] = 51282, - [SMALL_STATE(1077)] = 51299, - [SMALL_STATE(1078)] = 51318, - [SMALL_STATE(1079)] = 51329, - [SMALL_STATE(1080)] = 51344, - [SMALL_STATE(1081)] = 51363, - [SMALL_STATE(1082)] = 51378, + [SMALL_STATE(1071)] = 51201, + [SMALL_STATE(1072)] = 51220, + [SMALL_STATE(1073)] = 51237, + [SMALL_STATE(1074)] = 51252, + [SMALL_STATE(1075)] = 51271, + [SMALL_STATE(1076)] = 51288, + [SMALL_STATE(1077)] = 51305, + [SMALL_STATE(1078)] = 51316, + [SMALL_STATE(1079)] = 51333, + [SMALL_STATE(1080)] = 51350, + [SMALL_STATE(1081)] = 51365, + [SMALL_STATE(1082)] = 51384, [SMALL_STATE(1083)] = 51395, [SMALL_STATE(1084)] = 51412, [SMALL_STATE(1085)] = 51426, [SMALL_STATE(1086)] = 51442, [SMALL_STATE(1087)] = 51456, - [SMALL_STATE(1088)] = 51470, - [SMALL_STATE(1089)] = 51486, - [SMALL_STATE(1090)] = 51502, - [SMALL_STATE(1091)] = 51518, - [SMALL_STATE(1092)] = 51534, - [SMALL_STATE(1093)] = 51548, + [SMALL_STATE(1088)] = 51472, + [SMALL_STATE(1089)] = 51482, + [SMALL_STATE(1090)] = 51496, + [SMALL_STATE(1091)] = 51512, + [SMALL_STATE(1092)] = 51528, + [SMALL_STATE(1093)] = 51542, [SMALL_STATE(1094)] = 51558, - [SMALL_STATE(1095)] = 51574, + [SMALL_STATE(1095)] = 51572, [SMALL_STATE(1096)] = 51588, [SMALL_STATE(1097)] = 51604, [SMALL_STATE(1098)] = 51618, - [SMALL_STATE(1099)] = 51632, - [SMALL_STATE(1100)] = 51646, - [SMALL_STATE(1101)] = 51662, - [SMALL_STATE(1102)] = 51676, + [SMALL_STATE(1099)] = 51634, + [SMALL_STATE(1100)] = 51644, + [SMALL_STATE(1101)] = 51658, + [SMALL_STATE(1102)] = 51674, [SMALL_STATE(1103)] = 51690, [SMALL_STATE(1104)] = 51704, - [SMALL_STATE(1105)] = 51720, - [SMALL_STATE(1106)] = 51734, - [SMALL_STATE(1107)] = 51748, + [SMALL_STATE(1105)] = 51718, + [SMALL_STATE(1106)] = 51732, + [SMALL_STATE(1107)] = 51746, [SMALL_STATE(1108)] = 51762, - [SMALL_STATE(1109)] = 51776, - [SMALL_STATE(1110)] = 51790, - [SMALL_STATE(1111)] = 51806, - [SMALL_STATE(1112)] = 51820, - [SMALL_STATE(1113)] = 51834, - [SMALL_STATE(1114)] = 51844, - [SMALL_STATE(1115)] = 51854, - [SMALL_STATE(1116)] = 51870, - [SMALL_STATE(1117)] = 51884, - [SMALL_STATE(1118)] = 51898, - [SMALL_STATE(1119)] = 51908, - [SMALL_STATE(1120)] = 51918, - [SMALL_STATE(1121)] = 51932, - [SMALL_STATE(1122)] = 51948, - [SMALL_STATE(1123)] = 51962, - [SMALL_STATE(1124)] = 51978, - [SMALL_STATE(1125)] = 51990, - [SMALL_STATE(1126)] = 52006, - [SMALL_STATE(1127)] = 52020, - [SMALL_STATE(1128)] = 52034, - [SMALL_STATE(1129)] = 52044, - [SMALL_STATE(1130)] = 52060, - [SMALL_STATE(1131)] = 52076, - [SMALL_STATE(1132)] = 52092, - [SMALL_STATE(1133)] = 52108, - [SMALL_STATE(1134)] = 52122, - [SMALL_STATE(1135)] = 52138, + [SMALL_STATE(1109)] = 51778, + [SMALL_STATE(1110)] = 51794, + [SMALL_STATE(1111)] = 51810, + [SMALL_STATE(1112)] = 51826, + [SMALL_STATE(1113)] = 51840, + [SMALL_STATE(1114)] = 51854, + [SMALL_STATE(1115)] = 51868, + [SMALL_STATE(1116)] = 51878, + [SMALL_STATE(1117)] = 51892, + [SMALL_STATE(1118)] = 51908, + [SMALL_STATE(1119)] = 51922, + [SMALL_STATE(1120)] = 51934, + [SMALL_STATE(1121)] = 51948, + [SMALL_STATE(1122)] = 51964, + [SMALL_STATE(1123)] = 51978, + [SMALL_STATE(1124)] = 51994, + [SMALL_STATE(1125)] = 52008, + [SMALL_STATE(1126)] = 52022, + [SMALL_STATE(1127)] = 52036, + [SMALL_STATE(1128)] = 52050, + [SMALL_STATE(1129)] = 52066, + [SMALL_STATE(1130)] = 52076, + [SMALL_STATE(1131)] = 52086, + [SMALL_STATE(1132)] = 52102, + [SMALL_STATE(1133)] = 52116, + [SMALL_STATE(1134)] = 52126, + [SMALL_STATE(1135)] = 52140, [SMALL_STATE(1136)] = 52154, [SMALL_STATE(1137)] = 52168, - [SMALL_STATE(1138)] = 52184, + [SMALL_STATE(1138)] = 52182, [SMALL_STATE(1139)] = 52198, [SMALL_STATE(1140)] = 52212, [SMALL_STATE(1141)] = 52228, - [SMALL_STATE(1142)] = 52240, - [SMALL_STATE(1143)] = 52256, + [SMALL_STATE(1142)] = 52244, + [SMALL_STATE(1143)] = 52258, [SMALL_STATE(1144)] = 52272, - [SMALL_STATE(1145)] = 52286, - [SMALL_STATE(1146)] = 52302, - [SMALL_STATE(1147)] = 52318, + [SMALL_STATE(1145)] = 52288, + [SMALL_STATE(1146)] = 52304, + [SMALL_STATE(1147)] = 52320, [SMALL_STATE(1148)] = 52334, [SMALL_STATE(1149)] = 52350, - [SMALL_STATE(1150)] = 52364, - [SMALL_STATE(1151)] = 52380, + [SMALL_STATE(1150)] = 52366, + [SMALL_STATE(1151)] = 52382, [SMALL_STATE(1152)] = 52394, [SMALL_STATE(1153)] = 52410, - [SMALL_STATE(1154)] = 52421, - [SMALL_STATE(1155)] = 52430, - [SMALL_STATE(1156)] = 52443, - [SMALL_STATE(1157)] = 52456, - [SMALL_STATE(1158)] = 52469, - [SMALL_STATE(1159)] = 52482, - [SMALL_STATE(1160)] = 52495, - [SMALL_STATE(1161)] = 52508, - [SMALL_STATE(1162)] = 52517, - [SMALL_STATE(1163)] = 52530, - [SMALL_STATE(1164)] = 52543, - [SMALL_STATE(1165)] = 52556, - [SMALL_STATE(1166)] = 52569, - [SMALL_STATE(1167)] = 52582, + [SMALL_STATE(1154)] = 52423, + [SMALL_STATE(1155)] = 52436, + [SMALL_STATE(1156)] = 52449, + [SMALL_STATE(1157)] = 52462, + [SMALL_STATE(1158)] = 52471, + [SMALL_STATE(1159)] = 52484, + [SMALL_STATE(1160)] = 52497, + [SMALL_STATE(1161)] = 52510, + [SMALL_STATE(1162)] = 52523, + [SMALL_STATE(1163)] = 52532, + [SMALL_STATE(1164)] = 52545, + [SMALL_STATE(1165)] = 52558, + [SMALL_STATE(1166)] = 52571, + [SMALL_STATE(1167)] = 52584, [SMALL_STATE(1168)] = 52595, [SMALL_STATE(1169)] = 52606, - [SMALL_STATE(1170)] = 52619, - [SMALL_STATE(1171)] = 52632, - [SMALL_STATE(1172)] = 52645, - [SMALL_STATE(1173)] = 52658, - [SMALL_STATE(1174)] = 52671, - [SMALL_STATE(1175)] = 52684, - [SMALL_STATE(1176)] = 52695, - [SMALL_STATE(1177)] = 52708, - [SMALL_STATE(1178)] = 52721, - [SMALL_STATE(1179)] = 52730, - [SMALL_STATE(1180)] = 52743, + [SMALL_STATE(1170)] = 52615, + [SMALL_STATE(1171)] = 52628, + [SMALL_STATE(1172)] = 52641, + [SMALL_STATE(1173)] = 52654, + [SMALL_STATE(1174)] = 52667, + [SMALL_STATE(1175)] = 52680, + [SMALL_STATE(1176)] = 52693, + [SMALL_STATE(1177)] = 52706, + [SMALL_STATE(1178)] = 52719, + [SMALL_STATE(1179)] = 52732, + [SMALL_STATE(1180)] = 52745, [SMALL_STATE(1181)] = 52754, [SMALL_STATE(1182)] = 52767, - [SMALL_STATE(1183)] = 52776, - [SMALL_STATE(1184)] = 52789, - [SMALL_STATE(1185)] = 52802, - [SMALL_STATE(1186)] = 52813, - [SMALL_STATE(1187)] = 52826, - [SMALL_STATE(1188)] = 52839, + [SMALL_STATE(1183)] = 52780, + [SMALL_STATE(1184)] = 52793, + [SMALL_STATE(1185)] = 52804, + [SMALL_STATE(1186)] = 52817, + [SMALL_STATE(1187)] = 52830, + [SMALL_STATE(1188)] = 52843, [SMALL_STATE(1189)] = 52852, [SMALL_STATE(1190)] = 52865, - [SMALL_STATE(1191)] = 52878, + [SMALL_STATE(1191)] = 52874, [SMALL_STATE(1192)] = 52887, - [SMALL_STATE(1193)] = 52896, - [SMALL_STATE(1194)] = 52905, - [SMALL_STATE(1195)] = 52918, - [SMALL_STATE(1196)] = 52931, - [SMALL_STATE(1197)] = 52944, - [SMALL_STATE(1198)] = 52957, - [SMALL_STATE(1199)] = 52970, - [SMALL_STATE(1200)] = 52983, - [SMALL_STATE(1201)] = 52992, - [SMALL_STATE(1202)] = 53005, - [SMALL_STATE(1203)] = 53018, - [SMALL_STATE(1204)] = 53031, - [SMALL_STATE(1205)] = 53040, - [SMALL_STATE(1206)] = 53053, - [SMALL_STATE(1207)] = 53066, - [SMALL_STATE(1208)] = 53079, - [SMALL_STATE(1209)] = 53092, - [SMALL_STATE(1210)] = 53101, - [SMALL_STATE(1211)] = 53114, - [SMALL_STATE(1212)] = 53127, - [SMALL_STATE(1213)] = 53140, - [SMALL_STATE(1214)] = 53153, - [SMALL_STATE(1215)] = 53166, - [SMALL_STATE(1216)] = 53179, - [SMALL_STATE(1217)] = 53192, - [SMALL_STATE(1218)] = 53203, - [SMALL_STATE(1219)] = 53216, - [SMALL_STATE(1220)] = 53227, - [SMALL_STATE(1221)] = 53240, - [SMALL_STATE(1222)] = 53253, - [SMALL_STATE(1223)] = 53266, - [SMALL_STATE(1224)] = 53279, - [SMALL_STATE(1225)] = 53292, - [SMALL_STATE(1226)] = 53305, - [SMALL_STATE(1227)] = 53318, - [SMALL_STATE(1228)] = 53331, - [SMALL_STATE(1229)] = 53344, - [SMALL_STATE(1230)] = 53357, - [SMALL_STATE(1231)] = 53370, - [SMALL_STATE(1232)] = 53383, - [SMALL_STATE(1233)] = 53396, - [SMALL_STATE(1234)] = 53409, - [SMALL_STATE(1235)] = 53422, - [SMALL_STATE(1236)] = 53431, - [SMALL_STATE(1237)] = 53444, - [SMALL_STATE(1238)] = 53457, - [SMALL_STATE(1239)] = 53470, - [SMALL_STATE(1240)] = 53483, - [SMALL_STATE(1241)] = 53496, - [SMALL_STATE(1242)] = 53509, - [SMALL_STATE(1243)] = 53522, - [SMALL_STATE(1244)] = 53535, - [SMALL_STATE(1245)] = 53544, - [SMALL_STATE(1246)] = 53557, - [SMALL_STATE(1247)] = 53570, - [SMALL_STATE(1248)] = 53583, - [SMALL_STATE(1249)] = 53596, - [SMALL_STATE(1250)] = 53609, - [SMALL_STATE(1251)] = 53622, - [SMALL_STATE(1252)] = 53635, - [SMALL_STATE(1253)] = 53648, - [SMALL_STATE(1254)] = 53659, - [SMALL_STATE(1255)] = 53670, - [SMALL_STATE(1256)] = 53681, - [SMALL_STATE(1257)] = 53690, - [SMALL_STATE(1258)] = 53703, - [SMALL_STATE(1259)] = 53712, - [SMALL_STATE(1260)] = 53723, - [SMALL_STATE(1261)] = 53736, - [SMALL_STATE(1262)] = 53749, - [SMALL_STATE(1263)] = 53762, - [SMALL_STATE(1264)] = 53775, - [SMALL_STATE(1265)] = 53786, - [SMALL_STATE(1266)] = 53799, - [SMALL_STATE(1267)] = 53812, - [SMALL_STATE(1268)] = 53825, - [SMALL_STATE(1269)] = 53834, - [SMALL_STATE(1270)] = 53847, - [SMALL_STATE(1271)] = 53860, - [SMALL_STATE(1272)] = 53873, - [SMALL_STATE(1273)] = 53886, - [SMALL_STATE(1274)] = 53899, - [SMALL_STATE(1275)] = 53912, - [SMALL_STATE(1276)] = 53925, - [SMALL_STATE(1277)] = 53938, - [SMALL_STATE(1278)] = 53951, - [SMALL_STATE(1279)] = 53964, - [SMALL_STATE(1280)] = 53977, - [SMALL_STATE(1281)] = 53990, - [SMALL_STATE(1282)] = 54003, + [SMALL_STATE(1193)] = 52900, + [SMALL_STATE(1194)] = 52913, + [SMALL_STATE(1195)] = 52926, + [SMALL_STATE(1196)] = 52939, + [SMALL_STATE(1197)] = 52952, + [SMALL_STATE(1198)] = 52965, + [SMALL_STATE(1199)] = 52978, + [SMALL_STATE(1200)] = 52991, + [SMALL_STATE(1201)] = 53004, + [SMALL_STATE(1202)] = 53017, + [SMALL_STATE(1203)] = 53030, + [SMALL_STATE(1204)] = 53043, + [SMALL_STATE(1205)] = 53056, + [SMALL_STATE(1206)] = 53069, + [SMALL_STATE(1207)] = 53082, + [SMALL_STATE(1208)] = 53095, + [SMALL_STATE(1209)] = 53108, + [SMALL_STATE(1210)] = 53119, + [SMALL_STATE(1211)] = 53128, + [SMALL_STATE(1212)] = 53139, + [SMALL_STATE(1213)] = 53150, + [SMALL_STATE(1214)] = 53163, + [SMALL_STATE(1215)] = 53176, + [SMALL_STATE(1216)] = 53189, + [SMALL_STATE(1217)] = 53202, + [SMALL_STATE(1218)] = 53215, + [SMALL_STATE(1219)] = 53228, + [SMALL_STATE(1220)] = 53241, + [SMALL_STATE(1221)] = 53254, + [SMALL_STATE(1222)] = 53267, + [SMALL_STATE(1223)] = 53278, + [SMALL_STATE(1224)] = 53291, + [SMALL_STATE(1225)] = 53304, + [SMALL_STATE(1226)] = 53317, + [SMALL_STATE(1227)] = 53330, + [SMALL_STATE(1228)] = 53343, + [SMALL_STATE(1229)] = 53356, + [SMALL_STATE(1230)] = 53369, + [SMALL_STATE(1231)] = 53382, + [SMALL_STATE(1232)] = 53395, + [SMALL_STATE(1233)] = 53408, + [SMALL_STATE(1234)] = 53421, + [SMALL_STATE(1235)] = 53434, + [SMALL_STATE(1236)] = 53447, + [SMALL_STATE(1237)] = 53460, + [SMALL_STATE(1238)] = 53473, + [SMALL_STATE(1239)] = 53486, + [SMALL_STATE(1240)] = 53499, + [SMALL_STATE(1241)] = 53512, + [SMALL_STATE(1242)] = 53525, + [SMALL_STATE(1243)] = 53534, + [SMALL_STATE(1244)] = 53547, + [SMALL_STATE(1245)] = 53560, + [SMALL_STATE(1246)] = 53573, + [SMALL_STATE(1247)] = 53582, + [SMALL_STATE(1248)] = 53595, + [SMALL_STATE(1249)] = 53606, + [SMALL_STATE(1250)] = 53619, + [SMALL_STATE(1251)] = 53632, + [SMALL_STATE(1252)] = 53645, + [SMALL_STATE(1253)] = 53658, + [SMALL_STATE(1254)] = 53671, + [SMALL_STATE(1255)] = 53684, + [SMALL_STATE(1256)] = 53697, + [SMALL_STATE(1257)] = 53710, + [SMALL_STATE(1258)] = 53723, + [SMALL_STATE(1259)] = 53734, + [SMALL_STATE(1260)] = 53743, + [SMALL_STATE(1261)] = 53756, + [SMALL_STATE(1262)] = 53765, + [SMALL_STATE(1263)] = 53778, + [SMALL_STATE(1264)] = 53791, + [SMALL_STATE(1265)] = 53804, + [SMALL_STATE(1266)] = 53813, + [SMALL_STATE(1267)] = 53826, + [SMALL_STATE(1268)] = 53835, + [SMALL_STATE(1269)] = 53848, + [SMALL_STATE(1270)] = 53861, + [SMALL_STATE(1271)] = 53874, + [SMALL_STATE(1272)] = 53887, + [SMALL_STATE(1273)] = 53900, + [SMALL_STATE(1274)] = 53909, + [SMALL_STATE(1275)] = 53922, + [SMALL_STATE(1276)] = 53933, + [SMALL_STATE(1277)] = 53942, + [SMALL_STATE(1278)] = 53955, + [SMALL_STATE(1279)] = 53968, + [SMALL_STATE(1280)] = 53981, + [SMALL_STATE(1281)] = 53994, + [SMALL_STATE(1282)] = 54005, [SMALL_STATE(1283)] = 54016, - [SMALL_STATE(1284)] = 54026, - [SMALL_STATE(1285)] = 54036, + [SMALL_STATE(1284)] = 54024, + [SMALL_STATE(1285)] = 54034, [SMALL_STATE(1286)] = 54044, [SMALL_STATE(1287)] = 54052, - [SMALL_STATE(1288)] = 54062, - [SMALL_STATE(1289)] = 54072, - [SMALL_STATE(1290)] = 54082, - [SMALL_STATE(1291)] = 54092, - [SMALL_STATE(1292)] = 54100, - [SMALL_STATE(1293)] = 54108, - [SMALL_STATE(1294)] = 54116, - [SMALL_STATE(1295)] = 54124, - [SMALL_STATE(1296)] = 54132, - [SMALL_STATE(1297)] = 54142, - [SMALL_STATE(1298)] = 54150, - [SMALL_STATE(1299)] = 54158, - [SMALL_STATE(1300)] = 54168, - [SMALL_STATE(1301)] = 54176, - [SMALL_STATE(1302)] = 54184, - [SMALL_STATE(1303)] = 54194, - [SMALL_STATE(1304)] = 54204, - [SMALL_STATE(1305)] = 54212, - [SMALL_STATE(1306)] = 54220, - [SMALL_STATE(1307)] = 54228, - [SMALL_STATE(1308)] = 54236, - [SMALL_STATE(1309)] = 54244, - [SMALL_STATE(1310)] = 54254, - [SMALL_STATE(1311)] = 54264, - [SMALL_STATE(1312)] = 54272, + [SMALL_STATE(1288)] = 54060, + [SMALL_STATE(1289)] = 54068, + [SMALL_STATE(1290)] = 54076, + [SMALL_STATE(1291)] = 54084, + [SMALL_STATE(1292)] = 54092, + [SMALL_STATE(1293)] = 54100, + [SMALL_STATE(1294)] = 54108, + [SMALL_STATE(1295)] = 54118, + [SMALL_STATE(1296)] = 54126, + [SMALL_STATE(1297)] = 54136, + [SMALL_STATE(1298)] = 54144, + [SMALL_STATE(1299)] = 54152, + [SMALL_STATE(1300)] = 54162, + [SMALL_STATE(1301)] = 54172, + [SMALL_STATE(1302)] = 54180, + [SMALL_STATE(1303)] = 54190, + [SMALL_STATE(1304)] = 54198, + [SMALL_STATE(1305)] = 54206, + [SMALL_STATE(1306)] = 54216, + [SMALL_STATE(1307)] = 54224, + [SMALL_STATE(1308)] = 54232, + [SMALL_STATE(1309)] = 54242, + [SMALL_STATE(1310)] = 54252, + [SMALL_STATE(1311)] = 54262, + [SMALL_STATE(1312)] = 54270, [SMALL_STATE(1313)] = 54280, [SMALL_STATE(1314)] = 54288, [SMALL_STATE(1315)] = 54296, - [SMALL_STATE(1316)] = 54304, - [SMALL_STATE(1317)] = 54312, + [SMALL_STATE(1316)] = 54306, + [SMALL_STATE(1317)] = 54314, [SMALL_STATE(1318)] = 54322, [SMALL_STATE(1319)] = 54330, - [SMALL_STATE(1320)] = 54340, - [SMALL_STATE(1321)] = 54348, - [SMALL_STATE(1322)] = 54356, - [SMALL_STATE(1323)] = 54364, - [SMALL_STATE(1324)] = 54374, - [SMALL_STATE(1325)] = 54384, + [SMALL_STATE(1320)] = 54338, + [SMALL_STATE(1321)] = 54346, + [SMALL_STATE(1322)] = 54354, + [SMALL_STATE(1323)] = 54362, + [SMALL_STATE(1324)] = 54372, + [SMALL_STATE(1325)] = 54382, [SMALL_STATE(1326)] = 54392, [SMALL_STATE(1327)] = 54400, [SMALL_STATE(1328)] = 54408, - [SMALL_STATE(1329)] = 54418, - [SMALL_STATE(1330)] = 54428, - [SMALL_STATE(1331)] = 54438, - [SMALL_STATE(1332)] = 54448, - [SMALL_STATE(1333)] = 54456, - [SMALL_STATE(1334)] = 54464, - [SMALL_STATE(1335)] = 54472, - [SMALL_STATE(1336)] = 54480, - [SMALL_STATE(1337)] = 54488, - [SMALL_STATE(1338)] = 54496, - [SMALL_STATE(1339)] = 54504, - [SMALL_STATE(1340)] = 54512, - [SMALL_STATE(1341)] = 54520, - [SMALL_STATE(1342)] = 54528, + [SMALL_STATE(1329)] = 54416, + [SMALL_STATE(1330)] = 54426, + [SMALL_STATE(1331)] = 54434, + [SMALL_STATE(1332)] = 54444, + [SMALL_STATE(1333)] = 54452, + [SMALL_STATE(1334)] = 54460, + [SMALL_STATE(1335)] = 54468, + [SMALL_STATE(1336)] = 54476, + [SMALL_STATE(1337)] = 54484, + [SMALL_STATE(1338)] = 54492, + [SMALL_STATE(1339)] = 54500, + [SMALL_STATE(1340)] = 54508, + [SMALL_STATE(1341)] = 54518, + [SMALL_STATE(1342)] = 54526, [SMALL_STATE(1343)] = 54536, [SMALL_STATE(1344)] = 54546, [SMALL_STATE(1345)] = 54554, - [SMALL_STATE(1346)] = 54562, + [SMALL_STATE(1346)] = 54564, [SMALL_STATE(1347)] = 54572, - [SMALL_STATE(1348)] = 54580, - [SMALL_STATE(1349)] = 54590, - [SMALL_STATE(1350)] = 54598, - [SMALL_STATE(1351)] = 54606, - [SMALL_STATE(1352)] = 54616, - [SMALL_STATE(1353)] = 54626, + [SMALL_STATE(1348)] = 54582, + [SMALL_STATE(1349)] = 54592, + [SMALL_STATE(1350)] = 54602, + [SMALL_STATE(1351)] = 54610, + [SMALL_STATE(1352)] = 54620, + [SMALL_STATE(1353)] = 54628, [SMALL_STATE(1354)] = 54636, [SMALL_STATE(1355)] = 54643, [SMALL_STATE(1356)] = 54650, @@ -71205,1525 +69619,1520 @@ static const TSParseActionEntry ts_parse_actions[] = { [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(331), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1152), - [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(997), - [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), - [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(351), - [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(72), - [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(374), - [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(194), - [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(224), - [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(168), - [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1301), - [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1305), - [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1292), - [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(389), - [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), - [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(561), - [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(375), - [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1408), - [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(291), - [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), - [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1150), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(994), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(347), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(388), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(201), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(234), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1288), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1289), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1290), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(246), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(563), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430), + [41] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1466), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(310), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(684), [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), - [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), - [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), - [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1379), - [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1397), - [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1461), - [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(256), - [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(301), - [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1474), - [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), - [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(368), - [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(850), - [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), - [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), - [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(773), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [53] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1465), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1463), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1462), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(275), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(309), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1461), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(384), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(177), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(764), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(764), [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(134), - [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), - [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(439), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(902), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(408), [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(239), [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(564), - [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(440), - [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1447), - [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(303), - [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), - [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1469), - [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1450), - [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), - [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321), - [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), - [107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), - [109] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1), - [111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1333), - [113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), - [115] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(331), - [118] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1152), - [121] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(997), - [124] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(153), - [127] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(351), - [130] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(72), - [133] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(374), - [136] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(194), - [139] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(224), - [142] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(168), - [145] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1301), - [148] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1305), - [151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1292), - [154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(389), - [157] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(241), - [160] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(561), - [163] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(375), - [166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1408), - [169] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(291), - [172] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(66), - [175] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(644), - [178] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(157), - [181] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(164), - [184] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(353), - [187] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1379), - [190] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1397), - [193] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1461), - [196] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(256), - [199] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(301), - [202] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1474), - [205] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(367), - [208] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(368), - [211] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(850), - [214] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(178), - [217] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(773), - [220] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(773), - [223] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(134), - [226] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(891), - [229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(281), - [231] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(439), - [234] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(239), - [237] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(564), - [240] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(440), - [243] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1447), - [246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(303), - [249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(67), - [252] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1469), - [255] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1450), - [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(658), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(402), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1448), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(299), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(66), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1470), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1451), + [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(264), + [103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321), + [107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_module, 1), + [109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [111] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(334), + [114] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1150), + [117] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(994), + [120] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(160), + [123] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(347), + [126] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(125), + [129] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(388), + [132] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(201), + [135] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(234), + [138] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(178), + [141] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1288), + [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1289), + [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1290), + [150] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(408), + [153] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(239), + [156] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(564), + [159] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(402), + [162] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1448), + [165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(299), + [168] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(66), + [171] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(684), + [174] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(157), + [177] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(163), + [180] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(375), + [183] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1470), + [186] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1463), + [189] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1462), + [192] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(275), + [195] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(309), + [198] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1451), + [201] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(383), + [204] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(384), + [207] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(849), + [210] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(177), + [213] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(764), + [216] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(764), + [219] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(134), + [222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), + [224] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(902), + [227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), + [229] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(385), + [232] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(246), + [235] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(563), + [238] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(430), + [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1466), + [244] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(310), + [247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(67), + [250] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1465), + [253] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_module_repeat1, 2), SHIFT_REPEAT(1461), + [256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1316), + [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), [260] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), - [262] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(197), - [265] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), REDUCE(sym_primary_expression, 1, .production_id = 1), - [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(402), - [271] = {.entry = {.count = 1, .reusable = false}}, SHIFT(657), - [273] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), - [275] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .production_id = 1), - [277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(675), - [280] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(204), - [283] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), - [285] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(353), - [288] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_primary_expression, 1, .production_id = 1), SHIFT(432), - [291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(675), - [293] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), - [295] = {.entry = {.count = 1, .reusable = false}}, SHIFT(849), - [297] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), - [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(589), - [301] = {.entry = {.count = 1, .reusable = false}}, SHIFT(589), - [303] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), - [305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), - [307] = {.entry = {.count = 1, .reusable = false}}, SHIFT(330), - [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), - [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), - [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(526), - [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), - [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), - [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), - [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), - [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(735), - [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(715), - [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), - [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), - [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), - [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), - [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), - [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), - [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), - [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), - [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(536), - [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), - [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(540), - [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), - [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), - [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), - [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), - [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), - [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), - [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), - [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546), - [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), - [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), - [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), - [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), - [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), - [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), - [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), - [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), - [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(470), - [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), - [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(549), - [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), - [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), - [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), - [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), - [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), - [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), - [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), - [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(484), - [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), - [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), - [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), - [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(334), - [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), - [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487), - [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), - [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), - [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), - [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), - [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), - [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(494), - [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), - [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), - [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), - [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), - [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), - [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), - [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), - [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531), - [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), - [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), - [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), - [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(336), - [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), - [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), - [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), - [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(450), - [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), - [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(506), - [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), - [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(541), - [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(400), - [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), - [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), - [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512), - [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), - [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(554), - [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), - [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), - [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(447), - [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), - [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453), - [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), - [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), - [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), - [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(518), - [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), - [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(466), - [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), - [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), - [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), - [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(340), - [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), - [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), - [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), - [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), - [531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(449), - [535] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), - [537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(503), - [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), - [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(992), - [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), - [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), - [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), - [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1286), - [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), - [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), - [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1311), - [557] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), - [559] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), - [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), - [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(752), - [565] = {.entry = {.count = 1, .reusable = false}}, SHIFT(644), - [567] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), - [569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), - [571] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), - [573] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(598), - [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), - [580] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [582] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), - [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), - [586] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), - [588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(138), - [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), - [592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), - [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(653), - [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), - [598] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), - [600] = {.entry = {.count = 1, .reusable = false}}, SHIFT(796), - [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), - [604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(797), - [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), - [608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), - [610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), - [612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), - [614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), - [616] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), - [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(903), - [620] = {.entry = {.count = 1, .reusable = false}}, SHIFT(398), - [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381), - [624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1), - [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(402), - [628] = {.entry = {.count = 1, .reusable = false}}, SHIFT(432), - [630] = {.entry = {.count = 1, .reusable = false}}, SHIFT(725), - [632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), - [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403), - [636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), - [638] = {.entry = {.count = 1, .reusable = false}}, SHIFT(714), - [640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), - [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), - [644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(846), - [646] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), - [648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), - [650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(732), - [652] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), - [654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), - [656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(649), - [658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(726), - [660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, .production_id = 16), - [662] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, .production_id = 16), - [664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), - [666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), - [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(742), - [670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), - [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), - [674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(743), - [676] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 7), - [678] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, .production_id = 7), - [680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [264] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), REDUCE(sym_primary_expression, 1, .production_id = 1), + [267] = {.entry = {.count = 1, .reusable = false}}, SHIFT(440), + [269] = {.entry = {.count = 1, .reusable = false}}, SHIFT(641), + [271] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423), + [273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1, .production_id = 1), + [275] = {.entry = {.count = 1, .reusable = false}}, SHIFT(678), + [277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [279] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [281] = {.entry = {.count = 1, .reusable = false}}, SHIFT(375), + [283] = {.entry = {.count = 1, .reusable = false}}, SHIFT(434), + [285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(678), + [287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1, .production_id = 1), + [289] = {.entry = {.count = 1, .reusable = false}}, SHIFT(847), + [291] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1, .production_id = 1), + [293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(575), + [295] = {.entry = {.count = 1, .reusable = false}}, SHIFT(575), + [297] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), + [299] = {.entry = {.count = 1, .reusable = true}}, SHIFT(907), + [301] = {.entry = {.count = 1, .reusable = false}}, SHIFT(341), + [303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [305] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(496), + [309] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(450), + [313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [315] = {.entry = {.count = 1, .reusable = true}}, SHIFT(326), + [317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463), + [333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(451), + [337] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(448), + [341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [343] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(476), + [349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453), + [353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(504), + [357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(478), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), + [369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(545), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(531), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(266), + [381] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [383] = {.entry = {.count = 1, .reusable = true}}, SHIFT(252), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), + [389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(534), + [397] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(327), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(979), + [409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(505), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [419] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(59), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(507), + [425] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(508), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(540), + [433] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [439] = {.entry = {.count = 1, .reusable = true}}, SHIFT(342), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [445] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [449] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(551), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43), + [455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420), + [457] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [459] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), + [465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(554), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), + [471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), + [479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [483] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [487] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [491] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [495] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [497] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [501] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [503] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(330), + [513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(428), + [517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(55), + [523] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [527] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), + [529] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [531] = {.entry = {.count = 1, .reusable = false}}, SHIFT(714), + [533] = {.entry = {.count = 1, .reusable = false}}, SHIFT(724), + [535] = {.entry = {.count = 1, .reusable = false}}, SHIFT(393), + [537] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [543] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1313), + [545] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [547] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1304), + [549] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [551] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [553] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), + [555] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), + [557] = {.entry = {.count = 1, .reusable = false}}, SHIFT(747), + [559] = {.entry = {.count = 1, .reusable = false}}, SHIFT(684), + [561] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [563] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [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 = false}}, SHIFT(584), + [570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(387), + [572] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 8), + [576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(137), + [578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(401), + [582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(655), + [584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [586] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), + [588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(787), + [590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), + [592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(781), + [594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(371), + [596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679), + [598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(166), + [602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), + [604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), + [606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(891), + [608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(443), + [610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(360), + [612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 1), + [614] = {.entry = {.count = 1, .reusable = false}}, SHIFT(720), + [616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(713), + [620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347), + [622] = {.entry = {.count = 1, .reusable = false}}, SHIFT(723), + [624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [626] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), + [628] = {.entry = {.count = 1, .reusable = false}}, SHIFT(848), + [630] = {.entry = {.count = 1, .reusable = false}}, SHIFT(152), + [632] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), + [634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(751), + [636] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), + [638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [640] = {.entry = {.count = 1, .reusable = false}}, SHIFT(667), + [642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(733), + [644] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [646] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 2, .production_id = 7), + [648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [650] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), + [652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [654] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern_list, 3, .production_id = 16), + [656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(427), + [658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(746), + [660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), + [662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [664] = {.entry = {.count = 1, .reusable = false}}, SHIFT(673), + [666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1398), + [670] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), + [672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586), + [674] = {.entry = {.count = 1, .reusable = false}}, SHIFT(138), + [676] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1414), + [680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(748), [682] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 7), - [684] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), - [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), - [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1464), - [690] = {.entry = {.count = 1, .reusable = false}}, SHIFT(671), - [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(756), - [694] = {.entry = {.count = 1, .reusable = false}}, SHIFT(137), - [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), - [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(798), - [700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1458), - [702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599), - [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(656), - [706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(402), - [708] = {.entry = {.count = 1, .reusable = false}}, SHIFT(408), - [710] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1), - [712] = {.entry = {.count = 1, .reusable = false}}, SHIFT(795), - [714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(183), - [716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581), - [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1364), - [720] = {.entry = {.count = 1, .reusable = false}}, SHIFT(794), - [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), - [724] = {.entry = {.count = 1, .reusable = false}}, SHIFT(710), - [726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), - [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), - [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), - [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1371), - [734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), - [736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), - [738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 24), - [740] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, .production_id = 50), - [742] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), - [744] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 123), - [746] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 123), - [748] = {.entry = {.count = 1, .reusable = false}}, SHIFT(845), - [750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), - [752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), - [754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(745), - [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, .production_id = 16), - [758] = {.entry = {.count = 1, .reusable = false}}, SHIFT(379), - [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(423), - [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(757), - [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), - [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(759), - [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(591), - [770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596), - [772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(601), - [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602), - [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), - [778] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), - [780] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), - [782] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), - [784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(691), - [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(750), - [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753), + [684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1362), + [686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), + [688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), + [690] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 3, .production_id = 50), + [692] = {.entry = {.count = 1, .reusable = true}}, SHIFT(440), + [694] = {.entry = {.count = 1, .reusable = false}}, SHIFT(722), + [696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), + [698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), + [700] = {.entry = {.count = 1, .reusable = false}}, SHIFT(732), + [702] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(651), + [706] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 24), + [708] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), + [710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1447), + [712] = {.entry = {.count = 1, .reusable = false}}, SHIFT(777), + [714] = {.entry = {.count = 1, .reusable = false}}, SHIFT(786), + [716] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(773), + [720] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1376), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(411), + [724] = {.entry = {.count = 1, .reusable = false}}, SHIFT(439), + [726] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 1), + [728] = {.entry = {.count = 1, .reusable = true}}, SHIFT(583), + [730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), + [734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [736] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 122), + [738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(845), + [740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), + [742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(756), + [744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581), + [746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(737), + [748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(593), + [750] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 3, .production_id = 16), + [752] = {.entry = {.count = 1, .reusable = false}}, SHIFT(350), + [754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, .production_id = 7), + [758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(653), + [760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(689), + [762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(754), + [764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), + [766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(749), + [770] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 1), + [772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(574), + [774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590), + [776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), + [778] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 98), + [780] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, .production_id = 98), + [782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 123), + [784] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 6, .production_id = 123), + [786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(770), + [788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(761), [790] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 7, .production_id = 141), [792] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 7, .production_id = 141), - [794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), - [796] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression_list, 2, .production_id = 7), - [798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(787), - [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), - [802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792), - [804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(774), - [806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), - [808] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 98), - [810] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_in_clause, 5, .production_id = 98), - [812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), - [814] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 3, .production_id = 16), - [816] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 2, .production_id = 7), - [818] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, .production_id = 70), - [820] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, .production_id = 70), - [822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 40), - [824] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, .production_id = 40), - [826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 33), - [828] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 81), - [830] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 81), - [832] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1354), - [834] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1381), - [836] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1358), - [838] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1422), - [840] = {.entry = {.count = 1, .reusable = false}}, SHIFT(344), - [842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1419), - [844] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1463), - [846] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 56), - [848] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 56), - [850] = {.entry = {.count = 1, .reusable = false}}, SHIFT(319), - [852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(748), - [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560), - [856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), - [858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), - [860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(562), - [862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), - [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1418), - [866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(749), - [868] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578), - [870] = {.entry = {.count = 1, .reusable = true}}, SHIFT(763), - [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580), - [874] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), - [876] = {.entry = {.count = 1, .reusable = true}}, SHIFT(582), - [878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), - [880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(786), - [882] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 54), - [884] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 54), - [886] = {.entry = {.count = 1, .reusable = false}}, SHIFT(406), - [888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3), - [890] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3), - [892] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 76), - [894] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 76), - [896] = {.entry = {.count = 1, .reusable = false}}, SHIFT(441), - [898] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 77), - [900] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 77), - [902] = {.entry = {.count = 1, .reusable = true}}, SHIFT(907), - [904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), - [906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2), - [908] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2), - [910] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4), - [912] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4), - [914] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1), - [916] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1), - [918] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), - [920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2), - [922] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(344), - [925] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), - [927] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), - [929] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 69), - [931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), - [933] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 102), - [935] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 102), - [937] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), - [939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), - [941] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(1463), - [944] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(1381), - [947] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(319), - [950] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1), - [952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), - [954] = {.entry = {.count = 1, .reusable = false}}, SHIFT(770), - [956] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), - [958] = {.entry = {.count = 1, .reusable = false}}, SHIFT(769), - [960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), - [962] = {.entry = {.count = 1, .reusable = false}}, SHIFT(435), - [964] = {.entry = {.count = 1, .reusable = false}}, SHIFT(848), - [966] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), - [968] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), - [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), - [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), - [974] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), SHIFT_REPEAT(406), - [977] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 10), - [979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1384), - [981] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 68), - [983] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 69), - [985] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3), - [987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1252), - [989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1435), - [991] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 95), - [993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 28), - [995] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 29), - [997] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), SHIFT_REPEAT(441), - [1000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2), - [1002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), - [1004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), - [1006] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 8, .production_id = 165), - [1008] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 8, .production_id = 165), - [1010] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1), - [1012] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1), - [1014] = {.entry = {.count = 1, .reusable = false}}, SHIFT(809), - [1016] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1), - [1018] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1021] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1), - [1023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(411), - [1025] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), - [1029] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2), - [1031] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), - [1033] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(809), - [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, .production_id = 56), - [1038] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, .production_id = 56), - [1040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 81), - [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 81), - [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 130), - [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 130), - [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, .production_id = 147), - [1050] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, .production_id = 147), - [1052] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, .production_id = 148), - [1054] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, .production_id = 148), - [1056] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, .production_id = 157), - [1058] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, .production_id = 157), - [1060] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, .production_id = 158), - [1062] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, .production_id = 158), - [1064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, .production_id = 163), - [1066] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, .production_id = 163), - [1068] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, .production_id = 164), - [1070] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, .production_id = 164), - [1072] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1), REDUCE(sym_primary_expression, 1), - [1075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), - [1077] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), - [1079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), - [1081] = {.entry = {.count = 1, .reusable = false}}, SHIFT(810), - [1083] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(810), - [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 80), - [1088] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 80), - [1090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 55), - [1092] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 55), - [1094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 56), - [1096] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 56), - [1098] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), - [1100] = {.entry = {.count = 1, .reusable = false}}, SHIFT(316), - [1102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), - [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2), - [1106] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2), REDUCE(sym_list, 2), - [1109] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2), - [1111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2), - [1113] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2), - [1115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 105), - [1117] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 105), - [1119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 81), - [1121] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 81), - [1123] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 125), - [1125] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 125), - [1127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 129), - [1129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 129), - [1131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, .production_id = 54), - [1133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, .production_id = 54), - [1135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 143), - [1137] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 143), - [1139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, .production_id = 77), - [1141] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, .production_id = 77), - [1143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), - [1145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), - [1147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), - [1149] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), REDUCE(sym_tuple, 2), - [1152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), - [1154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), - [1156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2), - [1158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, .production_id = 159), - [1160] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, .production_id = 159), - [1162] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, .production_id = 56), - [1164] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, .production_id = 56), - [1166] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, .production_id = 134), - [1168] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, .production_id = 134), - [1170] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, .production_id = 81), - [1172] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, .production_id = 81), - [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 150), - [1176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 150), - [1178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 151), - [1180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 151), - [1182] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 138), - [1184] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 138), - [1186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 124), - [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 124), - [1190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, .production_id = 57), - [1192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, .production_id = 57), - [1194] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 90), - [1196] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 90), - [1198] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 60), - [1200] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 60), - [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, .production_id = 64), - [1204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, .production_id = 64), - [1206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 126), - [1208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(794), + [796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attribute, 3, .production_id = 40), + [798] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_attribute, 3, .production_id = 40), + [800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [802] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 3, .production_id = 16), + [804] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 33), + [806] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subscript, 4, .production_id = 70), + [808] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subscript, 4, .production_id = 70), + [810] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 2, .production_id = 7), + [812] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [814] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 81), + [816] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1423), + [818] = {.entry = {.count = 1, .reusable = false}}, SHIFT(345), + [820] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1420), + [822] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1438), + [824] = {.entry = {.count = 1, .reusable = false}}, SHIFT(340), + [826] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1397), + [828] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [830] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 4, .production_id = 56), + [832] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1443), + [834] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1464), + [836] = {.entry = {.count = 1, .reusable = true}}, SHIFT(769), + [838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), + [842] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), + [844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(736), + [846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(797), + [848] = {.entry = {.count = 1, .reusable = true}}, SHIFT(588), + [850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(808), + [852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(562), + [854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1417), + [858] = {.entry = {.count = 1, .reusable = true}}, SHIFT(742), + [860] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), + [862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598), + [864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(587), + [866] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, .production_id = 54), + [870] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381), + [872] = {.entry = {.count = 1, .reusable = true}}, SHIFT(350), + [874] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 2), + [876] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 2), + [878] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 2), + [880] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 2), + [882] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [884] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), + [886] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(340), + [889] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [891] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), + [893] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(1443), + [896] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 3), + [898] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 3), + [900] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_statements, 4), + [902] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_statements, 4), + [904] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block, 1), + [906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block, 1), + [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(426), + [910] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat2, 2), SHIFT_REPEAT(1464), + [913] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 1), + [915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [917] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_try_statement_repeat1, 2), SHIFT_REPEAT(345), + [920] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 69), + [922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(889), + [926] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 77), + [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 = 76), + [932] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 76), + [934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 102), + [936] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 102), + [938] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 68), + [940] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2), + [942] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 95), + [944] = {.entry = {.count = 1, .reusable = false}}, SHIFT(745), + [946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [948] = {.entry = {.count = 1, .reusable = false}}, SHIFT(759), + [950] = {.entry = {.count = 1, .reusable = false}}, SHIFT(382), + [952] = {.entry = {.count = 1, .reusable = false}}, SHIFT(846), + [954] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), + [956] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [958] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), + [960] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1444), + [962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [966] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1373), + [968] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), + [970] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), + [972] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), SHIFT_REPEAT(426), + [975] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 2, .production_id = 100), SHIFT_REPEAT(381), + [978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 29), + [980] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 4, .production_id = 28), + [982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3), + [984] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1280), + [986] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 10), + [988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 69), + [990] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_cases_repeat1, 2), + [992] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), + [994] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(809), + [997] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 8, .production_id = 165), + [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 8, .production_id = 165), + [1001] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 7, .production_id = 164), + [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 7, .production_id = 164), + [1005] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 7, .production_id = 163), + [1007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 7, .production_id = 163), + [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 6, .production_id = 157), + [1011] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 6, .production_id = 157), + [1013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 6, .production_id = 158), + [1015] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 6, .production_id = 158), + [1017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_primary_expression, 1), + [1019] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_primary_expression, 1), REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_primary_expression, 1), + [1024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [1026] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat_pattern, 2, .production_id = 9), + [1030] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 130), + [1032] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 130), + [1034] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cases, 1), + [1036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cases, 1), + [1038] = {.entry = {.count = 1, .reusable = false}}, SHIFT(811), + [1040] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 5, .production_id = 148), + [1042] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 5, .production_id = 148), + [1044] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_group_clause, 5, .production_id = 147), + [1046] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_group_clause, 5, .production_id = 147), + [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1050] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 3, .production_id = 56), + [1052] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1054] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_except_clause, 4, .production_id = 81), + [1056] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_pattern, 1), REDUCE(sym_primary_expression, 1), + [1059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), + [1061] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pattern, 1), + [1063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern, 1), + [1065] = {.entry = {.count = 1, .reusable = false}}, SHIFT(809), + [1067] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_cases_repeat1, 2), SHIFT_REPEAT(811), + [1070] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1072] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 4, .production_id = 55), + [1074] = {.entry = {.count = 1, .reusable = false}}, SHIFT(325), + [1076] = {.entry = {.count = 1, .reusable = false}}, SHIFT(320), + [1078] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), + [1080] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 129), + [1082] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 129), + [1084] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 125), + [1086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 125), + [1088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 2), + [1090] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), REDUCE(sym_tuple, 2), + [1093] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 2), + [1095] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 2), + [1097] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_pattern, 2), + [1099] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1101] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 81), + [1103] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, .production_id = 105), + [1105] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, .production_id = 105), + [1107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1109] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 5, .production_id = 56), + [1111] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 5, .production_id = 77), + [1115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1117] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 80), + [1119] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 143), + [1121] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 143), + [1123] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1125] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_elif_clause, 4, .production_id = 54), + [1127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1129] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_if_statement_repeat1, 1, .production_id = 74), + [1131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 2), + [1133] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_list_pattern, 2), REDUCE(sym_list, 2), + [1136] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 2), + [1138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 2), + [1140] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_pattern, 2), + [1142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 150), + [1144] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 150), + [1146] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 4, .production_id = 81), + [1150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 4, .production_id = 134), + [1152] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 4, .production_id = 134), + [1154] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1156] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 3, .production_id = 56), + [1158] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 5, .production_id = 151), + [1160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 5, .production_id = 151), + [1162] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_block, 6, .production_id = 159), + [1164] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_block, 6, .production_id = 159), + [1166] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1168] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 128), + [1170] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, .production_id = 56), + [1174] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 4, .production_id = 57), + [1178] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1180] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 137), + [1182] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1184] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 126), + [1186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1188] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 4, .production_id = 64), + [1190] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1192] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, .production_id = 81), + [1194] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 138), + [1196] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 138), + [1198] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, .production_id = 124), + [1200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, .production_id = 124), + [1202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1204] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 60), + [1206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, .production_id = 81), + [1208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, .production_id = 81), [1210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 127), [1212] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 127), - [1214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 7, .production_id = 128), - [1216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 7, .production_id = 128), - [1218] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 75), - [1220] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 75), - [1222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), - [1224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), - [1226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 78), - [1228] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 78), - [1230] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 79), - [1232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 79), - [1234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 91), - [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 91), - [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, .production_id = 50), - [1240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(649), - [1242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 82), - [1244] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 82), - [1246] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, .production_id = 87), - [1248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, .production_id = 87), - [1250] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 89), - [1252] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 89), - [1254] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 99), - [1256] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 99), - [1258] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 101), - [1260] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 101), - [1262] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, .production_id = 103), - [1264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, .production_id = 103), - [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 104), - [1268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 104), - [1270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 59), - [1272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 59), - [1274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, .production_id = 106), - [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, .production_id = 106), - [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 3, .production_id = 56), - [1280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 3, .production_id = 56), - [1282] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 56), - [1284] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 56), - [1286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_finally_clause, 4, .production_id = 81), - [1288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_finally_clause, 4, .production_id = 81), - [1290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 114), - [1292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 114), - [1294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 115), - [1296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 115), - [1298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 116), - [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 116), - [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 117), - [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 117), - [1306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 118), - [1308] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 118), - [1310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 7, .production_id = 81), - [1312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 7, .production_id = 81), - [1314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 7, .production_id = 137), - [1316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 7, .production_id = 137), - [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, .production_id = 139), - [1320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, .production_id = 139), - [1322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 142), - [1324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 142), - [1326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 144), - [1328] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 144), - [1330] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 145), - [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 145), - [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 146), - [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 146), - [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 152), - [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 152), - [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 153), - [1344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 153), - [1346] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, .production_id = 154), - [1348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, .production_id = 154), - [1350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 155), - [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 155), - [1354] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 156), - [1356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 156), - [1358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 161), - [1360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 161), - [1362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, .production_id = 162), - [1364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, .production_id = 162), - [1366] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 24), - [1368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1200), - [1370] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2), - [1372] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2), - [1374] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), - [1376] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), - [1378] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(892), - [1381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, .production_id = 2), - [1383] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, .production_id = 2), - [1385] = {.entry = {.count = 1, .reusable = false}}, SHIFT(728), - [1387] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1), - [1389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), - [1391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), - [1393] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, .production_id = 20), - [1395] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, .production_id = 20), - [1397] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 61), - [1399] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 61), - [1401] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, .production_id = 25), - [1403] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, .production_id = 25), - [1405] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 31), - [1407] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 31), - [1409] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3), - [1411] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3), - [1413] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 67), - [1415] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 67), - [1417] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 31), - [1419] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 31), - [1421] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, .production_id = 61), - [1423] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, .production_id = 61), - [1425] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), - [1427] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2), - [1429] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, .production_id = 31), - [1431] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, .production_id = 31), - [1433] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), - [1435] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), - [1437] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), - [1439] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), - [1441] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, .production_id = 25), - [1443] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, .production_id = 25), - [1445] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), - [1447] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), - [1449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, .production_id = 51), - [1451] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, .production_id = 51), - [1453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1380), - [1455] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), - [1457] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), - [1459] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), - [1461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), - [1463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), - [1465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), - [1467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(683), - [1469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(684), - [1471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), - [1473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(685), - [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), - [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1396), - [1479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), - [1481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), - [1483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(682), - [1485] = {.entry = {.count = 1, .reusable = true}}, SHIFT(607), - [1487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 31), - [1489] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 31), - [1491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 61), - [1493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 61), - [1495] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, .production_id = 17), - [1497] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, .production_id = 17), - [1499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), - [1501] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), - [1503] = {.entry = {.count = 1, .reusable = false}}, SHIFT(661), - [1505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), - [1507] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663), - [1509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), - [1511] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), - [1513] = {.entry = {.count = 1, .reusable = true}}, SHIFT(666), - [1515] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661), - [1517] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1361), - [1519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(667), - [1521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(668), - [1523] = {.entry = {.count = 1, .reusable = false}}, SHIFT(663), - [1525] = {.entry = {.count = 1, .reusable = true}}, SHIFT(619), - [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 67), - [1529] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 67), - [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 93), - [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 93), - [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2), - [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2), - [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, .production_id = 25), - [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, .production_id = 25), - [1543] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 61), - [1545] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 61), - [1547] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 93), - [1549] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 93), - [1551] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), - [1553] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3), - [1555] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, .production_id = 39), - [1557] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, .production_id = 39), - [1559] = {.entry = {.count = 1, .reusable = false}}, SHIFT(652), - [1561] = {.entry = {.count = 1, .reusable = false}}, SHIFT(646), - [1563] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), - [1565] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), - [1567] = {.entry = {.count = 1, .reusable = false}}, SHIFT(651), - [1569] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, .production_id = 13), - [1571] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, .production_id = 13), - [1573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(672), - [1575] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), - [1577] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), - [1579] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), - [1581] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), - [1583] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2), - [1585] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2), - [1587] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(903), - [1590] = {.entry = {.count = 1, .reusable = false}}, SHIFT(839), - [1592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(838), - [1594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(221), - [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(382), - [1598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1373), - [1600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), - [1602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(655), - [1604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), - [1606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), - [1608] = {.entry = {.count = 1, .reusable = true}}, SHIFT(660), - [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677), - [1612] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), - [1614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(673), - [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(655), - [1618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451), - [1620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(679), - [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(654), - [1624] = {.entry = {.count = 1, .reusable = false}}, SHIFT(687), - [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), - [1628] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(891), - [1631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1359), - [1633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), - [1635] = {.entry = {.count = 1, .reusable = false}}, SHIFT(635), - [1637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(636), - [1639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), - [1641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), - [1643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), - [1645] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), - [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), - [1649] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), - [1651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1394), - [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(641), - [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), - [1657] = {.entry = {.count = 1, .reusable = false}}, SHIFT(637), - [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), - [1661] = {.entry = {.count = 1, .reusable = false}}, SHIFT(399), - [1663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), - [1665] = {.entry = {.count = 1, .reusable = false}}, SHIFT(883), - [1667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), - [1669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), - [1671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1319), - [1673] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968), - [1675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), - [1677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), - [1679] = {.entry = {.count = 1, .reusable = false}}, SHIFT(896), - [1681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), - [1683] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942), - [1685] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2), - [1687] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2), - [1689] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3), - [1691] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3), - [1693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), - [1695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924), - [1697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), - [1699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(965), - [1701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(934), - [1703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(964), - [1705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), - [1707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(929), - [1709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(915), + [1214] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 7, .production_id = 139), + [1216] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 7, .production_id = 139), + [1218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 118), + [1220] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 118), + [1222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1224] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 117), + [1226] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1228] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 6, .production_id = 116), + [1230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 115), + [1232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 115), + [1234] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 114), + [1238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1240] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 142), + [1242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 144), + [1246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 145), + [1248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 145), + [1250] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 8, .production_id = 146), + [1252] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 8, .production_id = 146), + [1254] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1256] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decorated_definition, 2, .production_id = 19), + [1258] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 152), + [1260] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 152), + [1262] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1264] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, .production_id = 75), + [1266] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 78), + [1270] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1272] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 5, .production_id = 79), + [1274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1276] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_statement, 4, .production_id = 59), + [1278] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1280] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 5, .production_id = 82), + [1282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 8, .production_id = 153), + [1284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 8, .production_id = 153), + [1286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 24), + [1288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(667), + [1290] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 5, .production_id = 87), + [1292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 5, .production_id = 87), + [1294] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 89), + [1298] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1300] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 90), + [1302] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_class_definition, 5, .production_id = 91), + [1304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_definition, 5, .production_id = 91), + [1306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_try_statement, 6, .production_id = 56), + [1310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1190), + [1312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 6, .production_id = 106), + [1314] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 6, .production_id = 106), + [1316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 6, .production_id = 104), + [1318] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 6, .production_id = 104), + [1320] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_statement, 6, .production_id = 103), + [1322] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_with_statement, 6, .production_id = 103), + [1324] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1326] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 101), + [1328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, .production_id = 99), + [1330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, .production_id = 99), + [1332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 9, .production_id = 154), + [1334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 9, .production_id = 154), + [1336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 155), + [1338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 155), + [1340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 156), + [1342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 156), + [1344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 10, .production_id = 162), + [1346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 10, .production_id = 162), + [1348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 9, .production_id = 161), + [1350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 9, .production_id = 161), + [1352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 3, .production_id = 50), + [1354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenated_string, 2), + [1356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenated_string, 2), + [1358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), + [1362] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(907), + [1365] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, .production_id = 20), + [1367] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, .production_id = 20), + [1369] = {.entry = {.count = 1, .reusable = false}}, SHIFT(734), + [1371] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_separator, 1), + [1373] = {.entry = {.count = 1, .reusable = false}}, SHIFT(721), + [1375] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [1377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, .production_id = 2), + [1379] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, .production_id = 2), + [1381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 93), + [1383] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 93), + [1385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1387] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 67), + [1389] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1410), + [1391] = {.entry = {.count = 1, .reusable = true}}, SHIFT(173), + [1393] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [1395] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), + [1397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(682), + [1399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(681), + [1401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(680), + [1403] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677), + [1405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(676), + [1407] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), + [1409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(672), + [1411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(682), + [1413] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1421), + [1415] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), + [1417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [1419] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), + [1421] = {.entry = {.count = 1, .reusable = true}}, SHIFT(615), + [1423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), + [1425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3), + [1427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 31), + [1431] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1433] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 61), + [1435] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1437] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary_comprehension, 4, .production_id = 51), + [1439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1441] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 61), + [1443] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), + [1445] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 2), + [1447] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1449] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 61), + [1451] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 2), + [1453] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 2), + [1455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1457] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 5, .production_id = 61), + [1459] = {.entry = {.count = 1, .reusable = false}}, SHIFT(644), + [1461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(645), + [1463] = {.entry = {.count = 1, .reusable = true}}, SHIFT(646), + [1465] = {.entry = {.count = 1, .reusable = true}}, SHIFT(647), + [1467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(648), + [1469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(650), + [1471] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [1473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1367), + [1475] = {.entry = {.count = 1, .reusable = true}}, SHIFT(652), + [1477] = {.entry = {.count = 1, .reusable = true}}, SHIFT(654), + [1479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(646), + [1481] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [1483] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1485] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 4, .production_id = 31), + [1487] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set, 3, .production_id = 25), + [1489] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set, 3, .production_id = 25), + [1491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_set_comprehension, 4, .production_id = 51), + [1495] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 5, .production_id = 93), + [1497] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 5, .production_id = 93), + [1499] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1501] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_argument_list, 3, .production_id = 67), + [1503] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1505] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_generator_expression, 4, .production_id = 51), + [1507] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1509] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3, .production_id = 31), + [1511] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 3), + [1513] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 3), + [1515] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1517] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_dictionary, 4, .production_id = 31), + [1519] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call, 2, .production_id = 17), + [1521] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call, 2, .production_id = 17), + [1523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1525] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list_comprehension, 4, .production_id = 51), + [1527] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, .production_id = 25), + [1529] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, .production_id = 25), + [1531] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1533] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_parenthesized_expression, 3, .production_id = 26), + [1535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1537] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple, 3, .production_id = 25), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1541] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_operator, 3, .production_id = 39), + [1543] = {.entry = {.count = 1, .reusable = false}}, SHIFT(656), + [1545] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), + [1547] = {.entry = {.count = 1, .reusable = false}}, SHIFT(668), + [1549] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1551] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 41), + [1553] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1555] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 71), + [1557] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1559] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 3, .production_id = 72), + [1561] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1563] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_operator, 2, .production_id = 13), + [1565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_await, 2), + [1567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_await, 2), + [1569] = {.entry = {.count = 1, .reusable = false}}, SHIFT(687), + [1571] = {.entry = {.count = 1, .reusable = false}}, SHIFT(835), + [1573] = {.entry = {.count = 1, .reusable = false}}, SHIFT(840), + [1575] = {.entry = {.count = 1, .reusable = false}}, SHIFT(217), + [1577] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [1579] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(891), + [1582] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenated_string_repeat1, 2), SHIFT_REPEAT(902), + [1585] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1385), + [1587] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [1589] = {.entry = {.count = 1, .reusable = false}}, SHIFT(639), + [1591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), + [1593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [1595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(636), + [1597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [1599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [1601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(642), + [1603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(639), + [1605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1442), + [1607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643), + [1609] = {.entry = {.count = 1, .reusable = true}}, SHIFT(649), + [1611] = {.entry = {.count = 1, .reusable = false}}, SHIFT(635), + [1613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(628), + [1615] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1366), + [1617] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [1619] = {.entry = {.count = 1, .reusable = false}}, SHIFT(666), + [1621] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), + [1623] = {.entry = {.count = 1, .reusable = true}}, SHIFT(634), + [1625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), + [1627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(663), + [1629] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [1631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(661), + [1633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(666), + [1635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1395), + [1637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(660), + [1639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), + [1641] = {.entry = {.count = 1, .reusable = false}}, SHIFT(634), + [1643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [1645] = {.entry = {.count = 1, .reusable = false}}, SHIFT(444), + [1647] = {.entry = {.count = 1, .reusable = true}}, SHIFT(407), + [1649] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), + [1651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [1653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1176), + [1655] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1302), + [1657] = {.entry = {.count = 1, .reusable = false}}, SHIFT(936), + [1659] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [1661] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), + [1663] = {.entry = {.count = 1, .reusable = false}}, SHIFT(894), + [1665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(894), + [1667] = {.entry = {.count = 1, .reusable = false}}, SHIFT(930), + [1669] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1671] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 2), + [1673] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1675] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_open_sequence_match_pattern, 3), + [1677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(945), + [1679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(939), + [1681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(947), + [1683] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [1685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(940), + [1687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(967), + [1689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(956), + [1691] = {.entry = {.count = 1, .reusable = false}}, SHIFT(916), + [1693] = {.entry = {.count = 1, .reusable = false}}, SHIFT(933), + [1695] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1697] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), + [1699] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1702] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1421), + [1705] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(680), + [1708] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(615), [1711] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), [1713] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_operator, 2, .production_id = 18), - [1715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), - [1717] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(663), - [1720] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), - [1722] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1361), - [1725] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(663), - [1728] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(619), - [1731] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(682), - [1734] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1396), - [1737] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(682), - [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(607), - [1743] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), - [1745] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), SHIFT_REPEAT(568), - [1748] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, .production_id = 25), - [1750] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(687), - [1753] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1451), - [1756] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(687), - [1759] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(617), - [1762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, .production_id = 25), - [1764] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 34), - [1766] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 31), - [1768] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(637), - [1771] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1394), - [1774] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(637), - [1777] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(610), - [1780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), - [1782] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 16), - [1784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1168), - [1786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(557), - [1788] = {.entry = {.count = 1, .reusable = false}}, SHIFT(571), - [1790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), - [1792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(648), - [1794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), - [1796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), - [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), - [1800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), - [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), - [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), - [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), - [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), - [1810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), - [1812] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1136), - [1814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), - [1816] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1352), - [1818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(935), - [1820] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1343), - [1822] = {.entry = {.count = 1, .reusable = true}}, SHIFT(961), - [1824] = {.entry = {.count = 1, .reusable = true}}, SHIFT(926), - [1826] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2), - [1828] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3), - [1830] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, .production_id = 10), - [1832] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, .production_id = 10), - [1834] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), - [1836] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1400), - [1839] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), - [1841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(412), - [1843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), - [1845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(436), - [1847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(428), - [1849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), - [1851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(563), + [1715] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(646), + [1718] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1367), + [1721] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(646), + [1724] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(614), + [1727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), + [1729] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 36), SHIFT_REPEAT(568), + [1732] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__patterns_repeat1, 2, .production_id = 31), + [1734] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat_pattern, 2, .production_id = 34), + [1736] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_pattern, 3, .production_id = 25), + [1738] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_pattern, 3, .production_id = 25), + [1740] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(635), + [1743] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1442), + [1746] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(635), + [1749] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(628), + [1752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [1754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_list, 2, .production_id = 16), + [1756] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(634), + [1759] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(1395), + [1762] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(634), + [1765] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_comparison_operator_repeat1, 2, .production_id = 42), SHIFT_REPEAT(610), + [1768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1275), + [1770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(518), + [1772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(571), + [1774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(291), + [1776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [1778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1276), + [1780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445), + [1782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(374), + [1784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [1786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [1788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [1790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(254), + [1792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [1794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [1796] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1347), + [1798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(949), + [1800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1348), + [1802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(946), + [1804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), + [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1100), + [1808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1317), + [1810] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 2), + [1812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 3), + [1814] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1816] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_not_operator, 2, .production_id = 10), + [1818] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), + [1820] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1425), + [1823] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [1827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(379), + [1829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), + [1831] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2), + [1833] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2), + [1835] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1837] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, .production_id = 66), + [1839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), + [1841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(367), + [1843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(368), + [1845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(171), + [1847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [1849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1472), + [1851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560), [1853] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 1, .production_id = 7), - [1855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(383), - [1857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), - [1859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), - [1861] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 2), - [1863] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_value_pattern, 2), - [1865] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2), - [1867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), - [1869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), - [1871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(413), - [1873] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 27), - [1875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, .production_id = 32), - [1877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 35), - [1879] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 27), - [1881] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 4, .production_id = 66), - [1883] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, .production_id = 32), - [1885] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 35), - [1887] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5), - [1889] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), - [1891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1), - [1893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1), - [1895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(800), - [1897] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), SHIFT(174), - [1900] = {.entry = {.count = 1, .reusable = false}}, SHIFT(567), - [1902] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 4, .production_id = 66), - [1904] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1), - [1906] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5), - [1908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), - [1910] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1009), - [1912] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1009), - [1914] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), - [1916] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572), - [1918] = {.entry = {.count = 1, .reusable = true}}, SHIFT(724), - [1920] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), - [1922] = {.entry = {.count = 1, .reusable = true}}, SHIFT(570), - [1924] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), - [1926] = {.entry = {.count = 1, .reusable = true}}, SHIFT(575), - [1928] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), - [1930] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, .production_id = 83), - [1932] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1290), - [1934] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, .production_id = 107), - [1936] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296), - [1938] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, .production_id = 14), - [1940] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3), - [1942] = {.entry = {.count = 1, .reusable = true}}, SHIFT(760), - [1944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(739), - [1946] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), - [1948] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 31), - [1950] = {.entry = {.count = 1, .reusable = true}}, SHIFT(700), - [1952] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), - [1954] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), - [1956] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), - [1958] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), - [1960] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2), - [1962] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1193), - [1964] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(171), - [1967] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1009), - [1970] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(1009), - [1973] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), - [1975] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1), - [1977] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), - [1979] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), SHIFT_REPEAT(826), - [1982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3), - [1984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), - [1986] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1), - [1988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), - [1990] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4), - [1992] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1), - [1994] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), - [1996] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(369), - [1999] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(1425), - [2002] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(563), - [2005] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2), - [2007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2), - [2009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5), - [2011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), - [2013] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(240), - [2016] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5), - [2018] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), - [2020] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), SHIFT_REPEAT(309), - [2023] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, .production_id = 136), - [2025] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 122), - [2027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), - [2029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1473), - [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), - [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), - [2035] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 16), - [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), - [2039] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, .production_id = 136), - [2041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4), - [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), - [2045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6), - [2047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 123), - [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), - [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), - [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), - [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2), - [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4), - [2059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, .production_id = 136), - [2061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, .production_id = 98), - [2063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), - [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), - [2067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7), - [2069] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, .production_id = 131), - [2071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3), - [2073] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, .production_id = 136), - [2075] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3), - [2077] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, .production_id = 136), - [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, .production_id = 136), - [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, .production_id = 132), - [2083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(427), - [2085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), - [2087] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2), - [2089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1459), - [2091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1379), - [2093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1474), - [2095] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2), - [2097] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, .production_id = 149), - [2099] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 141), - [2101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), - [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, .production_id = 136), - [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), - [2107] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1), - [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), - [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1044), - [2113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1460), - [2115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1465), - [2117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(419), - [2119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(420), - [2121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1), - [2123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1442), - [2125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), - [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1358), - [2129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1), - [2131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), - [2133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), - [2135] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2), - [2137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, .production_id = 32), - [2139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, .production_id = 15), - [2141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 62), - [2143] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 31), - [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), - [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(567), - [2149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), - [2151] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(988), - [2154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(988), - [2157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), - [2159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, .production_id = 66), - [2161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), - [2163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(583), - [2165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1034), - [2167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1094), - [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), - [2171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), - [2173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1419), - [2175] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, .production_id = 11), - [2177] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), - [2179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), - [2181] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), - [2183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766), - [2185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1032), - [2187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), - [2189] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1372), - [2191] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), - [2193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, .production_id = 10), - [2195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1), - [2197] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1), - [2199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(988), - [2201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(988), - [2203] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1), - [2205] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), - [2207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), - [2209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), - [2211] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), - [2213] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), - [2215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), - [2217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), - [2219] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), - [2221] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, .production_id = 135), - [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), - [2225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1453), - [2227] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2), - [2229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 10), - [2231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), - [2233] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), SHIFT_REPEAT(367), - [2236] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), - [2238] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), - [2240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, .production_id = 35), - [2242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1087), - [2244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, .production_id = 43), - [2246] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, .production_id = 43), - [2248] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, .production_id = 109), - [2250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(443), - [2252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), - [2254] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1453), - [2257] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), - [2259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), - [2261] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), SHIFT_REPEAT(821), - [2264] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1), - [2266] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 68), - [2268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), - [2270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2), + [1855] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1857] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_expression, 5), + [1859] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_expression, 5), + [1861] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1863] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 35), + [1865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), + [1867] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), SHIFT(171), + [1870] = {.entry = {.count = 1, .reusable = false}}, SHIFT(566), + [1872] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1874] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_lambda, 3, .production_id = 32), + [1876] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 2), + [1878] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [1880] = {.entry = {.count = 1, .reusable = true}}, SHIFT(412), + [1882] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_expression, 3, .production_id = 27), + [1884] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean_operator, 3, .production_id = 39), + [1886] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1), + [1888] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pattern_class_name, 1), + [1890] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_capture_pattern, 1), + [1892] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), + [1894] = {.entry = {.count = 1, .reusable = true}}, SHIFT(983), + [1896] = {.entry = {.count = 1, .reusable = false}}, SHIFT(983), + [1898] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [1900] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1162), + [1902] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list_splat, 2), + [1904] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [1906] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 2, .production_id = 107), + [1908] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), + [1910] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 1, .production_id = 83), + [1912] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1340), + [1914] = {.entry = {.count = 1, .reusable = true}}, SHIFT(696), + [1916] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 31), + [1918] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(175), + [1921] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(983), + [1924] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), SHIFT_REPEAT(983), + [1927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 2, .production_id = 21), + [1929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(578), + [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(203), + [1933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dictionary_splat, 2, .production_id = 14), + [1935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(719), + [1937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(752), + [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [1941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [1943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(181), + [1945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(767), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(572), + [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1169), + [1953] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_yield, 3), + [1955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(570), + [1957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604), + [1959] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression_within_for_in_clause, 1), + [1961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 4), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(827), + [1965] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), + [1967] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_or_pattern_repeat1, 2), SHIFT_REPEAT(827), + [1970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_or_pattern, 3), + [1972] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 2), + [1974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [1976] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__f_expression, 1), + [1978] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), + [1980] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(370), + [1983] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(1472), + [1986] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__comprehension_clauses_repeat1, 2), SHIFT_REPEAT(560), + [1989] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__comprehension_clauses, 1), + [1991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), + [1993] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 6, .production_id = 141), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [1997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_group_pattern, 3, .production_id = 131), + [1999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1449), + [2001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1465), + [2003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1461), + [2005] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 9, .production_id = 136), + [2007] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_clause, 2), + [2009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 6), + [2011] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 4, .production_id = 136), + [2013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(406), + [2015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(403), + [2017] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), + [2019] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_for_in_clause_repeat1, 2), SHIFT_REPEAT(293), + [2022] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_or_pattern, 1), + [2024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [2026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 8, .production_id = 136), + [2028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 2), + [2030] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 6, .production_id = 136), + [2032] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), + [2034] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(240), + [2037] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 4, .production_id = 98), + [2039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [2041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2, .production_id = 16), + [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [2045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 4), + [2047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 2), + [2049] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 5), + [2051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(364), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [2055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 2), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 5), + [2059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [2061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), + [2063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 123), + [2065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [2067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 4, .production_id = 149), + [2069] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_literal_pattern, 3, .production_id = 132), + [2071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 3, .production_id = 136), + [2073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1474), + [2075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), + [2077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 4), + [2081] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_sequence_pattern, 3), + [2083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 3), + [2085] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 7, .production_id = 136), + [2087] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_mapping_pattern, 7), + [2089] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_class_pattern, 5, .production_id = 136), + [2091] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_in_clause, 5, .production_id = 122), + [2093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [2095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(410), + [2097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(404), + [2099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(394), + [2101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(366), + [2103] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 2), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [2107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(596), + [2109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [2111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(760), + [2113] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__right_hand_side, 1), + [2115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 4, .production_id = 66), + [2117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [2119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1420), + [2121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 1, .dynamic_precedence = -1, .production_id = 12), + [2123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(566), + [2125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(301), + [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1397), + [2129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_within_for_in_clause, 3, .production_id = 32), + [2131] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_content, 1), + [2133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1004), + [2135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1004), + [2137] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_content, 1), + [2139] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pair, 3, .production_id = 62), + [2141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [2143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_pattern, 1), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1468), + [2149] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 4, .production_id = 15), + [2151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1023), + [2153] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1408), + [2155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1409), + [2157] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1043), + [2159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1124), + [2161] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1390), + [2163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), + [2165] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_statement, 1), + [2167] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_delete_statement, 2, .production_id = 11), + [2169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [2171] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2, .production_id = 10), + [2173] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2175] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1004), + [2178] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_content_repeat1, 2), SHIFT_REPEAT(1004), + [2181] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_content_repeat1, 2), + [2183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1039), + [2185] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1123), + [2187] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1328), + [2189] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 31), + [2191] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_return_statement, 2), + [2193] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_default_parameter, 3, .production_id = 35), + [2195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), + [2197] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decorated_definition_repeat1, 2), SHIFT_REPEAT(383), + [2200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), + [2202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 2), + [2204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), + [2206] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2208] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 3), + [2210] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), + [2212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 10), + [2214] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_as_pattern, 3, .production_id = 135), + [2216] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, .production_id = 43), + [2220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), + [2222] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, .production_id = 6), + [2224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(365), + [2226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(288), + [2228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(353), + [2230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [2232] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 95), + [2234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [2236] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_bound, 2, .production_id = 109), + [2238] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2240] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_repeat1, 1, .production_id = 4), + [2242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), + [2244] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_open_sequence_match_pattern_repeat1, 2), SHIFT_REPEAT(822), + [2247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1097), + [2249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [2251] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2253] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, .production_id = 43), + [2255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2257] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 4, .production_id = 43), + [2259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(357), + [2261] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [2263] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_value_pattern_repeat1, 2), SHIFT_REPEAT(1469), + [2266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [2268] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_chevron, 2), + [2270] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_dotted_name, 1), [2272] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 3, .production_id = 43), [2274] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 3, .production_id = 43), - [2276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, .production_id = 119), - [2278] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 95), - [2280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), - [2282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), - [2284] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 6, .production_id = 43), - [2286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 6, .production_id = 43), - [2288] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_interpolation, 5, .production_id = 43), - [2290] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_interpolation, 5, .production_id = 43), - [2292] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__index_expression, 1), - [2294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(265), - [2296] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 1, .production_id = 6), - [2298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), - [2300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), - [2302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), - [2304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(444), - [2306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), - [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(362), - [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), - [2312] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, .production_id = 11), - [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, .production_id = 22), - [2316] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 6), - [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), - [2320] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), SHIFT_REPEAT(225), - [2323] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_param_default, 2, .production_id = 110), - [2325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), - [2327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), - [2329] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), - [2331] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), - [2333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1050), - [2335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1409), - [2337] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, .production_id = 6), - [2339] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 120), - [2341] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 121), - [2343] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1), - [2345] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), - [2347] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1069), - [2349] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 16), - [2351] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), - [2353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1058), - [2355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), - [2357] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), - [2359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1225), - [2361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), - [2363] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, .production_id = 30), - [2365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), - [2367] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, .production_id = 53), - [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1036), - [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1088), - [2373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1189), - [2375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, .production_id = 88), - [2377] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2), - [2379] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1080), - [2381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 27), - [2383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 35), - [2385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 31), - [2387] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(244), - [2390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 94), - [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), - [2394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), - [2396] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2), - [2398] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(175), - [2401] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(1080), - [2404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, .production_id = 140), - [2406] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, .production_id = 63), - [2408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, .production_id = 23), - [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), - [2412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), - [2414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1023), - [2416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1249), - [2418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), - [2420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), - [2422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1175), - [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1171), - [2426] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), SHIFT_REPEAT(426), - [2429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1032), - [2431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), - [2433] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 28), - [2435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), - [2437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), - [2439] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 29), - [2441] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3), - [2443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1415), - [2445] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2), - [2447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), - [2449] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), - [2451] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), SHIFT_REPEAT(345), - [2454] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, .production_id = 23), - [2456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), - [2458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), - [2460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1074), - [2462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 22), - [2464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1), - [2466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1138), - [2468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 84), - [2470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1150), - [2472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1405), - [2474] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3), - [2476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3), - [2478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3), - [2480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), - [2482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, .production_id = 15), - [2484] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3), - [2486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, .production_id = 49), - [2488] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, .production_id = 7), - [2490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(543), - [2492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1113), - [2494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2), - [2496] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, .production_id = 133), - [2498] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 23), - [2500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), - [2502] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1271), - [2505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), - [2507] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), SHIFT_REPEAT(405), + [2276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__index_expression, 1), + [2278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [2280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [2282] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 2, .production_id = 68), + [2284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [2286] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_default_parameter, 5, .production_id = 119), + [2288] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 3, .production_id = 22), + [2290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), + [2292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [2294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__collection_elements, 2, .production_id = 16), + [2296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [2298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1075), + [2300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1445), + [2302] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 1, .production_id = 6), + [2304] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 4, .production_id = 63), + [2306] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 1), + [2308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [2310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1058), + [2312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1051), + [2314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1040), + [2316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1117), + [2318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1239), + [2320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(356), + [2322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), + [2324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 2), + [2326] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(170), + [2329] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 2), SHIFT_REPEAT(1054), + [2332] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 120), + [2334] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_format_specifier, 2), + [2336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1054), + [2338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), + [2340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [2342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [2344] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 3, .production_id = 30), + [2346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 31), + [2348] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 35), + [2350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__type_param_default, 2, .production_id = 110), + [2352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_keyword_argument, 3, .production_id = 27), + [2354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1121), + [2356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(174), + [2358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), + [2360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [2362] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 3, .production_id = 94), + [2364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), + [2366] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__collection_elements_repeat1, 2, .production_id = 36), SHIFT_REPEAT(229), + [2369] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1209), + [2371] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1111), + [2373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1234), + [2375] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 6), + [2377] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 4, .production_id = 121), + [2379] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_star_pattern, 2, .production_id = 11), + [2381] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_alias_statement, 5, .production_id = 88), + [2383] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice, 5, .production_id = 140), + [2385] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(242), + [2388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [2390] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_raise_statement, 4, .production_id = 53), + [2392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [2394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(413), + [2396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assert_statement, 3), + [2398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), + [2400] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 5, .production_id = 15), + [2402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), + [2404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1043), + [2406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [2408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 2), + [2410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [2412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 2, .production_id = 23), + [2414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [2416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [2418] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decorator, 3), + [2420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1), + [2422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [2424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), + [2426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [2428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(305), + [2430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 29), + [2432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(306), + [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 3, .production_id = 28), + [2436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [2438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433), + [2440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [2442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1131), + [2444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1426), + [2446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(113), + [2448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1282), + [2450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1251), + [2452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 1, .production_id = 7), + [2454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(503), + [2456] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 2, .production_id = 23), + [2458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [2460] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2), + [2462] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nonlocal_statement, 3), + [2464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1033), + [2466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1194), + [2468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 16), + [2470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(543), + [2472] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 23), + [2474] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1156), + [2477] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), + [2479] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2), + [2481] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2), SHIFT_REPEAT(1122), + [2484] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_import_prefix, 1), + [2486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1122), + [2488] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), SHIFT_REPEAT(1357), + [2491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), + [2493] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1046), + [2495] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__import_list, 2, .production_id = 22), + [2497] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 3), + [2499] = {.entry = {.count = 1, .reusable = true}}, SHIFT(71), + [2501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3), + [2503] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized_list_splat, 3, .production_id = 49), + [2505] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1062), + [2507] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), SHIFT_REPEAT(429), [2510] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_print_statement_repeat1, 2, .production_id = 52), - [2512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), - [2514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1049), - [2516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), - [2518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), - [2520] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 1), - [2522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), - [2524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433), - [2526] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_import_prefix_repeat1, 2), - [2528] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_import_prefix_repeat1, 2), SHIFT_REPEAT(1138), - [2531] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), - [2533] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), - [2535] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, .production_id = 65), - [2537] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445), - [2539] = {.entry = {.count = 1, .reusable = true}}, SHIFT(120), - [2541] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), - [2543] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), SHIFT_REPEAT(1415), - [2546] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_global_statement_repeat1, 2), - [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(394), - [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), - [2552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(300), - [2554] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_print_statement, 2), - [2556] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__patterns, 2, .production_id = 16), - [2558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), - [2560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), - [2562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 37), - [2564] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1), - [2566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755), - [2568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), - [2570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), - [2572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), - [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), - [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(950), - [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1205), - [2580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, .dynamic_precedence = -1, .production_id = 58), - [2582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1137), - [2584] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), - [2586] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(862), - [2589] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1281), - [2591] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), - [2593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(191), - [2595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), - [2597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), - [2599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), - [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), - [2603] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), - [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), - [2607] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1), - [2609] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), SHIFT_REPEAT(864), - [2612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), - [2614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), - [2616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1411), - [2618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), - [2620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(345), + [2512] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_statement, 2), + [2514] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_assert_statement_repeat1, 2), SHIFT_REPEAT(366), + [2517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_guard, 2, .production_id = 133), + [2519] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), + [2521] = {.entry = {.count = 1, .reusable = true}}, SHIFT(355), + [2523] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), + [2525] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_with_clause_repeat1, 2), SHIFT_REPEAT(314), + [2528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [2530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [2532] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 84), + [2534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [2536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [2538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typed_parameter, 3, .production_id = 65), + [2540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(351), + [2542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), + [2544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1096), + [2546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1418), + [2548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(964), + [2550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(927), + [2552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, .production_id = 112), + [2554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(931), + [2556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1204), + [2558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [2560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), + [2562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [2564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(256), + [2566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [2568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(738), + [2570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [2572] = {.entry = {.count = 1, .reusable = true}}, SHIFT(938), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1155), + [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(741), + [2580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1), + [2582] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1), + [2584] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [2586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [2588] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), + [2590] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(221), + [2593] = {.entry = {.count = 1, .reusable = true}}, SHIFT(853), + [2595] = {.entry = {.count = 1, .reusable = true}}, SHIFT(963), + [2597] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [2599] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [2603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1038), + [2605] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1077), + [2607] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), SHIFT_REPEAT(864), + [2610] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_mapping_pattern_repeat1, 2), + [2612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, .production_id = 86), + [2614] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [2616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(813), + [2618] = {.entry = {.count = 1, .reusable = true}}, SHIFT(961), + [2620] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), [2622] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 2), - [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(822), - [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1398), - [2628] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), - [2630] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), SHIFT_REPEAT(823), - [2633] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), - [2635] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), - [2637] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), - [2639] = {.entry = {.count = 1, .reusable = true}}, SHIFT(768), - [2641] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), - [2643] = {.entry = {.count = 1, .reusable = true}}, SHIFT(737), - [2645] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 3, .production_id = 86), - [2647] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1176), - [2650] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), - [2652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1), - [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), - [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1235), - [2658] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), SHIFT_REPEAT(273), - [2661] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), - [2663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), - [2665] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), - [2667] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), - [2669] = {.entry = {.count = 1, .reusable = true}}, SHIFT(949), - [2671] = {.entry = {.count = 1, .reusable = true}}, SHIFT(740), - [2673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), - [2675] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(861), - [2678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(953), - [2680] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1), - [2682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1282), - [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1213), - [2686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(815), - [2688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), - [2690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), - [2692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 2, .production_id = 16), - [2694] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), - [2696] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), SHIFT_REPEAT(1353), - [2699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(854), - [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), - [2703] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), - [2705] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), - [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), - [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), - [2711] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1118), - [2713] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1119), - [2715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1027), - [2717] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1048), - [2719] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), - [2721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), - [2723] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1349), - [2725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), - [2727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(777), - [2729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), - [2731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), - [2733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), - [2735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(852), - [2737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), - [2739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), - [2741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), - [2743] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_parameters, 4, .production_id = 112), - [2745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(784), - [2747] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 113), SHIFT_REPEAT(981), - [2750] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 113), - [2752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), - [2754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), - [2756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(790), - [2758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), - [2760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(791), - [2762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(209), - [2764] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), SHIFT_REPEAT(133), - [2767] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), - [2769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), - [2771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, .production_id = 45), - [2773] = {.entry = {.count = 1, .reusable = true}}, SHIFT(751), - [2775] = {.entry = {.count = 1, .reusable = true}}, SHIFT(186), - [2777] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), - [2779] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(218), - [2782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), - [2784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1042), - [2786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(358), - [2788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), - [2790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), - [2792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(430), - [2794] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_maybe_star_pattern, 1), - [2796] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__match_patterns, 1), - [2798] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), - [2800] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), - [2802] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), - [2804] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), - [2806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), - [2808] = {.entry = {.count = 1, .reusable = true}}, SHIFT(579), - [2810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(429), - [2812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, .production_id = 15), - [2814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), - [2816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(573), - [2818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(859), - [2820] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(235), - [2823] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 36), - [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(930), - [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), - [2829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1184), - [2831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), - [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(754), - [2835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), - [2837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), - [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(577), - [2841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), - [2843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1191), - [2845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), - [2847] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), - [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(217), - [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954), - [2853] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 85), - [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1387), - [2857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), - [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(257), - [2861] = {.entry = {.count = 1, .reusable = false}}, SHIFT(955), - [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(955), - [2865] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1), - [2867] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1), - [2869] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 47), - [2871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, .production_id = 46), - [2873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(962), - [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(962), - [2877] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 48), - [2879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), - [2881] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), - [2883] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, .production_id = 11), - [2885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1), - [2887] = {.entry = {.count = 1, .reusable = true}}, SHIFT(102), - [2889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), - [2891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, .production_id = 92), - [2893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1), - [2895] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), - [2897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, .production_id = 62), - [2899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(948), - [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), - [2903] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 3, .production_id = 108), - [2905] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 3, .production_id = 108), - [2907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), - [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 67), - [2911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(897), - [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(897), - [2915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1427), - [2917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), - [2919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), - [2921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), - [2923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), - [2925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(92), - [2927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), - [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), - [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), - [2933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(101), - [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), - [2937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 31), - [2939] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), - [2941] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 31), - [2943] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, .production_id = 96), - [2945] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, .production_id = 97), - [2947] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1), - [2949] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 38), - [2951] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, .production_id = 39), - [2953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1027), - [2955] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, .production_id = 160), - [2957] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 3, .production_id = 111), - [2959] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 86), - [2961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, .production_id = 5), - [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1399), - [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937), - [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), - [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), - [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414), - [2973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), - [2975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), - [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806), - [2979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(772), - [2981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(670), - [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(793), - [2985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), - [2987] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604), - [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), - [2991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(778), - [2993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), - [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(600), - [2997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, .production_id = 23), - [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(346), - [3001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), - [3003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1054), - [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(314), - [3007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(762), - [3009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1334), - [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(574), - [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1130), - [3015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(219), - [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), - [3019] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5), - [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), - [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), - [3025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), - [3027] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), - [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), - [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(421), - [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(645), - [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), - [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(650), - [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1099), - [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(947), - [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(882), - [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(767), - [3047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), - [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1086), - [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1326), - [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(588), - [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), - [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1244), - [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), - [3061] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3), - [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), - [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), - [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1178), - [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(834), - [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1100), - [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), - [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(761), - [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), - [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), - [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(559), - [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586), - [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), - [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), - [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), - [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), - [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), - [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), - [3097] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4), - [3099] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), - [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1105), - [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(771), - [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1041), - [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), - [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1015), - [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(764), - [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), - [3115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(587), - [3117] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), - [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(746), - [3121] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1077), - [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(678), - [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), - [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1062), - [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1337), - [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(584), - [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), - [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(585), - [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(576), - [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1084), - [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1122), - [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), - [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), - [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), - [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1259), - [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(434), - [3153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(738), - [3155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1145), - [3157] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1146), - [3159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), - [3161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1053), - [3163] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1), - [3165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(824), - [3167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1338), + [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1400), + [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(129), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1297), + [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(992), + [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1157), + [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [2642] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 1), + [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), + [2646] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 36), SHIFT_REPEAT(226), + [2649] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 36), + [2651] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [2653] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [2655] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), SHIFT_REPEAT(133), + [2658] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__simple_statements_repeat1, 2), + [2660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(819), + [2662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [2664] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__parameters, 1), + [2666] = {.entry = {.count = 1, .reusable = true}}, SHIFT(856), + [2668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [2670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), + [2672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [2674] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 37), + [2676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(228), + [2678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [2680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(798), + [2682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [2684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(803), + [2686] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__import_list_repeat1, 2, .production_id = 44), SHIFT_REPEAT(1279), + [2689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(753), + [2691] = {.entry = {.count = 1, .reusable = true}}, SHIFT(208), + [2693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [2695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(600), + [2697] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2699] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_format_specifier_repeat1, 1, .production_id = 73), + [2701] = {.entry = {.count = 1, .reusable = true}}, SHIFT(244), + [2703] = {.entry = {.count = 1, .reusable = true}}, SHIFT(579), + [2705] = {.entry = {.count = 1, .reusable = true}}, SHIFT(859), + [2707] = {.entry = {.count = 1, .reusable = true}}, SHIFT(806), + [2709] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [2711] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), + [2713] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat2, 2), SHIFT_REPEAT(1285), + [2716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [2718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [2720] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 113), SHIFT_REPEAT(992), + [2723] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 113), + [2725] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [2727] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [2729] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [2731] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [2733] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_index_expression_list, 2, .production_id = 16), + [2735] = {.entry = {.count = 1, .reusable = true}}, SHIFT(212), + [2737] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [2739] = {.entry = {.count = 1, .reusable = true}}, SHIFT(757), + [2741] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [2743] = {.entry = {.count = 1, .reusable = true}}, SHIFT(758), + [2745] = {.entry = {.count = 1, .reusable = true}}, SHIFT(197), + [2747] = {.entry = {.count = 1, .reusable = true}}, SHIFT(799), + [2749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [2751] = {.entry = {.count = 1, .reusable = true}}, SHIFT(230), + [2753] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1130), + [2755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1129), + [2757] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), + [2759] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(861), + [2762] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_aliased_import, 3, .production_id = 45), + [2764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(585), + [2766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [2768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(573), + [2770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [2772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599), + [2774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(187), + [2776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258), + [2778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(792), + [2780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [2782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(775), + [2784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [2786] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_relative_import, 1), + [2788] = {.entry = {.count = 1, .reusable = true}}, SHIFT(216), + [2790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(295), + [2792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [2794] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__parameters_repeat1, 2), SHIFT_REPEAT(863), + [2797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [2799] = {.entry = {.count = 1, .reusable = true}}, SHIFT(765), + [2801] = {.entry = {.count = 1, .reusable = true}}, SHIFT(196), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(851), + [2807] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_item, 3, .dynamic_precedence = -1, .production_id = 58), + [2809] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), SHIFT_REPEAT(274), + [2812] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 36), + [2814] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1154), + [2816] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [2818] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1195), + [2820] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), + [2822] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_match_class_pattern_repeat1, 2), SHIFT_REPEAT(823), + [2825] = {.entry = {.count = 1, .reusable = true}}, SHIFT(855), + [2827] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_positional_separator, 1), + [2829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1180), + [2831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(431), + [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [2835] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exec_statement, 2, .production_id = 15), + [2837] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 3, .production_id = 111), + [2839] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1381), + [2841] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_argument_list_repeat1, 2, .production_id = 67), + [2843] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pass_statement, 1), + [2845] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_break_statement, 1), + [2847] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_continue_statement, 1), + [2849] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, .production_id = 92), + [2851] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevar_parameter, 2, .production_id = 85), + [2853] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), + [2855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(810), + [2857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(892), + [2859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(892), + [2861] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_index_expression_list_repeat1, 2, .production_id = 31), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [2865] = {.entry = {.count = 1, .reusable = true}}, SHIFT(276), + [2867] = {.entry = {.count = 1, .reusable = true}}, SHIFT(114), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [2871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [2873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [2875] = {.entry = {.count = 1, .reusable = true}}, SHIFT(267), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [2879] = {.entry = {.count = 1, .reusable = true}}, SHIFT(255), + [2881] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_double_star_pattern, 2, .production_id = 11), + [2883] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [2885] = {.entry = {.count = 1, .reusable = true}}, SHIFT(251), + [2887] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 2), + [2889] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_dictionary_repeat1, 2, .production_id = 31), + [2891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_keyword_pattern, 3, .production_id = 160), + [2893] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_statement, 2, .production_id = 5), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [2897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [2899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(954), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954), + [2903] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 48), + [2905] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 4, .production_id = 47), + [2907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_wildcard_import, 1), + [2909] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 4, .production_id = 46), + [2911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1478), + [2913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(929), + [2915] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_positional_pattern, 1), + [2917] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_type_parameters_repeat1, 2, .production_id = 86), + [2919] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_paramspec_parameter, 3, .production_id = 108), + [2921] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typevartuple_parameter, 3, .production_id = 108), + [2923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_future_import_statement, 6, .production_id = 96), + [2925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(955), + [2927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(955), + [2929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(285), + [2933] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_import_from_statement, 6, .production_id = 97), + [2935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1419), + [2937] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, .production_id = 38), + [2939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1038), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [2943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [2945] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_key_value_pattern, 3, .production_id = 62), + [2947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(925), + [2949] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_augmented_assignment, 3, .production_id = 39), + [2951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(739), + [2953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [2955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1188), + [2957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(825), + [2959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(783), + [2961] = {.entry = {.count = 1, .reusable = true}}, SHIFT(740), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(780), + [2965] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [2967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(785), + [2969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [2973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2975] = {.entry = {.count = 1, .reusable = true}}, SHIFT(671), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(795), + [2979] = {.entry = {.count = 1, .reusable = true}}, SHIFT(796), + [2981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(766), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(801), + [2985] = {.entry = {.count = 1, .reusable = true}}, SHIFT(802), + [2987] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 5), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [2991] = {.entry = {.count = 1, .reusable = true}}, SHIFT(73), + [2993] = {.entry = {.count = 1, .reusable = true}}, SHIFT(750), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1032), + [2997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(838), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), + [3001] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [3003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(322), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(743), + [3007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1007), + [3009] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [3011] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1070), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [3015] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [3017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [3019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(657), + [3021] = {.entry = {.count = 1, .reusable = true}}, SHIFT(104), + [3023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(597), + [3025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1105), + [3027] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 3), + [3029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(591), + [3031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [3033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [3035] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1084), + [3037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [3039] = {.entry = {.count = 1, .reusable = true}}, SHIFT(836), + [3041] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1298), + [3043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1113), + [3045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1094), + [3047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [3049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [3051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [3053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(763), + [3055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(762), + [3057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [3059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1090), + [3061] = {.entry = {.count = 1, .reusable = true}}, SHIFT(103), + [3063] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), + [3065] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [3067] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [3069] = {.entry = {.count = 1, .reusable = true}}, SHIFT(884), + [3071] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1307), + [3073] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [3075] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602), + [3077] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [3079] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [3081] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1339), + [3083] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [3085] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [3087] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [3089] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1344), + [3091] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [3093] = {.entry = {.count = 1, .reusable = true}}, SHIFT(296), + [3095] = {.entry = {.count = 1, .reusable = true}}, SHIFT(432), + [3097] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [3099] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_with_clause, 4), + [3101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1246), + [3103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(580), + [3105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(577), + [3107] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3109] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1248), + [3111] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1071), + [3113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(821), + [3115] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_relative_import, 2, .production_id = 23), + [3117] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [3119] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [3121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_lambda_parameters, 1), + [3123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(115), + [3125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755), + [3127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1081), + [3129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1092), + [3131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1136), + [3133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1102), + [3135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(116), + [3137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [3139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1019), + [3141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1057), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1146), + [3145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1141), + [3147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(559), + [3149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(744), + [3151] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), }; #ifdef __cplusplus @@ -72776,7 +71185,6 @@ extern const TSLanguage *tree_sitter_python(void) { tree_sitter_python_external_scanner_serialize, tree_sitter_python_external_scanner_deserialize, }, - .primary_state_ids = ts_primary_state_ids, }; return &language; } diff --git a/python/extractor/tsg-python/tsp/src/tree_sitter/array.h b/python/extractor/tsg-python/tsp/src/tree_sitter/array.h index a17a574f04e0..15a3b233bbb8 100644 --- a/python/extractor/tsg-python/tsp/src/tree_sitter/array.h +++ b/python/extractor/tsg-python/tsp/src/tree_sitter/array.h @@ -14,7 +14,6 @@ extern "C" { #include #ifdef _MSC_VER -#pragma warning(push) #pragma warning(disable : 4101) #elif defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic push @@ -279,7 +278,7 @@ static inline void _array__splice(Array *self, size_t element_size, #define _compare_int(a, b) ((int)*(a) - (int)(b)) #ifdef _MSC_VER -#pragma warning(pop) +#pragma warning(default : 4101) #elif defined(__GNUC__) || defined(__clang__) #pragma GCC diagnostic pop #endif 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..cbbc7b4ee3c5 100644 --- a/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h +++ b/python/extractor/tsg-python/tsp/src/tree_sitter/parser.h @@ -123,7 +123,6 @@ struct TSLanguage { unsigned (*serialize)(void *, char *); void (*deserialize)(void *, const char *, unsigned); } external_scanner; - const TSStateId *primary_state_ids; }; /* diff --git a/python/ql/lib/change-notes/2025-06-26-fix-match-as-identifier.md b/python/ql/lib/change-notes/2025-06-26-fix-match-as-identifier.md deleted file mode 100644 index 47d18a533d56..000000000000 --- a/python/ql/lib/change-notes/2025-06-26-fix-match-as-identifier.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- - -- The Python parser is now able to correctly parse expressions such as `match[1]` and `match()` where `match` is not used as a keyword. diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 87101c60e09c..23e252fdf3d8 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.11-dev +version: 4.0.10 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/security/internal/EncryptionKeySizes.qll b/python/ql/lib/semmle/python/security/internal/EncryptionKeySizes.qll index f42e31b2d7e5..46df3a3ca7bb 100644 --- a/python/ql/lib/semmle/python/security/internal/EncryptionKeySizes.qll +++ b/python/ql/lib/semmle/python/security/internal/EncryptionKeySizes.qll @@ -4,8 +4,6 @@ * Provides predicates for recommended encryption key sizes. * Such that we can share this logic across our CodeQL analysis of different languages. */ -overlay[local?] -module; /** Returns the minimum recommended key size for RSA. */ int minSecureKeySizeRsa() { result = 2048 } diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 0122344d370e..af31ec6ea4fb 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -50,32 +50,29 @@ class FileWrapperCall extends DataFlow::CallCfgNode { /** A node where a file is closed. */ abstract class FileClose extends DataFlow::CfgNode { - /** Holds if this file close will occur if an exception is raised at `raises`. */ + /** Holds if this file close will occur if an exception is thrown at `raises`. */ predicate guardsExceptions(DataFlow::CfgNode raises) { - // The close call occurs after an exception edge in the cfg (a catch or finally) - bbReachableRefl(raises.asCfgNode().getBasicBlock().getAnExceptionalSuccessor(), - this.asCfgNode().getBasicBlock()) + cfgGetASuccessorStar(raises.asCfgNode().getAnExceptionalSuccessor(), this.asCfgNode()) or - // The exception is after the close call. - // A full cfg reachability check is not in general feasible for performance, so we approximate it with: - // - A basic block reachability check (here) that works if the expression and close call are in different basic blocks - // - A check (in the `WithStatement` override of `guardsExceptions`) for the case where the exception call - // is lexically contained in the body of a `with` statement that closes the file. - // This may cause FPs in a case such as: - // f.close() - // f.write("...") - // We presume this to not be very common. - bbReachableStrict(this.asCfgNode().getBasicBlock(), raises.asCfgNode().getBasicBlock()) + // The expression is after the close call. + // This also covers the body of a `with` statement. + cfgGetASuccessorStar(this.asCfgNode(), raises.asCfgNode()) } } -private predicate bbSuccessor(BasicBlock src, BasicBlock sink) { sink = src.getASuccessor() } +private predicate cfgGetASuccessor(ControlFlowNode src, ControlFlowNode sink) { + sink = src.getASuccessor() +} -private predicate bbReachableStrict(BasicBlock src, BasicBlock sink) = - fastTC(bbSuccessor/2)(src, sink) +pragma[inline] +private predicate cfgGetASuccessorPlus(ControlFlowNode src, ControlFlowNode sink) = + fastTC(cfgGetASuccessor/2)(src, sink) -private predicate bbReachableRefl(BasicBlock src, BasicBlock sink) { - bbReachableStrict(src, sink) or src = sink +pragma[inline] +private predicate cfgGetASuccessorStar(ControlFlowNode src, ControlFlowNode sink) { + src = sink + or + cfgGetASuccessorPlus(src, sink) } /** A call to the `.close()` method of a file object. */ @@ -90,16 +87,7 @@ class OsCloseCall extends FileClose { /** A `with` statement. */ class WithStatement extends FileClose { - With w; - - WithStatement() { this.asExpr() = w.getContextExpr() } - - override predicate guardsExceptions(DataFlow::CfgNode raises) { - super.guardsExceptions(raises) - or - // Check whether the exception is raised in the body of the with statement. - raises.asExpr().getParent*() = w.getBody().getAnItem() - } + WithStatement() { this.asExpr() = any(With w).getContextExpr() } } /** Holds if an exception may be raised at `raises` if `file` is a file object. */ diff --git a/python/ql/src/codeql-suites/python-security-and-quality.qls b/python/ql/src/codeql-suites/python-security-and-quality.qls index 557ca61f2b1a..2a97a497db0a 100644 --- a/python/ql/src/codeql-suites/python-security-and-quality.qls +++ b/python/ql/src/codeql-suites/python-security-and-quality.qls @@ -1,128 +1,4 @@ - description: Security-and-quality queries for Python - queries: . -- apply: security-and-frozen-quality-selectors.yml +- apply: security-and-quality-selectors.yml from: codeql/suite-helpers -- include: - id: - - py/asserts-tuple - - py/attribute-shadows-method - - py/call-to-non-callable - - py/call/wrong-arguments - - py/call/wrong-named-argument - - py/call/wrong-named-class-argument - - py/call/wrong-number-class-arguments - - py/catch-base-exception - - py/commented-out-code - - py/comparison-missing-self - - py/comparison-of-constants - - py/comparison-of-identical-expressions - - py/comparison-using-is - - py/conflicting-attributes - - py/constant-conditional-expression - - py/cyclic-import - - py/deprecated-slice-method - - py/duplicate-key-dict-literal - - py/empty-except - - py/encoding-error - - py/equals-hash-mismatch - - py/exit-from-finally - - py/explicit-call-to-delete - - py/explicit-return-in-init - - py/file-not-closed - - py/hash-unhashable-value - - py/illegal-raise - - py/implicit-string-concatenation-in-list - - py/import-and-import-from - - py/import-deprecated-module - - py/import-of-mutable-attribute - - py/import-own-module - - py/imprecise-assert - - py/incomplete-ordering - - py/inconsistent-equality - - py/inconsistent-mro - - py/ineffectual-statement - - py/inheritance/incorrect-overridden-signature - - py/inheritance/incorrect-overriding-signature - - py/inheritance/signature-mismatch - - py/init-calls-subclass - - py/init-method-is-generator - - py/iter-returns-non-iterator - - py/iter-returns-non-self - - py/iteration-string-and-sequence - - py/leaking-list-comprehension - - py/loop-variable-capture - - py/member-test-non-container - - py/mismatched-multiple-assignment - - py/missing-call-to-delete - - py/missing-call-to-init - - py/missing-equals - - py/mixed-returns - - py/mixed-tuple-returns - - py/modification-of-default-value - - py/modification-of-locals - - py/multiple-calls-to-delete - - py/multiple-calls-to-init - - py/multiple-definition - - py/mutable-descriptor - - py/nested-loops-with-same-variable - - py/nested-loops-with-same-variable-reused - - py/non-iterable-in-for-loop - - py/not-named-cls - - py/not-named-self - - py/old-style-octal-literal - - py/overly-complex-delete - - py/overwritten-inherited-attribute - - py/percent-format/not-mapping - - py/percent-format/unsupported-character - - py/percent-format/wrong-arguments - - py/polluting-import - - py/print-during-import - - py/procedure-return-value-used - - py/property-in-old-style-class - - py/pythagorean - - py/raise-not-implemented - - py/raises-tuple - - py/redundant-assignment - - py/redundant-comparison - - py/redundant-else - - py/redundant-global-declaration - - py/regex/backspace-escape - - py/regex/duplicate-in-character-class - - py/regex/incomplete-special-group - - py/regex/unmatchable-caret - - py/regex/unmatchable-dollar - - py/repeated-import - - py/return-or-yield-outside-function - - py/should-use-with - - py/side-effect-in-assert - - py/slots-in-old-style-class - - py/special-method-wrong-signature - - py/str-format/missing-argument - - py/str-format/missing-named-argument - - py/str-format/mixed-fields - - py/str-format/surplus-argument - - py/str-format/surplus-named-argument - - py/super-in-old-style - - py/super-not-enclosing-class - - py/syntax-error - - py/test-equals-none - - py/truncated-division - - py/undefined-export - - py/undefined-placeholder-variable - - py/unexpected-raise-in-special-method - - py/unguarded-next-in-generator - - py/uninitialized-local-variable - - py/unnecessary-delete - - py/unnecessary-lambda - - py/unnecessary-pass - - py/unreachable-except - - py/unreachable-statement - - py/unsafe-cyclic-import - - py/unused-exception-object - - py/unused-global-variable - - py/unused-import - - py/unused-local-variable - - py/unused-loop-variable - - py/use-of-apply - - py/use-of-exit-or-quit - - py/useless-except diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index ff38476458fb..0c32f4f2093d 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.6.1-dev +version: 1.6.0 groups: - python - queries diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 244c6f73c133..598d54c892c3 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -277,11 +277,4 @@ def closed28(path): try: f28.write("hi") finally: - f28.close() - -def closed29(path): - # Due to an approximation in CFG reachability for performance, it is not detected that the `write` call that may raise occurs after the file has already been closed. - # We presume this case to be uncommon. - f28 = open(path) # $SPURIOUS:notClosedOnException - f28.close() - f28.write("already closed") \ No newline at end of file + f28.close() \ No newline at end of file diff --git a/ql/ql/src/codeql_ql/ast/Ast.qll b/ql/ql/src/codeql_ql/ast/Ast.qll index 89bdf14d4b2a..1e3ac4e8c827 100644 --- a/ql/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/ql/src/codeql_ql/ast/Ast.qll @@ -2542,10 +2542,6 @@ private class CallerArg extends AnnotationArg { CallerArg() { this.getValue() = "caller" } } -private class CallerQArg extends AnnotationArg { - CallerQArg() { this.getValue() = "caller?" } -} - private class LocalArg extends AnnotationArg { LocalArg() { this.getValue() = "local" } } @@ -2620,13 +2616,6 @@ class OverlayCaller extends Annotation { override string toString() { result = "overlay[caller]" } } -/** An `overlay[caller?]` annotation. */ -class OverlayCallerQ extends Annotation { - OverlayCallerQ() { this.getName() = "overlay" and this.getArgs(0) instanceof CallerQArg } - - override string toString() { result = "overlay[caller?]" } -} - /** An `overlay[local]` annotation. */ class OverlayLocal extends Annotation { OverlayLocal() { this.getName() = "overlay" and this.getArgs(0) instanceof LocalArg } diff --git a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll index a83095629ab5..562af993d894 100644 --- a/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll +++ b/ql/ql/src/codeql_ql/ast/internal/TreeSitter.qll @@ -5,10 +5,6 @@ import codeql.Locations as L -/** Holds if the database is an overlay. */ -overlay[local] -private predicate isOverlay() { databaseMetadata("isOverlay", "true") } - module QL { /** The base class for all AST nodes */ class AstNode extends @ql_ast_node { @@ -52,30 +48,6 @@ module QL { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@ql_ast_node node) { - exists(@location_default loc | ql_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @ql_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@ql_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - /** A class representing `add_expr` nodes. */ class AddExpr extends @ql_add_expr, AstNode { /** Gets the name of the primary QL class for this element. */ @@ -1346,30 +1318,6 @@ module Dbscheme { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@dbscheme_ast_node node) { - exists(@location_default loc | dbscheme_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @dbscheme_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@dbscheme_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - /** A class representing `annotName` tokens. */ class AnnotName extends @dbscheme_token_annot_name, Token { /** Gets the name of the primary QL class for this element. */ @@ -1706,30 +1654,6 @@ module Blame { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@blame_ast_node node) { - exists(@location_default loc | blame_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @blame_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@blame_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - /** A class representing `blame_entry` nodes. */ class BlameEntry extends @blame_blame_entry, AstNode { /** Gets the name of the primary QL class for this element. */ @@ -1843,30 +1767,6 @@ module JSON { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@json_ast_node node) { - exists(@location_default loc | json_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @json_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@json_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - class UnderscoreValue extends @json_underscore_value, AstNode { } /** A class representing `array` nodes. */ diff --git a/ql/ql/src/ql.dbscheme b/ql/ql/src/ql.dbscheme index d2a002084695..6b7646b90f91 100644 --- a/ql/ql/src/ql.dbscheme +++ b/ql/ql/src/ql.dbscheme @@ -108,12 +108,6 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - /*- QL dbscheme -*/ @ql_add_expr_left_type = @ql_add_expr | @ql_aggregate | @ql_call_or_unqual_agg_expr | @ql_comp_term | @ql_conjunction | @ql_disjunction | @ql_expr_annotation | @ql_if_term | @ql_implication | @ql_in_expr | @ql_instance_of | @ql_literal | @ql_mul_expr | @ql_negation | @ql_par_expr | @ql_prefix_cast | @ql_qualified_expr | @ql_quantified | @ql_range | @ql_set_literal | @ql_special_call | @ql_super_ref | @ql_unary_expr | @ql_variable diff --git a/ql/ql/src/ql.dbscheme.stats b/ql/ql/src/ql.dbscheme.stats index 8a5866812634..1e992f7d7a40 100644 --- a/ql/ql/src/ql.dbscheme.stats +++ b/ql/ql/src/ql.dbscheme.stats @@ -22436,41 +22436,5 @@ - - databaseMetadata - 1 - - - metadataKey - 1 - - - value - 1 - - - - - metadataKey - value - - - 12 - - - - - - value - metadataKey - - - 12 - - - - - - diff --git a/ql/ql/src/queries/overlay/InlineOverlayCaller.ql b/ql/ql/src/queries/overlay/InlineOverlayCaller.ql index 0853dfde830e..d27a0ade9bbf 100644 --- a/ql/ql/src/queries/overlay/InlineOverlayCaller.ql +++ b/ql/ql/src/queries/overlay/InlineOverlayCaller.ql @@ -31,12 +31,11 @@ where mayBeLocal(p) and p.getAnAnnotation() instanceof Inline and not p.getAnAnnotation() instanceof OverlayCaller and - not p.getAnAnnotation() instanceof OverlayCallerQ and not p.isPrivate() select p, "This possibly local non-private inline predicate will not " + "be inlined across the overlay frontier. This may negatively " + "affect evaluation performance. Consider adding an " + - "`overlay[caller]` or `overlay[caller?]` annotation to allow inlining across the " + - "overlay frontier. Note that adding an `overlay[caller]` or `overlay[caller?]` " + + "`overlay[caller]` annotation to allow inlining across the " + + "overlay frontier. Note that adding an `overlay[caller]` " + "annotation affects semantics under overlay evaluation." diff --git a/ql/ql/test/queries/overlay/InlineOverlayCaller/InlineOverlayCaller.expected b/ql/ql/test/queries/overlay/InlineOverlayCaller/InlineOverlayCaller.expected index 5075797c0dde..d89f1dcb8efc 100644 --- a/ql/ql/test/queries/overlay/InlineOverlayCaller/InlineOverlayCaller.expected +++ b/ql/ql/test/queries/overlay/InlineOverlayCaller/InlineOverlayCaller.expected @@ -1 +1 @@ -| Test.qll:7:11:7:13 | ClasslessPredicate foo | This possibly local non-private inline predicate will not be inlined across the overlay frontier. This may negatively affect evaluation performance. Consider adding an `overlay[caller]` or `overlay[caller?]` annotation to allow inlining across the overlay frontier. Note that adding an `overlay[caller]` or `overlay[caller?]` annotation affects semantics under overlay evaluation. | +| Test.qll:7:11:7:13 | ClasslessPredicate foo | This possibly local non-private inline predicate will not be inlined across the overlay frontier. This may negatively affect evaluation performance. Consider adding an `overlay[caller]` annotation to allow inlining across the overlay frontier. Note that adding an `overlay[caller]` annotation affects semantics under overlay evaluation. | diff --git a/ql/ql/test/queries/overlay/InlineOverlayCaller/Test.qll b/ql/ql/test/queries/overlay/InlineOverlayCaller/Test.qll index e25577d91a17..3e72490ebb01 100644 --- a/ql/ql/test/queries/overlay/InlineOverlayCaller/Test.qll +++ b/ql/ql/test/queries/overlay/InlineOverlayCaller/Test.qll @@ -12,7 +12,3 @@ predicate bar(int x) { x = 43 } pragma[inline] private predicate baz(int x) { x = 44 } - -overlay[caller?] -pragma[inline] -predicate baw(int x) { x = 45 } diff --git a/ruby/codeql-extractor.yml b/ruby/codeql-extractor.yml index a832b0c10654..abb50db2a295 100644 --- a/ruby/codeql-extractor.yml +++ b/ruby/codeql-extractor.yml @@ -3,7 +3,6 @@ display_name: "Ruby" version: 0.1.0 column_kind: "utf8" legacy_qltest_extraction: true -overlay_support_version: 20250108 build_modes: - none github_api_languages: diff --git a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme b/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme deleted file mode 100644 index dc51d416301d..000000000000 --- a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/old.dbscheme +++ /dev/null @@ -1,1532 +0,0 @@ -// CodeQL database schema for Ruby -// Automatically generated from the tree-sitter grammar; do not edit - -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - -/*- Ruby dbscheme -*/ -@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary - -@ruby_underscore_call_operator = @ruby_reserved_word - -@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield - -@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable - -@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable - -@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable - -@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant - -@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic - -@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern - -@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric - -@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr - -@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield - -@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer - -@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier - -@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable - -ruby_alias_def( - unique int id: @ruby_alias, - int alias: @ruby_underscore_method_name ref, - int name: @ruby_underscore_method_name ref -); - -#keyset[ruby_alternative_pattern, index] -ruby_alternative_pattern_alternatives( - int ruby_alternative_pattern: @ruby_alternative_pattern ref, - int index: int ref, - unique int alternatives: @ruby_underscore_pattern_expr_basic ref -); - -ruby_alternative_pattern_def( - unique int id: @ruby_alternative_pattern -); - -@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_argument_list, index] -ruby_argument_list_child( - int ruby_argument_list: @ruby_argument_list ref, - int index: int ref, - unique int child: @ruby_argument_list_child_type ref -); - -ruby_argument_list_def( - unique int id: @ruby_argument_list -); - -@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_array, index] -ruby_array_child( - int ruby_array: @ruby_array ref, - int index: int ref, - unique int child: @ruby_array_child_type ref -); - -ruby_array_def( - unique int id: @ruby_array -); - -ruby_array_pattern_class( - unique int ruby_array_pattern: @ruby_array_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_array_pattern, index] -ruby_array_pattern_child( - int ruby_array_pattern: @ruby_array_pattern ref, - int index: int ref, - unique int child: @ruby_array_pattern_child_type ref -); - -ruby_array_pattern_def( - unique int id: @ruby_array_pattern -); - -ruby_as_pattern_def( - unique int id: @ruby_as_pattern, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_pattern_expr ref -); - -@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression - -ruby_assignment_def( - unique int id: @ruby_assignment, - int left: @ruby_assignment_left_type ref, - int right: @ruby_assignment_right_type ref -); - -@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_string, index] -ruby_bare_string_child( - int ruby_bare_string: @ruby_bare_string ref, - int index: int ref, - unique int child: @ruby_bare_string_child_type ref -); - -ruby_bare_string_def( - unique int id: @ruby_bare_string -); - -@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_symbol, index] -ruby_bare_symbol_child( - int ruby_bare_symbol: @ruby_bare_symbol ref, - int index: int ref, - unique int child: @ruby_bare_symbol_child_type ref -); - -ruby_bare_symbol_def( - unique int id: @ruby_bare_symbol -); - -@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin, index] -ruby_begin_child( - int ruby_begin: @ruby_begin ref, - int index: int ref, - unique int child: @ruby_begin_child_type ref -); - -ruby_begin_def( - unique int id: @ruby_begin -); - -@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin_block, index] -ruby_begin_block_child( - int ruby_begin_block: @ruby_begin_block ref, - int index: int ref, - unique int child: @ruby_begin_block_child_type ref -); - -ruby_begin_block_def( - unique int id: @ruby_begin_block -); - -@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_binary.operator of - 0 = @ruby_binary_bangequal -| 1 = @ruby_binary_bangtilde -| 2 = @ruby_binary_percent -| 3 = @ruby_binary_ampersand -| 4 = @ruby_binary_ampersandampersand -| 5 = @ruby_binary_star -| 6 = @ruby_binary_starstar -| 7 = @ruby_binary_plus -| 8 = @ruby_binary_minus -| 9 = @ruby_binary_slash -| 10 = @ruby_binary_langle -| 11 = @ruby_binary_langlelangle -| 12 = @ruby_binary_langleequal -| 13 = @ruby_binary_langleequalrangle -| 14 = @ruby_binary_equalequal -| 15 = @ruby_binary_equalequalequal -| 16 = @ruby_binary_equaltilde -| 17 = @ruby_binary_rangle -| 18 = @ruby_binary_rangleequal -| 19 = @ruby_binary_ranglerangle -| 20 = @ruby_binary_caret -| 21 = @ruby_binary_and -| 22 = @ruby_binary_or -| 23 = @ruby_binary_pipe -| 24 = @ruby_binary_pipepipe -; - - -ruby_binary_def( - unique int id: @ruby_binary, - int left: @ruby_binary_left_type ref, - int operator: int ref, - int right: @ruby_underscore_expression ref -); - -ruby_block_body( - unique int ruby_block: @ruby_block ref, - unique int body: @ruby_block_body ref -); - -ruby_block_parameters( - unique int ruby_block: @ruby_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_block_def( - unique int id: @ruby_block -); - -ruby_block_argument_child( - unique int ruby_block_argument: @ruby_block_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_block_argument_def( - unique int id: @ruby_block_argument -); - -@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_block_body, index] -ruby_block_body_child( - int ruby_block_body: @ruby_block_body ref, - int index: int ref, - unique int child: @ruby_block_body_child_type ref -); - -ruby_block_body_def( - unique int id: @ruby_block_body -); - -ruby_block_parameter_name( - unique int ruby_block_parameter: @ruby_block_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_block_parameter_def( - unique int id: @ruby_block_parameter -); - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_locals( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int locals: @ruby_token_identifier ref -); - -@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_child( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int child: @ruby_block_parameters_child_type ref -); - -ruby_block_parameters_def( - unique int id: @ruby_block_parameters -); - -@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_body_statement, index] -ruby_body_statement_child( - int ruby_body_statement: @ruby_body_statement ref, - int index: int ref, - unique int child: @ruby_body_statement_child_type ref -); - -ruby_body_statement_def( - unique int id: @ruby_body_statement -); - -ruby_break_child( - unique int ruby_break: @ruby_break ref, - unique int child: @ruby_argument_list ref -); - -ruby_break_def( - unique int id: @ruby_break -); - -ruby_call_arguments( - unique int ruby_call: @ruby_call ref, - unique int arguments: @ruby_argument_list ref -); - -@ruby_call_block_type = @ruby_block | @ruby_do_block - -ruby_call_block( - unique int ruby_call: @ruby_call ref, - unique int block: @ruby_call_block_type ref -); - -@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable - -ruby_call_method( - unique int ruby_call: @ruby_call ref, - unique int method: @ruby_call_method_type ref -); - -ruby_call_operator( - unique int ruby_call: @ruby_call ref, - unique int operator: @ruby_underscore_call_operator ref -); - -ruby_call_receiver( - unique int ruby_call: @ruby_call ref, - unique int receiver: @ruby_underscore_primary ref -); - -ruby_call_def( - unique int id: @ruby_call -); - -ruby_case_value( - unique int ruby_case__: @ruby_case__ ref, - unique int value: @ruby_underscore_statement ref -); - -@ruby_case_child_type = @ruby_else | @ruby_when - -#keyset[ruby_case__, index] -ruby_case_child( - int ruby_case__: @ruby_case__ ref, - int index: int ref, - unique int child: @ruby_case_child_type ref -); - -ruby_case_def( - unique int id: @ruby_case__ -); - -#keyset[ruby_case_match, index] -ruby_case_match_clauses( - int ruby_case_match: @ruby_case_match ref, - int index: int ref, - unique int clauses: @ruby_in_clause ref -); - -ruby_case_match_else( - unique int ruby_case_match: @ruby_case_match ref, - unique int else: @ruby_else ref -); - -ruby_case_match_def( - unique int id: @ruby_case_match, - int value: @ruby_underscore_statement ref -); - -#keyset[ruby_chained_string, index] -ruby_chained_string_child( - int ruby_chained_string: @ruby_chained_string ref, - int index: int ref, - unique int child: @ruby_string__ ref -); - -ruby_chained_string_def( - unique int id: @ruby_chained_string -); - -ruby_class_body( - unique int ruby_class: @ruby_class ref, - unique int body: @ruby_body_statement ref -); - -@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_class_superclass( - unique int ruby_class: @ruby_class ref, - unique int superclass: @ruby_superclass ref -); - -ruby_class_def( - unique int id: @ruby_class, - int name: @ruby_class_name_type ref -); - -@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer - -ruby_complex_def( - unique int id: @ruby_complex, - int child: @ruby_complex_child_type ref -); - -ruby_conditional_def( - unique int id: @ruby_conditional, - int alternative: @ruby_underscore_arg ref, - int condition: @ruby_underscore_arg ref, - int consequence: @ruby_underscore_arg ref -); - -@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_delimited_symbol, index] -ruby_delimited_symbol_child( - int ruby_delimited_symbol: @ruby_delimited_symbol ref, - int index: int ref, - unique int child: @ruby_delimited_symbol_child_type ref -); - -ruby_delimited_symbol_def( - unique int id: @ruby_delimited_symbol -); - -@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_destructured_left_assignment, index] -ruby_destructured_left_assignment_child( - int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, - int index: int ref, - unique int child: @ruby_destructured_left_assignment_child_type ref -); - -ruby_destructured_left_assignment_def( - unique int id: @ruby_destructured_left_assignment -); - -@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_destructured_parameter, index] -ruby_destructured_parameter_child( - int ruby_destructured_parameter: @ruby_destructured_parameter ref, - int index: int ref, - unique int child: @ruby_destructured_parameter_child_type ref -); - -ruby_destructured_parameter_def( - unique int id: @ruby_destructured_parameter -); - -@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_do, index] -ruby_do_child( - int ruby_do: @ruby_do ref, - int index: int ref, - unique int child: @ruby_do_child_type ref -); - -ruby_do_def( - unique int id: @ruby_do -); - -ruby_do_block_body( - unique int ruby_do_block: @ruby_do_block ref, - unique int body: @ruby_body_statement ref -); - -ruby_do_block_parameters( - unique int ruby_do_block: @ruby_do_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_do_block_def( - unique int id: @ruby_do_block -); - -@ruby_element_reference_block_type = @ruby_block | @ruby_do_block - -ruby_element_reference_block( - unique int ruby_element_reference: @ruby_element_reference ref, - unique int block: @ruby_element_reference_block_type ref -); - -@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_element_reference, index] -ruby_element_reference_child( - int ruby_element_reference: @ruby_element_reference ref, - int index: int ref, - unique int child: @ruby_element_reference_child_type ref -); - -ruby_element_reference_def( - unique int id: @ruby_element_reference, - int object: @ruby_underscore_primary ref -); - -@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_else, index] -ruby_else_child( - int ruby_else: @ruby_else ref, - int index: int ref, - unique int child: @ruby_else_child_type ref -); - -ruby_else_def( - unique int id: @ruby_else -); - -@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif - -ruby_elsif_alternative( - unique int ruby_elsif: @ruby_elsif ref, - unique int alternative: @ruby_elsif_alternative_type ref -); - -ruby_elsif_consequence( - unique int ruby_elsif: @ruby_elsif ref, - unique int consequence: @ruby_then ref -); - -ruby_elsif_def( - unique int id: @ruby_elsif, - int condition: @ruby_underscore_statement ref -); - -@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_end_block, index] -ruby_end_block_child( - int ruby_end_block: @ruby_end_block ref, - int index: int ref, - unique int child: @ruby_end_block_child_type ref -); - -ruby_end_block_def( - unique int id: @ruby_end_block -); - -@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_ensure, index] -ruby_ensure_child( - int ruby_ensure: @ruby_ensure ref, - int index: int ref, - unique int child: @ruby_ensure_child_type ref -); - -ruby_ensure_def( - unique int id: @ruby_ensure -); - -ruby_exception_variable_def( - unique int id: @ruby_exception_variable, - int child: @ruby_underscore_lhs ref -); - -@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_exceptions, index] -ruby_exceptions_child( - int ruby_exceptions: @ruby_exceptions ref, - int index: int ref, - unique int child: @ruby_exceptions_child_type ref -); - -ruby_exceptions_def( - unique int id: @ruby_exceptions -); - -ruby_expression_reference_pattern_def( - unique int id: @ruby_expression_reference_pattern, - int value: @ruby_underscore_expression ref -); - -ruby_find_pattern_class( - unique int ruby_find_pattern: @ruby_find_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_find_pattern, index] -ruby_find_pattern_child( - int ruby_find_pattern: @ruby_find_pattern ref, - int index: int ref, - unique int child: @ruby_find_pattern_child_type ref -); - -ruby_find_pattern_def( - unique int id: @ruby_find_pattern -); - -@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -ruby_for_def( - unique int id: @ruby_for, - int body: @ruby_do ref, - int pattern: @ruby_for_pattern_type ref, - int value: @ruby_in ref -); - -@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair - -#keyset[ruby_hash, index] -ruby_hash_child( - int ruby_hash: @ruby_hash ref, - int index: int ref, - unique int child: @ruby_hash_child_type ref -); - -ruby_hash_def( - unique int id: @ruby_hash -); - -ruby_hash_pattern_class( - unique int ruby_hash_pattern: @ruby_hash_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil - -#keyset[ruby_hash_pattern, index] -ruby_hash_pattern_child( - int ruby_hash_pattern: @ruby_hash_pattern ref, - int index: int ref, - unique int child: @ruby_hash_pattern_child_type ref -); - -ruby_hash_pattern_def( - unique int id: @ruby_hash_pattern -); - -ruby_hash_splat_argument_child( - unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_hash_splat_argument_def( - unique int id: @ruby_hash_splat_argument -); - -ruby_hash_splat_parameter_name( - unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_hash_splat_parameter_def( - unique int id: @ruby_hash_splat_parameter -); - -@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end - -#keyset[ruby_heredoc_body, index] -ruby_heredoc_body_child( - int ruby_heredoc_body: @ruby_heredoc_body ref, - int index: int ref, - unique int child: @ruby_heredoc_body_child_type ref -); - -ruby_heredoc_body_def( - unique int id: @ruby_heredoc_body -); - -@ruby_if_alternative_type = @ruby_else | @ruby_elsif - -ruby_if_alternative( - unique int ruby_if: @ruby_if ref, - unique int alternative: @ruby_if_alternative_type ref -); - -ruby_if_consequence( - unique int ruby_if: @ruby_if ref, - unique int consequence: @ruby_then ref -); - -ruby_if_def( - unique int id: @ruby_if, - int condition: @ruby_underscore_statement ref -); - -ruby_if_guard_def( - unique int id: @ruby_if_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_if_modifier_def( - unique int id: @ruby_if_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_in_def( - unique int id: @ruby_in, - int child: @ruby_underscore_arg ref -); - -ruby_in_clause_body( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int body: @ruby_then ref -); - -@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard - -ruby_in_clause_guard( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int guard: @ruby_in_clause_guard_type ref -); - -ruby_in_clause_def( - unique int id: @ruby_in_clause, - int pattern: @ruby_underscore_pattern_top_expr_body ref -); - -@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement - -#keyset[ruby_interpolation, index] -ruby_interpolation_child( - int ruby_interpolation: @ruby_interpolation ref, - int index: int ref, - unique int child: @ruby_interpolation_child_type ref -); - -ruby_interpolation_def( - unique int id: @ruby_interpolation -); - -ruby_keyword_parameter_value( - unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_keyword_parameter_def( - unique int id: @ruby_keyword_parameter, - int name: @ruby_token_identifier ref -); - -@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol - -ruby_keyword_pattern_value( - unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, - unique int value: @ruby_underscore_pattern_expr ref -); - -ruby_keyword_pattern_def( - unique int id: @ruby_keyword_pattern, - int key__: @ruby_keyword_pattern_key_type ref -); - -@ruby_lambda_body_type = @ruby_block | @ruby_do_block - -ruby_lambda_parameters( - unique int ruby_lambda: @ruby_lambda ref, - unique int parameters: @ruby_lambda_parameters ref -); - -ruby_lambda_def( - unique int id: @ruby_lambda, - int body: @ruby_lambda_body_type ref -); - -@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_lambda_parameters, index] -ruby_lambda_parameters_child( - int ruby_lambda_parameters: @ruby_lambda_parameters ref, - int index: int ref, - unique int child: @ruby_lambda_parameters_child_type ref -); - -ruby_lambda_parameters_def( - unique int id: @ruby_lambda_parameters -); - -@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_left_assignment_list, index] -ruby_left_assignment_list_child( - int ruby_left_assignment_list: @ruby_left_assignment_list ref, - int index: int ref, - unique int child: @ruby_left_assignment_list_child_type ref -); - -ruby_left_assignment_list_def( - unique int id: @ruby_left_assignment_list -); - -ruby_match_pattern_def( - unique int id: @ruby_match_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_method_body( - unique int ruby_method: @ruby_method ref, - unique int body: @ruby_method_body_type ref -); - -ruby_method_parameters( - unique int ruby_method: @ruby_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_method_def( - unique int id: @ruby_method, - int name: @ruby_underscore_method_name ref -); - -@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_method_parameters, index] -ruby_method_parameters_child( - int ruby_method_parameters: @ruby_method_parameters ref, - int index: int ref, - unique int child: @ruby_method_parameters_child_type ref -); - -ruby_method_parameters_def( - unique int id: @ruby_method_parameters -); - -ruby_module_body( - unique int ruby_module: @ruby_module ref, - unique int body: @ruby_body_statement ref -); - -@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_module_def( - unique int id: @ruby_module, - int name: @ruby_module_name_type ref -); - -ruby_next_child( - unique int ruby_next: @ruby_next ref, - unique int child: @ruby_argument_list ref -); - -ruby_next_def( - unique int id: @ruby_next -); - -case @ruby_operator_assignment.operator of - 0 = @ruby_operator_assignment_percentequal -| 1 = @ruby_operator_assignment_ampersandampersandequal -| 2 = @ruby_operator_assignment_ampersandequal -| 3 = @ruby_operator_assignment_starstarequal -| 4 = @ruby_operator_assignment_starequal -| 5 = @ruby_operator_assignment_plusequal -| 6 = @ruby_operator_assignment_minusequal -| 7 = @ruby_operator_assignment_slashequal -| 8 = @ruby_operator_assignment_langlelangleequal -| 9 = @ruby_operator_assignment_ranglerangleequal -| 10 = @ruby_operator_assignment_caretequal -| 11 = @ruby_operator_assignment_pipeequal -| 12 = @ruby_operator_assignment_pipepipeequal -; - - -@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression - -ruby_operator_assignment_def( - unique int id: @ruby_operator_assignment, - int left: @ruby_underscore_lhs ref, - int operator: int ref, - int right: @ruby_operator_assignment_right_type ref -); - -ruby_optional_parameter_def( - unique int id: @ruby_optional_parameter, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_arg ref -); - -@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg - -ruby_pair_value( - unique int ruby_pair: @ruby_pair ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_pair_def( - unique int id: @ruby_pair, - int key__: @ruby_pair_key_type ref -); - -ruby_parenthesized_pattern_def( - unique int id: @ruby_parenthesized_pattern, - int child: @ruby_underscore_pattern_expr ref -); - -@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_parenthesized_statements, index] -ruby_parenthesized_statements_child( - int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, - int index: int ref, - unique int child: @ruby_parenthesized_statements_child_type ref -); - -ruby_parenthesized_statements_def( - unique int id: @ruby_parenthesized_statements -); - -@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg - -ruby_pattern_def( - unique int id: @ruby_pattern, - int child: @ruby_pattern_child_type ref -); - -@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement - -#keyset[ruby_program, index] -ruby_program_child( - int ruby_program: @ruby_program ref, - int index: int ref, - unique int child: @ruby_program_child_type ref -); - -ruby_program_def( - unique int id: @ruby_program -); - -@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_begin( - unique int ruby_range: @ruby_range ref, - unique int begin: @ruby_range_begin_type ref -); - -@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_end( - unique int ruby_range: @ruby_range ref, - unique int end: @ruby_range_end_type ref -); - -case @ruby_range.operator of - 0 = @ruby_range_dotdot -| 1 = @ruby_range_dotdotdot -; - - -ruby_range_def( - unique int id: @ruby_range, - int operator: int ref -); - -@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer - -ruby_rational_def( - unique int id: @ruby_rational, - int child: @ruby_rational_child_type ref -); - -ruby_redo_child( - unique int ruby_redo: @ruby_redo ref, - unique int child: @ruby_argument_list ref -); - -ruby_redo_def( - unique int id: @ruby_redo -); - -@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_regex, index] -ruby_regex_child( - int ruby_regex: @ruby_regex ref, - int index: int ref, - unique int child: @ruby_regex_child_type ref -); - -ruby_regex_def( - unique int id: @ruby_regex -); - -ruby_rescue_body( - unique int ruby_rescue: @ruby_rescue ref, - unique int body: @ruby_then ref -); - -ruby_rescue_exceptions( - unique int ruby_rescue: @ruby_rescue ref, - unique int exceptions: @ruby_exceptions ref -); - -ruby_rescue_variable( - unique int ruby_rescue: @ruby_rescue ref, - unique int variable: @ruby_exception_variable ref -); - -ruby_rescue_def( - unique int id: @ruby_rescue -); - -@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement - -ruby_rescue_modifier_def( - unique int id: @ruby_rescue_modifier, - int body: @ruby_rescue_modifier_body_type ref, - int handler: @ruby_underscore_expression ref -); - -ruby_rest_assignment_child( - unique int ruby_rest_assignment: @ruby_rest_assignment ref, - unique int child: @ruby_underscore_lhs ref -); - -ruby_rest_assignment_def( - unique int id: @ruby_rest_assignment -); - -ruby_retry_child( - unique int ruby_retry: @ruby_retry ref, - unique int child: @ruby_argument_list ref -); - -ruby_retry_def( - unique int id: @ruby_retry -); - -ruby_return_child( - unique int ruby_return: @ruby_return ref, - unique int child: @ruby_argument_list ref -); - -ruby_return_def( - unique int id: @ruby_return -); - -@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_right_assignment_list, index] -ruby_right_assignment_list_child( - int ruby_right_assignment_list: @ruby_right_assignment_list ref, - int index: int ref, - unique int child: @ruby_right_assignment_list_child_type ref -); - -ruby_right_assignment_list_def( - unique int id: @ruby_right_assignment_list -); - -@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary - -ruby_scope_resolution_scope( - unique int ruby_scope_resolution: @ruby_scope_resolution ref, - unique int scope: @ruby_scope_resolution_scope_type ref -); - -ruby_scope_resolution_def( - unique int id: @ruby_scope_resolution, - int name: @ruby_token_constant ref -); - -ruby_setter_def( - unique int id: @ruby_setter, - int name: @ruby_token_identifier ref -); - -ruby_singleton_class_body( - unique int ruby_singleton_class: @ruby_singleton_class ref, - unique int body: @ruby_body_statement ref -); - -ruby_singleton_class_def( - unique int id: @ruby_singleton_class, - int value: @ruby_underscore_arg ref -); - -@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_singleton_method_body( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int body: @ruby_singleton_method_body_type ref -); - -@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable - -ruby_singleton_method_parameters( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_singleton_method_def( - unique int id: @ruby_singleton_method, - int name: @ruby_underscore_method_name ref, - int object: @ruby_singleton_method_object_type ref -); - -ruby_splat_argument_child( - unique int ruby_splat_argument: @ruby_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_splat_argument_def( - unique int id: @ruby_splat_argument -); - -ruby_splat_parameter_name( - unique int ruby_splat_parameter: @ruby_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_splat_parameter_def( - unique int id: @ruby_splat_parameter -); - -@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_string__, index] -ruby_string_child( - int ruby_string__: @ruby_string__ ref, - int index: int ref, - unique int child: @ruby_string_child_type ref -); - -ruby_string_def( - unique int id: @ruby_string__ -); - -#keyset[ruby_string_array, index] -ruby_string_array_child( - int ruby_string_array: @ruby_string_array ref, - int index: int ref, - unique int child: @ruby_bare_string ref -); - -ruby_string_array_def( - unique int id: @ruby_string_array -); - -@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_subshell, index] -ruby_subshell_child( - int ruby_subshell: @ruby_subshell ref, - int index: int ref, - unique int child: @ruby_subshell_child_type ref -); - -ruby_subshell_def( - unique int id: @ruby_subshell -); - -ruby_superclass_def( - unique int id: @ruby_superclass, - int child: @ruby_underscore_expression ref -); - -#keyset[ruby_symbol_array, index] -ruby_symbol_array_child( - int ruby_symbol_array: @ruby_symbol_array ref, - int index: int ref, - unique int child: @ruby_bare_symbol ref -); - -ruby_symbol_array_def( - unique int id: @ruby_symbol_array -); - -ruby_test_pattern_def( - unique int id: @ruby_test_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_then, index] -ruby_then_child( - int ruby_then: @ruby_then ref, - int index: int ref, - unique int child: @ruby_then_child_type ref -); - -ruby_then_def( - unique int id: @ruby_then -); - -@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_unary.operator of - 0 = @ruby_unary_bang -| 1 = @ruby_unary_plus -| 2 = @ruby_unary_minus -| 3 = @ruby_unary_definedquestion -| 4 = @ruby_unary_not -| 5 = @ruby_unary_tilde -; - - -ruby_unary_def( - unique int id: @ruby_unary, - int operand: @ruby_unary_operand_type ref, - int operator: int ref -); - -#keyset[ruby_undef, index] -ruby_undef_child( - int ruby_undef: @ruby_undef ref, - int index: int ref, - unique int child: @ruby_underscore_method_name ref -); - -ruby_undef_def( - unique int id: @ruby_undef -); - -@ruby_unless_alternative_type = @ruby_else | @ruby_elsif - -ruby_unless_alternative( - unique int ruby_unless: @ruby_unless ref, - unique int alternative: @ruby_unless_alternative_type ref -); - -ruby_unless_consequence( - unique int ruby_unless: @ruby_unless ref, - unique int consequence: @ruby_then ref -); - -ruby_unless_def( - unique int id: @ruby_unless, - int condition: @ruby_underscore_statement ref -); - -ruby_unless_guard_def( - unique int id: @ruby_unless_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_unless_modifier_def( - unique int id: @ruby_unless_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_until_def( - unique int id: @ruby_until, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_until_modifier_def( - unique int id: @ruby_until_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable - -ruby_variable_reference_pattern_def( - unique int id: @ruby_variable_reference_pattern, - int name: @ruby_variable_reference_pattern_name_type ref -); - -ruby_when_body( - unique int ruby_when: @ruby_when ref, - unique int body: @ruby_then ref -); - -#keyset[ruby_when, index] -ruby_when_pattern( - int ruby_when: @ruby_when ref, - int index: int ref, - unique int pattern: @ruby_pattern ref -); - -ruby_when_def( - unique int id: @ruby_when -); - -ruby_while_def( - unique int id: @ruby_while, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_while_modifier_def( - unique int id: @ruby_while_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_yield_child( - unique int ruby_yield: @ruby_yield ref, - unique int child: @ruby_argument_list ref -); - -ruby_yield_def( - unique int id: @ruby_yield -); - -ruby_tokeninfo( - unique int id: @ruby_token, - int kind: int ref, - string value: string ref -); - -case @ruby_token.kind of - 0 = @ruby_reserved_word -| 1 = @ruby_token_character -| 2 = @ruby_token_class_variable -| 3 = @ruby_token_comment -| 4 = @ruby_token_constant -| 5 = @ruby_token_empty_statement -| 6 = @ruby_token_encoding -| 7 = @ruby_token_escape_sequence -| 8 = @ruby_token_false -| 9 = @ruby_token_file -| 10 = @ruby_token_float -| 11 = @ruby_token_forward_argument -| 12 = @ruby_token_forward_parameter -| 13 = @ruby_token_global_variable -| 14 = @ruby_token_hash_key_symbol -| 15 = @ruby_token_hash_splat_nil -| 16 = @ruby_token_heredoc_beginning -| 17 = @ruby_token_heredoc_content -| 18 = @ruby_token_heredoc_end -| 19 = @ruby_token_identifier -| 20 = @ruby_token_instance_variable -| 21 = @ruby_token_integer -| 22 = @ruby_token_line -| 23 = @ruby_token_nil -| 24 = @ruby_token_operator -| 25 = @ruby_token_self -| 26 = @ruby_token_simple_symbol -| 27 = @ruby_token_string_content -| 28 = @ruby_token_super -| 29 = @ruby_token_true -| 30 = @ruby_token_uninterpreted -; - - -@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield - -ruby_ast_node_location( - unique int node: @ruby_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -ruby_ast_node_parent( - unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node ref, - int parent_index: int ref -); - -/*- Erb dbscheme -*/ -erb_comment_directive_child( - unique int erb_comment_directive: @erb_comment_directive ref, - unique int child: @erb_token_comment ref -); - -erb_comment_directive_def( - unique int id: @erb_comment_directive -); - -erb_directive_child( - unique int erb_directive: @erb_directive ref, - unique int child: @erb_token_code ref -); - -erb_directive_def( - unique int id: @erb_directive -); - -erb_graphql_directive_child( - unique int erb_graphql_directive: @erb_graphql_directive ref, - unique int child: @erb_token_code ref -); - -erb_graphql_directive_def( - unique int id: @erb_graphql_directive -); - -erb_output_directive_child( - unique int erb_output_directive: @erb_output_directive ref, - unique int child: @erb_token_code ref -); - -erb_output_directive_def( - unique int id: @erb_output_directive -); - -@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content - -#keyset[erb_template, index] -erb_template_child( - int erb_template: @erb_template ref, - int index: int ref, - unique int child: @erb_template_child_type ref -); - -erb_template_def( - unique int id: @erb_template -); - -erb_tokeninfo( - unique int id: @erb_token, - int kind: int ref, - string value: string ref -); - -case @erb_token.kind of - 0 = @erb_reserved_word -| 1 = @erb_token_code -| 2 = @erb_token_comment -| 3 = @erb_token_content -; - - -@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token - -erb_ast_node_location( - unique int node: @erb_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -erb_ast_node_parent( - unique int node: @erb_ast_node ref, - int parent: @erb_ast_node ref, - int parent_index: int ref -); - diff --git a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme b/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme deleted file mode 100644 index 40a6b0a5e811..000000000000 --- a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/ruby.dbscheme +++ /dev/null @@ -1,1526 +0,0 @@ -// CodeQL database schema for Ruby -// Automatically generated from the tree-sitter grammar; do not edit - -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Ruby dbscheme -*/ -@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary - -@ruby_underscore_call_operator = @ruby_reserved_word - -@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield - -@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable - -@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable - -@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable - -@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant - -@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic - -@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern - -@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric - -@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr - -@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield - -@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer - -@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier - -@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable - -ruby_alias_def( - unique int id: @ruby_alias, - int alias: @ruby_underscore_method_name ref, - int name: @ruby_underscore_method_name ref -); - -#keyset[ruby_alternative_pattern, index] -ruby_alternative_pattern_alternatives( - int ruby_alternative_pattern: @ruby_alternative_pattern ref, - int index: int ref, - unique int alternatives: @ruby_underscore_pattern_expr_basic ref -); - -ruby_alternative_pattern_def( - unique int id: @ruby_alternative_pattern -); - -@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_argument_list, index] -ruby_argument_list_child( - int ruby_argument_list: @ruby_argument_list ref, - int index: int ref, - unique int child: @ruby_argument_list_child_type ref -); - -ruby_argument_list_def( - unique int id: @ruby_argument_list -); - -@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_array, index] -ruby_array_child( - int ruby_array: @ruby_array ref, - int index: int ref, - unique int child: @ruby_array_child_type ref -); - -ruby_array_def( - unique int id: @ruby_array -); - -ruby_array_pattern_class( - unique int ruby_array_pattern: @ruby_array_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_array_pattern, index] -ruby_array_pattern_child( - int ruby_array_pattern: @ruby_array_pattern ref, - int index: int ref, - unique int child: @ruby_array_pattern_child_type ref -); - -ruby_array_pattern_def( - unique int id: @ruby_array_pattern -); - -ruby_as_pattern_def( - unique int id: @ruby_as_pattern, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_pattern_expr ref -); - -@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression - -ruby_assignment_def( - unique int id: @ruby_assignment, - int left: @ruby_assignment_left_type ref, - int right: @ruby_assignment_right_type ref -); - -@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_string, index] -ruby_bare_string_child( - int ruby_bare_string: @ruby_bare_string ref, - int index: int ref, - unique int child: @ruby_bare_string_child_type ref -); - -ruby_bare_string_def( - unique int id: @ruby_bare_string -); - -@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_symbol, index] -ruby_bare_symbol_child( - int ruby_bare_symbol: @ruby_bare_symbol ref, - int index: int ref, - unique int child: @ruby_bare_symbol_child_type ref -); - -ruby_bare_symbol_def( - unique int id: @ruby_bare_symbol -); - -@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin, index] -ruby_begin_child( - int ruby_begin: @ruby_begin ref, - int index: int ref, - unique int child: @ruby_begin_child_type ref -); - -ruby_begin_def( - unique int id: @ruby_begin -); - -@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin_block, index] -ruby_begin_block_child( - int ruby_begin_block: @ruby_begin_block ref, - int index: int ref, - unique int child: @ruby_begin_block_child_type ref -); - -ruby_begin_block_def( - unique int id: @ruby_begin_block -); - -@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_binary.operator of - 0 = @ruby_binary_bangequal -| 1 = @ruby_binary_bangtilde -| 2 = @ruby_binary_percent -| 3 = @ruby_binary_ampersand -| 4 = @ruby_binary_ampersandampersand -| 5 = @ruby_binary_star -| 6 = @ruby_binary_starstar -| 7 = @ruby_binary_plus -| 8 = @ruby_binary_minus -| 9 = @ruby_binary_slash -| 10 = @ruby_binary_langle -| 11 = @ruby_binary_langlelangle -| 12 = @ruby_binary_langleequal -| 13 = @ruby_binary_langleequalrangle -| 14 = @ruby_binary_equalequal -| 15 = @ruby_binary_equalequalequal -| 16 = @ruby_binary_equaltilde -| 17 = @ruby_binary_rangle -| 18 = @ruby_binary_rangleequal -| 19 = @ruby_binary_ranglerangle -| 20 = @ruby_binary_caret -| 21 = @ruby_binary_and -| 22 = @ruby_binary_or -| 23 = @ruby_binary_pipe -| 24 = @ruby_binary_pipepipe -; - - -ruby_binary_def( - unique int id: @ruby_binary, - int left: @ruby_binary_left_type ref, - int operator: int ref, - int right: @ruby_underscore_expression ref -); - -ruby_block_body( - unique int ruby_block: @ruby_block ref, - unique int body: @ruby_block_body ref -); - -ruby_block_parameters( - unique int ruby_block: @ruby_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_block_def( - unique int id: @ruby_block -); - -ruby_block_argument_child( - unique int ruby_block_argument: @ruby_block_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_block_argument_def( - unique int id: @ruby_block_argument -); - -@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_block_body, index] -ruby_block_body_child( - int ruby_block_body: @ruby_block_body ref, - int index: int ref, - unique int child: @ruby_block_body_child_type ref -); - -ruby_block_body_def( - unique int id: @ruby_block_body -); - -ruby_block_parameter_name( - unique int ruby_block_parameter: @ruby_block_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_block_parameter_def( - unique int id: @ruby_block_parameter -); - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_locals( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int locals: @ruby_token_identifier ref -); - -@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_child( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int child: @ruby_block_parameters_child_type ref -); - -ruby_block_parameters_def( - unique int id: @ruby_block_parameters -); - -@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_body_statement, index] -ruby_body_statement_child( - int ruby_body_statement: @ruby_body_statement ref, - int index: int ref, - unique int child: @ruby_body_statement_child_type ref -); - -ruby_body_statement_def( - unique int id: @ruby_body_statement -); - -ruby_break_child( - unique int ruby_break: @ruby_break ref, - unique int child: @ruby_argument_list ref -); - -ruby_break_def( - unique int id: @ruby_break -); - -ruby_call_arguments( - unique int ruby_call: @ruby_call ref, - unique int arguments: @ruby_argument_list ref -); - -@ruby_call_block_type = @ruby_block | @ruby_do_block - -ruby_call_block( - unique int ruby_call: @ruby_call ref, - unique int block: @ruby_call_block_type ref -); - -@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable - -ruby_call_method( - unique int ruby_call: @ruby_call ref, - unique int method: @ruby_call_method_type ref -); - -ruby_call_operator( - unique int ruby_call: @ruby_call ref, - unique int operator: @ruby_underscore_call_operator ref -); - -ruby_call_receiver( - unique int ruby_call: @ruby_call ref, - unique int receiver: @ruby_underscore_primary ref -); - -ruby_call_def( - unique int id: @ruby_call -); - -ruby_case_value( - unique int ruby_case__: @ruby_case__ ref, - unique int value: @ruby_underscore_statement ref -); - -@ruby_case_child_type = @ruby_else | @ruby_when - -#keyset[ruby_case__, index] -ruby_case_child( - int ruby_case__: @ruby_case__ ref, - int index: int ref, - unique int child: @ruby_case_child_type ref -); - -ruby_case_def( - unique int id: @ruby_case__ -); - -#keyset[ruby_case_match, index] -ruby_case_match_clauses( - int ruby_case_match: @ruby_case_match ref, - int index: int ref, - unique int clauses: @ruby_in_clause ref -); - -ruby_case_match_else( - unique int ruby_case_match: @ruby_case_match ref, - unique int else: @ruby_else ref -); - -ruby_case_match_def( - unique int id: @ruby_case_match, - int value: @ruby_underscore_statement ref -); - -#keyset[ruby_chained_string, index] -ruby_chained_string_child( - int ruby_chained_string: @ruby_chained_string ref, - int index: int ref, - unique int child: @ruby_string__ ref -); - -ruby_chained_string_def( - unique int id: @ruby_chained_string -); - -ruby_class_body( - unique int ruby_class: @ruby_class ref, - unique int body: @ruby_body_statement ref -); - -@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_class_superclass( - unique int ruby_class: @ruby_class ref, - unique int superclass: @ruby_superclass ref -); - -ruby_class_def( - unique int id: @ruby_class, - int name: @ruby_class_name_type ref -); - -@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer - -ruby_complex_def( - unique int id: @ruby_complex, - int child: @ruby_complex_child_type ref -); - -ruby_conditional_def( - unique int id: @ruby_conditional, - int alternative: @ruby_underscore_arg ref, - int condition: @ruby_underscore_arg ref, - int consequence: @ruby_underscore_arg ref -); - -@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_delimited_symbol, index] -ruby_delimited_symbol_child( - int ruby_delimited_symbol: @ruby_delimited_symbol ref, - int index: int ref, - unique int child: @ruby_delimited_symbol_child_type ref -); - -ruby_delimited_symbol_def( - unique int id: @ruby_delimited_symbol -); - -@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_destructured_left_assignment, index] -ruby_destructured_left_assignment_child( - int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, - int index: int ref, - unique int child: @ruby_destructured_left_assignment_child_type ref -); - -ruby_destructured_left_assignment_def( - unique int id: @ruby_destructured_left_assignment -); - -@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_destructured_parameter, index] -ruby_destructured_parameter_child( - int ruby_destructured_parameter: @ruby_destructured_parameter ref, - int index: int ref, - unique int child: @ruby_destructured_parameter_child_type ref -); - -ruby_destructured_parameter_def( - unique int id: @ruby_destructured_parameter -); - -@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_do, index] -ruby_do_child( - int ruby_do: @ruby_do ref, - int index: int ref, - unique int child: @ruby_do_child_type ref -); - -ruby_do_def( - unique int id: @ruby_do -); - -ruby_do_block_body( - unique int ruby_do_block: @ruby_do_block ref, - unique int body: @ruby_body_statement ref -); - -ruby_do_block_parameters( - unique int ruby_do_block: @ruby_do_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_do_block_def( - unique int id: @ruby_do_block -); - -@ruby_element_reference_block_type = @ruby_block | @ruby_do_block - -ruby_element_reference_block( - unique int ruby_element_reference: @ruby_element_reference ref, - unique int block: @ruby_element_reference_block_type ref -); - -@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_element_reference, index] -ruby_element_reference_child( - int ruby_element_reference: @ruby_element_reference ref, - int index: int ref, - unique int child: @ruby_element_reference_child_type ref -); - -ruby_element_reference_def( - unique int id: @ruby_element_reference, - int object: @ruby_underscore_primary ref -); - -@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_else, index] -ruby_else_child( - int ruby_else: @ruby_else ref, - int index: int ref, - unique int child: @ruby_else_child_type ref -); - -ruby_else_def( - unique int id: @ruby_else -); - -@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif - -ruby_elsif_alternative( - unique int ruby_elsif: @ruby_elsif ref, - unique int alternative: @ruby_elsif_alternative_type ref -); - -ruby_elsif_consequence( - unique int ruby_elsif: @ruby_elsif ref, - unique int consequence: @ruby_then ref -); - -ruby_elsif_def( - unique int id: @ruby_elsif, - int condition: @ruby_underscore_statement ref -); - -@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_end_block, index] -ruby_end_block_child( - int ruby_end_block: @ruby_end_block ref, - int index: int ref, - unique int child: @ruby_end_block_child_type ref -); - -ruby_end_block_def( - unique int id: @ruby_end_block -); - -@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_ensure, index] -ruby_ensure_child( - int ruby_ensure: @ruby_ensure ref, - int index: int ref, - unique int child: @ruby_ensure_child_type ref -); - -ruby_ensure_def( - unique int id: @ruby_ensure -); - -ruby_exception_variable_def( - unique int id: @ruby_exception_variable, - int child: @ruby_underscore_lhs ref -); - -@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_exceptions, index] -ruby_exceptions_child( - int ruby_exceptions: @ruby_exceptions ref, - int index: int ref, - unique int child: @ruby_exceptions_child_type ref -); - -ruby_exceptions_def( - unique int id: @ruby_exceptions -); - -ruby_expression_reference_pattern_def( - unique int id: @ruby_expression_reference_pattern, - int value: @ruby_underscore_expression ref -); - -ruby_find_pattern_class( - unique int ruby_find_pattern: @ruby_find_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_find_pattern, index] -ruby_find_pattern_child( - int ruby_find_pattern: @ruby_find_pattern ref, - int index: int ref, - unique int child: @ruby_find_pattern_child_type ref -); - -ruby_find_pattern_def( - unique int id: @ruby_find_pattern -); - -@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -ruby_for_def( - unique int id: @ruby_for, - int body: @ruby_do ref, - int pattern: @ruby_for_pattern_type ref, - int value: @ruby_in ref -); - -@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair - -#keyset[ruby_hash, index] -ruby_hash_child( - int ruby_hash: @ruby_hash ref, - int index: int ref, - unique int child: @ruby_hash_child_type ref -); - -ruby_hash_def( - unique int id: @ruby_hash -); - -ruby_hash_pattern_class( - unique int ruby_hash_pattern: @ruby_hash_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil - -#keyset[ruby_hash_pattern, index] -ruby_hash_pattern_child( - int ruby_hash_pattern: @ruby_hash_pattern ref, - int index: int ref, - unique int child: @ruby_hash_pattern_child_type ref -); - -ruby_hash_pattern_def( - unique int id: @ruby_hash_pattern -); - -ruby_hash_splat_argument_child( - unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_hash_splat_argument_def( - unique int id: @ruby_hash_splat_argument -); - -ruby_hash_splat_parameter_name( - unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_hash_splat_parameter_def( - unique int id: @ruby_hash_splat_parameter -); - -@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end - -#keyset[ruby_heredoc_body, index] -ruby_heredoc_body_child( - int ruby_heredoc_body: @ruby_heredoc_body ref, - int index: int ref, - unique int child: @ruby_heredoc_body_child_type ref -); - -ruby_heredoc_body_def( - unique int id: @ruby_heredoc_body -); - -@ruby_if_alternative_type = @ruby_else | @ruby_elsif - -ruby_if_alternative( - unique int ruby_if: @ruby_if ref, - unique int alternative: @ruby_if_alternative_type ref -); - -ruby_if_consequence( - unique int ruby_if: @ruby_if ref, - unique int consequence: @ruby_then ref -); - -ruby_if_def( - unique int id: @ruby_if, - int condition: @ruby_underscore_statement ref -); - -ruby_if_guard_def( - unique int id: @ruby_if_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_if_modifier_def( - unique int id: @ruby_if_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_in_def( - unique int id: @ruby_in, - int child: @ruby_underscore_arg ref -); - -ruby_in_clause_body( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int body: @ruby_then ref -); - -@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard - -ruby_in_clause_guard( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int guard: @ruby_in_clause_guard_type ref -); - -ruby_in_clause_def( - unique int id: @ruby_in_clause, - int pattern: @ruby_underscore_pattern_top_expr_body ref -); - -@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement - -#keyset[ruby_interpolation, index] -ruby_interpolation_child( - int ruby_interpolation: @ruby_interpolation ref, - int index: int ref, - unique int child: @ruby_interpolation_child_type ref -); - -ruby_interpolation_def( - unique int id: @ruby_interpolation -); - -ruby_keyword_parameter_value( - unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_keyword_parameter_def( - unique int id: @ruby_keyword_parameter, - int name: @ruby_token_identifier ref -); - -@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol - -ruby_keyword_pattern_value( - unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, - unique int value: @ruby_underscore_pattern_expr ref -); - -ruby_keyword_pattern_def( - unique int id: @ruby_keyword_pattern, - int key__: @ruby_keyword_pattern_key_type ref -); - -@ruby_lambda_body_type = @ruby_block | @ruby_do_block - -ruby_lambda_parameters( - unique int ruby_lambda: @ruby_lambda ref, - unique int parameters: @ruby_lambda_parameters ref -); - -ruby_lambda_def( - unique int id: @ruby_lambda, - int body: @ruby_lambda_body_type ref -); - -@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_lambda_parameters, index] -ruby_lambda_parameters_child( - int ruby_lambda_parameters: @ruby_lambda_parameters ref, - int index: int ref, - unique int child: @ruby_lambda_parameters_child_type ref -); - -ruby_lambda_parameters_def( - unique int id: @ruby_lambda_parameters -); - -@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_left_assignment_list, index] -ruby_left_assignment_list_child( - int ruby_left_assignment_list: @ruby_left_assignment_list ref, - int index: int ref, - unique int child: @ruby_left_assignment_list_child_type ref -); - -ruby_left_assignment_list_def( - unique int id: @ruby_left_assignment_list -); - -ruby_match_pattern_def( - unique int id: @ruby_match_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_method_body( - unique int ruby_method: @ruby_method ref, - unique int body: @ruby_method_body_type ref -); - -ruby_method_parameters( - unique int ruby_method: @ruby_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_method_def( - unique int id: @ruby_method, - int name: @ruby_underscore_method_name ref -); - -@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_method_parameters, index] -ruby_method_parameters_child( - int ruby_method_parameters: @ruby_method_parameters ref, - int index: int ref, - unique int child: @ruby_method_parameters_child_type ref -); - -ruby_method_parameters_def( - unique int id: @ruby_method_parameters -); - -ruby_module_body( - unique int ruby_module: @ruby_module ref, - unique int body: @ruby_body_statement ref -); - -@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_module_def( - unique int id: @ruby_module, - int name: @ruby_module_name_type ref -); - -ruby_next_child( - unique int ruby_next: @ruby_next ref, - unique int child: @ruby_argument_list ref -); - -ruby_next_def( - unique int id: @ruby_next -); - -case @ruby_operator_assignment.operator of - 0 = @ruby_operator_assignment_percentequal -| 1 = @ruby_operator_assignment_ampersandampersandequal -| 2 = @ruby_operator_assignment_ampersandequal -| 3 = @ruby_operator_assignment_starstarequal -| 4 = @ruby_operator_assignment_starequal -| 5 = @ruby_operator_assignment_plusequal -| 6 = @ruby_operator_assignment_minusequal -| 7 = @ruby_operator_assignment_slashequal -| 8 = @ruby_operator_assignment_langlelangleequal -| 9 = @ruby_operator_assignment_ranglerangleequal -| 10 = @ruby_operator_assignment_caretequal -| 11 = @ruby_operator_assignment_pipeequal -| 12 = @ruby_operator_assignment_pipepipeequal -; - - -@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression - -ruby_operator_assignment_def( - unique int id: @ruby_operator_assignment, - int left: @ruby_underscore_lhs ref, - int operator: int ref, - int right: @ruby_operator_assignment_right_type ref -); - -ruby_optional_parameter_def( - unique int id: @ruby_optional_parameter, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_arg ref -); - -@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg - -ruby_pair_value( - unique int ruby_pair: @ruby_pair ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_pair_def( - unique int id: @ruby_pair, - int key__: @ruby_pair_key_type ref -); - -ruby_parenthesized_pattern_def( - unique int id: @ruby_parenthesized_pattern, - int child: @ruby_underscore_pattern_expr ref -); - -@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_parenthesized_statements, index] -ruby_parenthesized_statements_child( - int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, - int index: int ref, - unique int child: @ruby_parenthesized_statements_child_type ref -); - -ruby_parenthesized_statements_def( - unique int id: @ruby_parenthesized_statements -); - -@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg - -ruby_pattern_def( - unique int id: @ruby_pattern, - int child: @ruby_pattern_child_type ref -); - -@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement - -#keyset[ruby_program, index] -ruby_program_child( - int ruby_program: @ruby_program ref, - int index: int ref, - unique int child: @ruby_program_child_type ref -); - -ruby_program_def( - unique int id: @ruby_program -); - -@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_begin( - unique int ruby_range: @ruby_range ref, - unique int begin: @ruby_range_begin_type ref -); - -@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_end( - unique int ruby_range: @ruby_range ref, - unique int end: @ruby_range_end_type ref -); - -case @ruby_range.operator of - 0 = @ruby_range_dotdot -| 1 = @ruby_range_dotdotdot -; - - -ruby_range_def( - unique int id: @ruby_range, - int operator: int ref -); - -@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer - -ruby_rational_def( - unique int id: @ruby_rational, - int child: @ruby_rational_child_type ref -); - -ruby_redo_child( - unique int ruby_redo: @ruby_redo ref, - unique int child: @ruby_argument_list ref -); - -ruby_redo_def( - unique int id: @ruby_redo -); - -@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_regex, index] -ruby_regex_child( - int ruby_regex: @ruby_regex ref, - int index: int ref, - unique int child: @ruby_regex_child_type ref -); - -ruby_regex_def( - unique int id: @ruby_regex -); - -ruby_rescue_body( - unique int ruby_rescue: @ruby_rescue ref, - unique int body: @ruby_then ref -); - -ruby_rescue_exceptions( - unique int ruby_rescue: @ruby_rescue ref, - unique int exceptions: @ruby_exceptions ref -); - -ruby_rescue_variable( - unique int ruby_rescue: @ruby_rescue ref, - unique int variable: @ruby_exception_variable ref -); - -ruby_rescue_def( - unique int id: @ruby_rescue -); - -@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement - -ruby_rescue_modifier_def( - unique int id: @ruby_rescue_modifier, - int body: @ruby_rescue_modifier_body_type ref, - int handler: @ruby_underscore_expression ref -); - -ruby_rest_assignment_child( - unique int ruby_rest_assignment: @ruby_rest_assignment ref, - unique int child: @ruby_underscore_lhs ref -); - -ruby_rest_assignment_def( - unique int id: @ruby_rest_assignment -); - -ruby_retry_child( - unique int ruby_retry: @ruby_retry ref, - unique int child: @ruby_argument_list ref -); - -ruby_retry_def( - unique int id: @ruby_retry -); - -ruby_return_child( - unique int ruby_return: @ruby_return ref, - unique int child: @ruby_argument_list ref -); - -ruby_return_def( - unique int id: @ruby_return -); - -@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_right_assignment_list, index] -ruby_right_assignment_list_child( - int ruby_right_assignment_list: @ruby_right_assignment_list ref, - int index: int ref, - unique int child: @ruby_right_assignment_list_child_type ref -); - -ruby_right_assignment_list_def( - unique int id: @ruby_right_assignment_list -); - -@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary - -ruby_scope_resolution_scope( - unique int ruby_scope_resolution: @ruby_scope_resolution ref, - unique int scope: @ruby_scope_resolution_scope_type ref -); - -ruby_scope_resolution_def( - unique int id: @ruby_scope_resolution, - int name: @ruby_token_constant ref -); - -ruby_setter_def( - unique int id: @ruby_setter, - int name: @ruby_token_identifier ref -); - -ruby_singleton_class_body( - unique int ruby_singleton_class: @ruby_singleton_class ref, - unique int body: @ruby_body_statement ref -); - -ruby_singleton_class_def( - unique int id: @ruby_singleton_class, - int value: @ruby_underscore_arg ref -); - -@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_singleton_method_body( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int body: @ruby_singleton_method_body_type ref -); - -@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable - -ruby_singleton_method_parameters( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_singleton_method_def( - unique int id: @ruby_singleton_method, - int name: @ruby_underscore_method_name ref, - int object: @ruby_singleton_method_object_type ref -); - -ruby_splat_argument_child( - unique int ruby_splat_argument: @ruby_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_splat_argument_def( - unique int id: @ruby_splat_argument -); - -ruby_splat_parameter_name( - unique int ruby_splat_parameter: @ruby_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_splat_parameter_def( - unique int id: @ruby_splat_parameter -); - -@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_string__, index] -ruby_string_child( - int ruby_string__: @ruby_string__ ref, - int index: int ref, - unique int child: @ruby_string_child_type ref -); - -ruby_string_def( - unique int id: @ruby_string__ -); - -#keyset[ruby_string_array, index] -ruby_string_array_child( - int ruby_string_array: @ruby_string_array ref, - int index: int ref, - unique int child: @ruby_bare_string ref -); - -ruby_string_array_def( - unique int id: @ruby_string_array -); - -@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_subshell, index] -ruby_subshell_child( - int ruby_subshell: @ruby_subshell ref, - int index: int ref, - unique int child: @ruby_subshell_child_type ref -); - -ruby_subshell_def( - unique int id: @ruby_subshell -); - -ruby_superclass_def( - unique int id: @ruby_superclass, - int child: @ruby_underscore_expression ref -); - -#keyset[ruby_symbol_array, index] -ruby_symbol_array_child( - int ruby_symbol_array: @ruby_symbol_array ref, - int index: int ref, - unique int child: @ruby_bare_symbol ref -); - -ruby_symbol_array_def( - unique int id: @ruby_symbol_array -); - -ruby_test_pattern_def( - unique int id: @ruby_test_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_then, index] -ruby_then_child( - int ruby_then: @ruby_then ref, - int index: int ref, - unique int child: @ruby_then_child_type ref -); - -ruby_then_def( - unique int id: @ruby_then -); - -@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_unary.operator of - 0 = @ruby_unary_bang -| 1 = @ruby_unary_plus -| 2 = @ruby_unary_minus -| 3 = @ruby_unary_definedquestion -| 4 = @ruby_unary_not -| 5 = @ruby_unary_tilde -; - - -ruby_unary_def( - unique int id: @ruby_unary, - int operand: @ruby_unary_operand_type ref, - int operator: int ref -); - -#keyset[ruby_undef, index] -ruby_undef_child( - int ruby_undef: @ruby_undef ref, - int index: int ref, - unique int child: @ruby_underscore_method_name ref -); - -ruby_undef_def( - unique int id: @ruby_undef -); - -@ruby_unless_alternative_type = @ruby_else | @ruby_elsif - -ruby_unless_alternative( - unique int ruby_unless: @ruby_unless ref, - unique int alternative: @ruby_unless_alternative_type ref -); - -ruby_unless_consequence( - unique int ruby_unless: @ruby_unless ref, - unique int consequence: @ruby_then ref -); - -ruby_unless_def( - unique int id: @ruby_unless, - int condition: @ruby_underscore_statement ref -); - -ruby_unless_guard_def( - unique int id: @ruby_unless_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_unless_modifier_def( - unique int id: @ruby_unless_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_until_def( - unique int id: @ruby_until, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_until_modifier_def( - unique int id: @ruby_until_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable - -ruby_variable_reference_pattern_def( - unique int id: @ruby_variable_reference_pattern, - int name: @ruby_variable_reference_pattern_name_type ref -); - -ruby_when_body( - unique int ruby_when: @ruby_when ref, - unique int body: @ruby_then ref -); - -#keyset[ruby_when, index] -ruby_when_pattern( - int ruby_when: @ruby_when ref, - int index: int ref, - unique int pattern: @ruby_pattern ref -); - -ruby_when_def( - unique int id: @ruby_when -); - -ruby_while_def( - unique int id: @ruby_while, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_while_modifier_def( - unique int id: @ruby_while_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_yield_child( - unique int ruby_yield: @ruby_yield ref, - unique int child: @ruby_argument_list ref -); - -ruby_yield_def( - unique int id: @ruby_yield -); - -ruby_tokeninfo( - unique int id: @ruby_token, - int kind: int ref, - string value: string ref -); - -case @ruby_token.kind of - 0 = @ruby_reserved_word -| 1 = @ruby_token_character -| 2 = @ruby_token_class_variable -| 3 = @ruby_token_comment -| 4 = @ruby_token_constant -| 5 = @ruby_token_empty_statement -| 6 = @ruby_token_encoding -| 7 = @ruby_token_escape_sequence -| 8 = @ruby_token_false -| 9 = @ruby_token_file -| 10 = @ruby_token_float -| 11 = @ruby_token_forward_argument -| 12 = @ruby_token_forward_parameter -| 13 = @ruby_token_global_variable -| 14 = @ruby_token_hash_key_symbol -| 15 = @ruby_token_hash_splat_nil -| 16 = @ruby_token_heredoc_beginning -| 17 = @ruby_token_heredoc_content -| 18 = @ruby_token_heredoc_end -| 19 = @ruby_token_identifier -| 20 = @ruby_token_instance_variable -| 21 = @ruby_token_integer -| 22 = @ruby_token_line -| 23 = @ruby_token_nil -| 24 = @ruby_token_operator -| 25 = @ruby_token_self -| 26 = @ruby_token_simple_symbol -| 27 = @ruby_token_string_content -| 28 = @ruby_token_super -| 29 = @ruby_token_true -| 30 = @ruby_token_uninterpreted -; - - -@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield - -ruby_ast_node_location( - unique int node: @ruby_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -ruby_ast_node_parent( - unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node ref, - int parent_index: int ref -); - -/*- Erb dbscheme -*/ -erb_comment_directive_child( - unique int erb_comment_directive: @erb_comment_directive ref, - unique int child: @erb_token_comment ref -); - -erb_comment_directive_def( - unique int id: @erb_comment_directive -); - -erb_directive_child( - unique int erb_directive: @erb_directive ref, - unique int child: @erb_token_code ref -); - -erb_directive_def( - unique int id: @erb_directive -); - -erb_graphql_directive_child( - unique int erb_graphql_directive: @erb_graphql_directive ref, - unique int child: @erb_token_code ref -); - -erb_graphql_directive_def( - unique int id: @erb_graphql_directive -); - -erb_output_directive_child( - unique int erb_output_directive: @erb_output_directive ref, - unique int child: @erb_token_code ref -); - -erb_output_directive_def( - unique int id: @erb_output_directive -); - -@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content - -#keyset[erb_template, index] -erb_template_child( - int erb_template: @erb_template ref, - int index: int ref, - unique int child: @erb_template_child_type ref -); - -erb_template_def( - unique int id: @erb_template -); - -erb_tokeninfo( - unique int id: @erb_token, - int kind: int ref, - string value: string ref -); - -case @erb_token.kind of - 0 = @erb_reserved_word -| 1 = @erb_token_code -| 2 = @erb_token_comment -| 3 = @erb_token_content -; - - -@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token - -erb_ast_node_location( - unique int node: @erb_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -erb_ast_node_parent( - unique int node: @erb_ast_node ref, - int parent: @erb_ast_node ref, - int parent_index: int ref -); - diff --git a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties b/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties deleted file mode 100644 index 1d437ec8ac6b..000000000000 --- a/ruby/downgrades/dc51d416301df12df5b70fbc4338de6cc1f82bfd/upgrade.properties +++ /dev/null @@ -1,3 +0,0 @@ -description: Add databaseMetadata relation -compatibility: full -databaseMetadata.rel: delete diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index 16cdcca246c2..8d3a94113fa2 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -17,6 +17,5 @@ rayon = "1.10.0" regex = "1.11.1" encoding = "0.2" lazy_static = "1.5.0" -serde_json = "1.0.140" codeql-extractor = { path = "../../shared/tree-sitter-extractor" } diff --git a/ruby/extractor/src/extractor.rs b/ruby/extractor/src/extractor.rs index 6807d09e9bec..d42713122263 100644 --- a/ruby/extractor/src/extractor.rs +++ b/ruby/extractor/src/extractor.rs @@ -1,9 +1,7 @@ use clap::Args; -use codeql_extractor::file_paths::PathTransformer; use lazy_static::lazy_static; use rayon::prelude::*; use std::borrow::Cow; -use std::collections::HashSet; use std::fs; use std::io::BufRead; use std::path::{Path, PathBuf}; @@ -80,9 +78,6 @@ pub fn run(options: Options) -> std::io::Result<()> { let file_list = fs::File::open(file_paths::path_from_string(&options.file_list))?; - let overlay_changed_files: Option> = get_overlay_changed_files(); - let path_transformer = file_paths::load_path_transformer()?; - let language: Language = tree_sitter_ruby::LANGUAGE.into(); let erb: Language = tree_sitter_embedded_template::LANGUAGE.into(); // Look up tree-sitter kind ids now, to avoid string comparisons when scanning ERB files. @@ -99,14 +94,7 @@ pub fn run(options: Options) -> std::io::Result<()> { .try_for_each(|line| { let mut diagnostics_writer = diagnostics.logger(); let path = PathBuf::from(line).canonicalize()?; - match &overlay_changed_files { - Some(changed_files) if !changed_files.contains(&path) => { - // We are extracting an overlay and this file is not in the list of changes files, so we should skip it. - return Result::Ok(()); - } - _ => {}, - } - let src_archive_file = file_paths::path_for(&src_archive_dir, &path, "", path_transformer.as_ref()); + let src_archive_file = file_paths::path_for(&src_archive_dir, &path, ""); let mut source = std::fs::read(&path)?; let mut needs_conversion = false; let code_ranges; @@ -119,7 +107,6 @@ pub fn run(options: Options) -> std::io::Result<()> { &erb_schema, &mut diagnostics_writer, &mut trap_writer, - path_transformer.as_ref(), &path, &source, &[], @@ -164,7 +151,7 @@ pub fn run(options: Options) -> std::io::Result<()> { "character-decoding-error", "Character decoding error", ) - .file(&file_paths::normalize_and_transform_path(&path, path_transformer.as_ref())) + .file(&file_paths::normalize_path(&path)) .message( "Could not decode the file contents as {}: {}. The contents of the file must match the character encoding specified in the {} {}.", &[ @@ -184,7 +171,7 @@ pub fn run(options: Options) -> std::io::Result<()> { diagnostics_writer.write( diagnostics_writer .new_entry("unknown-character-encoding", "Could not process some files due to an unknown character encoding") - .file(&file_paths::normalize_and_transform_path(&path, path_transformer.as_ref())) + .file(&file_paths::normalize_path(&path)) .message( "Unknown character encoding {} in {} {}.", &[ @@ -207,7 +194,6 @@ pub fn run(options: Options) -> std::io::Result<()> { &schema, &mut diagnostics_writer, &mut trap_writer, - path_transformer.as_ref(), &path, &source, &code_ranges, @@ -218,26 +204,14 @@ pub fn run(options: Options) -> std::io::Result<()> { } else { std::fs::copy(&path, &src_archive_file)?; } - write_trap(&trap_dir, path, &trap_writer, trap_compression, path_transformer.as_ref()) + write_trap(&trap_dir, path, &trap_writer, trap_compression) }) .expect("failed to extract files"); let path = PathBuf::from("extras"); let mut trap_writer = trap::Writer::new(); extractor::populate_empty_location(&mut trap_writer); - let res = write_trap( - &trap_dir, - path, - &trap_writer, - trap_compression, - path_transformer.as_ref(), - ); - if let Ok(output_path) = std::env::var("CODEQL_EXTRACTOR_RUBY_OVERLAY_BASE_METADATA_OUT") { - // We're extracting an overlay base. For now, we don't have any metadata we need to store - // that would get read when extracting the overlay, but the CLI expects us to write - // *something*. An empty file will do. - std::fs::write(output_path, b"")?; - } + let res = write_trap(&trap_dir, path, &trap_writer, trap_compression); tracing::info!("Extraction complete"); res } @@ -263,14 +237,8 @@ fn write_trap( path: PathBuf, trap_writer: &trap::Writer, trap_compression: trap::Compression, - path_transformer: Option<&PathTransformer>, ) -> std::io::Result<()> { - let trap_file = file_paths::path_for( - trap_dir, - &path, - trap_compression.extension(), - path_transformer, - ); + let trap_file = file_paths::path_for(trap_dir, &path, trap_compression.extension()); std::fs::create_dir_all(trap_file.parent().unwrap())?; trap_writer.write_to_file(&trap_file, trap_compression) } @@ -334,39 +302,6 @@ fn skip_space(content: &[u8], index: usize) -> usize { } index } - -/** -* If the relevant environment variable has been set by the CLI, indicating that we are extracting -* an overlay, this function reads the JSON file at the path given by its value, and returns a set -* of canonicalized paths of source files that have changed and should therefore be extracted. -* -* If the environment variable is not set (i.e. we're not extracting an overlay), or if the file -* cannot be read, this function returns `None`. In that case, all files should be extracted. -*/ -fn get_overlay_changed_files() -> Option> { - let path = std::env::var("CODEQL_EXTRACTOR_RUBY_OVERLAY_CHANGES").ok()?; - let file_content = fs::read_to_string(path).ok()?; - let json_value: serde_json::Value = serde_json::from_str(&file_content).ok()?; - - // The JSON file is expected to have the following structure: - // { - // "changes": [ - // "relative/path/to/changed/file1.rb", - // "relative/path/to/changed/file2.rb", - // ... - // ] - // } - Some( - json_value - .get("changes")? - .as_array()? - .iter() - .filter_map(|change| change.as_str()) - .filter_map(|s| PathBuf::from(s).canonicalize().ok()) - .collect(), - ) -} - fn scan_coding_comment(content: &[u8]) -> std::option::Option> { let mut index = 0; // skip UTF-8 BOM marker if there is one diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll index 8af4673d9168..a82256a0162a 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll @@ -579,27 +579,12 @@ abstract class StringlikeLiteralImpl extends Expr, TStringlikeLiteral { ) } - pragma[nomagic] - private StringComponentImpl getComponentImplRestricted(int n) { - result = this.getComponentImpl(n) and - strictsum(int length, int i | length = this.getComponentImpl(i).getValue().length() | length) < - 10000 - } - // 0 components results in the empty string - // if all interpolations have a known string value, we will get a result, unless the - // combined length exceeds 10,000 characters + // if all interpolations have a known string value, we will get a result language[monotonicAggregates] final string getStringValue() { - not exists(this.getComponentImpl(_)) and - result = "" - or result = - strictconcat(StringComponentImpl c, int i | - c = this.getComponentImplRestricted(i) - | - c.getValue() order by i - ) + concat(StringComponentImpl c, int i | c = this.getComponentImpl(i) | c.getValue() order by i) } } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll index 3532a5d2a21f..e339b07d35b9 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll @@ -5,10 +5,6 @@ import codeql.Locations as L -/** Holds if the database is an overlay. */ -overlay[local] -private predicate isOverlay() { databaseMetadata("isOverlay", "true") } - module Ruby { /** The base class for all AST nodes */ class AstNode extends @ruby_ast_node { @@ -52,30 +48,6 @@ module Ruby { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@ruby_ast_node node) { - exists(@location_default loc | ruby_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @ruby_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@ruby_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - class UnderscoreArg extends @ruby_underscore_arg, AstNode { } class UnderscoreCallOperator extends @ruby_underscore_call_operator, AstNode { } @@ -1998,30 +1970,6 @@ module Erb { final override string getAPrimaryQlClass() { result = "ReservedWord" } } - /** Gets the file containing the given `node`. */ - overlay[local] - private @file getNodeFile(@erb_ast_node node) { - exists(@location_default loc | erb_ast_node_location(node, loc) | - locations_default(loc, result, _, _, _, _) - ) - } - - /** Holds if `file` was extracted as part of the overlay database. */ - overlay[local] - private predicate discardFile(@file file) { isOverlay() and file = getNodeFile(_) } - - /** Holds if `node` is in the `file` and is part of the overlay base database. */ - overlay[local] - private predicate discardableAstNode(@file file, @erb_ast_node node) { - not isOverlay() and file = getNodeFile(node) - } - - /** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */ - overlay[discard_entity] - private predicate discardAstNode(@erb_ast_node node) { - exists(@file file | discardableAstNode(file, node) and discardFile(file)) - } - /** A class representing `code` tokens. */ class Code extends @erb_token_code, Token { /** Gets the name of the primary QL class for this element. */ diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index ef9f163cbd91..40bb9be32529 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.10-dev +version: 4.1.9 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme index dc51d416301d..40a6b0a5e811 100644 --- a/ruby/ql/lib/ruby.dbscheme +++ b/ruby/ql/lib/ruby.dbscheme @@ -108,12 +108,6 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - /*- Ruby dbscheme -*/ @ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats index 74a9e97f4bd4..fd8850293b49 100644 --- a/ruby/ql/lib/ruby.dbscheme.stats +++ b/ruby/ql/lib/ruby.dbscheme.stats @@ -21521,42 +21521,6 @@ - - databaseMetadata - 1 - - - metadataKey - 1 - - - value - 1 - - - - - metadataKey - value - - - 12 - - - - - - value - metadataKey - - - 12 - - - - - - yaml_aliases 0 diff --git a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/old.dbscheme b/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/old.dbscheme deleted file mode 100644 index 40a6b0a5e811..000000000000 --- a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/old.dbscheme +++ /dev/null @@ -1,1526 +0,0 @@ -// CodeQL database schema for Ruby -// Automatically generated from the tree-sitter grammar; do not edit - -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Ruby dbscheme -*/ -@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary - -@ruby_underscore_call_operator = @ruby_reserved_word - -@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield - -@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable - -@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable - -@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable - -@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant - -@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic - -@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern - -@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric - -@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr - -@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield - -@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer - -@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier - -@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable - -ruby_alias_def( - unique int id: @ruby_alias, - int alias: @ruby_underscore_method_name ref, - int name: @ruby_underscore_method_name ref -); - -#keyset[ruby_alternative_pattern, index] -ruby_alternative_pattern_alternatives( - int ruby_alternative_pattern: @ruby_alternative_pattern ref, - int index: int ref, - unique int alternatives: @ruby_underscore_pattern_expr_basic ref -); - -ruby_alternative_pattern_def( - unique int id: @ruby_alternative_pattern -); - -@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_argument_list, index] -ruby_argument_list_child( - int ruby_argument_list: @ruby_argument_list ref, - int index: int ref, - unique int child: @ruby_argument_list_child_type ref -); - -ruby_argument_list_def( - unique int id: @ruby_argument_list -); - -@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_array, index] -ruby_array_child( - int ruby_array: @ruby_array ref, - int index: int ref, - unique int child: @ruby_array_child_type ref -); - -ruby_array_def( - unique int id: @ruby_array -); - -ruby_array_pattern_class( - unique int ruby_array_pattern: @ruby_array_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_array_pattern, index] -ruby_array_pattern_child( - int ruby_array_pattern: @ruby_array_pattern ref, - int index: int ref, - unique int child: @ruby_array_pattern_child_type ref -); - -ruby_array_pattern_def( - unique int id: @ruby_array_pattern -); - -ruby_as_pattern_def( - unique int id: @ruby_as_pattern, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_pattern_expr ref -); - -@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression - -ruby_assignment_def( - unique int id: @ruby_assignment, - int left: @ruby_assignment_left_type ref, - int right: @ruby_assignment_right_type ref -); - -@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_string, index] -ruby_bare_string_child( - int ruby_bare_string: @ruby_bare_string ref, - int index: int ref, - unique int child: @ruby_bare_string_child_type ref -); - -ruby_bare_string_def( - unique int id: @ruby_bare_string -); - -@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_symbol, index] -ruby_bare_symbol_child( - int ruby_bare_symbol: @ruby_bare_symbol ref, - int index: int ref, - unique int child: @ruby_bare_symbol_child_type ref -); - -ruby_bare_symbol_def( - unique int id: @ruby_bare_symbol -); - -@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin, index] -ruby_begin_child( - int ruby_begin: @ruby_begin ref, - int index: int ref, - unique int child: @ruby_begin_child_type ref -); - -ruby_begin_def( - unique int id: @ruby_begin -); - -@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin_block, index] -ruby_begin_block_child( - int ruby_begin_block: @ruby_begin_block ref, - int index: int ref, - unique int child: @ruby_begin_block_child_type ref -); - -ruby_begin_block_def( - unique int id: @ruby_begin_block -); - -@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_binary.operator of - 0 = @ruby_binary_bangequal -| 1 = @ruby_binary_bangtilde -| 2 = @ruby_binary_percent -| 3 = @ruby_binary_ampersand -| 4 = @ruby_binary_ampersandampersand -| 5 = @ruby_binary_star -| 6 = @ruby_binary_starstar -| 7 = @ruby_binary_plus -| 8 = @ruby_binary_minus -| 9 = @ruby_binary_slash -| 10 = @ruby_binary_langle -| 11 = @ruby_binary_langlelangle -| 12 = @ruby_binary_langleequal -| 13 = @ruby_binary_langleequalrangle -| 14 = @ruby_binary_equalequal -| 15 = @ruby_binary_equalequalequal -| 16 = @ruby_binary_equaltilde -| 17 = @ruby_binary_rangle -| 18 = @ruby_binary_rangleequal -| 19 = @ruby_binary_ranglerangle -| 20 = @ruby_binary_caret -| 21 = @ruby_binary_and -| 22 = @ruby_binary_or -| 23 = @ruby_binary_pipe -| 24 = @ruby_binary_pipepipe -; - - -ruby_binary_def( - unique int id: @ruby_binary, - int left: @ruby_binary_left_type ref, - int operator: int ref, - int right: @ruby_underscore_expression ref -); - -ruby_block_body( - unique int ruby_block: @ruby_block ref, - unique int body: @ruby_block_body ref -); - -ruby_block_parameters( - unique int ruby_block: @ruby_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_block_def( - unique int id: @ruby_block -); - -ruby_block_argument_child( - unique int ruby_block_argument: @ruby_block_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_block_argument_def( - unique int id: @ruby_block_argument -); - -@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_block_body, index] -ruby_block_body_child( - int ruby_block_body: @ruby_block_body ref, - int index: int ref, - unique int child: @ruby_block_body_child_type ref -); - -ruby_block_body_def( - unique int id: @ruby_block_body -); - -ruby_block_parameter_name( - unique int ruby_block_parameter: @ruby_block_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_block_parameter_def( - unique int id: @ruby_block_parameter -); - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_locals( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int locals: @ruby_token_identifier ref -); - -@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_child( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int child: @ruby_block_parameters_child_type ref -); - -ruby_block_parameters_def( - unique int id: @ruby_block_parameters -); - -@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_body_statement, index] -ruby_body_statement_child( - int ruby_body_statement: @ruby_body_statement ref, - int index: int ref, - unique int child: @ruby_body_statement_child_type ref -); - -ruby_body_statement_def( - unique int id: @ruby_body_statement -); - -ruby_break_child( - unique int ruby_break: @ruby_break ref, - unique int child: @ruby_argument_list ref -); - -ruby_break_def( - unique int id: @ruby_break -); - -ruby_call_arguments( - unique int ruby_call: @ruby_call ref, - unique int arguments: @ruby_argument_list ref -); - -@ruby_call_block_type = @ruby_block | @ruby_do_block - -ruby_call_block( - unique int ruby_call: @ruby_call ref, - unique int block: @ruby_call_block_type ref -); - -@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable - -ruby_call_method( - unique int ruby_call: @ruby_call ref, - unique int method: @ruby_call_method_type ref -); - -ruby_call_operator( - unique int ruby_call: @ruby_call ref, - unique int operator: @ruby_underscore_call_operator ref -); - -ruby_call_receiver( - unique int ruby_call: @ruby_call ref, - unique int receiver: @ruby_underscore_primary ref -); - -ruby_call_def( - unique int id: @ruby_call -); - -ruby_case_value( - unique int ruby_case__: @ruby_case__ ref, - unique int value: @ruby_underscore_statement ref -); - -@ruby_case_child_type = @ruby_else | @ruby_when - -#keyset[ruby_case__, index] -ruby_case_child( - int ruby_case__: @ruby_case__ ref, - int index: int ref, - unique int child: @ruby_case_child_type ref -); - -ruby_case_def( - unique int id: @ruby_case__ -); - -#keyset[ruby_case_match, index] -ruby_case_match_clauses( - int ruby_case_match: @ruby_case_match ref, - int index: int ref, - unique int clauses: @ruby_in_clause ref -); - -ruby_case_match_else( - unique int ruby_case_match: @ruby_case_match ref, - unique int else: @ruby_else ref -); - -ruby_case_match_def( - unique int id: @ruby_case_match, - int value: @ruby_underscore_statement ref -); - -#keyset[ruby_chained_string, index] -ruby_chained_string_child( - int ruby_chained_string: @ruby_chained_string ref, - int index: int ref, - unique int child: @ruby_string__ ref -); - -ruby_chained_string_def( - unique int id: @ruby_chained_string -); - -ruby_class_body( - unique int ruby_class: @ruby_class ref, - unique int body: @ruby_body_statement ref -); - -@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_class_superclass( - unique int ruby_class: @ruby_class ref, - unique int superclass: @ruby_superclass ref -); - -ruby_class_def( - unique int id: @ruby_class, - int name: @ruby_class_name_type ref -); - -@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer - -ruby_complex_def( - unique int id: @ruby_complex, - int child: @ruby_complex_child_type ref -); - -ruby_conditional_def( - unique int id: @ruby_conditional, - int alternative: @ruby_underscore_arg ref, - int condition: @ruby_underscore_arg ref, - int consequence: @ruby_underscore_arg ref -); - -@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_delimited_symbol, index] -ruby_delimited_symbol_child( - int ruby_delimited_symbol: @ruby_delimited_symbol ref, - int index: int ref, - unique int child: @ruby_delimited_symbol_child_type ref -); - -ruby_delimited_symbol_def( - unique int id: @ruby_delimited_symbol -); - -@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_destructured_left_assignment, index] -ruby_destructured_left_assignment_child( - int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, - int index: int ref, - unique int child: @ruby_destructured_left_assignment_child_type ref -); - -ruby_destructured_left_assignment_def( - unique int id: @ruby_destructured_left_assignment -); - -@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_destructured_parameter, index] -ruby_destructured_parameter_child( - int ruby_destructured_parameter: @ruby_destructured_parameter ref, - int index: int ref, - unique int child: @ruby_destructured_parameter_child_type ref -); - -ruby_destructured_parameter_def( - unique int id: @ruby_destructured_parameter -); - -@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_do, index] -ruby_do_child( - int ruby_do: @ruby_do ref, - int index: int ref, - unique int child: @ruby_do_child_type ref -); - -ruby_do_def( - unique int id: @ruby_do -); - -ruby_do_block_body( - unique int ruby_do_block: @ruby_do_block ref, - unique int body: @ruby_body_statement ref -); - -ruby_do_block_parameters( - unique int ruby_do_block: @ruby_do_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_do_block_def( - unique int id: @ruby_do_block -); - -@ruby_element_reference_block_type = @ruby_block | @ruby_do_block - -ruby_element_reference_block( - unique int ruby_element_reference: @ruby_element_reference ref, - unique int block: @ruby_element_reference_block_type ref -); - -@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_element_reference, index] -ruby_element_reference_child( - int ruby_element_reference: @ruby_element_reference ref, - int index: int ref, - unique int child: @ruby_element_reference_child_type ref -); - -ruby_element_reference_def( - unique int id: @ruby_element_reference, - int object: @ruby_underscore_primary ref -); - -@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_else, index] -ruby_else_child( - int ruby_else: @ruby_else ref, - int index: int ref, - unique int child: @ruby_else_child_type ref -); - -ruby_else_def( - unique int id: @ruby_else -); - -@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif - -ruby_elsif_alternative( - unique int ruby_elsif: @ruby_elsif ref, - unique int alternative: @ruby_elsif_alternative_type ref -); - -ruby_elsif_consequence( - unique int ruby_elsif: @ruby_elsif ref, - unique int consequence: @ruby_then ref -); - -ruby_elsif_def( - unique int id: @ruby_elsif, - int condition: @ruby_underscore_statement ref -); - -@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_end_block, index] -ruby_end_block_child( - int ruby_end_block: @ruby_end_block ref, - int index: int ref, - unique int child: @ruby_end_block_child_type ref -); - -ruby_end_block_def( - unique int id: @ruby_end_block -); - -@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_ensure, index] -ruby_ensure_child( - int ruby_ensure: @ruby_ensure ref, - int index: int ref, - unique int child: @ruby_ensure_child_type ref -); - -ruby_ensure_def( - unique int id: @ruby_ensure -); - -ruby_exception_variable_def( - unique int id: @ruby_exception_variable, - int child: @ruby_underscore_lhs ref -); - -@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_exceptions, index] -ruby_exceptions_child( - int ruby_exceptions: @ruby_exceptions ref, - int index: int ref, - unique int child: @ruby_exceptions_child_type ref -); - -ruby_exceptions_def( - unique int id: @ruby_exceptions -); - -ruby_expression_reference_pattern_def( - unique int id: @ruby_expression_reference_pattern, - int value: @ruby_underscore_expression ref -); - -ruby_find_pattern_class( - unique int ruby_find_pattern: @ruby_find_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_find_pattern, index] -ruby_find_pattern_child( - int ruby_find_pattern: @ruby_find_pattern ref, - int index: int ref, - unique int child: @ruby_find_pattern_child_type ref -); - -ruby_find_pattern_def( - unique int id: @ruby_find_pattern -); - -@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -ruby_for_def( - unique int id: @ruby_for, - int body: @ruby_do ref, - int pattern: @ruby_for_pattern_type ref, - int value: @ruby_in ref -); - -@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair - -#keyset[ruby_hash, index] -ruby_hash_child( - int ruby_hash: @ruby_hash ref, - int index: int ref, - unique int child: @ruby_hash_child_type ref -); - -ruby_hash_def( - unique int id: @ruby_hash -); - -ruby_hash_pattern_class( - unique int ruby_hash_pattern: @ruby_hash_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil - -#keyset[ruby_hash_pattern, index] -ruby_hash_pattern_child( - int ruby_hash_pattern: @ruby_hash_pattern ref, - int index: int ref, - unique int child: @ruby_hash_pattern_child_type ref -); - -ruby_hash_pattern_def( - unique int id: @ruby_hash_pattern -); - -ruby_hash_splat_argument_child( - unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_hash_splat_argument_def( - unique int id: @ruby_hash_splat_argument -); - -ruby_hash_splat_parameter_name( - unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_hash_splat_parameter_def( - unique int id: @ruby_hash_splat_parameter -); - -@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end - -#keyset[ruby_heredoc_body, index] -ruby_heredoc_body_child( - int ruby_heredoc_body: @ruby_heredoc_body ref, - int index: int ref, - unique int child: @ruby_heredoc_body_child_type ref -); - -ruby_heredoc_body_def( - unique int id: @ruby_heredoc_body -); - -@ruby_if_alternative_type = @ruby_else | @ruby_elsif - -ruby_if_alternative( - unique int ruby_if: @ruby_if ref, - unique int alternative: @ruby_if_alternative_type ref -); - -ruby_if_consequence( - unique int ruby_if: @ruby_if ref, - unique int consequence: @ruby_then ref -); - -ruby_if_def( - unique int id: @ruby_if, - int condition: @ruby_underscore_statement ref -); - -ruby_if_guard_def( - unique int id: @ruby_if_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_if_modifier_def( - unique int id: @ruby_if_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_in_def( - unique int id: @ruby_in, - int child: @ruby_underscore_arg ref -); - -ruby_in_clause_body( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int body: @ruby_then ref -); - -@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard - -ruby_in_clause_guard( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int guard: @ruby_in_clause_guard_type ref -); - -ruby_in_clause_def( - unique int id: @ruby_in_clause, - int pattern: @ruby_underscore_pattern_top_expr_body ref -); - -@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement - -#keyset[ruby_interpolation, index] -ruby_interpolation_child( - int ruby_interpolation: @ruby_interpolation ref, - int index: int ref, - unique int child: @ruby_interpolation_child_type ref -); - -ruby_interpolation_def( - unique int id: @ruby_interpolation -); - -ruby_keyword_parameter_value( - unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_keyword_parameter_def( - unique int id: @ruby_keyword_parameter, - int name: @ruby_token_identifier ref -); - -@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol - -ruby_keyword_pattern_value( - unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, - unique int value: @ruby_underscore_pattern_expr ref -); - -ruby_keyword_pattern_def( - unique int id: @ruby_keyword_pattern, - int key__: @ruby_keyword_pattern_key_type ref -); - -@ruby_lambda_body_type = @ruby_block | @ruby_do_block - -ruby_lambda_parameters( - unique int ruby_lambda: @ruby_lambda ref, - unique int parameters: @ruby_lambda_parameters ref -); - -ruby_lambda_def( - unique int id: @ruby_lambda, - int body: @ruby_lambda_body_type ref -); - -@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_lambda_parameters, index] -ruby_lambda_parameters_child( - int ruby_lambda_parameters: @ruby_lambda_parameters ref, - int index: int ref, - unique int child: @ruby_lambda_parameters_child_type ref -); - -ruby_lambda_parameters_def( - unique int id: @ruby_lambda_parameters -); - -@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_left_assignment_list, index] -ruby_left_assignment_list_child( - int ruby_left_assignment_list: @ruby_left_assignment_list ref, - int index: int ref, - unique int child: @ruby_left_assignment_list_child_type ref -); - -ruby_left_assignment_list_def( - unique int id: @ruby_left_assignment_list -); - -ruby_match_pattern_def( - unique int id: @ruby_match_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_method_body( - unique int ruby_method: @ruby_method ref, - unique int body: @ruby_method_body_type ref -); - -ruby_method_parameters( - unique int ruby_method: @ruby_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_method_def( - unique int id: @ruby_method, - int name: @ruby_underscore_method_name ref -); - -@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_method_parameters, index] -ruby_method_parameters_child( - int ruby_method_parameters: @ruby_method_parameters ref, - int index: int ref, - unique int child: @ruby_method_parameters_child_type ref -); - -ruby_method_parameters_def( - unique int id: @ruby_method_parameters -); - -ruby_module_body( - unique int ruby_module: @ruby_module ref, - unique int body: @ruby_body_statement ref -); - -@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_module_def( - unique int id: @ruby_module, - int name: @ruby_module_name_type ref -); - -ruby_next_child( - unique int ruby_next: @ruby_next ref, - unique int child: @ruby_argument_list ref -); - -ruby_next_def( - unique int id: @ruby_next -); - -case @ruby_operator_assignment.operator of - 0 = @ruby_operator_assignment_percentequal -| 1 = @ruby_operator_assignment_ampersandampersandequal -| 2 = @ruby_operator_assignment_ampersandequal -| 3 = @ruby_operator_assignment_starstarequal -| 4 = @ruby_operator_assignment_starequal -| 5 = @ruby_operator_assignment_plusequal -| 6 = @ruby_operator_assignment_minusequal -| 7 = @ruby_operator_assignment_slashequal -| 8 = @ruby_operator_assignment_langlelangleequal -| 9 = @ruby_operator_assignment_ranglerangleequal -| 10 = @ruby_operator_assignment_caretequal -| 11 = @ruby_operator_assignment_pipeequal -| 12 = @ruby_operator_assignment_pipepipeequal -; - - -@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression - -ruby_operator_assignment_def( - unique int id: @ruby_operator_assignment, - int left: @ruby_underscore_lhs ref, - int operator: int ref, - int right: @ruby_operator_assignment_right_type ref -); - -ruby_optional_parameter_def( - unique int id: @ruby_optional_parameter, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_arg ref -); - -@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg - -ruby_pair_value( - unique int ruby_pair: @ruby_pair ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_pair_def( - unique int id: @ruby_pair, - int key__: @ruby_pair_key_type ref -); - -ruby_parenthesized_pattern_def( - unique int id: @ruby_parenthesized_pattern, - int child: @ruby_underscore_pattern_expr ref -); - -@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_parenthesized_statements, index] -ruby_parenthesized_statements_child( - int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, - int index: int ref, - unique int child: @ruby_parenthesized_statements_child_type ref -); - -ruby_parenthesized_statements_def( - unique int id: @ruby_parenthesized_statements -); - -@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg - -ruby_pattern_def( - unique int id: @ruby_pattern, - int child: @ruby_pattern_child_type ref -); - -@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement - -#keyset[ruby_program, index] -ruby_program_child( - int ruby_program: @ruby_program ref, - int index: int ref, - unique int child: @ruby_program_child_type ref -); - -ruby_program_def( - unique int id: @ruby_program -); - -@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_begin( - unique int ruby_range: @ruby_range ref, - unique int begin: @ruby_range_begin_type ref -); - -@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_end( - unique int ruby_range: @ruby_range ref, - unique int end: @ruby_range_end_type ref -); - -case @ruby_range.operator of - 0 = @ruby_range_dotdot -| 1 = @ruby_range_dotdotdot -; - - -ruby_range_def( - unique int id: @ruby_range, - int operator: int ref -); - -@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer - -ruby_rational_def( - unique int id: @ruby_rational, - int child: @ruby_rational_child_type ref -); - -ruby_redo_child( - unique int ruby_redo: @ruby_redo ref, - unique int child: @ruby_argument_list ref -); - -ruby_redo_def( - unique int id: @ruby_redo -); - -@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_regex, index] -ruby_regex_child( - int ruby_regex: @ruby_regex ref, - int index: int ref, - unique int child: @ruby_regex_child_type ref -); - -ruby_regex_def( - unique int id: @ruby_regex -); - -ruby_rescue_body( - unique int ruby_rescue: @ruby_rescue ref, - unique int body: @ruby_then ref -); - -ruby_rescue_exceptions( - unique int ruby_rescue: @ruby_rescue ref, - unique int exceptions: @ruby_exceptions ref -); - -ruby_rescue_variable( - unique int ruby_rescue: @ruby_rescue ref, - unique int variable: @ruby_exception_variable ref -); - -ruby_rescue_def( - unique int id: @ruby_rescue -); - -@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement - -ruby_rescue_modifier_def( - unique int id: @ruby_rescue_modifier, - int body: @ruby_rescue_modifier_body_type ref, - int handler: @ruby_underscore_expression ref -); - -ruby_rest_assignment_child( - unique int ruby_rest_assignment: @ruby_rest_assignment ref, - unique int child: @ruby_underscore_lhs ref -); - -ruby_rest_assignment_def( - unique int id: @ruby_rest_assignment -); - -ruby_retry_child( - unique int ruby_retry: @ruby_retry ref, - unique int child: @ruby_argument_list ref -); - -ruby_retry_def( - unique int id: @ruby_retry -); - -ruby_return_child( - unique int ruby_return: @ruby_return ref, - unique int child: @ruby_argument_list ref -); - -ruby_return_def( - unique int id: @ruby_return -); - -@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_right_assignment_list, index] -ruby_right_assignment_list_child( - int ruby_right_assignment_list: @ruby_right_assignment_list ref, - int index: int ref, - unique int child: @ruby_right_assignment_list_child_type ref -); - -ruby_right_assignment_list_def( - unique int id: @ruby_right_assignment_list -); - -@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary - -ruby_scope_resolution_scope( - unique int ruby_scope_resolution: @ruby_scope_resolution ref, - unique int scope: @ruby_scope_resolution_scope_type ref -); - -ruby_scope_resolution_def( - unique int id: @ruby_scope_resolution, - int name: @ruby_token_constant ref -); - -ruby_setter_def( - unique int id: @ruby_setter, - int name: @ruby_token_identifier ref -); - -ruby_singleton_class_body( - unique int ruby_singleton_class: @ruby_singleton_class ref, - unique int body: @ruby_body_statement ref -); - -ruby_singleton_class_def( - unique int id: @ruby_singleton_class, - int value: @ruby_underscore_arg ref -); - -@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_singleton_method_body( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int body: @ruby_singleton_method_body_type ref -); - -@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable - -ruby_singleton_method_parameters( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_singleton_method_def( - unique int id: @ruby_singleton_method, - int name: @ruby_underscore_method_name ref, - int object: @ruby_singleton_method_object_type ref -); - -ruby_splat_argument_child( - unique int ruby_splat_argument: @ruby_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_splat_argument_def( - unique int id: @ruby_splat_argument -); - -ruby_splat_parameter_name( - unique int ruby_splat_parameter: @ruby_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_splat_parameter_def( - unique int id: @ruby_splat_parameter -); - -@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_string__, index] -ruby_string_child( - int ruby_string__: @ruby_string__ ref, - int index: int ref, - unique int child: @ruby_string_child_type ref -); - -ruby_string_def( - unique int id: @ruby_string__ -); - -#keyset[ruby_string_array, index] -ruby_string_array_child( - int ruby_string_array: @ruby_string_array ref, - int index: int ref, - unique int child: @ruby_bare_string ref -); - -ruby_string_array_def( - unique int id: @ruby_string_array -); - -@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_subshell, index] -ruby_subshell_child( - int ruby_subshell: @ruby_subshell ref, - int index: int ref, - unique int child: @ruby_subshell_child_type ref -); - -ruby_subshell_def( - unique int id: @ruby_subshell -); - -ruby_superclass_def( - unique int id: @ruby_superclass, - int child: @ruby_underscore_expression ref -); - -#keyset[ruby_symbol_array, index] -ruby_symbol_array_child( - int ruby_symbol_array: @ruby_symbol_array ref, - int index: int ref, - unique int child: @ruby_bare_symbol ref -); - -ruby_symbol_array_def( - unique int id: @ruby_symbol_array -); - -ruby_test_pattern_def( - unique int id: @ruby_test_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_then, index] -ruby_then_child( - int ruby_then: @ruby_then ref, - int index: int ref, - unique int child: @ruby_then_child_type ref -); - -ruby_then_def( - unique int id: @ruby_then -); - -@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_unary.operator of - 0 = @ruby_unary_bang -| 1 = @ruby_unary_plus -| 2 = @ruby_unary_minus -| 3 = @ruby_unary_definedquestion -| 4 = @ruby_unary_not -| 5 = @ruby_unary_tilde -; - - -ruby_unary_def( - unique int id: @ruby_unary, - int operand: @ruby_unary_operand_type ref, - int operator: int ref -); - -#keyset[ruby_undef, index] -ruby_undef_child( - int ruby_undef: @ruby_undef ref, - int index: int ref, - unique int child: @ruby_underscore_method_name ref -); - -ruby_undef_def( - unique int id: @ruby_undef -); - -@ruby_unless_alternative_type = @ruby_else | @ruby_elsif - -ruby_unless_alternative( - unique int ruby_unless: @ruby_unless ref, - unique int alternative: @ruby_unless_alternative_type ref -); - -ruby_unless_consequence( - unique int ruby_unless: @ruby_unless ref, - unique int consequence: @ruby_then ref -); - -ruby_unless_def( - unique int id: @ruby_unless, - int condition: @ruby_underscore_statement ref -); - -ruby_unless_guard_def( - unique int id: @ruby_unless_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_unless_modifier_def( - unique int id: @ruby_unless_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_until_def( - unique int id: @ruby_until, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_until_modifier_def( - unique int id: @ruby_until_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable - -ruby_variable_reference_pattern_def( - unique int id: @ruby_variable_reference_pattern, - int name: @ruby_variable_reference_pattern_name_type ref -); - -ruby_when_body( - unique int ruby_when: @ruby_when ref, - unique int body: @ruby_then ref -); - -#keyset[ruby_when, index] -ruby_when_pattern( - int ruby_when: @ruby_when ref, - int index: int ref, - unique int pattern: @ruby_pattern ref -); - -ruby_when_def( - unique int id: @ruby_when -); - -ruby_while_def( - unique int id: @ruby_while, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_while_modifier_def( - unique int id: @ruby_while_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_yield_child( - unique int ruby_yield: @ruby_yield ref, - unique int child: @ruby_argument_list ref -); - -ruby_yield_def( - unique int id: @ruby_yield -); - -ruby_tokeninfo( - unique int id: @ruby_token, - int kind: int ref, - string value: string ref -); - -case @ruby_token.kind of - 0 = @ruby_reserved_word -| 1 = @ruby_token_character -| 2 = @ruby_token_class_variable -| 3 = @ruby_token_comment -| 4 = @ruby_token_constant -| 5 = @ruby_token_empty_statement -| 6 = @ruby_token_encoding -| 7 = @ruby_token_escape_sequence -| 8 = @ruby_token_false -| 9 = @ruby_token_file -| 10 = @ruby_token_float -| 11 = @ruby_token_forward_argument -| 12 = @ruby_token_forward_parameter -| 13 = @ruby_token_global_variable -| 14 = @ruby_token_hash_key_symbol -| 15 = @ruby_token_hash_splat_nil -| 16 = @ruby_token_heredoc_beginning -| 17 = @ruby_token_heredoc_content -| 18 = @ruby_token_heredoc_end -| 19 = @ruby_token_identifier -| 20 = @ruby_token_instance_variable -| 21 = @ruby_token_integer -| 22 = @ruby_token_line -| 23 = @ruby_token_nil -| 24 = @ruby_token_operator -| 25 = @ruby_token_self -| 26 = @ruby_token_simple_symbol -| 27 = @ruby_token_string_content -| 28 = @ruby_token_super -| 29 = @ruby_token_true -| 30 = @ruby_token_uninterpreted -; - - -@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield - -ruby_ast_node_location( - unique int node: @ruby_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -ruby_ast_node_parent( - unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node ref, - int parent_index: int ref -); - -/*- Erb dbscheme -*/ -erb_comment_directive_child( - unique int erb_comment_directive: @erb_comment_directive ref, - unique int child: @erb_token_comment ref -); - -erb_comment_directive_def( - unique int id: @erb_comment_directive -); - -erb_directive_child( - unique int erb_directive: @erb_directive ref, - unique int child: @erb_token_code ref -); - -erb_directive_def( - unique int id: @erb_directive -); - -erb_graphql_directive_child( - unique int erb_graphql_directive: @erb_graphql_directive ref, - unique int child: @erb_token_code ref -); - -erb_graphql_directive_def( - unique int id: @erb_graphql_directive -); - -erb_output_directive_child( - unique int erb_output_directive: @erb_output_directive ref, - unique int child: @erb_token_code ref -); - -erb_output_directive_def( - unique int id: @erb_output_directive -); - -@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content - -#keyset[erb_template, index] -erb_template_child( - int erb_template: @erb_template ref, - int index: int ref, - unique int child: @erb_template_child_type ref -); - -erb_template_def( - unique int id: @erb_template -); - -erb_tokeninfo( - unique int id: @erb_token, - int kind: int ref, - string value: string ref -); - -case @erb_token.kind of - 0 = @erb_reserved_word -| 1 = @erb_token_code -| 2 = @erb_token_comment -| 3 = @erb_token_content -; - - -@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token - -erb_ast_node_location( - unique int node: @erb_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -erb_ast_node_parent( - unique int node: @erb_ast_node ref, - int parent: @erb_ast_node ref, - int parent_index: int ref -); - diff --git a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/ruby.dbscheme b/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/ruby.dbscheme deleted file mode 100644 index dc51d416301d..000000000000 --- a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/ruby.dbscheme +++ /dev/null @@ -1,1532 +0,0 @@ -// CodeQL database schema for Ruby -// Automatically generated from the tree-sitter grammar; do not edit - -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - -/*- Ruby dbscheme -*/ -@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary - -@ruby_underscore_call_operator = @ruby_reserved_word - -@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_match_pattern | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_test_pattern | @ruby_unary | @ruby_underscore_arg | @ruby_yield - -@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable - -@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable - -@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable - -@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant - -@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic - -@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern - -@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric - -@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr - -@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield - -@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer - -@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier - -@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable - -ruby_alias_def( - unique int id: @ruby_alias, - int alias: @ruby_underscore_method_name ref, - int name: @ruby_underscore_method_name ref -); - -#keyset[ruby_alternative_pattern, index] -ruby_alternative_pattern_alternatives( - int ruby_alternative_pattern: @ruby_alternative_pattern ref, - int index: int ref, - unique int alternatives: @ruby_underscore_pattern_expr_basic ref -); - -ruby_alternative_pattern_def( - unique int id: @ruby_alternative_pattern -); - -@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_argument_list, index] -ruby_argument_list_child( - int ruby_argument_list: @ruby_argument_list ref, - int index: int ref, - unique int child: @ruby_argument_list_child_type ref -); - -ruby_argument_list_def( - unique int id: @ruby_argument_list -); - -@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_array, index] -ruby_array_child( - int ruby_array: @ruby_array ref, - int index: int ref, - unique int child: @ruby_array_child_type ref -); - -ruby_array_def( - unique int id: @ruby_array -); - -ruby_array_pattern_class( - unique int ruby_array_pattern: @ruby_array_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_array_pattern, index] -ruby_array_pattern_child( - int ruby_array_pattern: @ruby_array_pattern ref, - int index: int ref, - unique int child: @ruby_array_pattern_child_type ref -); - -ruby_array_pattern_def( - unique int id: @ruby_array_pattern -); - -ruby_as_pattern_def( - unique int id: @ruby_as_pattern, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_pattern_expr ref -); - -@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression - -ruby_assignment_def( - unique int id: @ruby_assignment, - int left: @ruby_assignment_left_type ref, - int right: @ruby_assignment_right_type ref -); - -@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_string, index] -ruby_bare_string_child( - int ruby_bare_string: @ruby_bare_string ref, - int index: int ref, - unique int child: @ruby_bare_string_child_type ref -); - -ruby_bare_string_def( - unique int id: @ruby_bare_string -); - -@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_bare_symbol, index] -ruby_bare_symbol_child( - int ruby_bare_symbol: @ruby_bare_symbol ref, - int index: int ref, - unique int child: @ruby_bare_symbol_child_type ref -); - -ruby_bare_symbol_def( - unique int id: @ruby_bare_symbol -); - -@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin, index] -ruby_begin_child( - int ruby_begin: @ruby_begin ref, - int index: int ref, - unique int child: @ruby_begin_child_type ref -); - -ruby_begin_def( - unique int id: @ruby_begin -); - -@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_begin_block, index] -ruby_begin_block_child( - int ruby_begin_block: @ruby_begin_block ref, - int index: int ref, - unique int child: @ruby_begin_block_child_type ref -); - -ruby_begin_block_def( - unique int id: @ruby_begin_block -); - -@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_binary.operator of - 0 = @ruby_binary_bangequal -| 1 = @ruby_binary_bangtilde -| 2 = @ruby_binary_percent -| 3 = @ruby_binary_ampersand -| 4 = @ruby_binary_ampersandampersand -| 5 = @ruby_binary_star -| 6 = @ruby_binary_starstar -| 7 = @ruby_binary_plus -| 8 = @ruby_binary_minus -| 9 = @ruby_binary_slash -| 10 = @ruby_binary_langle -| 11 = @ruby_binary_langlelangle -| 12 = @ruby_binary_langleequal -| 13 = @ruby_binary_langleequalrangle -| 14 = @ruby_binary_equalequal -| 15 = @ruby_binary_equalequalequal -| 16 = @ruby_binary_equaltilde -| 17 = @ruby_binary_rangle -| 18 = @ruby_binary_rangleequal -| 19 = @ruby_binary_ranglerangle -| 20 = @ruby_binary_caret -| 21 = @ruby_binary_and -| 22 = @ruby_binary_or -| 23 = @ruby_binary_pipe -| 24 = @ruby_binary_pipepipe -; - - -ruby_binary_def( - unique int id: @ruby_binary, - int left: @ruby_binary_left_type ref, - int operator: int ref, - int right: @ruby_underscore_expression ref -); - -ruby_block_body( - unique int ruby_block: @ruby_block ref, - unique int body: @ruby_block_body ref -); - -ruby_block_parameters( - unique int ruby_block: @ruby_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_block_def( - unique int id: @ruby_block -); - -ruby_block_argument_child( - unique int ruby_block_argument: @ruby_block_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_block_argument_def( - unique int id: @ruby_block_argument -); - -@ruby_block_body_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_block_body, index] -ruby_block_body_child( - int ruby_block_body: @ruby_block_body ref, - int index: int ref, - unique int child: @ruby_block_body_child_type ref -); - -ruby_block_body_def( - unique int id: @ruby_block_body -); - -ruby_block_parameter_name( - unique int ruby_block_parameter: @ruby_block_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_block_parameter_def( - unique int id: @ruby_block_parameter -); - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_locals( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int locals: @ruby_token_identifier ref -); - -@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_block_parameters, index] -ruby_block_parameters_child( - int ruby_block_parameters: @ruby_block_parameters ref, - int index: int ref, - unique int child: @ruby_block_parameters_child_type ref -); - -ruby_block_parameters_def( - unique int id: @ruby_block_parameters -); - -@ruby_body_statement_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_body_statement, index] -ruby_body_statement_child( - int ruby_body_statement: @ruby_body_statement ref, - int index: int ref, - unique int child: @ruby_body_statement_child_type ref -); - -ruby_body_statement_def( - unique int id: @ruby_body_statement -); - -ruby_break_child( - unique int ruby_break: @ruby_break ref, - unique int child: @ruby_argument_list ref -); - -ruby_break_def( - unique int id: @ruby_break -); - -ruby_call_arguments( - unique int ruby_call: @ruby_call ref, - unique int arguments: @ruby_argument_list ref -); - -@ruby_call_block_type = @ruby_block | @ruby_do_block - -ruby_call_block( - unique int ruby_call: @ruby_call ref, - unique int block: @ruby_call_block_type ref -); - -@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable - -ruby_call_method( - unique int ruby_call: @ruby_call ref, - unique int method: @ruby_call_method_type ref -); - -ruby_call_operator( - unique int ruby_call: @ruby_call ref, - unique int operator: @ruby_underscore_call_operator ref -); - -ruby_call_receiver( - unique int ruby_call: @ruby_call ref, - unique int receiver: @ruby_underscore_primary ref -); - -ruby_call_def( - unique int id: @ruby_call -); - -ruby_case_value( - unique int ruby_case__: @ruby_case__ ref, - unique int value: @ruby_underscore_statement ref -); - -@ruby_case_child_type = @ruby_else | @ruby_when - -#keyset[ruby_case__, index] -ruby_case_child( - int ruby_case__: @ruby_case__ ref, - int index: int ref, - unique int child: @ruby_case_child_type ref -); - -ruby_case_def( - unique int id: @ruby_case__ -); - -#keyset[ruby_case_match, index] -ruby_case_match_clauses( - int ruby_case_match: @ruby_case_match ref, - int index: int ref, - unique int clauses: @ruby_in_clause ref -); - -ruby_case_match_else( - unique int ruby_case_match: @ruby_case_match ref, - unique int else: @ruby_else ref -); - -ruby_case_match_def( - unique int id: @ruby_case_match, - int value: @ruby_underscore_statement ref -); - -#keyset[ruby_chained_string, index] -ruby_chained_string_child( - int ruby_chained_string: @ruby_chained_string ref, - int index: int ref, - unique int child: @ruby_string__ ref -); - -ruby_chained_string_def( - unique int id: @ruby_chained_string -); - -ruby_class_body( - unique int ruby_class: @ruby_class ref, - unique int body: @ruby_body_statement ref -); - -@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_class_superclass( - unique int ruby_class: @ruby_class ref, - unique int superclass: @ruby_superclass ref -); - -ruby_class_def( - unique int id: @ruby_class, - int name: @ruby_class_name_type ref -); - -@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer - -ruby_complex_def( - unique int id: @ruby_complex, - int child: @ruby_complex_child_type ref -); - -ruby_conditional_def( - unique int id: @ruby_conditional, - int alternative: @ruby_underscore_arg ref, - int condition: @ruby_underscore_arg ref, - int consequence: @ruby_underscore_arg ref -); - -@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_delimited_symbol, index] -ruby_delimited_symbol_child( - int ruby_delimited_symbol: @ruby_delimited_symbol ref, - int index: int ref, - unique int child: @ruby_delimited_symbol_child_type ref -); - -ruby_delimited_symbol_def( - unique int id: @ruby_delimited_symbol -); - -@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_destructured_left_assignment, index] -ruby_destructured_left_assignment_child( - int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, - int index: int ref, - unique int child: @ruby_destructured_left_assignment_child_type ref -); - -ruby_destructured_left_assignment_def( - unique int id: @ruby_destructured_left_assignment -); - -@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_destructured_parameter, index] -ruby_destructured_parameter_child( - int ruby_destructured_parameter: @ruby_destructured_parameter ref, - int index: int ref, - unique int child: @ruby_destructured_parameter_child_type ref -); - -ruby_destructured_parameter_def( - unique int id: @ruby_destructured_parameter -); - -@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_do, index] -ruby_do_child( - int ruby_do: @ruby_do ref, - int index: int ref, - unique int child: @ruby_do_child_type ref -); - -ruby_do_def( - unique int id: @ruby_do -); - -ruby_do_block_body( - unique int ruby_do_block: @ruby_do_block ref, - unique int body: @ruby_body_statement ref -); - -ruby_do_block_parameters( - unique int ruby_do_block: @ruby_do_block ref, - unique int parameters: @ruby_block_parameters ref -); - -ruby_do_block_def( - unique int id: @ruby_do_block -); - -@ruby_element_reference_block_type = @ruby_block | @ruby_do_block - -ruby_element_reference_block( - unique int ruby_element_reference: @ruby_element_reference ref, - unique int block: @ruby_element_reference_block_type ref -); - -@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression - -#keyset[ruby_element_reference, index] -ruby_element_reference_child( - int ruby_element_reference: @ruby_element_reference ref, - int index: int ref, - unique int child: @ruby_element_reference_child_type ref -); - -ruby_element_reference_def( - unique int id: @ruby_element_reference, - int object: @ruby_underscore_primary ref -); - -@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_else, index] -ruby_else_child( - int ruby_else: @ruby_else ref, - int index: int ref, - unique int child: @ruby_else_child_type ref -); - -ruby_else_def( - unique int id: @ruby_else -); - -@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif - -ruby_elsif_alternative( - unique int ruby_elsif: @ruby_elsif ref, - unique int alternative: @ruby_elsif_alternative_type ref -); - -ruby_elsif_consequence( - unique int ruby_elsif: @ruby_elsif ref, - unique int consequence: @ruby_then ref -); - -ruby_elsif_def( - unique int id: @ruby_elsif, - int condition: @ruby_underscore_statement ref -); - -@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_end_block, index] -ruby_end_block_child( - int ruby_end_block: @ruby_end_block ref, - int index: int ref, - unique int child: @ruby_end_block_child_type ref -); - -ruby_end_block_def( - unique int id: @ruby_end_block -); - -@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_ensure, index] -ruby_ensure_child( - int ruby_ensure: @ruby_ensure ref, - int index: int ref, - unique int child: @ruby_ensure_child_type ref -); - -ruby_ensure_def( - unique int id: @ruby_ensure -); - -ruby_exception_variable_def( - unique int id: @ruby_exception_variable, - int child: @ruby_underscore_lhs ref -); - -@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_exceptions, index] -ruby_exceptions_child( - int ruby_exceptions: @ruby_exceptions ref, - int index: int ref, - unique int child: @ruby_exceptions_child_type ref -); - -ruby_exceptions_def( - unique int id: @ruby_exceptions -); - -ruby_expression_reference_pattern_def( - unique int id: @ruby_expression_reference_pattern, - int value: @ruby_underscore_expression ref -); - -ruby_find_pattern_class( - unique int ruby_find_pattern: @ruby_find_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr - -#keyset[ruby_find_pattern, index] -ruby_find_pattern_child( - int ruby_find_pattern: @ruby_find_pattern ref, - int index: int ref, - unique int child: @ruby_find_pattern_child_type ref -); - -ruby_find_pattern_def( - unique int id: @ruby_find_pattern -); - -@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs - -ruby_for_def( - unique int id: @ruby_for, - int body: @ruby_do ref, - int pattern: @ruby_for_pattern_type ref, - int value: @ruby_in ref -); - -@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair - -#keyset[ruby_hash, index] -ruby_hash_child( - int ruby_hash: @ruby_hash ref, - int index: int ref, - unique int child: @ruby_hash_child_type ref -); - -ruby_hash_def( - unique int id: @ruby_hash -); - -ruby_hash_pattern_class( - unique int ruby_hash_pattern: @ruby_hash_pattern ref, - unique int class: @ruby_underscore_pattern_constant ref -); - -@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil - -#keyset[ruby_hash_pattern, index] -ruby_hash_pattern_child( - int ruby_hash_pattern: @ruby_hash_pattern ref, - int index: int ref, - unique int child: @ruby_hash_pattern_child_type ref -); - -ruby_hash_pattern_def( - unique int id: @ruby_hash_pattern -); - -ruby_hash_splat_argument_child( - unique int ruby_hash_splat_argument: @ruby_hash_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_hash_splat_argument_def( - unique int id: @ruby_hash_splat_argument -); - -ruby_hash_splat_parameter_name( - unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_hash_splat_parameter_def( - unique int id: @ruby_hash_splat_parameter -); - -@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end - -#keyset[ruby_heredoc_body, index] -ruby_heredoc_body_child( - int ruby_heredoc_body: @ruby_heredoc_body ref, - int index: int ref, - unique int child: @ruby_heredoc_body_child_type ref -); - -ruby_heredoc_body_def( - unique int id: @ruby_heredoc_body -); - -@ruby_if_alternative_type = @ruby_else | @ruby_elsif - -ruby_if_alternative( - unique int ruby_if: @ruby_if ref, - unique int alternative: @ruby_if_alternative_type ref -); - -ruby_if_consequence( - unique int ruby_if: @ruby_if ref, - unique int consequence: @ruby_then ref -); - -ruby_if_def( - unique int id: @ruby_if, - int condition: @ruby_underscore_statement ref -); - -ruby_if_guard_def( - unique int id: @ruby_if_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_if_modifier_def( - unique int id: @ruby_if_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_in_def( - unique int id: @ruby_in, - int child: @ruby_underscore_arg ref -); - -ruby_in_clause_body( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int body: @ruby_then ref -); - -@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard - -ruby_in_clause_guard( - unique int ruby_in_clause: @ruby_in_clause ref, - unique int guard: @ruby_in_clause_guard_type ref -); - -ruby_in_clause_def( - unique int id: @ruby_in_clause, - int pattern: @ruby_underscore_pattern_top_expr_body ref -); - -@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_nonlocal_variable | @ruby_underscore_statement - -#keyset[ruby_interpolation, index] -ruby_interpolation_child( - int ruby_interpolation: @ruby_interpolation ref, - int index: int ref, - unique int child: @ruby_interpolation_child_type ref -); - -ruby_interpolation_def( - unique int id: @ruby_interpolation -); - -ruby_keyword_parameter_value( - unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_keyword_parameter_def( - unique int id: @ruby_keyword_parameter, - int name: @ruby_token_identifier ref -); - -@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol - -ruby_keyword_pattern_value( - unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, - unique int value: @ruby_underscore_pattern_expr ref -); - -ruby_keyword_pattern_def( - unique int id: @ruby_keyword_pattern, - int key__: @ruby_keyword_pattern_key_type ref -); - -@ruby_lambda_body_type = @ruby_block | @ruby_do_block - -ruby_lambda_parameters( - unique int ruby_lambda: @ruby_lambda ref, - unique int parameters: @ruby_lambda_parameters ref -); - -ruby_lambda_def( - unique int id: @ruby_lambda, - int body: @ruby_lambda_body_type ref -); - -@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_lambda_parameters, index] -ruby_lambda_parameters_child( - int ruby_lambda_parameters: @ruby_lambda_parameters ref, - int index: int ref, - unique int child: @ruby_lambda_parameters_child_type ref -); - -ruby_lambda_parameters_def( - unique int id: @ruby_lambda_parameters -); - -@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs - -#keyset[ruby_left_assignment_list, index] -ruby_left_assignment_list_child( - int ruby_left_assignment_list: @ruby_left_assignment_list ref, - int index: int ref, - unique int child: @ruby_left_assignment_list_child_type ref -); - -ruby_left_assignment_list_def( - unique int id: @ruby_left_assignment_list -); - -ruby_match_pattern_def( - unique int id: @ruby_match_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_method_body( - unique int ruby_method: @ruby_method ref, - unique int body: @ruby_method_body_type ref -); - -ruby_method_parameters( - unique int ruby_method: @ruby_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_method_def( - unique int id: @ruby_method, - int name: @ruby_underscore_method_name ref -); - -@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier - -#keyset[ruby_method_parameters, index] -ruby_method_parameters_child( - int ruby_method_parameters: @ruby_method_parameters ref, - int index: int ref, - unique int child: @ruby_method_parameters_child_type ref -); - -ruby_method_parameters_def( - unique int id: @ruby_method_parameters -); - -ruby_module_body( - unique int ruby_module: @ruby_module ref, - unique int body: @ruby_body_statement ref -); - -@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant - -ruby_module_def( - unique int id: @ruby_module, - int name: @ruby_module_name_type ref -); - -ruby_next_child( - unique int ruby_next: @ruby_next ref, - unique int child: @ruby_argument_list ref -); - -ruby_next_def( - unique int id: @ruby_next -); - -case @ruby_operator_assignment.operator of - 0 = @ruby_operator_assignment_percentequal -| 1 = @ruby_operator_assignment_ampersandampersandequal -| 2 = @ruby_operator_assignment_ampersandequal -| 3 = @ruby_operator_assignment_starstarequal -| 4 = @ruby_operator_assignment_starequal -| 5 = @ruby_operator_assignment_plusequal -| 6 = @ruby_operator_assignment_minusequal -| 7 = @ruby_operator_assignment_slashequal -| 8 = @ruby_operator_assignment_langlelangleequal -| 9 = @ruby_operator_assignment_ranglerangleequal -| 10 = @ruby_operator_assignment_caretequal -| 11 = @ruby_operator_assignment_pipeequal -| 12 = @ruby_operator_assignment_pipepipeequal -; - - -@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression - -ruby_operator_assignment_def( - unique int id: @ruby_operator_assignment, - int left: @ruby_underscore_lhs ref, - int operator: int ref, - int right: @ruby_operator_assignment_right_type ref -); - -ruby_optional_parameter_def( - unique int id: @ruby_optional_parameter, - int name: @ruby_token_identifier ref, - int value: @ruby_underscore_arg ref -); - -@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg - -ruby_pair_value( - unique int ruby_pair: @ruby_pair ref, - unique int value: @ruby_underscore_arg ref -); - -ruby_pair_def( - unique int id: @ruby_pair, - int key__: @ruby_pair_key_type ref -); - -ruby_parenthesized_pattern_def( - unique int id: @ruby_parenthesized_pattern, - int child: @ruby_underscore_pattern_expr ref -); - -@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_parenthesized_statements, index] -ruby_parenthesized_statements_child( - int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, - int index: int ref, - unique int child: @ruby_parenthesized_statements_child_type ref -); - -ruby_parenthesized_statements_def( - unique int id: @ruby_parenthesized_statements -); - -@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg - -ruby_pattern_def( - unique int id: @ruby_pattern, - int child: @ruby_pattern_child_type ref -); - -@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement - -#keyset[ruby_program, index] -ruby_program_child( - int ruby_program: @ruby_program ref, - int index: int ref, - unique int child: @ruby_program_child_type ref -); - -ruby_program_def( - unique int id: @ruby_program -); - -@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_begin( - unique int ruby_range: @ruby_range ref, - unique int begin: @ruby_range_begin_type ref -); - -@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive - -ruby_range_end( - unique int ruby_range: @ruby_range ref, - unique int end: @ruby_range_end_type ref -); - -case @ruby_range.operator of - 0 = @ruby_range_dotdot -| 1 = @ruby_range_dotdotdot -; - - -ruby_range_def( - unique int id: @ruby_range, - int operator: int ref -); - -@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer - -ruby_rational_def( - unique int id: @ruby_rational, - int child: @ruby_rational_child_type ref -); - -ruby_redo_child( - unique int ruby_redo: @ruby_redo ref, - unique int child: @ruby_argument_list ref -); - -ruby_redo_def( - unique int id: @ruby_redo -); - -@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_regex, index] -ruby_regex_child( - int ruby_regex: @ruby_regex ref, - int index: int ref, - unique int child: @ruby_regex_child_type ref -); - -ruby_regex_def( - unique int id: @ruby_regex -); - -ruby_rescue_body( - unique int ruby_rescue: @ruby_rescue ref, - unique int body: @ruby_then ref -); - -ruby_rescue_exceptions( - unique int ruby_rescue: @ruby_rescue ref, - unique int exceptions: @ruby_exceptions ref -); - -ruby_rescue_variable( - unique int ruby_rescue: @ruby_rescue ref, - unique int variable: @ruby_exception_variable ref -); - -ruby_rescue_def( - unique int id: @ruby_rescue -); - -@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement - -ruby_rescue_modifier_def( - unique int id: @ruby_rescue_modifier, - int body: @ruby_rescue_modifier_body_type ref, - int handler: @ruby_underscore_expression ref -); - -ruby_rest_assignment_child( - unique int ruby_rest_assignment: @ruby_rest_assignment ref, - unique int child: @ruby_underscore_lhs ref -); - -ruby_rest_assignment_def( - unique int id: @ruby_rest_assignment -); - -ruby_retry_child( - unique int ruby_retry: @ruby_retry ref, - unique int child: @ruby_argument_list ref -); - -ruby_retry_def( - unique int id: @ruby_retry -); - -ruby_return_child( - unique int ruby_return: @ruby_return ref, - unique int child: @ruby_argument_list ref -); - -ruby_return_def( - unique int id: @ruby_return -); - -@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg - -#keyset[ruby_right_assignment_list, index] -ruby_right_assignment_list_child( - int ruby_right_assignment_list: @ruby_right_assignment_list ref, - int index: int ref, - unique int child: @ruby_right_assignment_list_child_type ref -); - -ruby_right_assignment_list_def( - unique int id: @ruby_right_assignment_list -); - -@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary - -ruby_scope_resolution_scope( - unique int ruby_scope_resolution: @ruby_scope_resolution ref, - unique int scope: @ruby_scope_resolution_scope_type ref -); - -ruby_scope_resolution_def( - unique int id: @ruby_scope_resolution, - int name: @ruby_token_constant ref -); - -ruby_setter_def( - unique int id: @ruby_setter, - int name: @ruby_token_identifier ref -); - -ruby_singleton_class_body( - unique int ruby_singleton_class: @ruby_singleton_class ref, - unique int body: @ruby_body_statement ref -); - -ruby_singleton_class_def( - unique int id: @ruby_singleton_class, - int value: @ruby_underscore_arg ref -); - -@ruby_singleton_method_body_type = @ruby_body_statement | @ruby_rescue_modifier | @ruby_underscore_arg - -ruby_singleton_method_body( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int body: @ruby_singleton_method_body_type ref -); - -@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable - -ruby_singleton_method_parameters( - unique int ruby_singleton_method: @ruby_singleton_method ref, - unique int parameters: @ruby_method_parameters ref -); - -ruby_singleton_method_def( - unique int id: @ruby_singleton_method, - int name: @ruby_underscore_method_name ref, - int object: @ruby_singleton_method_object_type ref -); - -ruby_splat_argument_child( - unique int ruby_splat_argument: @ruby_splat_argument ref, - unique int child: @ruby_underscore_arg ref -); - -ruby_splat_argument_def( - unique int id: @ruby_splat_argument -); - -ruby_splat_parameter_name( - unique int ruby_splat_parameter: @ruby_splat_parameter ref, - unique int name: @ruby_token_identifier ref -); - -ruby_splat_parameter_def( - unique int id: @ruby_splat_parameter -); - -@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_string__, index] -ruby_string_child( - int ruby_string__: @ruby_string__ ref, - int index: int ref, - unique int child: @ruby_string_child_type ref -); - -ruby_string_def( - unique int id: @ruby_string__ -); - -#keyset[ruby_string_array, index] -ruby_string_array_child( - int ruby_string_array: @ruby_string_array ref, - int index: int ref, - unique int child: @ruby_bare_string ref -); - -ruby_string_array_def( - unique int id: @ruby_string_array -); - -@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content - -#keyset[ruby_subshell, index] -ruby_subshell_child( - int ruby_subshell: @ruby_subshell ref, - int index: int ref, - unique int child: @ruby_subshell_child_type ref -); - -ruby_subshell_def( - unique int id: @ruby_subshell -); - -ruby_superclass_def( - unique int id: @ruby_superclass, - int child: @ruby_underscore_expression ref -); - -#keyset[ruby_symbol_array, index] -ruby_symbol_array_child( - int ruby_symbol_array: @ruby_symbol_array ref, - int index: int ref, - unique int child: @ruby_bare_symbol ref -); - -ruby_symbol_array_def( - unique int id: @ruby_symbol_array -); - -ruby_test_pattern_def( - unique int id: @ruby_test_pattern, - int pattern: @ruby_underscore_pattern_top_expr_body ref, - int value: @ruby_underscore_arg ref -); - -@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement - -#keyset[ruby_then, index] -ruby_then_child( - int ruby_then: @ruby_then ref, - int index: int ref, - unique int child: @ruby_then_child_type ref -); - -ruby_then_def( - unique int id: @ruby_then -); - -@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric - -case @ruby_unary.operator of - 0 = @ruby_unary_bang -| 1 = @ruby_unary_plus -| 2 = @ruby_unary_minus -| 3 = @ruby_unary_definedquestion -| 4 = @ruby_unary_not -| 5 = @ruby_unary_tilde -; - - -ruby_unary_def( - unique int id: @ruby_unary, - int operand: @ruby_unary_operand_type ref, - int operator: int ref -); - -#keyset[ruby_undef, index] -ruby_undef_child( - int ruby_undef: @ruby_undef ref, - int index: int ref, - unique int child: @ruby_underscore_method_name ref -); - -ruby_undef_def( - unique int id: @ruby_undef -); - -@ruby_unless_alternative_type = @ruby_else | @ruby_elsif - -ruby_unless_alternative( - unique int ruby_unless: @ruby_unless ref, - unique int alternative: @ruby_unless_alternative_type ref -); - -ruby_unless_consequence( - unique int ruby_unless: @ruby_unless ref, - unique int consequence: @ruby_then ref -); - -ruby_unless_def( - unique int id: @ruby_unless, - int condition: @ruby_underscore_statement ref -); - -ruby_unless_guard_def( - unique int id: @ruby_unless_guard, - int condition: @ruby_underscore_expression ref -); - -ruby_unless_modifier_def( - unique int id: @ruby_unless_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_until_def( - unique int id: @ruby_until, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_until_modifier_def( - unique int id: @ruby_until_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable - -ruby_variable_reference_pattern_def( - unique int id: @ruby_variable_reference_pattern, - int name: @ruby_variable_reference_pattern_name_type ref -); - -ruby_when_body( - unique int ruby_when: @ruby_when ref, - unique int body: @ruby_then ref -); - -#keyset[ruby_when, index] -ruby_when_pattern( - int ruby_when: @ruby_when ref, - int index: int ref, - unique int pattern: @ruby_pattern ref -); - -ruby_when_def( - unique int id: @ruby_when -); - -ruby_while_def( - unique int id: @ruby_while, - int body: @ruby_do ref, - int condition: @ruby_underscore_statement ref -); - -ruby_while_modifier_def( - unique int id: @ruby_while_modifier, - int body: @ruby_underscore_statement ref, - int condition: @ruby_underscore_expression ref -); - -ruby_yield_child( - unique int ruby_yield: @ruby_yield ref, - unique int child: @ruby_argument_list ref -); - -ruby_yield_def( - unique int id: @ruby_yield -); - -ruby_tokeninfo( - unique int id: @ruby_token, - int kind: int ref, - string value: string ref -); - -case @ruby_token.kind of - 0 = @ruby_reserved_word -| 1 = @ruby_token_character -| 2 = @ruby_token_class_variable -| 3 = @ruby_token_comment -| 4 = @ruby_token_constant -| 5 = @ruby_token_empty_statement -| 6 = @ruby_token_encoding -| 7 = @ruby_token_escape_sequence -| 8 = @ruby_token_false -| 9 = @ruby_token_file -| 10 = @ruby_token_float -| 11 = @ruby_token_forward_argument -| 12 = @ruby_token_forward_parameter -| 13 = @ruby_token_global_variable -| 14 = @ruby_token_hash_key_symbol -| 15 = @ruby_token_hash_splat_nil -| 16 = @ruby_token_heredoc_beginning -| 17 = @ruby_token_heredoc_content -| 18 = @ruby_token_heredoc_end -| 19 = @ruby_token_identifier -| 20 = @ruby_token_instance_variable -| 21 = @ruby_token_integer -| 22 = @ruby_token_line -| 23 = @ruby_token_nil -| 24 = @ruby_token_operator -| 25 = @ruby_token_self -| 26 = @ruby_token_simple_symbol -| 27 = @ruby_token_string_content -| 28 = @ruby_token_super -| 29 = @ruby_token_true -| 30 = @ruby_token_uninterpreted -; - - -@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_body | @ruby_block_parameter | @ruby_block_parameters | @ruby_body_statement | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_match_pattern | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_test_pattern | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield - -ruby_ast_node_location( - unique int node: @ruby_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -ruby_ast_node_parent( - unique int node: @ruby_ast_node ref, - int parent: @ruby_ast_node ref, - int parent_index: int ref -); - -/*- Erb dbscheme -*/ -erb_comment_directive_child( - unique int erb_comment_directive: @erb_comment_directive ref, - unique int child: @erb_token_comment ref -); - -erb_comment_directive_def( - unique int id: @erb_comment_directive -); - -erb_directive_child( - unique int erb_directive: @erb_directive ref, - unique int child: @erb_token_code ref -); - -erb_directive_def( - unique int id: @erb_directive -); - -erb_graphql_directive_child( - unique int erb_graphql_directive: @erb_graphql_directive ref, - unique int child: @erb_token_code ref -); - -erb_graphql_directive_def( - unique int id: @erb_graphql_directive -); - -erb_output_directive_child( - unique int erb_output_directive: @erb_output_directive ref, - unique int child: @erb_token_code ref -); - -erb_output_directive_def( - unique int id: @erb_output_directive -); - -@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content - -#keyset[erb_template, index] -erb_template_child( - int erb_template: @erb_template ref, - int index: int ref, - unique int child: @erb_template_child_type ref -); - -erb_template_def( - unique int id: @erb_template -); - -erb_tokeninfo( - unique int id: @erb_token, - int kind: int ref, - string value: string ref -); - -case @erb_token.kind of - 0 = @erb_reserved_word -| 1 = @erb_token_code -| 2 = @erb_token_comment -| 3 = @erb_token_content -; - - -@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token - -erb_ast_node_location( - unique int node: @erb_ast_node ref, - int loc: @location_default ref -); - -#keyset[parent, parent_index] -erb_ast_node_parent( - unique int node: @erb_ast_node ref, - int parent: @erb_ast_node ref, - int parent_index: int ref -); - diff --git a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/upgrade.properties b/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/upgrade.properties deleted file mode 100644 index 9b83871fb9b6..000000000000 --- a/ruby/ql/lib/upgrades/40a6b0a5e81115bd870b3a12a1fe954b06362bb7/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Add databaseMetadata relation -compatibility: full diff --git a/ruby/ql/lib/utils/test/PrettyPrintModels.ql b/ruby/ql/lib/utils/test/PrettyPrintModels.ql deleted file mode 100644 index 115cc2c12873..000000000000 --- a/ruby/ql/lib/utils/test/PrettyPrintModels.ql +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @kind test-postprocess - */ - -import codeql.ruby.frameworks.data.internal.ApiGraphModels -import codeql.dataflow.test.ProvenancePathGraph::TestPostProcessing::TranslateProvenanceResults diff --git a/ruby/ql/src/codeql-suites/ruby-security-and-quality.qls b/ruby/ql/src/codeql-suites/ruby-security-and-quality.qls index dd91109a3ac2..588a074cb508 100644 --- a/ruby/ql/src/codeql-suites/ruby-security-and-quality.qls +++ b/ruby/ql/src/codeql-suites/ruby-security-and-quality.qls @@ -1,9 +1,4 @@ - description: Security-and-quality queries for Ruby - queries: . -- apply: security-and-frozen-quality-selectors.yml +- apply: security-and-quality-selectors.yml from: codeql/suite-helpers -- include: - id: - - rb/database-query-in-loop - - rb/uninitialized-local-variable - - rb/useless-assignment-to-local diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index f5e2a6997b6f..d5c59e42e0a4 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.4.1-dev +version: 1.4.0 groups: - ruby - queries diff --git a/ruby/ql/src/queries/variables/UninitializedLocal.md b/ruby/ql/src/queries/variables/UninitializedLocal.md index c560c511eebd..4dd3fce43041 100644 --- a/ruby/ql/src/queries/variables/UninitializedLocal.md +++ b/ruby/ql/src/queries/variables/UninitializedLocal.md @@ -1,4 +1,6 @@ -## Overview +# Method call on `nil` + +## Description In Ruby, it is not necessary to explicitly initialize variables. If a local variable has not been explicitly initialized, it will have the value `nil`. If this happens unintentionally, though, the variable will not represent an object with the expected methods, and a method call on the variable will raise a `NoMethodError`. @@ -9,9 +11,7 @@ This can be achieved by using a safe navigation or adding a check for `nil`. Note: You do not need to explicitly initialize the variable, if you can make the program deal with the possible `nil` value. In particular, initializing the variable to `nil` will have no effect, as this is already the value of the variable. If `nil` is the only possible default value, you need to handle the `nil` value instead of initializing the variable. -## Example - -### Incorrect Usage +## Examples In the following code, the call to `create_file` may fail and then the call `f.close` will raise a `NoMethodError` since `f` will be `nil` at that point. @@ -24,8 +24,6 @@ ensure end ``` -### Correct Usage - We can fix this by using safe navigation: ```ruby def dump(x) @@ -38,5 +36,6 @@ end ## References -- RubyGuides: [Everything You Need To Know About Nil](https://www.rubyguides.com/2018/01/ruby-nil/). -- Ruby-Doc.org: [NoMethodError](https://ruby-doc.org/core-2.6.5/NoMethodError.html). +- https://www.rubyguides.com/: [Nil](https://www.rubyguides.com/2018/01/ruby-nil/) +- https://ruby-doc.org/: [NoMethodError](https://ruby-doc.org/core-2.6.5/NoMethodError.html) + diff --git a/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.expected b/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.expected deleted file mode 100644 index 26956a4ad927..000000000000 --- a/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.expected +++ /dev/null @@ -1,79 +0,0 @@ -| tainted_path.rb:4:5:4:24 | ... = ... | Tainted node | -| tainted_path.rb:4:12:4:17 | call to params | Tainted node | -| tainted_path.rb:4:12:4:24 | ...[...] | Tainted node | -| tainted_path.rb:5:26:5:29 | path | Tainted node | -| tainted_path.rb:10:5:10:43 | ... = ... | Tainted node | -| tainted_path.rb:10:12:10:43 | call to absolute_path | Tainted node | -| tainted_path.rb:10:31:10:36 | call to params | Tainted node | -| tainted_path.rb:10:31:10:43 | ...[...] | Tainted node | -| tainted_path.rb:11:26:11:29 | path | Tainted node | -| tainted_path.rb:16:5:16:47 | ... = ... | Tainted node | -| tainted_path.rb:16:12:16:47 | "#{...}/foo" | Tainted node | -| tainted_path.rb:16:13:16:42 | #{...} | Tainted node | -| tainted_path.rb:16:15:16:41 | call to dirname | Tainted node | -| tainted_path.rb:16:28:16:33 | call to params | Tainted node | -| tainted_path.rb:16:28:16:40 | ...[...] | Tainted node | -| tainted_path.rb:17:26:17:29 | path | Tainted node | -| tainted_path.rb:22:5:22:41 | ... = ... | Tainted node | -| tainted_path.rb:22:12:22:41 | call to expand_path | Tainted node | -| tainted_path.rb:22:29:22:34 | call to params | Tainted node | -| tainted_path.rb:22:29:22:41 | ...[...] | Tainted node | -| tainted_path.rb:23:26:23:29 | path | Tainted node | -| tainted_path.rb:28:5:28:34 | ... = ... | Tainted node | -| tainted_path.rb:28:12:28:34 | call to path | Tainted node | -| tainted_path.rb:28:22:28:27 | call to params | Tainted node | -| tainted_path.rb:28:22:28:34 | ...[...] | Tainted node | -| tainted_path.rb:29:26:29:29 | path | Tainted node | -| tainted_path.rb:34:5:34:41 | ... = ... | Tainted node | -| tainted_path.rb:34:12:34:41 | call to realdirpath | Tainted node | -| tainted_path.rb:34:29:34:34 | call to params | Tainted node | -| tainted_path.rb:34:29:34:41 | ...[...] | Tainted node | -| tainted_path.rb:35:26:35:29 | path | Tainted node | -| tainted_path.rb:40:5:40:38 | ... = ... | Tainted node | -| tainted_path.rb:40:12:40:38 | call to realpath | Tainted node | -| tainted_path.rb:40:26:40:31 | call to params | Tainted node | -| tainted_path.rb:40:26:40:38 | ...[...] | Tainted node | -| tainted_path.rb:41:26:41:29 | path | Tainted node | -| tainted_path.rb:47:5:47:63 | ... = ... | Tainted node | -| tainted_path.rb:47:12:47:63 | call to join | Tainted node | -| tainted_path.rb:47:43:47:48 | call to params | Tainted node | -| tainted_path.rb:47:43:47:55 | ...[...] | Tainted node | -| tainted_path.rb:48:26:48:29 | path | Tainted node | -| tainted_path.rb:53:26:53:31 | call to params | Tainted node | -| tainted_path.rb:53:26:53:38 | ...[...] | Tainted node | -| tainted_path.rb:59:5:59:53 | ... = ... | Tainted node | -| tainted_path.rb:59:12:59:53 | call to new | Tainted node | -| tainted_path.rb:59:40:59:45 | call to params | Tainted node | -| tainted_path.rb:59:40:59:52 | ...[...] | Tainted node | -| tainted_path.rb:60:26:60:29 | path | Tainted node | -| tainted_path.rb:65:5:65:63 | ... = ... | Tainted node | -| tainted_path.rb:65:12:65:53 | call to new | Tainted node | -| tainted_path.rb:65:12:65:63 | call to sanitized | Tainted node | -| tainted_path.rb:65:40:65:45 | call to params | Tainted node | -| tainted_path.rb:65:40:65:52 | ...[...] | Tainted node | -| tainted_path.rb:66:26:66:29 | path | Tainted node | -| tainted_path.rb:71:5:71:53 | ... = ... | Tainted node | -| tainted_path.rb:71:12:71:53 | call to new | Tainted node | -| tainted_path.rb:71:40:71:45 | call to params | Tainted node | -| tainted_path.rb:71:40:71:52 | ...[...] | Tainted node | -| tainted_path.rb:72:15:72:18 | path | Tainted node | -| tainted_path.rb:77:5:77:53 | ... = ... | Tainted node | -| tainted_path.rb:77:12:77:53 | call to new | Tainted node | -| tainted_path.rb:77:40:77:45 | call to params | Tainted node | -| tainted_path.rb:77:40:77:52 | ...[...] | Tainted node | -| tainted_path.rb:78:19:78:22 | path | Tainted node | -| tainted_path.rb:79:14:79:17 | path | Tainted node | -| tainted_path.rb:84:5:84:53 | ... = ... | Tainted node | -| tainted_path.rb:84:12:84:53 | call to new | Tainted node | -| tainted_path.rb:84:40:84:45 | call to params | Tainted node | -| tainted_path.rb:84:40:84:52 | ...[...] | Tainted node | -| tainted_path.rb:85:10:85:13 | path | Tainted node | -| tainted_path.rb:86:25:86:28 | path | Tainted node | -| tainted_path.rb:90:5:90:53 | ... = ... | Tainted node | -| tainted_path.rb:90:12:90:53 | call to new | Tainted node | -| tainted_path.rb:90:40:90:45 | call to params | Tainted node | -| tainted_path.rb:90:40:90:52 | ...[...] | Tainted node | -| tainted_path.rb:91:10:91:43 | "Debug: require_relative(#{...})" | Tainted node | -| tainted_path.rb:91:35:91:41 | #{...} | Tainted node | -| tainted_path.rb:91:37:91:40 | path | Tainted node | -| tainted_path.rb:92:11:92:14 | path | Tainted node | diff --git a/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.qlref b/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.qlref deleted file mode 100644 index 0fd4f30b68ae..000000000000 --- a/ruby/ql/test/query-tests/meta/TaintedNodes/TaintedNodes.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: queries/meta/TaintedNodes.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/query-tests/meta/TaintedNodes/tainted_path.rb b/ruby/ql/test/query-tests/meta/TaintedNodes/tainted_path.rb deleted file mode 100644 index a85c0ad975d2..000000000000 --- a/ruby/ql/test/query-tests/meta/TaintedNodes/tainted_path.rb +++ /dev/null @@ -1,94 +0,0 @@ -class FooController < ActionController::Base - # BAD - def route0 - path = params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.absolute_path preserves taint - def route1 - path = File.absolute_path params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.dirname preserves taint - def route2 - path = "#{File.dirname(params[:path])}/foo" # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.expand_path preserves taint - def route3 - path = File.expand_path params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.path preserves taint - def route4 - path = File.path params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.realdirpath preserves taint - def route5 - path = File.realdirpath params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - File.realpath preserves taint - def route6 - path = File.realpath params[:path] # $ Alert - @content = File.read path # $ Alert - end - - # BAD - tainted arguments in any position propagate to the return value of - # File.join - def route7 - path = File.join("foo", "bar", "baz", params[:path], "qux") # $ Alert - @content = File.read path # $ Alert - end - - # GOOD - File.basename does not preserve taint - def route8 - path = File.basename params[:path] # $ Alert - @content = File.read path # Sanitized - end - - # BAD - def route9 - path = ActiveStorage::Filename.new(params[:path]) # $ Alert - @content = File.read path # $ Alert - end - - # GOOD - explicitly sanitized - def route10 - path = ActiveStorage::Filename.new(params[:path]).sanitized # $ Alert - @content = File.read path # $ SPURIOUS: Alert (should have been sanitized) - end - - # BAD - def route11 - path = ActiveStorage::Filename.new(params[:path]) # $ Alert - send_file path # $ Alert - end - - # BAD - def route12 - path = ActiveStorage::Filename.new(params[:path]) # $ Alert - bla (Dir.glob path) # $ Alert - bla (Dir[path]) # $ Alert - end - - # BAD - def route13 - path = ActiveStorage::Filename.new(params[:path]) # $ Alert - load(path) # $ Alert - autoload(:MyModule, path) # $ Alert - end - - def require_relative() - path = ActiveStorage::Filename.new(params[:path]) # $ Alert - puts "Debug: require_relative(#{path})" # $ Alert - super(path) # $ Alert - end -end diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 2173fed576a2..049edf75ace7 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -1,49 +1,32 @@ -#select -| CommandInjection.rb:7:10:7:15 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:7:10:7:15 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:8:16:8:18 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:8:16:8:18 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:10:14:10:16 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:10:14:10:16 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:11:17:11:22 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:11:17:11:22 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:13:9:13:14 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:13:9:13:14 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:30:19:30:24 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:30:19:30:24 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:34:24:34:36 | "echo #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:34:24:34:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:35:39:35:51 | "grep #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:35:39:35:51 | "grep #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:51:24:51:36 | "echo #{...}" | CommandInjection.rb:47:15:47:20 | call to params | CommandInjection.rb:51:24:51:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:47:15:47:20 | call to params | user-provided value | -| CommandInjection.rb:60:14:60:16 | cmd | CommandInjection.rb:55:13:55:18 | call to params | CommandInjection.rb:60:14:60:16 | cmd | This command depends on a $@. | CommandInjection.rb:55:13:55:18 | call to params | user-provided value | -| CommandInjection.rb:75:14:75:29 | "echo #{...}" | CommandInjection.rb:74:18:74:23 | number | CommandInjection.rb:75:14:75:29 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:74:18:74:23 | number | user-provided value | -| CommandInjection.rb:83:14:83:34 | "echo #{...}" | CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:82:23:82:33 | blah_number | user-provided value | -| CommandInjection.rb:92:14:92:39 | "echo #{...}" | CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:92:22:92:37 | ...[...] | user-provided value | -| CommandInjection.rb:105:16:105:28 | "cat #{...}" | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:105:16:105:28 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:104:16:104:21 | call to params | user-provided value | -| CommandInjection.rb:112:33:112:44 | ...[...] | CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | This command depends on a $@. | CommandInjection.rb:112:33:112:38 | call to params | user-provided value | -| CommandInjection.rb:114:41:114:56 | "#{...}" | CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:41:114:56 | "#{...}" | This command depends on a $@. | CommandInjection.rb:114:44:114:49 | call to params | user-provided value | +models +| 1 | Sink: Terrapin::CommandLine!; Method[new].Argument[0]; command-injection | +| 2 | Sink: Terrapin::CommandLine!; Method[new].Argument[1]; command-injection | edges | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:7:10:7:15 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:8:16:8:18 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:10:14:10:16 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:11:17:11:22 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:13:9:13:14 | #{...} | provenance | | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:30:19:30:24 | #{...} | provenance | | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:24:34:36 | "echo #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:35:39:35:51 | "grep #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:29:19:29:24 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:33:24:33:36 | "echo #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:39:34:51 | "grep #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:6:15:6:26 | ...[...] | provenance | | | CommandInjection.rb:6:15:6:26 | ...[...] | CommandInjection.rb:6:9:6:11 | cmd | provenance | | -| CommandInjection.rb:47:9:47:11 | cmd | CommandInjection.rb:51:24:51:36 | "echo #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:47:15:47:20 | call to params | CommandInjection.rb:47:15:47:26 | ...[...] | provenance | | -| CommandInjection.rb:47:15:47:26 | ...[...] | CommandInjection.rb:47:9:47:11 | cmd | provenance | | -| CommandInjection.rb:55:7:55:9 | cmd | CommandInjection.rb:60:14:60:16 | cmd | provenance | | -| CommandInjection.rb:55:13:55:18 | call to params | CommandInjection.rb:55:13:55:24 | ...[...] | provenance | | -| CommandInjection.rb:55:13:55:24 | ...[...] | CommandInjection.rb:55:7:55:9 | cmd | provenance | | -| CommandInjection.rb:74:18:74:23 | number | CommandInjection.rb:75:14:75:29 | "echo #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:104:9:104:12 | file | CommandInjection.rb:105:16:105:28 | "cat #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:104:16:104:28 | ...[...] | provenance | | -| CommandInjection.rb:104:16:104:28 | ...[...] | CommandInjection.rb:104:9:104:12 | file | provenance | | -| CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | provenance | Sink:MaD:1 | -| CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:44:114:54 | ...[...] | provenance | | -| CommandInjection.rb:114:44:114:54 | ...[...] | CommandInjection.rb:114:41:114:56 | "#{...}" | provenance | AdditionalTaintStep Sink:MaD:2 | -models -| 1 | Sink: Terrapin::CommandLine!; Method[new].Argument[0]; command-injection | -| 2 | Sink: Terrapin::CommandLine!; Method[new].Argument[1]; command-injection | +| CommandInjection.rb:46:9:46:11 | cmd | CommandInjection.rb:50:24:50:36 | "echo #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:46:15:46:20 | call to params | CommandInjection.rb:46:15:46:26 | ...[...] | provenance | | +| CommandInjection.rb:46:15:46:26 | ...[...] | CommandInjection.rb:46:9:46:11 | cmd | provenance | | +| CommandInjection.rb:54:7:54:9 | cmd | CommandInjection.rb:59:14:59:16 | cmd | provenance | | +| CommandInjection.rb:54:13:54:18 | call to params | CommandInjection.rb:54:13:54:24 | ...[...] | provenance | | +| CommandInjection.rb:54:13:54:24 | ...[...] | CommandInjection.rb:54:7:54:9 | cmd | provenance | | +| CommandInjection.rb:73:18:73:23 | number | CommandInjection.rb:74:14:74:29 | "echo #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:81:23:81:33 | blah_number | CommandInjection.rb:82:14:82:34 | "echo #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:91:22:91:37 | ...[...] | CommandInjection.rb:91:14:91:39 | "echo #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:103:9:103:12 | file | CommandInjection.rb:104:16:104:28 | "cat #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:103:16:103:28 | ...[...] | provenance | | +| CommandInjection.rb:103:16:103:28 | ...[...] | CommandInjection.rb:103:9:103:12 | file | provenance | | +| CommandInjection.rb:111:33:111:38 | call to params | CommandInjection.rb:111:33:111:44 | ...[...] | provenance | Sink:MaD:1 | +| CommandInjection.rb:113:44:113:49 | call to params | CommandInjection.rb:113:44:113:54 | ...[...] | provenance | | +| CommandInjection.rb:113:44:113:54 | ...[...] | CommandInjection.rb:113:41:113:56 | "#{...}" | provenance | AdditionalTaintStep Sink:MaD:2 | nodes | CommandInjection.rb:6:9:6:11 | cmd | semmle.label | cmd | | CommandInjection.rb:6:15:6:20 | call to params | semmle.label | call to params | @@ -53,30 +36,47 @@ nodes | CommandInjection.rb:10:14:10:16 | cmd | semmle.label | cmd | | CommandInjection.rb:11:17:11:22 | #{...} | semmle.label | #{...} | | CommandInjection.rb:13:9:13:14 | #{...} | semmle.label | #{...} | -| CommandInjection.rb:30:19:30:24 | #{...} | semmle.label | #{...} | -| CommandInjection.rb:34:24:34:36 | "echo #{...}" | semmle.label | "echo #{...}" | -| CommandInjection.rb:35:39:35:51 | "grep #{...}" | semmle.label | "grep #{...}" | -| CommandInjection.rb:47:9:47:11 | cmd | semmle.label | cmd | -| CommandInjection.rb:47:15:47:20 | call to params | semmle.label | call to params | -| CommandInjection.rb:47:15:47:26 | ...[...] | semmle.label | ...[...] | -| CommandInjection.rb:51:24:51:36 | "echo #{...}" | semmle.label | "echo #{...}" | -| CommandInjection.rb:55:7:55:9 | cmd | semmle.label | cmd | -| CommandInjection.rb:55:13:55:18 | call to params | semmle.label | call to params | -| CommandInjection.rb:55:13:55:24 | ...[...] | semmle.label | ...[...] | -| CommandInjection.rb:60:14:60:16 | cmd | semmle.label | cmd | -| CommandInjection.rb:74:18:74:23 | number | semmle.label | number | -| CommandInjection.rb:75:14:75:29 | "echo #{...}" | semmle.label | "echo #{...}" | -| CommandInjection.rb:82:23:82:33 | blah_number | semmle.label | blah_number | -| CommandInjection.rb:83:14:83:34 | "echo #{...}" | semmle.label | "echo #{...}" | -| CommandInjection.rb:92:14:92:39 | "echo #{...}" | semmle.label | "echo #{...}" | -| CommandInjection.rb:92:22:92:37 | ...[...] | semmle.label | ...[...] | -| CommandInjection.rb:104:9:104:12 | file | semmle.label | file | -| CommandInjection.rb:104:16:104:21 | call to params | semmle.label | call to params | -| CommandInjection.rb:104:16:104:28 | ...[...] | semmle.label | ...[...] | -| CommandInjection.rb:105:16:105:28 | "cat #{...}" | semmle.label | "cat #{...}" | -| CommandInjection.rb:112:33:112:38 | call to params | semmle.label | call to params | -| CommandInjection.rb:112:33:112:44 | ...[...] | semmle.label | ...[...] | -| CommandInjection.rb:114:41:114:56 | "#{...}" | semmle.label | "#{...}" | -| CommandInjection.rb:114:44:114:49 | call to params | semmle.label | call to params | -| CommandInjection.rb:114:44:114:54 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:29:19:29:24 | #{...} | semmle.label | #{...} | +| CommandInjection.rb:33:24:33:36 | "echo #{...}" | semmle.label | "echo #{...}" | +| CommandInjection.rb:34:39:34:51 | "grep #{...}" | semmle.label | "grep #{...}" | +| CommandInjection.rb:46:9:46:11 | cmd | semmle.label | cmd | +| CommandInjection.rb:46:15:46:20 | call to params | semmle.label | call to params | +| CommandInjection.rb:46:15:46:26 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:50:24:50:36 | "echo #{...}" | semmle.label | "echo #{...}" | +| CommandInjection.rb:54:7:54:9 | cmd | semmle.label | cmd | +| CommandInjection.rb:54:13:54:18 | call to params | semmle.label | call to params | +| CommandInjection.rb:54:13:54:24 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:59:14:59:16 | cmd | semmle.label | cmd | +| CommandInjection.rb:73:18:73:23 | number | semmle.label | number | +| CommandInjection.rb:74:14:74:29 | "echo #{...}" | semmle.label | "echo #{...}" | +| CommandInjection.rb:81:23:81:33 | blah_number | semmle.label | blah_number | +| CommandInjection.rb:82:14:82:34 | "echo #{...}" | semmle.label | "echo #{...}" | +| CommandInjection.rb:91:14:91:39 | "echo #{...}" | semmle.label | "echo #{...}" | +| CommandInjection.rb:91:22:91:37 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:103:9:103:12 | file | semmle.label | file | +| CommandInjection.rb:103:16:103:21 | call to params | semmle.label | call to params | +| CommandInjection.rb:103:16:103:28 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:104:16:104:28 | "cat #{...}" | semmle.label | "cat #{...}" | +| CommandInjection.rb:111:33:111:38 | call to params | semmle.label | call to params | +| CommandInjection.rb:111:33:111:44 | ...[...] | semmle.label | ...[...] | +| CommandInjection.rb:113:41:113:56 | "#{...}" | semmle.label | "#{...}" | +| CommandInjection.rb:113:44:113:49 | call to params | semmle.label | call to params | +| CommandInjection.rb:113:44:113:54 | ...[...] | semmle.label | ...[...] | subpaths +#select +| CommandInjection.rb:7:10:7:15 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:7:10:7:15 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:8:16:8:18 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:8:16:8:18 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:10:14:10:16 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:10:14:10:16 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:11:17:11:22 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:11:17:11:22 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:13:9:13:14 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:13:9:13:14 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:29:19:29:24 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:29:19:29:24 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:33:24:33:36 | "echo #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:33:24:33:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:34:39:34:51 | "grep #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:34:39:34:51 | "grep #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:50:24:50:36 | "echo #{...}" | CommandInjection.rb:46:15:46:20 | call to params | CommandInjection.rb:50:24:50:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:46:15:46:20 | call to params | user-provided value | +| CommandInjection.rb:59:14:59:16 | cmd | CommandInjection.rb:54:13:54:18 | call to params | CommandInjection.rb:59:14:59:16 | cmd | This command depends on a $@. | CommandInjection.rb:54:13:54:18 | call to params | user-provided value | +| CommandInjection.rb:74:14:74:29 | "echo #{...}" | CommandInjection.rb:73:18:73:23 | number | CommandInjection.rb:74:14:74:29 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:73:18:73:23 | number | user-provided value | +| CommandInjection.rb:82:14:82:34 | "echo #{...}" | CommandInjection.rb:81:23:81:33 | blah_number | CommandInjection.rb:82:14:82:34 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:81:23:81:33 | blah_number | user-provided value | +| CommandInjection.rb:91:14:91:39 | "echo #{...}" | CommandInjection.rb:91:22:91:37 | ...[...] | CommandInjection.rb:91:14:91:39 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:91:22:91:37 | ...[...] | user-provided value | +| CommandInjection.rb:104:16:104:28 | "cat #{...}" | CommandInjection.rb:103:16:103:21 | call to params | CommandInjection.rb:104:16:104:28 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:103:16:103:21 | call to params | user-provided value | +| CommandInjection.rb:111:33:111:44 | ...[...] | CommandInjection.rb:111:33:111:38 | call to params | CommandInjection.rb:111:33:111:44 | ...[...] | This command depends on a $@. | CommandInjection.rb:111:33:111:38 | call to params | user-provided value | +| CommandInjection.rb:113:41:113:56 | "#{...}" | CommandInjection.rb:113:44:113:49 | call to params | CommandInjection.rb:113:41:113:56 | "#{...}" | This command depends on a $@. | CommandInjection.rb:113:44:113:49 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.ql b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.ql new file mode 100644 index 000000000000..c0f54091eb4e --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.ql @@ -0,0 +1,16 @@ +/** + * @kind path-problem + */ + +import codeql.ruby.AST +import codeql.ruby.security.CommandInjectionQuery +import codeql.dataflow.test.ProvenancePathGraph +import codeql.ruby.frameworks.data.internal.ApiGraphModels +import ShowProvenance + +from CommandInjectionFlow::PathNode source, CommandInjectionFlow::PathNode sink, Source sourceNode +where + CommandInjectionFlow::flowPath(source, sink) and + sourceNode = source.getNode() +select sink.getNode(), source, sink, "This command depends on a $@.", sourceNode, + sourceNode.getSourceType() diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.qlref b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.qlref deleted file mode 100644 index 1d0a8c019fbd..000000000000 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: queries/security/cwe-078/CommandInjection.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb index 9fd7c6286a12..12c15a30b158 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.rb @@ -3,15 +3,14 @@ class UsersController < ActionController::Base def create - cmd = params[:cmd] # $ Source - `#{cmd}` # $ Alert - system(cmd) # $ Alert + cmd = params[:cmd] + `#{cmd}` + system(cmd) system("echo", cmd) # OK, because cmd is not shell interpreted - exec(cmd) # $ Alert - %x(echo #{cmd}) # $ Alert + exec(cmd) + %x(echo #{cmd}) result = <<`EOF` - #{cmd} #{# $ Alert - } + #{cmd} EOF safe_cmd_1 = Shellwords.escape(cmd) @@ -27,12 +26,12 @@ def create if %w(foo bar).include? cmd `echo #{cmd}` else - `echo #{cmd}` # $ Alert + `echo #{cmd}` end # Open3 methods - Open3.capture2("echo #{cmd}") # $ Alert - Open3.pipeline("cat foo.txt", "grep #{cmd}") # $ Alert + Open3.capture2("echo #{cmd}") + Open3.pipeline("cat foo.txt", "grep #{cmd}") Open3.pipeline(["echo", cmd], "tail") # OK, because cmd is not shell interpreted end @@ -44,20 +43,20 @@ def show end def index - cmd = params[:key] # $ Source + cmd = params[:key] if %w(foo bar).include? cmd `echo #{cmd}` end - Open3.capture2("echo #{cmd}") # $ Alert + Open3.capture2("echo #{cmd}") end def update - cmd = params[:key] # $ Source + cmd = params[:key] case cmd when "foo" system(cmd) end - system(cmd) # $ Alert + system(cmd) end end @@ -71,16 +70,16 @@ class QueryType < BaseObject field :with_arg, String, null: false, description: "A field with an argument" do argument :number, Int, "A number", required: true end - def with_arg(number:) # $ Source - system("echo #{number}") # $ Alert + def with_arg(number:) + system("echo #{number}") number.to_s end field :with_method, String, null: false, description: "A field with a custom resolver method", resolver_method: :custom_method do argument :blah_number, Int, "A number", required: true end - def custom_method(blah_number:, number: nil) # $ Source - system("echo #{blah_number}") # $ Alert + def custom_method(blah_number:, number: nil) + system("echo #{blah_number}") system("echo #{number}") # OK, number: is not an `argument` for this field blah_number.to_s end @@ -89,7 +88,7 @@ def custom_method(blah_number:, number: nil) # $ Source argument :something, Int, "A number", required: true end def with_splat(**args) - system("echo #{args[:something]}") # $ Alert + system("echo #{args[:something]}") args[:something].to_s end @@ -101,17 +100,17 @@ def foo(arg) class Foo < ActionController::Base def create - file = params[:file] # $ Source - system("cat #{file}") # $ Alert + file = params[:file] + system("cat #{file}") # .shellescape system("cat #{file.shellescape}") # OK, because file is shell escaped - + end def index - Terrapin::CommandLine.new(params[:foo], "bar") # $ Alert + Terrapin::CommandLine.new(params[:foo], "bar") # BAD - Terrapin::CommandLine.new("echo", "#{params[foo]}") # $ Alert + Terrapin::CommandLine.new("echo", "#{params[foo]}") # BAD cmd = Terrapin::CommandLine.new("echo", ":msg") cmd.run(msg: params[:foo]) # GOOD diff --git a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected index b8951412c1f8..67e59fb08c18 100644 --- a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected +++ b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.expected @@ -1,14 +1,4 @@ -#select -| insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ of sensitive file from $@. | insecure_download.rb:27:5:27:46 | call to get | Download | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | HTTP source | -| insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ of sensitive file from $@. | insecure_download.rb:27:5:27:46 | call to get | Download | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | HTTP source | -| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | insecure_download.rb:33:15:33:17 | url | $@ of sensitive file from $@. | insecure_download.rb:33:5:33:18 | call to get | Download | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | HTTP source | -| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | insecure_download.rb:33:15:33:17 | url | $@ of sensitive file from $@. | insecure_download.rb:33:5:33:18 | call to get | Download | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" | HTTP source | -| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | $@ of sensitive file from $@. | insecure_download.rb:33:5:33:18 | call to get | Download | insecure_download.rb:33:15:33:17 | url | HTTP source | -| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | $@ of sensitive file from $@. | insecure_download.rb:33:5:33:18 | call to get | Download | insecure_download.rb:33:15:33:17 | url | HTTP source | -| insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | $@ of sensitive file from $@. | insecure_download.rb:37:32:37:69 | call to get | Download | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | HTTP source | -| insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | $@ of sensitive file from $@. | insecure_download.rb:41:27:41:64 | call to get | Download | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | HTTP source | -| insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | $@ of sensitive file from $@. | insecure_download.rb:43:12:43:57 | call to get | Download | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | HTTP source | -| insecure_download.rb:53:65:53:78 | "/myscript.sh" | insecure_download.rb:53:65:53:78 | "/myscript.sh" | insecure_download.rb:53:65:53:78 | "/myscript.sh" | $@ of sensitive file from $@. | insecure_download.rb:53:14:53:79 | call to get | Download | insecure_download.rb:53:65:53:78 | "/myscript.sh" | HTTP source | +testFailures edges | insecure_download.rb:31:5:31:7 | url : String | insecure_download.rb:33:15:33:17 | url | provenance | | | insecure_download.rb:31:5:31:7 | url : String | insecure_download.rb:33:15:33:17 | url | provenance | | @@ -28,3 +18,14 @@ nodes | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | semmle.label | "http://example.org/unsafe.unk..." | | insecure_download.rb:53:65:53:78 | "/myscript.sh" | semmle.label | "/myscript.sh" | subpaths +#select +| insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | "http://example.org/unsafe.APK" | +| insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | $@ | insecure_download.rb:27:15:27:45 | "http://example.org/unsafe.APK" | "http://example.org/unsafe.APK" | +| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | insecure_download.rb:33:15:33:17 | url | $@ | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | "http://example.org/unsafe.APK" : String | +| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | insecure_download.rb:33:15:33:17 | url | $@ | insecure_download.rb:31:11:31:41 | "http://example.org/unsafe.APK" : String | "http://example.org/unsafe.APK" : String | +| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | $@ | insecure_download.rb:33:15:33:17 | url | url | +| insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | insecure_download.rb:33:15:33:17 | url | $@ | insecure_download.rb:33:15:33:17 | url | url | +| insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | $@ | insecure_download.rb:37:42:37:68 | "http://example.org/unsafe" | "http://example.org/unsafe" | +| insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | $@ | insecure_download.rb:41:37:41:63 | "http://example.org/unsafe" | "http://example.org/unsafe" | +| insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | $@ | insecure_download.rb:43:22:43:56 | "http://example.org/unsafe.unk..." | "http://example.org/unsafe.unk..." | +| insecure_download.rb:53:65:53:78 | "/myscript.sh" | insecure_download.rb:53:65:53:78 | "/myscript.sh" | insecure_download.rb:53:65:53:78 | "/myscript.sh" | $@ | insecure_download.rb:53:65:53:78 | "/myscript.sh" | "/myscript.sh" | diff --git a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.ql b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.ql new file mode 100644 index 000000000000..a8480b23a2df --- /dev/null +++ b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.ql @@ -0,0 +1,23 @@ +import codeql.ruby.security.InsecureDownloadQuery +import InsecureDownloadFlow::PathGraph +import utils.test.InlineExpectationsTest +import utils.test.InlineFlowTestUtil + +module FlowTest implements TestSig { + string getARelevantTag() { result = "BAD" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "BAD" and + exists(DataFlow::Node src, DataFlow::Node sink | InsecureDownloadFlow::flow(src, sink) | + sink.getLocation() = location and + element = sink.toString() and + if exists(getSourceArgString(src)) then value = getSourceArgString(src) else value = "" + ) + } +} + +import MakeTest + +from InsecureDownloadFlow::PathNode source, InsecureDownloadFlow::PathNode sink +where InsecureDownloadFlow::flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.qlref b/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.qlref deleted file mode 100644 index e2048e1cee4f..000000000000 --- a/ruby/ql/test/query-tests/security/cwe-829/InsecureDownload.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: queries/security/cwe-829/InsecureDownload.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/query-tests/security/cwe-829/insecure_download.rb b/ruby/ql/test/query-tests/security/cwe-829/insecure_download.rb index 80b6c286aad3..062de2e4e8f3 100644 --- a/ruby/ql/test/query-tests/security/cwe-829/insecure_download.rb +++ b/ruby/ql/test/query-tests/security/cwe-829/insecure_download.rb @@ -2,7 +2,7 @@ def foo def download_tools(installer) - Excon.get(installer[:url]) # $ MISSING: Alert (requires hash flow) + Excon.get(installer[:url]) # $ MISSING: BAD= (requires hash flow) end constants = { @@ -24,23 +24,23 @@ def bar Excon.get("https://download.microsoft.com/download/5/f/7/5f7acaeb-8363-451f-9425-68a90f98b238/visualcppbuildtools_full.exe") # GOOD - Excon.get("http://example.org/unsafe.APK") # $ Alert + Excon.get("http://example.org/unsafe.APK") # $BAD= end def baz - url = "http://example.org/unsafe.APK" # $ Source + url = "http://example.org/unsafe.APK" - Excon.get(url) # $ Alert + Excon.get(url) # $BAD= end def test - File.open("foo.exe").write(Excon.get("http://example.org/unsafe").body) # $ Alert + File.open("foo.exe").write(Excon.get("http://example.org/unsafe").body) # $BAD= File.open("foo.safe").write(Excon.get("http://example.org/unsafe").body) # GOOD - File.write("foo.exe", Excon.get("http://example.org/unsafe").body) # $ Alert + File.write("foo.exe", Excon.get("http://example.org/unsafe").body) # $BAD= - resp = Excon.get("http://example.org/unsafe.unknown") # $ Alert + resp = Excon.get("http://example.org/unsafe.unknown") # $BAD= file = File.open("unsafe.exe", "w") file.write(resp.body) @@ -50,6 +50,6 @@ def test end def sh - script = Net::HTTP.new("http://mydownload.example.org").get("/myscript.sh").body # $ Alert + script = Net::HTTP.new("http://mydownload.example.org").get("/myscript.sh").body # $BAD= system(script) -end +end \ No newline at end of file diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index e6f39c4147d8..5871326cbada 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -52,32 +52,6 @@ fn property_name(type_name: &str, field_name: &str) -> String { name.to_owned() } -fn has_special_emission(type_name: &str) -> bool { - matches!( - type_name, - "Item" - | "AssocItem" - | "ExternItem" - | "Meta" - | "MacroCall" - | "Fn" - | "Struct" - | "Enum" - | "Union" - | "Trait" - | "Module" - | "Variant" - | "PathExpr" - | "RecordExpr" - | "PathPat" - | "RecordPat" - | "TupleStructPat" - | "MethodCallExpr" - | "PathSegment" - | "Const" - ) -} - fn to_lower_snake_case(s: &str) -> String { let mut buf = String::with_capacity(s.len()); let mut prev = false; @@ -381,7 +355,6 @@ struct ExtractorEnumInfo { snake_case_name: String, ast_name: String, variants: Vec, - has_special_emission: bool, } #[derive(Serialize, Default)] @@ -403,7 +376,6 @@ struct ExtractorNodeInfo { ast_name: String, fields: Vec, has_attrs: bool, - has_special_emission: bool, } #[derive(Serialize)] @@ -434,7 +406,6 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> Option { } }) .collect(), - has_special_emission: has_special_emission(&node.name), }) } @@ -489,7 +460,6 @@ fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { ast_name: node.name.clone(), fields, has_attrs, - has_special_emission: has_special_emission(&node.name), } } diff --git a/rust/ast-generator/templates/extractor.mustache b/rust/ast-generator/templates/extractor.mustache index 03269c26ae3f..ab1fd4b0d378 100644 --- a/rust/ast-generator/templates/extractor.mustache +++ b/rust/ast-generator/templates/extractor.mustache @@ -1,7 +1,8 @@ //! Generated by `ast-generator`, do not edit by hand. use super::base::Translator; -use super::mappings::{TextValue, HasTrapClass, Emission}; +use super::mappings::TextValue; +use crate::{pre_emit,post_emit}; use crate::generated; use crate::trap::{Label, TrapId}; use ra_ap_syntax::ast::{ @@ -12,23 +13,29 @@ use ra_ap_syntax::ast::{ use ra_ap_syntax::{AstNode, ast}; impl Translator<'_> { + fn emit_else_branch(&mut self, node: &ast::ElseBranch) -> Option> { + match node { + ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into), + ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into), + } + } {{#enums}} pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option> { - {{>pre_emission}} + pre_emit!({{name}}, self, node); let label = match node { {{#variants}} ast::{{ast_name}}::{{variant_ast_name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into), {{/variants}} }?; - {{>post_emission}} + post_emit!({{name}}, self, node, label); Some(label) } {{/enums}} {{#nodes}} pub(crate) fn emit_{{snake_case_name}}(&mut self, node: &ast::{{ast_name}}) -> Option> { - {{>pre_emission}} + pre_emit!({{name}}, self, node); {{#has_attrs}} if self.should_be_excluded(node) { return None; } {{/has_attrs}} @@ -58,15 +65,9 @@ impl Translator<'_> { {{/fields}} }); self.emit_location(label, node); - {{>post_emission}} + post_emit!({{name}}, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } {{/nodes}} } -{{#enums}} -{{>trap_class_mapping}} -{{/enums}} -{{#nodes}} -{{>trap_class_mapping}} -{{/nodes}} diff --git a/rust/ast-generator/templates/post_emission.mustache b/rust/ast-generator/templates/post_emission.mustache deleted file mode 100644 index fb57a7802a1f..000000000000 --- a/rust/ast-generator/templates/post_emission.mustache +++ /dev/null @@ -1,3 +0,0 @@ -{{#has_special_emission}} -self.post_emit(node, label); -{{/has_special_emission}} diff --git a/rust/ast-generator/templates/pre_emission.mustache b/rust/ast-generator/templates/pre_emission.mustache deleted file mode 100644 index 150529c41290..000000000000 --- a/rust/ast-generator/templates/pre_emission.mustache +++ /dev/null @@ -1,5 +0,0 @@ -{{#has_special_emission}} -if let Some(label) = self.pre_emit(node) { - return Some(label); -} -{{/has_special_emission}} diff --git a/rust/ast-generator/templates/trap_class_mapping.mustache b/rust/ast-generator/templates/trap_class_mapping.mustache deleted file mode 100644 index 6d833c64067f..000000000000 --- a/rust/ast-generator/templates/trap_class_mapping.mustache +++ /dev/null @@ -1,6 +0,0 @@ -{{#has_special_emission}} - -impl HasTrapClass for ast::{{ast_name}} { - type TrapClass = generated::{{name}}; -} -{{/has_special_emission}} diff --git a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme b/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme deleted file mode 100644 index 8e9b0c516ae8..000000000000 --- a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/old.dbscheme +++ /dev/null @@ -1,3633 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @assoc_item -| @extern_block -| @extern_crate -| @extern_item -| @impl -| @macro_def -| @macro_rules -| @module -| @trait -| @trait_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme b/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme deleted file mode 100644 index f72a3d8d021c..000000000000 --- a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/rust.dbscheme +++ /dev/null @@ -1,3638 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties b/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties deleted file mode 100644 index baad5c5cda55..000000000000 --- a/rust/downgrades/8e9b0c516ae822286689672d1020707020128a19/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Revert making `@assoc_item` and `@extern_item` subtypes of `@item` -compatibility: full diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme deleted file mode 100644 index f72a3d8d021c..000000000000 --- a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme +++ /dev/null @@ -1,3638 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme deleted file mode 100644 index e3b3765116ec..000000000000 --- a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme +++ /dev/null @@ -1,3632 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties b/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties deleted file mode 100644 index 1d437ec8ac6b..000000000000 --- a/rust/downgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties +++ /dev/null @@ -1,3 +0,0 @@ -description: Add databaseMetadata relation -compatibility: full -databaseMetadata.rel: delete diff --git a/rust/extractor/BUILD.bazel b/rust/extractor/BUILD.bazel index 52b551f6335d..fe5d8e50859c 100644 --- a/rust/extractor/BUILD.bazel +++ b/rust/extractor/BUILD.bazel @@ -7,10 +7,7 @@ codeql_rust_binary( name = "extractor", srcs = glob(["src/**/*.rs"]), aliases = aliases(), - compile_data = [ - "src/qltest_cargo.mustache", - "src/nightly-toolchain/rust-toolchain.toml", - ], + compile_data = ["src/qltest_cargo.mustache"], proc_macro_deps = all_crate_deps( proc_macro = True, ) + [ diff --git a/rust/extractor/src/archive.rs b/rust/extractor/src/archive.rs index 2cc3be227016..ad27c483942c 100644 --- a/rust/extractor/src/archive.rs +++ b/rust/extractor/src/archive.rs @@ -15,7 +15,7 @@ impl Archiver { } fn try_archive(&self, source: &Path) -> std::io::Result<()> { - let dest = file_paths::path_for(&self.root, source, "", None); + let dest = file_paths::path_for(&self.root, source, ""); if fs::metadata(&dest).is_ok() { return Ok(()); } diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 4dcfb5380e12..4b8b58d67942 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 409eb2e5fb18cb360a7d255fc2d7926a78bcd2d3c9f8dcdfce0419cea49d1489 409eb2e5fb18cb360a7d255fc2d7926a78bcd2d3c9f8dcdfce0419cea49d1489 +top.rs d80090945fca0c60a08bee4c904b376f5c164a5df6c632c11d744a3c7926be31 d80090945fca0c60a08bee4c904b376f5c164a5df6c632c11d744a3c7926be31 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 278f4e59ab95..488a8c2fd9ec 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -695,6 +695,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct AssocItem { + _unused: () +} + +impl trap::TrapClass for AssocItem { + fn class_name() -> &'static str { "AssocItem" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme AssocItem 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 AssocItem is a subclass of Locatable + 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 AssocItem is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct AssocItemList { pub id: trap::TrapId, @@ -921,6 +957,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct ExternItem { + _unused: () +} + +impl trap::TrapClass for ExternItem { + fn class_name() -> &'static str { "ExternItem" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme ExternItem 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 ExternItem is a subclass of Locatable + 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 ExternItem is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ExternItemList { pub id: trap::TrapId, @@ -8831,69 +8903,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct AssocItem { - _unused: () -} - -impl trap::TrapClass for AssocItem { - fn class_name() -> &'static str { "AssocItem" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme AssocItem is a subclass of Item - 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 AssocItem is a subclass of Stmt - 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 AssocItem 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 AssocItem is a subclass of Locatable - 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 AssocItem 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 AssocItem is a subclass of Addressable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct BlockExpr { pub id: trap::TrapId, @@ -9070,6 +9079,131 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct Const { + pub id: trap::TrapId, + pub attrs: Vec>, + pub body: Option>, + pub generic_param_list: Option>, + pub is_const: bool, + pub is_default: bool, + pub name: Option>, + pub type_repr: Option>, + pub visibility: Option>, + pub where_clause: Option>, +} + +impl trap::TrapEntry for Const { + 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("consts", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("const_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.body { + out.add_tuple("const_bodies", vec![id.into(), v.into()]); + } + if let Some(v) = self.generic_param_list { + out.add_tuple("const_generic_param_lists", 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()]); + } + if let Some(v) = self.type_repr { + out.add_tuple("const_type_reprs", vec![id.into(), v.into()]); + } + if let Some(v) = self.visibility { + out.add_tuple("const_visibilities", vec![id.into(), v.into()]); + } + if let Some(v) = self.where_clause { + out.add_tuple("const_where_clauses", vec![id.into(), v.into()]); + } + } +} + +impl Const { + pub fn emit_has_implementation(id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("const_has_implementation", vec![id.into()]); + } + +} + +impl trap::TrapClass for Const { + fn class_name() -> &'static str { "Const" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Const is a subclass of AssocItem + 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 Const 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 Const is a subclass of Locatable + 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 Const 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 Const is a subclass of Item + 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 Const is a subclass of Stmt + 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 Const is a subclass of Addressable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct ExternBlock { pub id: trap::TrapId, @@ -9249,62 +9383,162 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct ExternItem { - _unused: () +pub struct Function { + pub id: trap::TrapId, + pub param_list: Option>, + pub attrs: Vec>, + pub abi: Option>, + 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 ret_type: Option>, + pub visibility: Option>, + pub where_clause: Option>, } -impl trap::TrapClass for ExternItem { - fn class_name() -> &'static str { "ExternItem" } +impl trap::TrapEntry for Function { + 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("functions", 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("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()]); + } + 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()]); + } + if let Some(v) = self.ret_type { + out.add_tuple("function_ret_types", vec![id.into(), v.into()]); + } + if let Some(v) = self.visibility { + out.add_tuple("function_visibilities", vec![id.into(), v.into()]); + } + if let Some(v) = self.where_clause { + out.add_tuple("function_where_clauses", vec![id.into(), v.into()]); + } + } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme ExternItem is a subclass of Item +impl Function { + pub fn emit_has_implementation(id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("function_has_implementation", vec![id.into()]); + } + +} + +impl trap::TrapClass for Function { + fn class_name() -> &'static str { "Function" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of AssocItem 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 ExternItem is a subclass of Stmt +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function 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 ExternItem is a subclass of AstNode +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of Locatable 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 ExternItem is a subclass of Locatable +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 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 ExternItem is a subclass of Element +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of ExternItem 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 ExternItem is a subclass of Addressable +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Function is a subclass of Item + 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 Stmt + 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 Addressable + 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 Callable unsafe { Self::from_untyped(value.as_untyped()) } @@ -9478,6 +9712,116 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct MacroCall { + pub id: trap::TrapId, + pub attrs: Vec>, + pub path: Option>, + pub token_tree: Option>, +} + +impl trap::TrapEntry for MacroCall { + 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_calls", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("macro_call_attrs", vec![id.into(), i.into(), v.into()]); + } + if let Some(v) = self.path { + out.add_tuple("macro_call_paths", vec![id.into(), v.into()]); + } + if let Some(v) = self.token_tree { + out.add_tuple("macro_call_token_trees", vec![id.into(), v.into()]); + } + } +} + +impl MacroCall { + pub fn emit_macro_call_expansion(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { + out.add_tuple("macro_call_macro_call_expansions", vec![id.into(), value.into()]); + } + +} + +impl trap::TrapClass for MacroCall { + fn class_name() -> &'static str { "MacroCall" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme MacroCall is a subclass of AssocItem + 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 MacroCall 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 MacroCall is a subclass of Locatable + 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 MacroCall 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 MacroCall is a subclass of ExternItem + 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 MacroCall is a subclass of Item + 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 MacroCall is a subclass of Stmt + 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 MacroCall is a subclass of Addressable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct MacroDef { pub id: trap::TrapId, @@ -10010,16 +10354,130 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct StructExpr { - pub id: trap::TrapId, - pub path: Option>, - pub struct_expr_field_list: Option>, -} - -impl trap::TrapEntry for StructExpr { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } +pub struct Static { + pub id: trap::TrapId, + pub attrs: Vec>, + pub body: Option>, + pub is_mut: bool, + pub is_static: bool, + pub is_unsafe: bool, + pub name: Option>, + pub type_repr: Option>, + pub visibility: Option>, +} + +impl trap::TrapEntry for Static { + 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("statics", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("static_attrs", vec![id.into(), i.into(), v.into()]); + } + 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 self.is_unsafe { + out.add_tuple("static_is_unsafe", vec![id.into()]); + } + if let Some(v) = self.name { + out.add_tuple("static_names", vec![id.into(), v.into()]); + } + if let Some(v) = self.type_repr { + out.add_tuple("static_type_reprs", vec![id.into(), v.into()]); + } + if let Some(v) = self.visibility { + out.add_tuple("static_visibilities", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for Static { + fn class_name() -> &'static str { "Static" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Static is a subclass of ExternItem + 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 Static 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 Static is a subclass of Locatable + 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 Static 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 Static is a subclass of Item + 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 Static is a subclass of Stmt + 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 Static is a subclass of Addressable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +#[derive(Debug)] +pub struct StructExpr { + pub id: trap::TrapId, + pub path: Option>, + pub struct_expr_field_list: Option>, +} + +impl trap::TrapEntry for StructExpr { + 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("struct_exprs", vec![id.into()]); @@ -10458,6 +10916,129 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct TypeAlias { + pub id: trap::TrapId, + pub attrs: Vec>, + pub generic_param_list: Option>, + pub is_default: bool, + pub name: Option>, + pub type_repr: Option>, + pub type_bound_list: Option>, + pub visibility: Option>, + pub where_clause: Option>, +} + +impl trap::TrapEntry for TypeAlias { + 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("type_aliases", vec![id.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("type_alias_attrs", vec![id.into(), i.into(), v.into()]); + } + 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()]); + } + if let Some(v) = self.type_repr { + out.add_tuple("type_alias_type_reprs", vec![id.into(), v.into()]); + } + if let Some(v) = self.type_bound_list { + out.add_tuple("type_alias_type_bound_lists", vec![id.into(), v.into()]); + } + if let Some(v) = self.visibility { + out.add_tuple("type_alias_visibilities", vec![id.into(), v.into()]); + } + if let Some(v) = self.where_clause { + out.add_tuple("type_alias_where_clauses", vec![id.into(), v.into()]); + } + } +} + +impl trap::TrapClass for TypeAlias { + fn class_name() -> &'static str { "TypeAlias" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme TypeAlias is a subclass of AssocItem + 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 TypeAlias 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 TypeAlias is a subclass of Locatable + 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 TypeAlias 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 TypeAlias is a subclass of ExternItem + 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 TypeAlias is a subclass of Item + 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 TypeAlias is a subclass of Stmt + 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 TypeAlias is a subclass of Addressable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Use { pub id: trap::TrapId, @@ -10544,137 +11125,12 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct Const { - pub id: trap::TrapId, +pub struct Enum { + pub id: trap::TrapId, pub attrs: Vec>, - pub body: Option>, pub generic_param_list: Option>, - pub is_const: bool, - pub is_default: bool, pub name: Option>, - pub type_repr: Option>, - pub visibility: Option>, - pub where_clause: Option>, -} - -impl trap::TrapEntry for Const { - 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("consts", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("const_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.body { - out.add_tuple("const_bodies", vec![id.into(), v.into()]); - } - if let Some(v) = self.generic_param_list { - out.add_tuple("const_generic_param_lists", 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()]); - } - if let Some(v) = self.type_repr { - out.add_tuple("const_type_reprs", vec![id.into(), v.into()]); - } - if let Some(v) = self.visibility { - out.add_tuple("const_visibilities", vec![id.into(), v.into()]); - } - if let Some(v) = self.where_clause { - out.add_tuple("const_where_clauses", vec![id.into(), v.into()]); - } - } -} - -impl Const { - pub fn emit_has_implementation(id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("const_has_implementation", vec![id.into()]); - } - -} - -impl trap::TrapClass for Const { - fn class_name() -> &'static str { "Const" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Const is a subclass of AssocItem - 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 Const is a subclass of Item - 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 Const is a subclass of Stmt - 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 Const 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 Const is a subclass of Locatable - 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 Const 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 Const is a subclass of Addressable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct Enum { - pub id: trap::TrapId, - pub attrs: Vec>, - pub generic_param_list: Option>, - pub name: Option>, - pub variant_list: Option>, + pub variant_list: Option>, pub visibility: Option>, pub where_clause: Option>, } @@ -10868,486 +11324,99 @@ impl From> for trap::Label { } #[derive(Debug)] -pub struct Function { - pub id: trap::TrapId, - pub param_list: Option>, +pub struct LoopExpr { + pub id: trap::TrapId, + pub label: Option>, + pub loop_body: Option>, pub attrs: Vec>, - pub abi: Option>, - 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 ret_type: Option>, - pub visibility: Option>, - pub where_clause: Option>, } -impl trap::TrapEntry for Function { +impl trap::TrapEntry for LoopExpr { 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("functions", 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("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()]); - } - 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()]); - } - if let Some(v) = self.ret_type { - out.add_tuple("function_ret_types", vec![id.into(), v.into()]); + out.add_tuple("loop_exprs", vec![id.into()]); + if let Some(v) = self.label { + out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); } - if let Some(v) = self.visibility { - out.add_tuple("function_visibilities", vec![id.into(), v.into()]); + if let Some(v) = self.loop_body { + out.add_tuple("looping_expr_loop_bodies", vec![id.into(), v.into()]); } - if let Some(v) = self.where_clause { - out.add_tuple("function_where_clauses", vec![id.into(), v.into()]); + for (i, v) in self.attrs.into_iter().enumerate() { + out.add_tuple("loop_expr_attrs", vec![id.into(), i.into(), v.into()]); } } } -impl Function { - pub fn emit_has_implementation(id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("function_has_implementation", vec![id.into()]); - } - -} - -impl trap::TrapClass for Function { - fn class_name() -> &'static str { "Function" } +impl trap::TrapClass for LoopExpr { + fn class_name() -> &'static str { "LoopExpr" } } -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Function is a subclass of AssocItem +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of LoopingExpr 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 Item +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of LabelableExpr 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 Stmt +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr 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 Function is a subclass of AstNode +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr 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 Function is a subclass of Locatable +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of Locatable 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 +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme LoopExpr 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 Function is a subclass of Addressable - 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 ExternItem - 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 Callable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct LoopExpr { - pub id: trap::TrapId, - pub label: Option>, - pub loop_body: Option>, - pub attrs: Vec>, -} - -impl trap::TrapEntry for LoopExpr { - 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("loop_exprs", vec![id.into()]); - if let Some(v) = self.label { - out.add_tuple("labelable_expr_labels", vec![id.into(), v.into()]); - } - if let Some(v) = self.loop_body { - out.add_tuple("looping_expr_loop_bodies", vec![id.into(), v.into()]); - } - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("loop_expr_attrs", vec![id.into(), i.into(), v.into()]); - } - } -} - -impl trap::TrapClass for LoopExpr { - fn class_name() -> &'static str { "LoopExpr" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme LoopExpr is a subclass of LoopingExpr - 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 LoopExpr is a subclass of LabelableExpr - 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 LoopExpr 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 LoopExpr 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 LoopExpr is a subclass of Locatable - 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 LoopExpr is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct MacroCall { - pub id: trap::TrapId, - pub attrs: Vec>, - pub path: Option>, - pub token_tree: Option>, -} - -impl trap::TrapEntry for MacroCall { - 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_calls", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("macro_call_attrs", vec![id.into(), i.into(), v.into()]); - } - if let Some(v) = self.path { - out.add_tuple("macro_call_paths", vec![id.into(), v.into()]); - } - if let Some(v) = self.token_tree { - out.add_tuple("macro_call_token_trees", vec![id.into(), v.into()]); - } - } -} - -impl MacroCall { - pub fn emit_macro_call_expansion(id: trap::Label, value: trap::Label, out: &mut trap::Writer) { - out.add_tuple("macro_call_macro_call_expansions", vec![id.into(), value.into()]); - } - -} - -impl trap::TrapClass for MacroCall { - fn class_name() -> &'static str { "MacroCall" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme MacroCall is a subclass of AssocItem - 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 MacroCall is a subclass of Item - 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 MacroCall is a subclass of Stmt - 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 MacroCall 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 MacroCall is a subclass of Locatable - 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 MacroCall 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 MacroCall is a subclass of Addressable - 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 MacroCall is a subclass of ExternItem - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct Static { - pub id: trap::TrapId, - pub attrs: Vec>, - pub body: Option>, - pub is_mut: bool, - pub is_static: bool, - pub is_unsafe: bool, - pub name: Option>, - pub type_repr: Option>, - pub visibility: Option>, -} - -impl trap::TrapEntry for Static { - 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("statics", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("static_attrs", vec![id.into(), i.into(), v.into()]); - } - 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 self.is_unsafe { - out.add_tuple("static_is_unsafe", vec![id.into()]); - } - if let Some(v) = self.name { - out.add_tuple("static_names", vec![id.into(), v.into()]); - } - if let Some(v) = self.type_repr { - out.add_tuple("static_type_reprs", vec![id.into(), v.into()]); - } - if let Some(v) = self.visibility { - out.add_tuple("static_visibilities", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for Static { - fn class_name() -> &'static str { "Static" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Static is a subclass of ExternItem - 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 Static is a subclass of Item - 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 Static is a subclass of Stmt - 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 Static 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 Static is a subclass of Locatable - 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 Static 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 Static is a subclass of Addressable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -#[derive(Debug)] -pub struct Struct { - pub id: trap::TrapId, - pub attrs: Vec>, - pub field_list: Option>, - pub generic_param_list: Option>, - pub name: Option>, - pub visibility: Option>, - pub where_clause: Option>, +#[derive(Debug)] +pub struct Struct { + pub id: trap::TrapId, + pub attrs: Vec>, + pub field_list: Option>, + pub generic_param_list: Option>, + pub name: Option>, + pub visibility: Option>, + pub where_clause: Option>, } impl trap::TrapEntry for Struct { @@ -11445,129 +11514,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct TypeAlias { - pub id: trap::TrapId, - pub attrs: Vec>, - pub generic_param_list: Option>, - pub is_default: bool, - pub name: Option>, - pub type_repr: Option>, - pub type_bound_list: Option>, - pub visibility: Option>, - pub where_clause: Option>, -} - -impl trap::TrapEntry for TypeAlias { - 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("type_aliases", vec![id.into()]); - for (i, v) in self.attrs.into_iter().enumerate() { - out.add_tuple("type_alias_attrs", vec![id.into(), i.into(), v.into()]); - } - 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()]); - } - if let Some(v) = self.type_repr { - out.add_tuple("type_alias_type_reprs", vec![id.into(), v.into()]); - } - if let Some(v) = self.type_bound_list { - out.add_tuple("type_alias_type_bound_lists", vec![id.into(), v.into()]); - } - if let Some(v) = self.visibility { - out.add_tuple("type_alias_visibilities", vec![id.into(), v.into()]); - } - if let Some(v) = self.where_clause { - out.add_tuple("type_alias_where_clauses", vec![id.into(), v.into()]); - } - } -} - -impl trap::TrapClass for TypeAlias { - fn class_name() -> &'static str { "TypeAlias" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme TypeAlias is a subclass of AssocItem - 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 TypeAlias is a subclass of Item - 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 TypeAlias is a subclass of Stmt - 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 TypeAlias 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 TypeAlias is a subclass of Locatable - 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 TypeAlias 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 TypeAlias is a subclass of Addressable - 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 TypeAlias is a subclass of ExternItem - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct Union { pub id: trap::TrapId, diff --git a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml b/rust/extractor/src/nightly-toolchain/rust-toolchain.toml deleted file mode 100644 index 7ed21df91218..000000000000 --- a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml +++ /dev/null @@ -1,3 +0,0 @@ -[toolchain] -channel = "nightly-2025-06-01" -components = [ "rust-src" ] diff --git a/rust/extractor/src/qltest.rs b/rust/extractor/src/qltest.rs index 92ed9d62505c..f989ecf2eaa6 100644 --- a/rust/extractor/src/qltest.rs +++ b/rust/extractor/src/qltest.rs @@ -9,6 +9,7 @@ use std::process::Command; use tracing::info; const EDITION: &str = "2021"; +const NIGHTLY: &str = "nightly-2025-06-01"; fn dump_lib() -> anyhow::Result<()> { let path_iterator = glob("*.rs").context("globbing test sources")?; @@ -75,7 +76,7 @@ fn dump_cargo_manifest(dependencies: &[String]) -> anyhow::Result<()> { fn dump_nightly_toolchain() -> anyhow::Result<()> { fs::write( "rust-toolchain.toml", - include_str!("nightly-toolchain/rust-toolchain.toml"), + format!("[toolchain]\nchannel = \"{NIGHTLY}\"\n"), ) .context("writing rust-toolchain.toml")?; Ok(()) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index 81bb13305a62..a71d9787e94b 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -1,4 +1,4 @@ -use super::mappings::{AddressableAst, AddressableHir, Emission, PathAst}; +use super::mappings::{AddressableAst, AddressableHir, PathAst}; use crate::generated::{self}; use crate::rust_analyzer::FileSemanticInformation; use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; @@ -22,147 +22,120 @@ use ra_ap_syntax::{ ast, }; -impl Emission for Translator<'_> { - fn pre_emit(&mut self, node: &ast::Item) -> Option> { - self.prepare_item_expansion(node).map(Into::into) - } - - fn post_emit(&mut self, node: &ast::Item, label: Label) { - self.emit_item_expansion(node, label); - } -} - -impl Emission for Translator<'_> { - fn pre_emit(&mut self, node: &ast::AssocItem) -> Option> { - self.prepare_item_expansion(&node.clone().into()) - .map(Into::into) - } - - fn post_emit(&mut self, node: &ast::AssocItem, label: Label) { - self.emit_item_expansion(&node.clone().into(), label.into()); - } -} - -impl Emission for Translator<'_> { - fn pre_emit(&mut self, node: &ast::ExternItem) -> Option> { - self.prepare_item_expansion(&node.clone().into()) - .map(Into::into) - } - - fn post_emit(&mut self, node: &ast::ExternItem, label: Label) { - self.emit_item_expansion(&node.clone().into(), label.into()); - } -} - -impl Emission for Translator<'_> { - fn pre_emit(&mut self, _node: &ast::Meta) -> Option> { - self.macro_context_depth += 1; - None - } - - fn post_emit(&mut self, _node: &ast::Meta, _label: Label) { - self.macro_context_depth -= 1; - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Fn, label: Label) { - self.emit_function_has_implementation(node, label); - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Struct, label: Label) { - self.emit_derive_expansion(node, label); - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Enum, label: Label) { - self.emit_derive_expansion(node, label); - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Union, label: Label) { - self.emit_derive_expansion(node, label); - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Trait, label: Label) { - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Module, label: Label) { - self.extract_canonical_origin(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Variant, label: Label) { - self.extract_canonical_origin_of_enum_variant(node, label); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::PathExpr, label: Label) { - self.extract_path_canonical_destination(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::RecordExpr, label: Label) { - self.extract_path_canonical_destination(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::PathPat, label: Label) { - self.extract_path_canonical_destination(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::RecordPat, label: Label) { - self.extract_path_canonical_destination(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::TupleStructPat, label: Label) { - self.extract_path_canonical_destination(node, label.into()); - } -} - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::MethodCallExpr, label: Label) { - self.extract_method_canonical_destination(node, label); - } +#[macro_export] +macro_rules! pre_emit { + (Item, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion($node) { + return Some(label.into()); + } + }; + (AssocItem, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion(&$node.clone().into()) { + return Some(label.into()); + } + }; + (ExternItem, $self:ident, $node:ident) => { + if let Some(label) = $self.prepare_item_expansion(&$node.clone().into()) { + return Some(label.into()); + } + }; + (Meta, $self:ident, $node:ident) => { + // rust-analyzer doesn't expand macros in this context + $self.macro_context_depth += 1; + }; + ($($_:tt)*) => {}; } -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::PathSegment, label: Label) { - self.extract_types_from_path_segment(node, label); +// TODO: remove the mannually written Label conversions. These can be auto-generated by +// changing the base class of AssocItem from AstNode to Item +impl From> for crate::trap::Label { + fn from(value: crate::trap::Label) -> Self { + // SAFETY: this is safe because every concrete instance of `@assoc_item` is also an instance of `@item` + unsafe { Self::from_untyped(value.as_untyped()) } } } - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::Const, label: Label) { - self.emit_const_has_implementation(node, label); +// TODO: remove the mannually written Label conversions. These can be auto-generated by +// changing the base class of ExternItem from AstNode to Item +impl From> for crate::trap::Label { + fn from(value: crate::trap::Label) -> Self { + // SAFETY: this is safe because every concrete instance of `@extern_item` is also an instance of `@item` + unsafe { Self::from_untyped(value.as_untyped()) } } } - -impl Emission for Translator<'_> { - fn post_emit(&mut self, node: &ast::MacroCall, label: Label) { - self.extract_macro_call_expanded(node, label); - } +#[macro_export] +macro_rules! post_emit { + (Meta, $self:ident, $node:ident, $label:ident) => { + $self.macro_context_depth -= 1; + }; + (MacroCall, $self:ident, $node:ident, $label:ident) => { + $self.extract_macro_call_expanded($node, $label); + }; + (Function, $self:ident, $node:ident, $label:ident) => { + $self.emit_function_has_implementation($node, $label); + $self.extract_canonical_origin($node, $label.into()); + }; + (Trait, $self:ident, $node:ident, $label:ident) => { + $self.extract_canonical_origin($node, $label.into()); + }; + (Struct, $self:ident, $node:ident, $label:ident) => { + $self.emit_derive_expansion($node, $label); + $self.extract_canonical_origin($node, $label.into()); + }; + (Enum, $self:ident, $node:ident, $label:ident) => { + $self.emit_derive_expansion($node, $label); + $self.extract_canonical_origin($node, $label.into()); + }; + (Union, $self:ident, $node:ident, $label:ident) => { + $self.emit_derive_expansion($node, $label); + $self.extract_canonical_origin($node, $label.into()); + }; + (Module, $self:ident, $node:ident, $label:ident) => { + $self.extract_canonical_origin($node, $label.into()); + }; + (Variant, $self:ident, $node:ident, $label:ident) => { + $self.extract_canonical_origin_of_enum_variant($node, $label); + }; + (Item, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion($node, $label); + }; + (AssocItem, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion( + &$node.clone().into(), + From::>::from($label), + ); + }; + (ExternItem, $self:ident, $node:ident, $label:ident) => { + $self.emit_item_expansion( + &$node.clone().into(), + From::>::from($label), + ); + }; + // TODO canonical origin of other items + (PathExpr, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination($node, $label.into()); + }; + (StructExpr, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination($node, $label.into()); + }; + (PathPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination($node, $label.into()); + }; + (StructPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination($node, $label.into()); + }; + (TupleStructPat, $self:ident, $node:ident, $label:ident) => { + $self.extract_path_canonical_destination($node, $label.into()); + }; + (MethodCallExpr, $self:ident, $node:ident, $label:ident) => { + $self.extract_method_canonical_destination($node, $label); + }; + (PathSegment, $self:ident, $node:ident, $label:ident) => { + $self.extract_types_from_path_segment($node, $label.into()); + }; + (Const, $self:ident, $node:ident, $label:ident) => { + $self.emit_const_has_implementation($node, $label); + }; + ($($_:tt)*) => {}; } // see https://github.com/tokio-rs/tracing/issues/2730 @@ -524,17 +497,6 @@ impl<'a> Translator<'a> { ); } } - - pub(crate) fn emit_else_branch( - &mut self, - node: &ast::ElseBranch, - ) -> Option> { - match node { - ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into), - ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into), - } - } - fn canonical_path_from_type(&self, ty: Type) -> Option { let sema = self.semantics.as_ref().unwrap(); // rust-analyzer doesn't provide a type enum directly diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 787ce71bf2a8..39efe763a3bb 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1,8 +1,9 @@ //! Generated by `ast-generator`, do not edit by hand. use super::base::Translator; -use super::mappings::{Emission, HasTrapClass, TextValue}; +use super::mappings::TextValue; use crate::generated; use crate::trap::{Label, TrapId}; +use crate::{post_emit, pre_emit}; use ra_ap_syntax::ast::{ HasArgList, HasAttrs, HasGenericArgs, HasGenericParams, HasLoopBody, HasModuleItem, HasName, HasTypeBounds, HasVisibility, RangeItem, @@ -10,10 +11,17 @@ use ra_ap_syntax::ast::{ #[rustfmt::skip] use ra_ap_syntax::{AstNode, ast}; impl Translator<'_> { + fn emit_else_branch(&mut self, node: &ast::ElseBranch) -> Option> { + match node { + ast::ElseBranch::IfExpr(inner) => self.emit_if_expr(inner).map(Into::into), + ast::ElseBranch::Block(inner) => self.emit_block_expr(inner).map(Into::into), + } + } pub(crate) fn emit_asm_operand( &mut self, node: &ast::AsmOperand, ) -> Option> { + pre_emit!(AsmOperand, self, node); let label = match node { ast::AsmOperand::AsmConst(inner) => self.emit_asm_const(inner).map(Into::into), ast::AsmOperand::AsmLabel(inner) => self.emit_asm_label(inner).map(Into::into), @@ -22,12 +30,14 @@ impl Translator<'_> { } ast::AsmOperand::AsmSym(inner) => self.emit_asm_sym(inner).map(Into::into), }?; + post_emit!(AsmOperand, self, node, label); Some(label) } pub(crate) fn emit_asm_piece( &mut self, node: &ast::AsmPiece, ) -> Option> { + pre_emit!(AsmPiece, self, node); let label = match node { ast::AsmPiece::AsmClobberAbi(inner) => self.emit_asm_clobber_abi(inner).map(Into::into), ast::AsmPiece::AsmOperandNamed(inner) => { @@ -35,25 +45,25 @@ impl Translator<'_> { } ast::AsmPiece::AsmOptions(inner) => self.emit_asm_options(inner).map(Into::into), }?; + post_emit!(AsmPiece, self, node, label); Some(label) } pub(crate) fn emit_assoc_item( &mut self, node: &ast::AssocItem, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(AssocItem, self, node); let label = match node { ast::AssocItem::Const(inner) => self.emit_const(inner).map(Into::into), ast::AssocItem::Fn(inner) => self.emit_fn(inner).map(Into::into), ast::AssocItem::MacroCall(inner) => self.emit_macro_call(inner).map(Into::into), ast::AssocItem::TypeAlias(inner) => self.emit_type_alias(inner).map(Into::into), }?; - self.post_emit(node, label); + post_emit!(AssocItem, self, node, label); Some(label) } pub(crate) fn emit_expr(&mut self, node: &ast::Expr) -> Option> { + pre_emit!(Expr, self, node); let label = match node { ast::Expr::ArrayExpr(inner) => self.emit_array_expr(inner).map(Into::into), ast::Expr::AsmExpr(inner) => self.emit_asm_expr(inner).map(Into::into), @@ -92,28 +102,28 @@ impl Translator<'_> { ast::Expr::YeetExpr(inner) => self.emit_yeet_expr(inner).map(Into::into), ast::Expr::YieldExpr(inner) => self.emit_yield_expr(inner).map(Into::into), }?; + post_emit!(Expr, self, node, label); Some(label) } pub(crate) fn emit_extern_item( &mut self, node: &ast::ExternItem, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(ExternItem, self, node); let label = match node { ast::ExternItem::Fn(inner) => self.emit_fn(inner).map(Into::into), ast::ExternItem::MacroCall(inner) => self.emit_macro_call(inner).map(Into::into), ast::ExternItem::Static(inner) => self.emit_static(inner).map(Into::into), ast::ExternItem::TypeAlias(inner) => self.emit_type_alias(inner).map(Into::into), }?; - self.post_emit(node, label); + post_emit!(ExternItem, self, node, label); Some(label) } pub(crate) fn emit_field_list( &mut self, node: &ast::FieldList, ) -> Option> { + pre_emit!(FieldList, self, node); let label = match node { ast::FieldList::RecordFieldList(inner) => { self.emit_record_field_list(inner).map(Into::into) @@ -122,24 +132,28 @@ impl Translator<'_> { self.emit_tuple_field_list(inner).map(Into::into) } }?; + post_emit!(FieldList, self, node, label); Some(label) } pub(crate) fn emit_generic_arg( &mut self, node: &ast::GenericArg, ) -> Option> { + pre_emit!(GenericArg, self, node); let label = match node { ast::GenericArg::AssocTypeArg(inner) => self.emit_assoc_type_arg(inner).map(Into::into), ast::GenericArg::ConstArg(inner) => self.emit_const_arg(inner).map(Into::into), ast::GenericArg::LifetimeArg(inner) => self.emit_lifetime_arg(inner).map(Into::into), ast::GenericArg::TypeArg(inner) => self.emit_type_arg(inner).map(Into::into), }?; + post_emit!(GenericArg, self, node, label); Some(label) } pub(crate) fn emit_generic_param( &mut self, node: &ast::GenericParam, ) -> Option> { + pre_emit!(GenericParam, self, node); let label = match node { ast::GenericParam::ConstParam(inner) => self.emit_const_param(inner).map(Into::into), ast::GenericParam::LifetimeParam(inner) => { @@ -147,9 +161,11 @@ impl Translator<'_> { } ast::GenericParam::TypeParam(inner) => self.emit_type_param(inner).map(Into::into), }?; + post_emit!(GenericParam, self, node, label); Some(label) } pub(crate) fn emit_pat(&mut self, node: &ast::Pat) -> Option> { + pre_emit!(Pat, self, node); let label = match node { ast::Pat::BoxPat(inner) => self.emit_box_pat(inner).map(Into::into), ast::Pat::ConstBlockPat(inner) => self.emit_const_block_pat(inner).map(Into::into), @@ -168,17 +184,21 @@ impl Translator<'_> { ast::Pat::TupleStructPat(inner) => self.emit_tuple_struct_pat(inner).map(Into::into), ast::Pat::WildcardPat(inner) => self.emit_wildcard_pat(inner).map(Into::into), }?; + post_emit!(Pat, self, node, label); Some(label) } pub(crate) fn emit_stmt(&mut self, node: &ast::Stmt) -> Option> { + pre_emit!(Stmt, self, node); let label = match node { ast::Stmt::ExprStmt(inner) => self.emit_expr_stmt(inner).map(Into::into), ast::Stmt::Item(inner) => self.emit_item(inner).map(Into::into), ast::Stmt::LetStmt(inner) => self.emit_let_stmt(inner).map(Into::into), }?; + post_emit!(Stmt, self, node, label); Some(label) } pub(crate) fn emit_type(&mut self, node: &ast::Type) -> Option> { + pre_emit!(TypeRepr, self, node); let label = match node { ast::Type::ArrayType(inner) => self.emit_array_type(inner).map(Into::into), ast::Type::DynTraitType(inner) => self.emit_dyn_trait_type(inner).map(Into::into), @@ -195,22 +215,23 @@ impl Translator<'_> { ast::Type::SliceType(inner) => self.emit_slice_type(inner).map(Into::into), ast::Type::TupleType(inner) => self.emit_tuple_type(inner).map(Into::into), }?; + post_emit!(TypeRepr, self, node, label); Some(label) } pub(crate) fn emit_use_bound_generic_arg( &mut self, node: &ast::UseBoundGenericArg, ) -> Option> { + pre_emit!(UseBoundGenericArg, self, node); let label = match node { ast::UseBoundGenericArg::Lifetime(inner) => self.emit_lifetime(inner).map(Into::into), ast::UseBoundGenericArg::NameRef(inner) => self.emit_name_ref(inner).map(Into::into), }?; + post_emit!(UseBoundGenericArg, self, node, label); Some(label) } pub(crate) fn emit_item(&mut self, node: &ast::Item) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Item, self, node); let label = match node { ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), ast::Item::Enum(inner) => self.emit_enum(inner).map(Into::into), @@ -230,16 +251,18 @@ impl Translator<'_> { ast::Item::Union(inner) => self.emit_union(inner).map(Into::into), ast::Item::Use(inner) => self.emit_use(inner).map(Into::into), }?; - self.post_emit(node, label); + post_emit!(Item, self, node, label); Some(label) } pub(crate) fn emit_abi(&mut self, node: &ast::Abi) -> Option> { + pre_emit!(Abi, self, node); let abi_string = node.try_get_text(); let label = self.trap.emit(generated::Abi { id: TrapId::Star, abi_string, }); self.emit_location(label, node); + post_emit!(Abi, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -247,12 +270,14 @@ impl Translator<'_> { &mut self, node: &ast::ArgList, ) -> Option> { + pre_emit!(ArgList, self, node); let args = node.args().filter_map(|x| self.emit_expr(&x)).collect(); let label = self.trap.emit(generated::ArgList { id: TrapId::Star, args, }); self.emit_location(label, node); + post_emit!(ArgList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -260,6 +285,7 @@ impl Translator<'_> { &mut self, node: &ast::ArrayExpr, ) -> Option> { + pre_emit!(ArrayExprInternal, self, node); if self.should_be_excluded(node) { return None; } @@ -273,6 +299,7 @@ impl Translator<'_> { is_semicolon, }); self.emit_location(label, node); + post_emit!(ArrayExprInternal, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -280,6 +307,7 @@ impl Translator<'_> { &mut self, node: &ast::ArrayType, ) -> Option> { + pre_emit!(ArrayTypeRepr, self, node); let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(&x)); let element_type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ArrayTypeRepr { @@ -288,6 +316,7 @@ impl Translator<'_> { element_type_repr, }); self.emit_location(label, node); + post_emit!(ArrayTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -295,10 +324,12 @@ impl Translator<'_> { &mut self, node: &ast::AsmClobberAbi, ) -> Option> { + pre_emit!(AsmClobberAbi, self, node); let label = self .trap .emit(generated::AsmClobberAbi { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(AsmClobberAbi, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -306,6 +337,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmConst, ) -> Option> { + pre_emit!(AsmConst, self, node); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let is_const = node.const_token().is_some(); let label = self.trap.emit(generated::AsmConst { @@ -314,6 +346,7 @@ impl Translator<'_> { is_const, }); self.emit_location(label, node); + post_emit!(AsmConst, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -321,8 +354,10 @@ impl Translator<'_> { &mut self, node: &ast::AsmDirSpec, ) -> Option> { + pre_emit!(AsmDirSpec, self, node); let label = self.trap.emit(generated::AsmDirSpec { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(AsmDirSpec, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -330,6 +365,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmExpr, ) -> Option> { + pre_emit!(AsmExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -346,6 +382,7 @@ impl Translator<'_> { template, }); self.emit_location(label, node); + post_emit!(AsmExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -353,12 +390,14 @@ impl Translator<'_> { &mut self, node: &ast::AsmLabel, ) -> Option> { + pre_emit!(AsmLabel, self, node); let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::AsmLabel { id: TrapId::Star, block_expr, }); self.emit_location(label, node); + post_emit!(AsmLabel, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -366,6 +405,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmOperandExpr, ) -> Option> { + pre_emit!(AsmOperandExpr, self, node); let in_expr = node.in_expr().and_then(|x| self.emit_expr(&x)); let out_expr = node.out_expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::AsmOperandExpr { @@ -374,6 +414,7 @@ impl Translator<'_> { out_expr, }); self.emit_location(label, node); + post_emit!(AsmOperandExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -381,6 +422,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmOperandNamed, ) -> Option> { + pre_emit!(AsmOperandNamed, self, node); let asm_operand = node.asm_operand().and_then(|x| self.emit_asm_operand(&x)); let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::AsmOperandNamed { @@ -389,6 +431,7 @@ impl Translator<'_> { name, }); self.emit_location(label, node); + post_emit!(AsmOperandNamed, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -396,12 +439,14 @@ impl Translator<'_> { &mut self, node: &ast::AsmOption, ) -> Option> { + pre_emit!(AsmOption, self, node); let is_raw = node.raw_token().is_some(); let label = self.trap.emit(generated::AsmOption { id: TrapId::Star, is_raw, }); self.emit_location(label, node); + post_emit!(AsmOption, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -409,6 +454,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmOptions, ) -> Option> { + pre_emit!(AsmOptionsList, self, node); let asm_options = node .asm_options() .filter_map(|x| self.emit_asm_option(&x)) @@ -418,6 +464,7 @@ impl Translator<'_> { asm_options, }); self.emit_location(label, node); + post_emit!(AsmOptionsList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -425,6 +472,7 @@ impl Translator<'_> { &mut self, node: &ast::AsmRegOperand, ) -> Option> { + pre_emit!(AsmRegOperand, self, node); let asm_dir_spec = node.asm_dir_spec().and_then(|x| self.emit_asm_dir_spec(&x)); let asm_operand_expr = node .asm_operand_expr() @@ -437,6 +485,7 @@ impl Translator<'_> { asm_reg_spec, }); self.emit_location(label, node); + post_emit!(AsmRegOperand, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -444,22 +493,26 @@ impl Translator<'_> { &mut self, node: &ast::AsmRegSpec, ) -> Option> { + pre_emit!(AsmRegSpec, self, node); let identifier = node.name_ref().and_then(|x| self.emit_name_ref(&x)); let label = self.trap.emit(generated::AsmRegSpec { id: TrapId::Star, identifier, }); self.emit_location(label, node); + post_emit!(AsmRegSpec, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_asm_sym(&mut self, node: &ast::AsmSym) -> Option> { + pre_emit!(AsmSym, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::AsmSym { id: TrapId::Star, path, }); self.emit_location(label, node); + post_emit!(AsmSym, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -467,6 +520,7 @@ impl Translator<'_> { &mut self, node: &ast::AssocItemList, ) -> Option> { + pre_emit!(AssocItemList, self, node); if self.should_be_excluded(node) { return None; } @@ -481,6 +535,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, node); + post_emit!(AssocItemList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -488,6 +543,7 @@ impl Translator<'_> { &mut self, node: &ast::AssocTypeArg, ) -> Option> { + pre_emit!(AssocTypeArg, self, node); let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(&x)); let generic_arg_list = node .generic_arg_list() @@ -514,16 +570,19 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(AssocTypeArg, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_attr(&mut self, node: &ast::Attr) -> Option> { + pre_emit!(Attr, self, node); let meta = node.meta().and_then(|x| self.emit_meta(&x)); let label = self.trap.emit(generated::Attr { id: TrapId::Star, meta, }); self.emit_location(label, node); + post_emit!(Attr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -531,6 +590,7 @@ impl Translator<'_> { &mut self, node: &ast::AwaitExpr, ) -> Option> { + pre_emit!(AwaitExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -542,6 +602,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(AwaitExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -549,6 +610,7 @@ impl Translator<'_> { &mut self, node: &ast::BecomeExpr, ) -> Option> { + pre_emit!(BecomeExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -560,6 +622,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(BecomeExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -567,6 +630,7 @@ impl Translator<'_> { &mut self, node: &ast::BinExpr, ) -> Option> { + pre_emit!(BinaryExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -582,6 +646,7 @@ impl Translator<'_> { rhs, }); self.emit_location(label, node); + post_emit!(BinaryExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -589,6 +654,7 @@ impl Translator<'_> { &mut self, node: &ast::BlockExpr, ) -> Option> { + pre_emit!(BlockExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -614,16 +680,19 @@ impl Translator<'_> { stmt_list, }); self.emit_location(label, node); + post_emit!(BlockExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_box_pat(&mut self, node: &ast::BoxPat) -> Option> { + pre_emit!(BoxPat, self, node); let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::BoxPat { id: TrapId::Star, pat, }); self.emit_location(label, node); + post_emit!(BoxPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -631,6 +700,7 @@ impl Translator<'_> { &mut self, node: &ast::BreakExpr, ) -> Option> { + pre_emit!(BreakExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -644,6 +714,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, node); + post_emit!(BreakExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -651,6 +722,7 @@ impl Translator<'_> { &mut self, node: &ast::CallExpr, ) -> Option> { + pre_emit!(CallExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -664,6 +736,7 @@ impl Translator<'_> { function, }); self.emit_location(label, node); + post_emit!(CallExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -671,6 +744,7 @@ impl Translator<'_> { &mut self, node: &ast::CastExpr, ) -> Option> { + pre_emit!(CastExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -684,6 +758,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(CastExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -691,6 +766,7 @@ impl Translator<'_> { &mut self, node: &ast::ClosureBinder, ) -> Option> { + pre_emit!(ClosureBinder, self, node); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -699,6 +775,7 @@ impl Translator<'_> { generic_param_list, }); self.emit_location(label, node); + post_emit!(ClosureBinder, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -706,6 +783,7 @@ impl Translator<'_> { &mut self, node: &ast::ClosureExpr, ) -> Option> { + pre_emit!(ClosureExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -735,13 +813,12 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, node); + post_emit!(ClosureExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_const(&mut self, node: &ast::Const) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Const, self, node); if self.should_be_excluded(node) { return None; } @@ -773,7 +850,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Const, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -781,12 +858,14 @@ impl Translator<'_> { &mut self, node: &ast::ConstArg, ) -> Option> { + pre_emit!(ConstArg, self, node); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ConstArg { id: TrapId::Star, expr, }); self.emit_location(label, node); + post_emit!(ConstArg, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -794,6 +873,7 @@ impl Translator<'_> { &mut self, node: &ast::ConstBlockPat, ) -> Option> { + pre_emit!(ConstBlockPat, self, node); let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let is_const = node.const_token().is_some(); let label = self.trap.emit(generated::ConstBlockPat { @@ -802,6 +882,7 @@ impl Translator<'_> { is_const, }); self.emit_location(label, node); + post_emit!(ConstBlockPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -809,6 +890,7 @@ impl Translator<'_> { &mut self, node: &ast::ConstParam, ) -> Option> { + pre_emit!(ConstParam, self, node); if self.should_be_excluded(node) { return None; } @@ -826,6 +908,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(ConstParam, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -833,6 +916,7 @@ impl Translator<'_> { &mut self, node: &ast::ContinueExpr, ) -> Option> { + pre_emit!(ContinueExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -844,6 +928,7 @@ impl Translator<'_> { lifetime, }); self.emit_location(label, node); + post_emit!(ContinueExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -851,6 +936,7 @@ impl Translator<'_> { &mut self, node: &ast::DynTraitType, ) -> Option> { + pre_emit!(DynTraitTypeRepr, self, node); let type_bound_list = node .type_bound_list() .and_then(|x| self.emit_type_bound_list(&x)); @@ -859,13 +945,12 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(DynTraitTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_enum(&mut self, node: &ast::Enum) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Enum, self, node); if self.should_be_excluded(node) { return None; } @@ -887,7 +972,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Enum, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -895,12 +980,14 @@ impl Translator<'_> { &mut self, node: &ast::ExprStmt, ) -> Option> { + pre_emit!(ExprStmt, self, node); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::ExprStmt { id: TrapId::Star, expr, }); self.emit_location(label, node); + post_emit!(ExprStmt, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -908,6 +995,7 @@ impl Translator<'_> { &mut self, node: &ast::ExternBlock, ) -> Option> { + pre_emit!(ExternBlock, self, node); if self.should_be_excluded(node) { return None; } @@ -925,6 +1013,7 @@ impl Translator<'_> { is_unsafe, }); self.emit_location(label, node); + post_emit!(ExternBlock, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -932,6 +1021,7 @@ impl Translator<'_> { &mut self, node: &ast::ExternCrate, ) -> Option> { + pre_emit!(ExternCrate, self, node); if self.should_be_excluded(node) { return None; } @@ -947,6 +1037,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(ExternCrate, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -954,6 +1045,7 @@ impl Translator<'_> { &mut self, node: &ast::ExternItemList, ) -> Option> { + pre_emit!(ExternItemList, self, node); if self.should_be_excluded(node) { return None; } @@ -968,6 +1060,7 @@ impl Translator<'_> { extern_items, }); self.emit_location(label, node); + post_emit!(ExternItemList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -975,6 +1068,7 @@ impl Translator<'_> { &mut self, node: &ast::FieldExpr, ) -> Option> { + pre_emit!(FieldExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -988,13 +1082,12 @@ impl Translator<'_> { identifier, }); self.emit_location(label, node); + post_emit!(FieldExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_fn(&mut self, node: &ast::Fn) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Function, self, node); if self.should_be_excluded(node) { return None; } @@ -1036,7 +1129,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Function, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1044,6 +1137,7 @@ impl Translator<'_> { &mut self, node: &ast::FnPtrType, ) -> Option> { + pre_emit!(FnPtrTypeRepr, self, node); let abi = node.abi().and_then(|x| self.emit_abi(&x)); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); @@ -1060,6 +1154,7 @@ impl Translator<'_> { ret_type, }); self.emit_location(label, node); + post_emit!(FnPtrTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1067,6 +1162,7 @@ impl Translator<'_> { &mut self, node: &ast::ForExpr, ) -> Option> { + pre_emit!(ForExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1084,6 +1180,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(ForExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1091,6 +1188,7 @@ impl Translator<'_> { &mut self, node: &ast::ForType, ) -> Option> { + pre_emit!(ForTypeRepr, self, node); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -1101,6 +1199,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(ForTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1108,6 +1207,7 @@ impl Translator<'_> { &mut self, node: &ast::FormatArgsArg, ) -> Option> { + pre_emit!(FormatArgsArg, self, node); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::FormatArgsArg { @@ -1116,6 +1216,7 @@ impl Translator<'_> { name, }); self.emit_location(label, node); + post_emit!(FormatArgsArg, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1123,6 +1224,7 @@ impl Translator<'_> { &mut self, node: &ast::FormatArgsExpr, ) -> Option> { + pre_emit!(FormatArgsExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1139,6 +1241,7 @@ impl Translator<'_> { template, }); self.emit_location(label, node); + post_emit!(FormatArgsExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1146,6 +1249,7 @@ impl Translator<'_> { &mut self, node: &ast::GenericArgList, ) -> Option> { + pre_emit!(GenericArgList, self, node); let generic_args = node .generic_args() .filter_map(|x| self.emit_generic_arg(&x)) @@ -1155,6 +1259,7 @@ impl Translator<'_> { generic_args, }); self.emit_location(label, node); + post_emit!(GenericArgList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1162,6 +1267,7 @@ impl Translator<'_> { &mut self, node: &ast::GenericParamList, ) -> Option> { + pre_emit!(GenericParamList, self, node); let generic_params = node .generic_params() .filter_map(|x| self.emit_generic_param(&x)) @@ -1171,6 +1277,7 @@ impl Translator<'_> { generic_params, }); self.emit_location(label, node); + post_emit!(GenericParamList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1178,6 +1285,7 @@ impl Translator<'_> { &mut self, node: &ast::IdentPat, ) -> Option> { + pre_emit!(IdentPat, self, node); if self.should_be_excluded(node) { return None; } @@ -1195,10 +1303,12 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(IdentPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_if_expr(&mut self, node: &ast::IfExpr) -> Option> { + pre_emit!(IfExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1214,10 +1324,12 @@ impl Translator<'_> { then, }); self.emit_location(label, node); + post_emit!(IfExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_impl(&mut self, node: &ast::Impl) -> Option> { + pre_emit!(Impl, self, node); if self.should_be_excluded(node) { return None; } @@ -1249,6 +1361,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); + post_emit!(Impl, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1256,6 +1369,7 @@ impl Translator<'_> { &mut self, node: &ast::ImplTraitType, ) -> Option> { + pre_emit!(ImplTraitTypeRepr, self, node); let type_bound_list = node .type_bound_list() .and_then(|x| self.emit_type_bound_list(&x)); @@ -1264,6 +1378,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(ImplTraitTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1271,6 +1386,7 @@ impl Translator<'_> { &mut self, node: &ast::IndexExpr, ) -> Option> { + pre_emit!(IndexExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1284,6 +1400,7 @@ impl Translator<'_> { index, }); self.emit_location(label, node); + post_emit!(IndexExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1291,10 +1408,12 @@ impl Translator<'_> { &mut self, node: &ast::InferType, ) -> Option> { + pre_emit!(InferTypeRepr, self, node); let label = self .trap .emit(generated::InferTypeRepr { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(InferTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1302,6 +1421,7 @@ impl Translator<'_> { &mut self, node: &ast::ItemList, ) -> Option> { + pre_emit!(ItemList, self, node); if self.should_be_excluded(node) { return None; } @@ -1313,16 +1433,19 @@ impl Translator<'_> { items, }); self.emit_location(label, node); + post_emit!(ItemList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_label(&mut self, node: &ast::Label) -> Option> { + pre_emit!(Label, self, node); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::Label { id: TrapId::Star, lifetime, }); self.emit_location(label, node); + post_emit!(Label, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1330,12 +1453,14 @@ impl Translator<'_> { &mut self, node: &ast::LetElse, ) -> Option> { + pre_emit!(LetElse, self, node); let block_expr = node.block_expr().and_then(|x| self.emit_block_expr(&x)); let label = self.trap.emit(generated::LetElse { id: TrapId::Star, block_expr, }); self.emit_location(label, node); + post_emit!(LetElse, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1343,6 +1468,7 @@ impl Translator<'_> { &mut self, node: &ast::LetExpr, ) -> Option> { + pre_emit!(LetExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1356,6 +1482,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(LetExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1363,6 +1490,7 @@ impl Translator<'_> { &mut self, node: &ast::LetStmt, ) -> Option> { + pre_emit!(LetStmt, self, node); if self.should_be_excluded(node) { return None; } @@ -1380,6 +1508,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(LetStmt, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1387,12 +1516,14 @@ impl Translator<'_> { &mut self, node: &ast::Lifetime, ) -> Option> { + pre_emit!(Lifetime, self, node); let text = node.try_get_text(); let label = self.trap.emit(generated::Lifetime { id: TrapId::Star, text, }); self.emit_location(label, node); + post_emit!(Lifetime, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1400,12 +1531,14 @@ impl Translator<'_> { &mut self, node: &ast::LifetimeArg, ) -> Option> { + pre_emit!(LifetimeArg, self, node); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let label = self.trap.emit(generated::LifetimeArg { id: TrapId::Star, lifetime, }); self.emit_location(label, node); + post_emit!(LifetimeArg, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1413,6 +1546,7 @@ impl Translator<'_> { &mut self, node: &ast::LifetimeParam, ) -> Option> { + pre_emit!(LifetimeParam, self, node); if self.should_be_excluded(node) { return None; } @@ -1428,6 +1562,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(LifetimeParam, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1435,6 +1570,7 @@ impl Translator<'_> { &mut self, node: &ast::Literal, ) -> Option> { + pre_emit!(LiteralExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1446,6 +1582,7 @@ impl Translator<'_> { text_value, }); self.emit_location(label, node); + post_emit!(LiteralExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1453,12 +1590,14 @@ impl Translator<'_> { &mut self, node: &ast::LiteralPat, ) -> Option> { + pre_emit!(LiteralPat, self, node); let literal = node.literal().and_then(|x| self.emit_literal(&x)); let label = self.trap.emit(generated::LiteralPat { id: TrapId::Star, literal, }); self.emit_location(label, node); + post_emit!(LiteralPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1466,6 +1605,7 @@ impl Translator<'_> { &mut self, node: &ast::LoopExpr, ) -> Option> { + pre_emit!(LoopExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1479,6 +1619,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, node); + post_emit!(LoopExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1486,9 +1627,7 @@ impl Translator<'_> { &mut self, node: &ast::MacroCall, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(MacroCall, self, node); if self.should_be_excluded(node) { return None; } @@ -1506,7 +1645,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(MacroCall, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1514,6 +1653,7 @@ impl Translator<'_> { &mut self, node: &ast::MacroDef, ) -> Option> { + pre_emit!(MacroDef, self, node); if self.should_be_excluded(node) { return None; } @@ -1539,6 +1679,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(MacroDef, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1546,12 +1687,14 @@ impl Translator<'_> { &mut self, node: &ast::MacroExpr, ) -> Option> { + pre_emit!(MacroExpr, self, node); let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroExpr { id: TrapId::Star, macro_call, }); self.emit_location(label, node); + post_emit!(MacroExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1559,12 +1702,14 @@ impl Translator<'_> { &mut self, node: &ast::MacroItems, ) -> Option> { + pre_emit!(MacroItems, self, node); let items = node.items().filter_map(|x| self.emit_item(&x)).collect(); let label = self.trap.emit(generated::MacroItems { id: TrapId::Star, items, }); self.emit_location(label, node); + post_emit!(MacroItems, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1572,12 +1717,14 @@ impl Translator<'_> { &mut self, node: &ast::MacroPat, ) -> Option> { + pre_emit!(MacroPat, self, node); let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroPat { id: TrapId::Star, macro_call, }); self.emit_location(label, node); + post_emit!(MacroPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1585,6 +1732,7 @@ impl Translator<'_> { &mut self, node: &ast::MacroRules, ) -> Option> { + pre_emit!(MacroRules, self, node); if self.should_be_excluded(node) { return None; } @@ -1600,6 +1748,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(MacroRules, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1607,6 +1756,7 @@ impl Translator<'_> { &mut self, node: &ast::MacroStmts, ) -> Option> { + pre_emit!(MacroBlockExpr, self, node); let tail_expr = node.expr().and_then(|x| self.emit_expr(&x)); let statements = node .statements() @@ -1618,6 +1768,7 @@ impl Translator<'_> { statements, }); self.emit_location(label, node); + post_emit!(MacroBlockExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1625,12 +1776,14 @@ impl Translator<'_> { &mut self, node: &ast::MacroType, ) -> Option> { + pre_emit!(MacroTypeRepr, self, node); let macro_call = node.macro_call().and_then(|x| self.emit_macro_call(&x)); let label = self.trap.emit(generated::MacroTypeRepr { id: TrapId::Star, macro_call, }); self.emit_location(label, node); + post_emit!(MacroTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1638,6 +1791,7 @@ impl Translator<'_> { &mut self, node: &ast::MatchArm, ) -> Option> { + pre_emit!(MatchArm, self, node); if self.should_be_excluded(node) { return None; } @@ -1653,6 +1807,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(MatchArm, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1660,6 +1815,7 @@ impl Translator<'_> { &mut self, node: &ast::MatchArmList, ) -> Option> { + pre_emit!(MatchArmList, self, node); if self.should_be_excluded(node) { return None; } @@ -1674,6 +1830,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, node); + post_emit!(MatchArmList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1681,6 +1838,7 @@ impl Translator<'_> { &mut self, node: &ast::MatchExpr, ) -> Option> { + pre_emit!(MatchExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1696,6 +1854,7 @@ impl Translator<'_> { match_arm_list, }); self.emit_location(label, node); + post_emit!(MatchExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1703,19 +1862,19 @@ impl Translator<'_> { &mut self, node: &ast::MatchGuard, ) -> Option> { + pre_emit!(MatchGuard, self, node); let condition = node.condition().and_then(|x| self.emit_expr(&x)); let label = self.trap.emit(generated::MatchGuard { id: TrapId::Star, condition, }); self.emit_location(label, node); + post_emit!(MatchGuard, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_meta(&mut self, node: &ast::Meta) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Meta, self, node); let expr = node.expr().and_then(|x| self.emit_expr(&x)); let is_unsafe = node.unsafe_token().is_some(); let path = node.path().and_then(|x| self.emit_path(&x)); @@ -1728,7 +1887,7 @@ impl Translator<'_> { token_tree, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Meta, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1736,9 +1895,7 @@ impl Translator<'_> { &mut self, node: &ast::MethodCallExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(MethodCallExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1758,14 +1915,12 @@ impl Translator<'_> { receiver, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(MethodCallExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_module(&mut self, node: &ast::Module) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Module, self, node); if self.should_be_excluded(node) { return None; } @@ -1781,17 +1936,19 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Module, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_name(&mut self, node: &ast::Name) -> Option> { + pre_emit!(Name, self, node); let text = node.try_get_text(); let label = self.trap.emit(generated::Name { id: TrapId::Star, text, }); self.emit_location(label, node); + post_emit!(Name, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1799,12 +1956,14 @@ impl Translator<'_> { &mut self, node: &ast::NameRef, ) -> Option> { + pre_emit!(NameRef, self, node); let text = node.try_get_text(); let label = self.trap.emit(generated::NameRef { id: TrapId::Star, text, }); self.emit_location(label, node); + post_emit!(NameRef, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1812,10 +1971,12 @@ impl Translator<'_> { &mut self, node: &ast::NeverType, ) -> Option> { + pre_emit!(NeverTypeRepr, self, node); let label = self .trap .emit(generated::NeverTypeRepr { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(NeverTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1823,6 +1984,7 @@ impl Translator<'_> { &mut self, node: &ast::OffsetOfExpr, ) -> Option> { + pre_emit!(OffsetOfExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1839,20 +2001,24 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(OffsetOfExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_or_pat(&mut self, node: &ast::OrPat) -> Option> { + pre_emit!(OrPat, self, node); let pats = node.pats().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::OrPat { id: TrapId::Star, pats, }); self.emit_location(label, node); + post_emit!(OrPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_param(&mut self, node: &ast::Param) -> Option> { + pre_emit!(Param, self, node); if self.should_be_excluded(node) { return None; } @@ -1870,6 +2036,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(Param, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1877,6 +2044,7 @@ impl Translator<'_> { &mut self, node: &ast::ParamList, ) -> Option> { + pre_emit!(ParamList, self, node); let params = node.params().filter_map(|x| self.emit_param(&x)).collect(); let self_param = node.self_param().and_then(|x| self.emit_self_param(&x)); let label = self.trap.emit(generated::ParamList { @@ -1885,6 +2053,7 @@ impl Translator<'_> { self_param, }); self.emit_location(label, node); + post_emit!(ParamList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1892,6 +2061,7 @@ impl Translator<'_> { &mut self, node: &ast::ParenExpr, ) -> Option> { + pre_emit!(ParenExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1903,6 +2073,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(ParenExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1910,12 +2081,14 @@ impl Translator<'_> { &mut self, node: &ast::ParenPat, ) -> Option> { + pre_emit!(ParenPat, self, node); let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::ParenPat { id: TrapId::Star, pat, }); self.emit_location(label, node); + post_emit!(ParenPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1923,12 +2096,14 @@ impl Translator<'_> { &mut self, node: &ast::ParenType, ) -> Option> { + pre_emit!(ParenTypeRepr, self, node); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::ParenTypeRepr { id: TrapId::Star, type_repr, }); self.emit_location(label, node); + post_emit!(ParenTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1936,6 +2111,7 @@ impl Translator<'_> { &mut self, node: &ast::ParenthesizedArgList, ) -> Option> { + pre_emit!(ParenthesizedArgList, self, node); let type_args = node .type_args() .filter_map(|x| self.emit_type_arg(&x)) @@ -1945,10 +2121,12 @@ impl Translator<'_> { type_args, }); self.emit_location(label, node); + post_emit!(ParenthesizedArgList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_path(&mut self, node: &ast::Path) -> Option> { + pre_emit!(Path, self, node); let qualifier = node.qualifier().and_then(|x| self.emit_path(&x)); let segment = node.segment().and_then(|x| self.emit_path_segment(&x)); let label = self.trap.emit(generated::Path { @@ -1957,6 +2135,7 @@ impl Translator<'_> { segment, }); self.emit_location(label, node); + post_emit!(Path, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1964,9 +2143,7 @@ impl Translator<'_> { &mut self, node: &ast::PathExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(PathExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -1978,7 +2155,7 @@ impl Translator<'_> { path, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(PathExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -1986,16 +2163,14 @@ impl Translator<'_> { &mut self, node: &ast::PathPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(PathPat, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathPat { id: TrapId::Star, path, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(PathPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2003,9 +2178,7 @@ impl Translator<'_> { &mut self, node: &ast::PathSegment, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(PathSegment, self, node); let generic_arg_list = node .generic_arg_list() .and_then(|x| self.emit_generic_arg_list(&x)); @@ -2026,7 +2199,7 @@ impl Translator<'_> { return_type_syntax, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(PathSegment, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2034,12 +2207,14 @@ impl Translator<'_> { &mut self, node: &ast::PathType, ) -> Option> { + pre_emit!(PathTypeRepr, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::PathTypeRepr { id: TrapId::Star, path, }); self.emit_location(label, node); + post_emit!(PathTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2047,6 +2222,7 @@ impl Translator<'_> { &mut self, node: &ast::PrefixExpr, ) -> Option> { + pre_emit!(PrefixExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2060,6 +2236,7 @@ impl Translator<'_> { operator_name, }); self.emit_location(label, node); + post_emit!(PrefixExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2067,6 +2244,7 @@ impl Translator<'_> { &mut self, node: &ast::PtrType, ) -> Option> { + pre_emit!(PtrTypeRepr, self, node); let is_const = node.const_token().is_some(); let is_mut = node.mut_token().is_some(); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); @@ -2077,6 +2255,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(PtrTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2084,6 +2263,7 @@ impl Translator<'_> { &mut self, node: &ast::RangeExpr, ) -> Option> { + pre_emit!(RangeExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2099,6 +2279,7 @@ impl Translator<'_> { start, }); self.emit_location(label, node); + post_emit!(RangeExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2106,6 +2287,7 @@ impl Translator<'_> { &mut self, node: &ast::RangePat, ) -> Option> { + pre_emit!(RangePat, self, node); let end = node.end().and_then(|x| self.emit_pat(&x)); let operator_name = node.try_get_text(); let start = node.start().and_then(|x| self.emit_pat(&x)); @@ -2116,6 +2298,7 @@ impl Translator<'_> { start, }); self.emit_location(label, node); + post_emit!(RangePat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2123,9 +2306,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordExpr, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(StructExpr, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let struct_expr_field_list = node .record_expr_field_list() @@ -2136,7 +2317,7 @@ impl Translator<'_> { struct_expr_field_list, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(StructExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2144,6 +2325,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordExprField, ) -> Option> { + pre_emit!(StructExprField, self, node); if self.should_be_excluded(node) { return None; } @@ -2157,6 +2339,7 @@ impl Translator<'_> { identifier, }); self.emit_location(label, node); + post_emit!(StructExprField, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2164,6 +2347,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordExprFieldList, ) -> Option> { + pre_emit!(StructExprFieldList, self, node); if self.should_be_excluded(node) { return None; } @@ -2180,6 +2364,7 @@ impl Translator<'_> { spread, }); self.emit_location(label, node); + post_emit!(StructExprFieldList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2187,6 +2372,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordField, ) -> Option> { + pre_emit!(StructField, self, node); if self.should_be_excluded(node) { return None; } @@ -2206,6 +2392,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(StructField, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2213,6 +2400,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordFieldList, ) -> Option> { + pre_emit!(StructFieldList, self, node); let fields = node .fields() .filter_map(|x| self.emit_record_field(&x)) @@ -2222,6 +2410,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, node); + post_emit!(StructFieldList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2229,9 +2418,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(StructPat, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let struct_pat_field_list = node .record_pat_field_list() @@ -2242,7 +2429,7 @@ impl Translator<'_> { struct_pat_field_list, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(StructPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2250,6 +2437,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordPatField, ) -> Option> { + pre_emit!(StructPatField, self, node); if self.should_be_excluded(node) { return None; } @@ -2263,6 +2451,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(StructPatField, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2270,6 +2459,7 @@ impl Translator<'_> { &mut self, node: &ast::RecordPatFieldList, ) -> Option> { + pre_emit!(StructPatFieldList, self, node); let fields = node .fields() .filter_map(|x| self.emit_record_pat_field(&x)) @@ -2281,6 +2471,7 @@ impl Translator<'_> { rest_pat, }); self.emit_location(label, node); + post_emit!(StructPatFieldList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2288,6 +2479,7 @@ impl Translator<'_> { &mut self, node: &ast::RefExpr, ) -> Option> { + pre_emit!(RefExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2305,10 +2497,12 @@ impl Translator<'_> { is_raw, }); self.emit_location(label, node); + post_emit!(RefExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_ref_pat(&mut self, node: &ast::RefPat) -> Option> { + pre_emit!(RefPat, self, node); let is_mut = node.mut_token().is_some(); let pat = node.pat().and_then(|x| self.emit_pat(&x)); let label = self.trap.emit(generated::RefPat { @@ -2317,6 +2511,7 @@ impl Translator<'_> { pat, }); self.emit_location(label, node); + post_emit!(RefPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2324,6 +2519,7 @@ impl Translator<'_> { &mut self, node: &ast::RefType, ) -> Option> { + pre_emit!(RefTypeRepr, self, node); let is_mut = node.mut_token().is_some(); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); @@ -2334,16 +2530,19 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(RefTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_rename(&mut self, node: &ast::Rename) -> Option> { + pre_emit!(Rename, self, node); let name = node.name().and_then(|x| self.emit_name(&x)); let label = self.trap.emit(generated::Rename { id: TrapId::Star, name, }); self.emit_location(label, node); + post_emit!(Rename, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2351,6 +2550,7 @@ impl Translator<'_> { &mut self, node: &ast::RestPat, ) -> Option> { + pre_emit!(RestPat, self, node); if self.should_be_excluded(node) { return None; } @@ -2360,6 +2560,7 @@ impl Translator<'_> { attrs, }); self.emit_location(label, node); + post_emit!(RestPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2367,12 +2568,14 @@ impl Translator<'_> { &mut self, node: &ast::RetType, ) -> Option> { + pre_emit!(RetTypeRepr, self, node); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::RetTypeRepr { id: TrapId::Star, type_repr, }); self.emit_location(label, node); + post_emit!(RetTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2380,6 +2583,7 @@ impl Translator<'_> { &mut self, node: &ast::ReturnExpr, ) -> Option> { + pre_emit!(ReturnExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2391,6 +2595,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(ReturnExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2398,10 +2603,12 @@ impl Translator<'_> { &mut self, node: &ast::ReturnTypeSyntax, ) -> Option> { + pre_emit!(ReturnTypeSyntax, self, node); let label = self .trap .emit(generated::ReturnTypeSyntax { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(ReturnTypeSyntax, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2409,6 +2616,7 @@ impl Translator<'_> { &mut self, node: &ast::SelfParam, ) -> Option> { + pre_emit!(SelfParam, self, node); if self.should_be_excluded(node) { return None; } @@ -2428,6 +2636,7 @@ impl Translator<'_> { type_repr, }); self.emit_location(label, node); + post_emit!(SelfParam, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2435,12 +2644,14 @@ impl Translator<'_> { &mut self, node: &ast::SlicePat, ) -> Option> { + pre_emit!(SlicePat, self, node); let pats = node.pats().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::SlicePat { id: TrapId::Star, pats, }); self.emit_location(label, node); + post_emit!(SlicePat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2448,12 +2659,14 @@ impl Translator<'_> { &mut self, node: &ast::SliceType, ) -> Option> { + pre_emit!(SliceTypeRepr, self, node); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::SliceTypeRepr { id: TrapId::Star, type_repr, }); self.emit_location(label, node); + post_emit!(SliceTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2461,6 +2674,7 @@ impl Translator<'_> { &mut self, node: &ast::SourceFile, ) -> Option> { + pre_emit!(SourceFile, self, node); if self.should_be_excluded(node) { return None; } @@ -2472,10 +2686,12 @@ impl Translator<'_> { items, }); self.emit_location(label, node); + post_emit!(SourceFile, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_static(&mut self, node: &ast::Static) -> Option> { + pre_emit!(Static, self, node); if self.should_be_excluded(node) { return None; } @@ -2503,6 +2719,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(Static, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2510,6 +2727,7 @@ impl Translator<'_> { &mut self, node: &ast::StmtList, ) -> Option> { + pre_emit!(StmtList, self, node); if self.should_be_excluded(node) { return None; } @@ -2526,13 +2744,12 @@ impl Translator<'_> { tail_expr, }); self.emit_location(label, node); + post_emit!(StmtList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_struct(&mut self, node: &ast::Struct) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Struct, self, node); if self.should_be_excluded(node) { return None; } @@ -2554,7 +2771,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Struct, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2562,15 +2779,15 @@ impl Translator<'_> { &mut self, node: &ast::TokenTree, ) -> Option> { + pre_emit!(TokenTree, self, node); let label = self.trap.emit(generated::TokenTree { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(TokenTree, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_trait(&mut self, node: &ast::Trait) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Trait, self, node); if self.should_be_excluded(node) { return None; } @@ -2602,7 +2819,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Trait, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2610,6 +2827,7 @@ impl Translator<'_> { &mut self, node: &ast::TraitAlias, ) -> Option> { + pre_emit!(TraitAlias, self, node); if self.should_be_excluded(node) { return None; } @@ -2633,6 +2851,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); + post_emit!(TraitAlias, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2640,6 +2859,7 @@ impl Translator<'_> { &mut self, node: &ast::TryExpr, ) -> Option> { + pre_emit!(TryExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2651,6 +2871,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(TryExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2658,6 +2879,7 @@ impl Translator<'_> { &mut self, node: &ast::TupleExpr, ) -> Option> { + pre_emit!(TupleExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2669,6 +2891,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, node); + post_emit!(TupleExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2676,6 +2899,7 @@ impl Translator<'_> { &mut self, node: &ast::TupleField, ) -> Option> { + pre_emit!(TupleField, self, node); if self.should_be_excluded(node) { return None; } @@ -2689,6 +2913,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(TupleField, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2696,6 +2921,7 @@ impl Translator<'_> { &mut self, node: &ast::TupleFieldList, ) -> Option> { + pre_emit!(TupleFieldList, self, node); let fields = node .fields() .filter_map(|x| self.emit_tuple_field(&x)) @@ -2705,6 +2931,7 @@ impl Translator<'_> { fields, }); self.emit_location(label, node); + post_emit!(TupleFieldList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2712,12 +2939,14 @@ impl Translator<'_> { &mut self, node: &ast::TuplePat, ) -> Option> { + pre_emit!(TuplePat, self, node); let fields = node.fields().filter_map(|x| self.emit_pat(&x)).collect(); let label = self.trap.emit(generated::TuplePat { id: TrapId::Star, fields, }); self.emit_location(label, node); + post_emit!(TuplePat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2725,9 +2954,7 @@ impl Translator<'_> { &mut self, node: &ast::TupleStructPat, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(TupleStructPat, self, node); let fields = node.fields().filter_map(|x| self.emit_pat(&x)).collect(); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::TupleStructPat { @@ -2736,7 +2963,7 @@ impl Translator<'_> { path, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(TupleStructPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2744,12 +2971,14 @@ impl Translator<'_> { &mut self, node: &ast::TupleType, ) -> Option> { + pre_emit!(TupleTypeRepr, self, node); let fields = node.fields().filter_map(|x| self.emit_type(&x)).collect(); let label = self.trap.emit(generated::TupleTypeRepr { id: TrapId::Star, fields, }); self.emit_location(label, node); + post_emit!(TupleTypeRepr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2757,6 +2986,7 @@ impl Translator<'_> { &mut self, node: &ast::TypeAlias, ) -> Option> { + pre_emit!(TypeAlias, self, node); if self.should_be_excluded(node) { return None; } @@ -2784,6 +3014,7 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); + post_emit!(TypeAlias, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2791,12 +3022,14 @@ impl Translator<'_> { &mut self, node: &ast::TypeArg, ) -> Option> { + pre_emit!(TypeArg, self, node); let type_repr = node.ty().and_then(|x| self.emit_type(&x)); let label = self.trap.emit(generated::TypeArg { id: TrapId::Star, type_repr, }); self.emit_location(label, node); + post_emit!(TypeArg, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2804,6 +3037,7 @@ impl Translator<'_> { &mut self, node: &ast::TypeBound, ) -> Option> { + pre_emit!(TypeBound, self, node); let is_async = node.async_token().is_some(); let is_const = node.const_token().is_some(); let lifetime = node.lifetime().and_then(|x| self.emit_lifetime(&x)); @@ -2820,6 +3054,7 @@ impl Translator<'_> { use_bound_generic_args, }); self.emit_location(label, node); + post_emit!(TypeBound, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2827,6 +3062,7 @@ impl Translator<'_> { &mut self, node: &ast::TypeBoundList, ) -> Option> { + pre_emit!(TypeBoundList, self, node); let bounds = node .bounds() .filter_map(|x| self.emit_type_bound(&x)) @@ -2836,6 +3072,7 @@ impl Translator<'_> { bounds, }); self.emit_location(label, node); + post_emit!(TypeBoundList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2843,6 +3080,7 @@ impl Translator<'_> { &mut self, node: &ast::TypeParam, ) -> Option> { + pre_emit!(TypeParam, self, node); if self.should_be_excluded(node) { return None; } @@ -2860,6 +3098,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(TypeParam, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2867,6 +3106,7 @@ impl Translator<'_> { &mut self, node: &ast::UnderscoreExpr, ) -> Option> { + pre_emit!(UnderscoreExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -2876,13 +3116,12 @@ impl Translator<'_> { attrs, }); self.emit_location(label, node); + post_emit!(UnderscoreExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_union(&mut self, node: &ast::Union) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Union, self, node); if self.should_be_excluded(node) { return None; } @@ -2906,11 +3145,12 @@ impl Translator<'_> { where_clause, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Union, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } pub(crate) fn emit_use(&mut self, node: &ast::Use) -> Option> { + pre_emit!(Use, self, node); if self.should_be_excluded(node) { return None; } @@ -2924,6 +3164,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); + post_emit!(Use, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2931,6 +3172,7 @@ impl Translator<'_> { &mut self, node: &ast::UseBoundGenericArgs, ) -> Option> { + pre_emit!(UseBoundGenericArgs, self, node); let use_bound_generic_args = node .use_bound_generic_args() .filter_map(|x| self.emit_use_bound_generic_arg(&x)) @@ -2940,6 +3182,7 @@ impl Translator<'_> { use_bound_generic_args, }); self.emit_location(label, node); + post_emit!(UseBoundGenericArgs, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2947,6 +3190,7 @@ impl Translator<'_> { &mut self, node: &ast::UseTree, ) -> Option> { + pre_emit!(UseTree, self, node); let is_glob = node.star_token().is_some(); let path = node.path().and_then(|x| self.emit_path(&x)); let rename = node.rename().and_then(|x| self.emit_rename(&x)); @@ -2961,6 +3205,7 @@ impl Translator<'_> { use_tree_list, }); self.emit_location(label, node); + post_emit!(UseTree, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2968,6 +3213,7 @@ impl Translator<'_> { &mut self, node: &ast::UseTreeList, ) -> Option> { + pre_emit!(UseTreeList, self, node); let use_trees = node .use_trees() .filter_map(|x| self.emit_use_tree(&x)) @@ -2977,6 +3223,7 @@ impl Translator<'_> { use_trees, }); self.emit_location(label, node); + post_emit!(UseTreeList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -2984,9 +3231,7 @@ impl Translator<'_> { &mut self, node: &ast::Variant, ) -> Option> { - if let Some(label) = self.pre_emit(node) { - return Some(label); - } + pre_emit!(Variant, self, node); if self.should_be_excluded(node) { return None; } @@ -3004,7 +3249,7 @@ impl Translator<'_> { visibility, }); self.emit_location(label, node); - self.post_emit(node, label); + post_emit!(Variant, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3012,6 +3257,7 @@ impl Translator<'_> { &mut self, node: &ast::VariantList, ) -> Option> { + pre_emit!(VariantList, self, node); let variants = node .variants() .filter_map(|x| self.emit_variant(&x)) @@ -3021,6 +3267,7 @@ impl Translator<'_> { variants, }); self.emit_location(label, node); + post_emit!(VariantList, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3028,12 +3275,14 @@ impl Translator<'_> { &mut self, node: &ast::Visibility, ) -> Option> { + pre_emit!(Visibility, self, node); let path = node.path().and_then(|x| self.emit_path(&x)); let label = self.trap.emit(generated::Visibility { id: TrapId::Star, path, }); self.emit_location(label, node); + post_emit!(Visibility, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3041,6 +3290,7 @@ impl Translator<'_> { &mut self, node: &ast::WhereClause, ) -> Option> { + pre_emit!(WhereClause, self, node); let predicates = node .predicates() .filter_map(|x| self.emit_where_pred(&x)) @@ -3050,6 +3300,7 @@ impl Translator<'_> { predicates, }); self.emit_location(label, node); + post_emit!(WhereClause, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3057,6 +3308,7 @@ impl Translator<'_> { &mut self, node: &ast::WherePred, ) -> Option> { + pre_emit!(WherePred, self, node); let generic_param_list = node .generic_param_list() .and_then(|x| self.emit_generic_param_list(&x)); @@ -3073,6 +3325,7 @@ impl Translator<'_> { type_bound_list, }); self.emit_location(label, node); + post_emit!(WherePred, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3080,6 +3333,7 @@ impl Translator<'_> { &mut self, node: &ast::WhileExpr, ) -> Option> { + pre_emit!(WhileExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -3095,6 +3349,7 @@ impl Translator<'_> { loop_body, }); self.emit_location(label, node); + post_emit!(WhileExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3102,8 +3357,10 @@ impl Translator<'_> { &mut self, node: &ast::WildcardPat, ) -> Option> { + pre_emit!(WildcardPat, self, node); let label = self.trap.emit(generated::WildcardPat { id: TrapId::Star }); self.emit_location(label, node); + post_emit!(WildcardPat, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3111,6 +3368,7 @@ impl Translator<'_> { &mut self, node: &ast::YeetExpr, ) -> Option> { + pre_emit!(YeetExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -3122,6 +3380,7 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(YeetExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } @@ -3129,6 +3388,7 @@ impl Translator<'_> { &mut self, node: &ast::YieldExpr, ) -> Option> { + pre_emit!(YieldExpr, self, node); if self.should_be_excluded(node) { return None; } @@ -3140,67 +3400,8 @@ impl Translator<'_> { expr, }); self.emit_location(label, node); + post_emit!(YieldExpr, self, node, label); self.emit_tokens(node, label.into(), node.syntax().children_with_tokens()); Some(label) } } -impl HasTrapClass for ast::AssocItem { - type TrapClass = generated::AssocItem; -} -impl HasTrapClass for ast::ExternItem { - type TrapClass = generated::ExternItem; -} -impl HasTrapClass for ast::Item { - type TrapClass = generated::Item; -} -impl HasTrapClass for ast::Const { - type TrapClass = generated::Const; -} -impl HasTrapClass for ast::Enum { - type TrapClass = generated::Enum; -} -impl HasTrapClass for ast::Fn { - type TrapClass = generated::Function; -} -impl HasTrapClass for ast::MacroCall { - type TrapClass = generated::MacroCall; -} -impl HasTrapClass for ast::Meta { - type TrapClass = generated::Meta; -} -impl HasTrapClass for ast::MethodCallExpr { - type TrapClass = generated::MethodCallExpr; -} -impl HasTrapClass for ast::Module { - type TrapClass = generated::Module; -} -impl HasTrapClass for ast::PathExpr { - type TrapClass = generated::PathExpr; -} -impl HasTrapClass for ast::PathPat { - type TrapClass = generated::PathPat; -} -impl HasTrapClass for ast::PathSegment { - type TrapClass = generated::PathSegment; -} -impl HasTrapClass for ast::RecordExpr { - type TrapClass = generated::StructExpr; -} -impl HasTrapClass for ast::RecordPat { - type TrapClass = generated::StructPat; -} -impl HasTrapClass for ast::Struct { - type TrapClass = generated::Struct; -} -impl HasTrapClass for ast::Trait { - type TrapClass = generated::Trait; -} -impl HasTrapClass for ast::TupleStructPat { - type TrapClass = generated::TupleStructPat; -} -impl HasTrapClass for ast::Union { - type TrapClass = generated::Union; -} -impl HasTrapClass for ast::Variant { - type TrapClass = generated::Variant; -} diff --git a/rust/extractor/src/translate/mappings.rs b/rust/extractor/src/translate/mappings.rs index 3e71c6deb14a..3068e5cea52e 100644 --- a/rust/extractor/src/translate/mappings.rs +++ b/rust/extractor/src/translate/mappings.rs @@ -1,20 +1,7 @@ -use crate::trap::{Label, TrapClass}; use ra_ap_hir::{Enum, Function, HasContainer, Module, Semantics, Struct, Trait, Union}; use ra_ap_ide_db::RootDatabase; use ra_ap_syntax::{AstNode, ast, ast::RangeItem}; -pub(crate) trait HasTrapClass: AstNode { - type TrapClass: TrapClass; -} - -pub(crate) trait Emission { - fn pre_emit(&mut self, _node: &T) -> Option> { - None - } - - fn post_emit(&mut self, _node: &T, _label: Label) {} -} - pub(crate) trait TextValue { fn try_get_text(&self) -> Option; } diff --git a/rust/extractor/src/trap.rs b/rust/extractor/src/trap.rs index a7cb43a64327..2206c4c067b2 100644 --- a/rust/extractor/src/trap.rs +++ b/rust/extractor/src/trap.rs @@ -212,7 +212,7 @@ impl TrapFile { ); } pub fn emit_file(&mut self, absolute_path: &Path) -> Label { - let untyped = extractor::populate_file(&mut self.writer, absolute_path, None); + let untyped = extractor::populate_file(&mut self.writer, absolute_path); // SAFETY: populate_file emits `@file` typed labels unsafe { Label::from_untyped(untyped) } } @@ -268,7 +268,6 @@ impl TrapFileProvider { &self.trap_dir.join(category), key.as_ref(), self.compression.extension(), - None, ); debug!("creating trap file {}", path.display()); let mut writer = trap::Writer::new(); diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 7461f8e0131f..b53665e8af1d 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -21,7 +21,7 @@ lib/codeql/rust/elements/AsmPiece.qll 8650bf07246fac95533876db66178e4b30ed3210de lib/codeql/rust/elements/AsmRegOperand.qll 27abfffe1fc99e243d9b915f9a9694510133e5f72100ec0df53796d27a45de0c 8919ab83081dae2970adb6033340c6a18751ffd6a8157cf8c55916ac4253c791 lib/codeql/rust/elements/AsmRegSpec.qll 77483fc3d1de8761564e2f7b57ecf1300d67de50b66c11144bb4e3e0059ebfd6 521f8dd0af859b7eef6ab2edab2f422c9ff65aa11bad065cfba2ec082e0c786b lib/codeql/rust/elements/AsmSym.qll ba29b59ae2a4aa68bdc09e61b324fd26e8b7e188af852345676fc5434d818eef 10ba571059888f13f71ac5e75d20b58f3aa6eecead0d4c32a7617018c7c72e0e -lib/codeql/rust/elements/AssocItem.qll 7a65365df8ae0603f892b6d9a27372ad81d06945abd408a2f25a6595a6ea3b6e 24bc6dd8485bcd7d236067cb37bda1300a891009d0a739681aee218449304ed2 +lib/codeql/rust/elements/AssocItem.qll 89e547c3ce2f49b5eb29063c5d9263a52810838a8cfb30b25bee108166be65a1 238fc6f33c18e02ae023af627afa2184fa8e6055d78ab0936bd1b6180bccb699 lib/codeql/rust/elements/AssocItemList.qll 5d2660e199e59647e3a8b6234531428f6e0a236ed2ced3c9fede13e7f83a5ba5 a2a8e87ab8978f77a70e4c0a8cc7322c522fc4a7a05116646a2b97a2f47428a4 lib/codeql/rust/elements/AssocTypeArg.qll 6ceeec7a0ec78a6f8b2e74c0798d4727ad350cebde954b4ffe442b06e08eb4aa d615f5cd696892518387d20f04dae240fb10ee7c9577028fb6f2a51cd9f5b9e4 lib/codeql/rust/elements/AstNode.qll 5ee6355afb1cafd6dfe408b8c21836a1ba2aeb709fb618802aa09f9342646084 dee708f19c1b333cbd9609819db3dfdb48a0c90d26266c380f31357b1e2d6141 @@ -39,7 +39,7 @@ lib/codeql/rust/elements/CastExpr.qll 2fe1f36ba31fa29de309baf0a665cfcae67b61c733 lib/codeql/rust/elements/ClosureBinder.qll 02c8e83bf07deaf7bf0233b76623ec7f1837be8b77fe7e1c23544edc7d85e3c4 2b114d9a6dede694324aebe3dac80a802d139cfacd39beb0f12b5b0a46ee6390 lib/codeql/rust/elements/ClosureExpr.qll 67e2a106e9154c90367b129987e574d2a9ecf5b297536627e43706675d35eaed d6a381132ddd589c5a7ce174f50f9620041ddf690e15a65ebfb05ff7e7c02de7 lib/codeql/rust/elements/Comment.qll fedad50575125e9a64a8a8776a8c1dbf1e76df990f01849d9f0955f9d74cb2a6 8eb1afad1e1007a4f0090fdac65d81726b23eda6517d067fd0185f70f17635ab -lib/codeql/rust/elements/Const.qll 5f4d11e01162a06127ba56519efd66d1ecfb5de7c1792fc1c283a56cf2127373 8c618ac774267d25db70cc05a080f8a408dc23ab7e88c0fc543eda8b4d4cb995 +lib/codeql/rust/elements/Const.qll fd2959d036f47fabcbde9a21c3e173b105168f4944c3cea7c3e8ba4c1f5d6052 c3bde2a8ce4425bd2e20a8a9f96ecf049747935b99a10d35b29ba942e8e44e63 lib/codeql/rust/elements/ConstArg.qll 01865b3be4790c627a062c59ea608462931abcb2f94a132cf265318664fd1251 a2c6bbf63dbfa999e511b6941143a51c9392477d8ccd25e081f85475936ff558 lib/codeql/rust/elements/ConstBlockPat.qll a25f42b84dbeb33e10955735ef53b8bb7e3258522d6d1a9068f19adaf1af89d9 eeb816d2b54db77a1e7bb70e90b68d040a0cd44e9d44455a223311c3615c5e6e lib/codeql/rust/elements/ConstParam.qll 87776586f7ff562ff3c71373f45cf70486f9a832613a0aaac943311c451cc057 67a31616688106d5130951f2162e5229bff0fde08ff647943663cac427d7048b @@ -52,7 +52,7 @@ lib/codeql/rust/elements/Expr.qll e5d65e805ccf440d64d331e55df4c4144ab8c8f63f3673 lib/codeql/rust/elements/ExprStmt.qll 00ac4c7d0192b9e8b0f28d5ae59c27729ff5a831ca11938ea3e677a262337a64 7cc02aa5346cd7c50d75ca63cd6501097b0a3979eb2ed838adff114fe17d35a3 lib/codeql/rust/elements/ExternBlock.qll 96c70d0761ec385fe17aa7228e15fd1711949d5abba5877a1c2f4c180d202125 38ad458868a368d437b2dda44307d788a85c887f45ea76c99adbfc9a53f14d81 lib/codeql/rust/elements/ExternCrate.qll 776cf8ef7e6611ebb682f20bb8cf47b24cc8fe08ba0b0cf892c19c95a1ecec3e 1a74eb2974d93c1a8beb9a4f5e3432bb50b6bcdd6e450d1f966534edbdff9cd0 -lib/codeql/rust/elements/ExternItem.qll 24301f14e9b7dda6eb5263ba46ae806eedd5901c114399e712a86164b8f03002 0cbb368952bda103c75eba504a7f2840da7d9d17bd64e087184055de2fa6f862 +lib/codeql/rust/elements/ExternItem.qll 0d895c2c37f64237b23542a84033fed81a23d732e1cb8c109aa18ecde67bf959 56087151b9461253a6ecc50e165c7e32eca70af334bfc1b884a230302721c2b3 lib/codeql/rust/elements/ExternItemList.qll eceb0fcd3a6f9d87fa044da1da112ce96b75c8e0f0897d51e44c5822a3e430dc 2255f1121d7cec4e29401ad08b728f02a920a82da48f16b6bb86c5056775be31 lib/codeql/rust/elements/FieldExpr.qll 8102cd659f9059cf6af2a22033cfcd2aae9c35204b86f7d219a05f1f8de54b3b f818169dddf5102095ae1410583615f80031376a08b5307d0c464e79953c3975 lib/codeql/rust/elements/FieldList.qll 72f3eace2f0c0600b1ad059819ae756f1feccd15562e0449a3f039a680365462 50e4c01df7b801613688b06bb47ccc36e6c8c7fa2e50cc62cb4705c9abf5ee31 @@ -64,7 +64,7 @@ lib/codeql/rust/elements/FormatArgsArg.qll a2c23cd512d44dd60b7d65eba52cc3adf6e2f lib/codeql/rust/elements/FormatArgsExpr.qll 8127cbe4082f7acc3d8a05298c2c9bea302519b8a6cd2d158a83c516d18fc487 88cf9b3bedd69a1150968f9a465c904bbb6805da0e0b90cfd1fc0dab1f6d9319 lib/codeql/rust/elements/FormatArgument.qll f6fe17ee1481c353dd42edae8b5fa79aeb99dff25b4842ec9a6f267b1837d1e3 5aed19c2daf2383b89ad7fd527375641cff26ddee7afddb89bc0d18d520f4034 lib/codeql/rust/elements/FormatTemplateVariableAccess.qll ff3218a1dda30c232d0ecd9d1c60bbb9f3973456ef0bee1d1a12ad14b1e082b5 e4316291c939800d8b34d477d92be9404a30d52b7eee37302aef3d3205cf4ae0 -lib/codeql/rust/elements/Function.qll a5d1654003137bcfd5b0bdfaf73778f6316521dd896aaa58b95422f795e2d674 e13ad1cc560525d94917fb5a0c9605e022d3f2e33042933a1c7141556ca75ce8 +lib/codeql/rust/elements/Function.qll 61fafe4bc91c997e9fb64f2770fc6682d333c61df3283fac58163df14a500430 ca7cb756942ccd01f961f3e959c7fddabeaabb72c4226ca756a6a30a4b1a4c48 lib/codeql/rust/elements/GenericArg.qll 5f8666af395208f8ad2044063788fa2c0c317cc0201d1ffc8c6ade62da82867c 174025826d3f4d6bf714be043acfea323701988bae134bd5a8b908b1ba1d3850 lib/codeql/rust/elements/GenericArgList.qll dcf274db517b0e8f19e4545d77f86cdd4066ff2805e68c808d0bb5750b49f569 1055a82929e850264e501b367ef4d314a3e6bb8943ec95f4284d157fb4d0092f lib/codeql/rust/elements/GenericParam.qll 87adf96aac385f2a182008a7b90aad46cf46d70134364123871afb43e5ea2590 be82f1986b263053d7b894a8998ddb59543200a2aa8df5a44c217b8773f60307 @@ -91,7 +91,7 @@ lib/codeql/rust/elements/Locatable.qll 2855efa4a469b54e0ca85daa89309a8b991cded6f lib/codeql/rust/elements/LoopExpr.qll ee171177650fa23eef102a9580765f4b6073a1cc41bab1ec31ad4f84ffe6c2c9 bfcf0cca4dc944270d9748a202829a38c64dfae167c0d3a4202788ceb9daf5f6 lib/codeql/rust/elements/LoopingExpr.qll 7ad7d4bbfd05adc0bb9b4ca90ff3377b8298121ca5360ffb45d5a7a1e20fe37a 964168b2045ee9bad827bba53f10a64d649b3513f2d1e3c17a1b1f11d0fc7f3a lib/codeql/rust/elements/MacroBlockExpr.qll fb81f067a142053b122e2875a15719565024cfb09326faf12e0f1017307deb58 3ee94ef7e56bd07a8f9304869b0a7b69971b02abbee46d0bebcacb4031760282 -lib/codeql/rust/elements/MacroCall.qll 452aee152b655cdd5a69bf973977072f000a6451f626469a3f7313f0468ffc18 a8652d0de1c6c2118d683d5465ba4115dd4c65031896440269a2a0522d90fceb +lib/codeql/rust/elements/MacroCall.qll 7e456de5b506ea6d4ca20a55f75734ede9202f31529c111df3ed3eab1a9b83e5 cc0f45aaeaab4d32ad133c18ad8000316cbcfa62062bd31b6a0e690df7bb76bc lib/codeql/rust/elements/MacroDef.qll 5bcf2bba7ba40879fe47370bfeb65b23c67c463be20535327467338a1e2e04bb c3d28416fc08e5d79149fccd388fea2bc3097bce074468a323383056404926db lib/codeql/rust/elements/MacroExpr.qll 640554f4964def19936a16ce88a03fb12f74ec2bcfe38b88d32742b79f85d909 a284fb66e012664a33a4e9c8fd3e38d3ffd588fccd6b16b02270da55fc025f7a lib/codeql/rust/elements/MacroItems.qll f2d80ff23634ac6bc3e96e8d73154587f9d24edb56654b5c0ae426124d2709ea f794f751b77fc50d7cc3069c93c22dd3a479182edce15c1b22c8da31d2e30a12 @@ -143,7 +143,7 @@ lib/codeql/rust/elements/SelfParam.qll e36b54cdc57529935910b321c336783e9e2662c76 lib/codeql/rust/elements/SlicePat.qll f48f13bb13378cc68f935d5b09175c316f3e81f50ef6a3ac5fdbfbfb473d6fc1 4c8df0b092274f37028e287a949f1a287f7505b7c2c36ee8d5f47fb8365d278a lib/codeql/rust/elements/SliceTypeRepr.qll 730e4d0eeefb9b2284e15b41cd0afc3cbe2556120484df424c8e5242afd852f9 100772263b08f498ce8db203ba572be4e92edd361df7c0e9bd7b20c7ac2820fb lib/codeql/rust/elements/SourceFile.qll 0b6a3e58767c07602b19975009a2ad53ecf1fd721302af543badb643c1fbb6c4 511d5564aab70b1fcd625e07f3d7e3ceb0c4811a5740de64a55a9a728ba8d32c -lib/codeql/rust/elements/Static.qll 9dca6d4fb80fb4ead49a3de89bec2b02bae6f96fbc2601dde35a2aa69a9bfdb0 70f67bc75d7799dab04ea7a7fd13286bb76bbe514be16d23149c59dfb31fd0c9 +lib/codeql/rust/elements/Static.qll a6d73152ddecb53a127aa3a4139f97007cd77b46203691c287600aa7200b8beb 547197e794803b3ea0c0e220f050980adec815a16fdef600f98ff795aa77f677 lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll e874859ce03672d0085e47e0ca5e571b92b539b31bf0d5a8802f9727bef0c6b0 e5fe83237f713cdb57c446a6e1c20f645c2f49d9f5ef2c984032df83acb3c0de lib/codeql/rust/elements/Struct.qll 297d3ea732fc7fbb8b8fb5479c1873ce84705146853ff752c84a6f70af12b923 3df0e5fd50a910a0b5611c3a860a1d7c318f6925c3a0727006d91840caf04812 @@ -166,7 +166,7 @@ lib/codeql/rust/elements/TupleFieldList.qll b67cd2dec918d09e582467e5db7a38c8fa18 lib/codeql/rust/elements/TuplePat.qll 028cdea43868b0fdd2fc4c31ff25b6bbb40813e8aaccf72186051a280db7632e 38c56187971671e6a9dd0c6ccccb2ee4470aa82852110c6b89884496eb4abc64 lib/codeql/rust/elements/TupleStructPat.qll da398a23eb616bf7dd586b2a87f4ab00f28623418f081cd7b1cc3de497ef1819 6573bf3f8501c30af3aeb23d96db9f5bea7ab73e2b7ef3473095c03e96c20a5c lib/codeql/rust/elements/TupleTypeRepr.qll 1ac5abf6281ea31680a4098407fbe55459d08f92a50dec20d1f8b93d498eee41 6d9625cce4e4abf6b6e6c22e47880fbd23740d07b621137bd7fa0a2ee13badd9 -lib/codeql/rust/elements/TypeAlias.qll b59f24488f0d7de8d4046a9e0ca1e1f54d1d5c11e035898b11ab97e151fc600f 7b25c9e14c8bb310cec796824904fcefced2cc486d55e981b80b7620e73dd2d7 +lib/codeql/rust/elements/TypeAlias.qll 7c06232b50df4b6d9066e18a7286f6f0986df6b3994838923c3b2cd0898bb937 d4e61091e396b6cbbfbc9731a58154d81ef986ccf0f306e64962661c468b2889 lib/codeql/rust/elements/TypeArg.qll e91dbb399d2ab7cf7af9dd5f743a551d0bf91dba3cfb76cea9e2d42ada0f9f2e c67d64e20e35a9bba5092651e0f82c75ba53b8c165e823bc81d67975107ae375 lib/codeql/rust/elements/TypeBound.qll a1645f31a789995af85b1db236caece180013cc2e28e1c50b792dc0d4ab0854e 14a68ebef2149bc657ba1f18606ef8cf9b7cc3e6113b50bc038c168eb6cfd11c lib/codeql/rust/elements/TypeBoundList.qll 61a861e89b3de23801c723531cd3331a61214817a230aaae74d91cb60f0e096f d54e3d830bb550c5ba082ccd09bc0dc4e6e44e8d11066a7afba5a7172aa687a8 @@ -226,6 +226,7 @@ lib/codeql/rust/elements/internal/AsmRegSpecConstructor.qll bf3e0783645622691183 lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll 7ad0a5b86922e321da9f8c7ea8aefa88068b27bcea3890f981b061a204ab576d 65f13c423ef42209bd514523f21dd1e43cc4f5c191bdb85ba7128c76241f78a8 lib/codeql/rust/elements/internal/AsmSymConstructor.qll 9c7e8471081b9173f01592d4b9d22584a0d1cee6b4851050d642ddaa4017659e adc5b4b2a8cd7164da4867d83aa08c6e54c45614c1f4fc9aa1cbbedd3c20a1b3 lib/codeql/rust/elements/internal/AsmSymImpl.qll e173807c5b6cf856f5f4eaedb2be41d48db95dd8a973e1dc857a883383feec50 ab19c9f479c0272a5257ab45977c9f9dd60380fe33b4ade14f3dddf2970112de +lib/codeql/rust/elements/internal/AssocItemImpl.qll 33be2a25b94eb32c44b973351f0babf6d46d35d5a0a06f1064418c94c40b01e9 5e42adb18b5c2f9246573d7965ce91013370f16d92d8f7bda31232cef7a549c6 lib/codeql/rust/elements/internal/AssocItemListConstructor.qll 1977164a68d52707ddee2f16e4d5a3de07280864510648750016010baec61637 bb750f1a016b42a32583b423655279e967be5def66f6b68c5018ec1e022e25e1 lib/codeql/rust/elements/internal/AssocItemListImpl.qll 70e82744464827326bfc394dab417f39905db155fb631f804bf1f27e23892698 760c7b42137d010e15920f9623e461daaf16518ab44a36a15259e549ecd4fa7a lib/codeql/rust/elements/internal/AssocTypeArgConstructor.qll 58b4ac5a532e55d71f77a5af8eadaf7ba53a8715c398f48285dac1db3a6c87a3 f0d889f32d9ea7bd633b495df014e39af24454608253200c05721022948bd856 @@ -479,7 +480,7 @@ lib/codeql/rust/elements/internal/generated/AsmPiece.qll 17f425727781cdda3a2ec59 lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll e1412c7a9135669cb3e07f82dcf2bebc2ea28958d9ffb9520ae48d299344997c d81f18570703c9eb300241bd1900b7969d12d71cec0a3ce55c33f7d586600c24 lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 73a24744f62dd6dfa28a0978087828f009fb0619762798f5e0965003fff1e8ec fdb8fd2f89b64086a2ca873c683c02a68d088bb01007d534617d0b7f67fde2cb lib/codeql/rust/elements/internal/generated/AsmSym.qll 476ee9ad15db015c43633072175bca3822af30c379ee10eb8ffc091c88d573f6 9f24baf36506eb959e9077dc5ba1cddbc4d93e3d8cba6e357dff5f9780d1e492 -lib/codeql/rust/elements/internal/generated/AssocItem.qll 188fd2aaaef11cc926cf202adc64f294988fe2b3ec768d586d260c23877bbe21 58332ddaeff27fa80ce329d3964f4cc05f2cc807eb2a7a4cd6c26e90442e7f3a +lib/codeql/rust/elements/internal/generated/AssocItem.qll fad035ba1dab733489690538fbb94ac85072b96b6c2f3e8bcd58a129b9707a26 d9988025b12b8682be83ce9df8c31ce236214683fc50facd4a658f68645248cb lib/codeql/rust/elements/internal/generated/AssocItemList.qll 52900dcf32ef749a3bd285b4a01ff337df3c52255fe2698c9c1547c40652f3b9 10709dd626a527c37186b02c4ea738a9edb6c9e97b87370de206d3eb9941575b lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll a93a42278263bb0c9692aca507108e25f99292aef2a9822501b31489c4ce620d afd9559e0c799988ef7ff1957a5a9ebc4fb92c6e960cbe7fecf12a0a484fef08 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 @@ -497,7 +498,7 @@ lib/codeql/rust/elements/internal/generated/CastExpr.qll ddc20054b0b339ad4d40298 lib/codeql/rust/elements/internal/generated/ClosureBinder.qll ab199df96f525a083a0762fd654cd098802033c79700a593bb204a9a0c69ec01 86b33543e0886715830cfcdaca43b555a242a4f12a4caa18b88732d5afb584bd lib/codeql/rust/elements/internal/generated/ClosureExpr.qll 34149bf82f107591e65738221e1407ec1dc9cc0dfb10ae7f761116fda45162de fd2fbc9a87fc0773c940db64013cf784d5e4137515cc1020e2076da329f5a952 lib/codeql/rust/elements/internal/generated/Comment.qll cd1ef861e3803618f9f78a4ac00516d50ecfecdca1c1d14304dc5327cbe07a3b 8b67345aeb15beb5895212228761ea3496297846c93fd2127b417406ae87c201 -lib/codeql/rust/elements/internal/generated/Const.qll 3e606f0198b6461a94964dba7a4d386408f01651d75378eeab251dfceccf49c8 20fe276cded4764bdb1cd50de956bea88d7cd731909c0b84b4abb972b3094959 +lib/codeql/rust/elements/internal/generated/Const.qll e923b540d1dc26cc59766ecd938b8e18f3c73097a73eeaeed3513c8fca7ac3a8 2261a0c46f4252124c40600e7fb2e5743f0e66d58cedc5768fe57393191a9504 lib/codeql/rust/elements/internal/generated/ConstArg.qll c52bf746f2dc89b8d71b8419736707bfcbb09cca424c3ba76e888e2add415bf6 89309a9df4fde23cfd3d8492908ccec4d90cc8457d35c507ef81371a369941b4 lib/codeql/rust/elements/internal/generated/ConstBlockPat.qll 7526d83ee9565d74776f42db58b1a2efff6fb324cfc7137f51f2206fee815d79 0ab3c22908ff790e7092e576a5df3837db33c32a7922a513a0f5e495729c1ac5 lib/codeql/rust/elements/internal/generated/ConstParam.qll 2e24198f636e4932c79f28c324f395ae5f61f713795ed4543e920913898e2815 5abe6d3df395c679c28a7720479bad455c53bc5ade9133f1ff113ea54dc66c11 @@ -510,7 +511,7 @@ lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440da lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b lib/codeql/rust/elements/internal/generated/ExternBlock.qll e7faac92297a53ac6e0420eec36255a54f360eeb962bf663a00da709407832dd 5ff32c54ec7097d43cc3311492090b9b90f411eead3bc849f258858f29405e81 lib/codeql/rust/elements/internal/generated/ExternCrate.qll f1a64a1c2f5b07b1186c6259374251d289e59e2d274e95a2ecff7c70e7cbe799 fd9b5b61d49121f54dd739f87efaea1a37c5f438c8e98290b1227223808e24c5 -lib/codeql/rust/elements/internal/generated/ExternItem.qll 08c02dbc8a96df25725ccec69ef5e19089ae03faea2efb86be892077ea1bc8ab 8afe7b6a87445dde4ce2c790ad05c2ccf771996d10625e6fc100113f219e8e32 +lib/codeql/rust/elements/internal/generated/ExternItem.qll d069798a4d11ec89750aea0c7137b0ccf1e7e15572871f0ea69ef26865a93a5e 92d4c613bdca802a2e9220e042d69cd5f4e8e151200a8b45b1dc333cc9d8a5c9 lib/codeql/rust/elements/internal/generated/ExternItemList.qll cb3ec330f70b760393af8ca60929ad5cca2f3863f7655d3f144719ab55184f33 e6829b21b275c7c59f27056501fee7a2d3462ed6a6682d9b37d3c0f0f11d16b8 lib/codeql/rust/elements/internal/generated/ExtractorStep.qll 61cd504a1aab98b1c977ee8cff661258351d11ca1fec77038c0a17d359f5810e 5e57b50f3e8e3114a55159fb11a524c6944363f5f8a380abccc8b220dedc70ca lib/codeql/rust/elements/internal/generated/FieldExpr.qll d6077fcc563702bb8d626d2fda60df171023636f98b4a345345e131da1a03dfc 03f9eb65abfab778e6d2c7090c08fe75c38c967302f5a9fa96ab0c24e954929d @@ -523,7 +524,7 @@ lib/codeql/rust/elements/internal/generated/FormatArgsArg.qll c762a4af8609472e28 lib/codeql/rust/elements/internal/generated/FormatArgsExpr.qll 8aed8715a27d3af3de56ded4610c6792a25216b1544eb7e57c8b0b37c14bd9c1 590a2b0063d2ecd00bbbd1ce29603c8fd69972e34e6daddf309c915ce4ec1375 lib/codeql/rust/elements/internal/generated/FormatArgument.qll cd05153276e63e689c95d5537fbc7d892615f62e110323759ef02e23a7587407 be2a4531b498f01625effa4c631d51ee8857698b00cfb829074120a0f2696d57 lib/codeql/rust/elements/internal/generated/FormatTemplateVariableAccess.qll a6175214fad445df9234b3ee9bf5147da75baf82473fb8d384b455e3add0dac1 a928db0ff126b2e54a18f5c488232abd1bd6c5eda24591d3c3bb80c6ee71c770 -lib/codeql/rust/elements/internal/generated/Function.qll 695dbc61e1c4d67a75e438f30fffcaa4a251be629093428b6b7afba053342fb6 ddc34f1da6b4b2ac64d60028822c7cfc72da133dd08ad2490bd2dcae9d91e074 +lib/codeql/rust/elements/internal/generated/Function.qll befc4220bef166531e52625b08642f129115ae918a70021d69874dc794e41be7 e6433f67000eb5f3e02b209d7ee8018fea30abed9e7c491fa1fbbd9d998e98ae lib/codeql/rust/elements/internal/generated/GenericArg.qll 908dadf36a631bc9f4423ab473d1344ed882c7f3f85ac169d82e0099ff6337d4 c6ef5358db3a0318987962a51cbe6b77ae9c0e39c1312a059306e40e86db7eb8 lib/codeql/rust/elements/internal/generated/GenericArgList.qll b8cd936bba6f28344e28c98acf38acb8ef43af6ecf8367d79ed487e5b9da17cb 8b14331261e49d004807285b02fca190aafd62bfb9378b05c7d9c1e95525fe7b lib/codeql/rust/elements/internal/generated/GenericParam.qll 85ac027a42b3300febc9f7ede1098d3ffae7bac571cba6391bc00f9061780324 806cb9d1b0e93442bef180e362c4abc055ab31867ff34bac734b89d32bd82aa1 @@ -550,7 +551,7 @@ lib/codeql/rust/elements/internal/generated/Locatable.qll c897dc1bdd4dfcb6ded83a lib/codeql/rust/elements/internal/generated/LoopExpr.qll db6bc87e795c9852426ec661fa2c2c54106805897408b43a67f5b82fb4657afd 1492866ccf8213469be85bbdbcae0142f4e2a39df305d4c0d664229ecd1ebdb9 lib/codeql/rust/elements/internal/generated/LoopingExpr.qll 0792c38d84b8c68114da2bbdfef32ef803b696cb0fd06e10e101756d5c46976c 111fe961fad512722006323c3f2a075fddf59bd3eb5c7afc349835fcec8eb102 lib/codeql/rust/elements/internal/generated/MacroBlockExpr.qll 778376cdfa4caaa9df0b9c21bda5ff0f1037b730aa43efb9fb0a08998ef3999b 6df39efe7823ce590ef6f4bdfa60957ba067205a77d94ac089b2c6a7f6b7b561 -lib/codeql/rust/elements/internal/generated/MacroCall.qll 1a7ee9c782ebc9ab0a807762aabebc9e0a7ef10c6eb945679737598630b20af2 782a437654cb316355c020e89d50b07c93ba7817715fa5d42a9e807cf12d1a43 +lib/codeql/rust/elements/internal/generated/MacroCall.qll 74501c9687d6f216091d8cd3033613cd5f5c4aedbf75b594a2e2d1e438a74445 1de4d8bec211a7b1b12ff21505e17a4c381ccfa8f775049e2a6c8b3616efa993 lib/codeql/rust/elements/internal/generated/MacroDef.qll 90393408d9e10ff6167789367c30f9bfe1d3e8ac3b83871c6cb30a8ae37eef47 f022d1df45bc9546cb9fd7059f20e16a3acfaae2053bbd10075fe467c96e2379 lib/codeql/rust/elements/internal/generated/MacroExpr.qll 5a86ae36a28004ce5e7eb30addf763eef0f1c614466f4507a3935b0dab2c7ce3 11c15e8ebd36455ec9f6b7819134f6b22a15a3644678ca96b911ed0eb1181873 lib/codeql/rust/elements/internal/generated/MacroItems.qll bf10b946e9addb8dd7cef032ebc4480492ab3f9625edbabe69f41dcb81d448fe f6788fe1022e1d699056111d47e0f815eb1fa2826c3b6a6b43c0216d82d3904b @@ -577,7 +578,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll eaa0cd4402d3665013d47e lib/codeql/rust/elements/internal/generated/ParenExpr.qll 812d2ff65079277f39f15c084657a955a960a7c1c0e96dd60472a58d56b945eb eb8c607f43e1fcbb41f37a10de203a1db806690e10ff4f04d48ed874189cb0eb lib/codeql/rust/elements/internal/generated/ParenPat.qll 24f9dc7fce75827d6fddb856cd48f80168143151b27295c0bab6db5a06567a09 ebadbc6f5498e9ed754b39893ce0763840409a0721036a25b56e1ead7dcc09aa lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 03f5c5b96a37adeb845352d7fcea3e098da9050e534972d14ac0f70d60a2d776 ed3d6e5d02086523087adebce4e89e35461eb95f2a66d1d4100fe23fc691b126 -lib/codeql/rust/elements/internal/generated/ParentChild.qll 3657258593982c34cb5934cf51fe21a0749af3161890b43c20f2b327d89ecf77 83509d01d5735e297057327be7fbb837a4633604cf6641ba34bb4825798187da +lib/codeql/rust/elements/internal/generated/ParentChild.qll 24db280d50c02a657a862626ea611a6fa8dab2e03aa4fd86fb61dd69032df333 2b1b2da55bd6f8fe30192afb83843eebd24c9b3e2561a714da4977bccb4ef6cc lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll d901fdc8142a5b8847cc98fc2afcfd16428b8ace4fbffb457e761b5fd3901a77 5dbb0aea5a13f937da666ccb042494af8f11e776ade1459d16b70a4dd193f9fb lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -592,7 +593,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 8d0ea4f6c7f8203340bf lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll f5b37458fb9c16829da761323deab22b440c3cb5bf915e07ee3eb2315251020e 0198c8d6ac310f107e4685f6dc0bd2eb58800af41ab4ac4c15c42d8d575f4b0a +lib/codeql/rust/elements/internal/generated/Raw.qll 3a9cae2d26ce5ceda0e76fccdcd92450a7605a68e3206c8a40e04c7052feac5a 10857ddd4f6b2ddb53de01200640de30982e8b67d25161e7335c53309d7aa3c5 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 5b0663a6d234572fb3e467e276d019415caa95ef006438cc59b7af4e1783161e 0e27c8a8f0e323c0e4d6db01fca821bf07c0864d293cdf96fa891b10820c1e4b @@ -606,7 +607,7 @@ lib/codeql/rust/elements/internal/generated/SelfParam.qll 076c583f7f34e29aaaf331 lib/codeql/rust/elements/internal/generated/SlicePat.qll 722b1bd47a980ac9c91d018133b251c65ee817682e06708ad130031fbd01379b 7e0ce13b9de2040d2ef9d0948aab3f39e5fdc28d38c40bfbee590e2125dbe41c lib/codeql/rust/elements/internal/generated/SliceTypeRepr.qll 6f4f9d7e29784ce95dc6f9fcdf044909d55c7282c732a81b0108dc4000e96b48 a188436cd6d4d071fd45b943d9778e46ee9a465940bdd1a2903269b4b7a01e21 lib/codeql/rust/elements/internal/generated/SourceFile.qll 4bc95c88b49868d1da1a887b35e43ae81e51a69407e79463f5e8824801859380 5641581d70241c0d0d0426976968576ebbef10c183f0371583b243e4e5bbf576 -lib/codeql/rust/elements/internal/generated/Static.qll 1a6c87d3c5602e3d02268ebe2463a4ac64614ad25e8966a9bdb9c0ef58991365 cc1fe16d70cdce41a12e41a8f80cc38bdd7efa49c1544e35342fcf3cd26b8219 +lib/codeql/rust/elements/internal/generated/Static.qll 34a4cdb9f4a93414499a30aeeaad1b3388f2341c982af5688815c3b0a0e9c57b 3c8354336eff68d580b804600df9abf49ee5ee10ec076722089087820cefe731 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll 816aebf8f56e179f5f0ba03e80d257ee85459ea757392356a0af6dbd0cd9ef5e 6aa51cdcdc8d93427555fa93f0e84afdfbbd4ffc8b8d378ae4a22b5b6f94f48b lib/codeql/rust/elements/internal/generated/Struct.qll 999da1b46e40d6e03fd2338fea02429462877c329c5d1338618cbd886a81567e daa7ff7bd32c554462e0a1502d8319cb5e734e056d0564e06596e416e2b88e9d @@ -618,7 +619,7 @@ lib/codeql/rust/elements/internal/generated/StructFieldList.qll 5da528a51a6a5db9 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll 1a95a1bd9f64fb18e9571657cf2d02a8b13c747048a1f0f74baf31b91f0392ad fc274e414ff4ed54386046505920de92755ad0b4d39a7523cdffa4830bd53b37 -lib/codeql/rust/elements/internal/generated/Synth.qll 4390996606c436cb34201d7dba9821a0d775d1707e54fbbe24cbf788d1d1d948 8e8077a387c69f7f5e3bdb2754654625c233283eb39eab33a72bde536f139a16 +lib/codeql/rust/elements/internal/generated/Synth.qll ebacd7cf6d7fb784cc77b75032608a622627e6f5e635aa70707df167ce3dc510 0e8ed9d5185afde22d263f3745e5029f23a1041690a80d0df916470823abdf43 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 bcc7f617b775ac0c7f04b1cc333ed7cc0bd91f1fabc8baa03c824d1df03f6076 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 1a3c4f5f30659738641abdd28cb793dab3cfde484196b59656fc0a2767e53511 de2ebb210c7759ef7a6f7ee9f805e1cac879221287281775fc80ba34a5492edf @@ -631,7 +632,7 @@ lib/codeql/rust/elements/internal/generated/TupleFieldList.qll fb76d1a3953263618 lib/codeql/rust/elements/internal/generated/TuplePat.qll 4e13b509e1c9dd1581a9dc50d38e0a6e36abc1254ea9c732b5b3e6503335afeb 298028df9eb84e106e625ed09d6b20038ad47bfc2faf634a0ffea50b17b5805d lib/codeql/rust/elements/internal/generated/TupleStructPat.qll 6539d0edbdc16e7df849514d51980d4cd1a2c9cbb58ca9e5273851f96df4eb36 45a13bae5220d5737cbd04713a17af5b33d8bb4cfdf17ddd64b298ab0c1eea24 lib/codeql/rust/elements/internal/generated/TupleTypeRepr.qll 1756cdbad56d634bf4726bc39c768386754e62650492d7d6344012038236a05b 3ac0997a47f95f28cc70c782173ce345fcb5b073be10f3c0b414d1df8443e04c -lib/codeql/rust/elements/internal/generated/TypeAlias.qll 0d0c97d9e9213b8f0390b3456737d4611701a570b9943bb20b348c4efc8e4693 a83c701c0d8914e01517dfa9253a12be962f0a7ed2f75fbaae25a13432db403f +lib/codeql/rust/elements/internal/generated/TypeAlias.qll 76f2ed5427077a5a4723285410740aeba01886ff1499d603cfeb735fc58ec580 b713c0ee40c959dff01b0f936552e6253634bb5ae152315f0949ecc88cb0dcce lib/codeql/rust/elements/internal/generated/TypeArg.qll 80245e4b52bef30e5033d4c765c72531324385deea1435dc623290271ff05b1d 097926e918dcd897ea1609010c5490dbf45d4d8f4cffb9166bcadf316a2f1558 lib/codeql/rust/elements/internal/generated/TypeBound.qll fa5cf5370c3f69e687b5fc888d2ca29d0a45bd0824d1159a202eafae29e70601 e3bc6a1e5c0af374c60e83396c5b0ceda499fabd300c25017ae7d4d5b234b264 lib/codeql/rust/elements/internal/generated/TypeBoundList.qll c5d43dc27075a0d5370ba4bc56b4e247357af5d2989625deff284e7846a3a48b c33c87d080e6eb6df01e98b8b0031d780472fcaf3a1ed156a038669c0e05bf0a @@ -656,163 +657,613 @@ lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae01 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 6ebcf16ef214075bc43562c246c11f8b90c089ff1b5041ab1b39ab9f4a40e9b3 6ebcf16ef214075bc43562c246c11f8b90c089ff1b5041ab1b39ab9f4a40e9b3 -test/extractor-tests/generated/Abi/Abi.ql 086ed104ab1a7e7fe5c1ed29e03f1719a797c7096c738868bf6ebe872ab8fdaa fe23fe67ab0d9201e1177ea3f844b18ed428e13e3ce77381bf2b6910adfa3a0e -test/extractor-tests/generated/ArgList/ArgList.ql da97b5b25418b2aa8cb8df793f48870c89fa00759cdade8ddba60d7f1f4bbc01 acfd5d2caf67282ad2d57b961068472100482d0f770a52a3c00214c647d18c75 -test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql 42b365276aa43e2cad588338463542d3ce1dd0db3a428621554584b07a1431d5 08a66a8b69af35ee3bc64c35c453a19a6c9881cc6cc7e65275d1fff056121270 -test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql 339629d69e2d7db153e2c738d70d2df33f395ae2377f07eb247132ede87b9899 07e0611667c09456241aabf80dc420fe1f5c13b1bce324da92e6b18d250c3896 -test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql b262300235ab5bf4fe7712c0208390c7e876413a37a433340fbc078318233e83 68cfb18e8fb73b53cf8a8e73e8bf5e7ba11f32ca6b4695a64ebab51ac7d58d1b -test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql adfcfcdc6ac2a9a4849ea592e37da4221b6279cf2ea1112d32b6c89fda33e85e 7438490536e27b7173dec731f6925531a0e3fa839639c97a53905ba72d7efbe5 -test/extractor-tests/generated/AsmConst/AsmConst.ql 82f322fc8a01f4ccc86b3ecca86a9515313120764c6a3ac00b968e4441625422 62831f204c5c2d0f155152c661f9b5d4a4b685df6e40693106fbef0379378981 -test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql 518a739c91481f67b27bfd1989d9dcbada12de54901eb6d598c896cd72f1f5fe 4567661eecf475fb05e13749b9250bcec51056b6db5a6ae7df24b7ba5cfb88c2 -test/extractor-tests/generated/AsmExpr/AsmExpr.ql c6c0128b252a13d5acea9a07b3854625aa51ebcce9dd93c11b423c9929d441fb 7618977e43f202af5b7d21b67531c4795bb791abe3cb03ba4077913c430b31d5 -test/extractor-tests/generated/AsmLabel/AsmLabel.ql 130bf49dc1f5ae79e3588415b9a4c25dfdcbcac1884db9b2fb802a68e33180e5 c087e47d8953d312488fcc0b1bcbfca02521e3683e2063eaf380d76399bca037 -test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql e866fd4715e78511352bb286c1120cbd52c4d960664d57dd99f0380eb1db7109 081d6a6267a3e251a123099b4c1e7d3c5a3b56e0efe9db7c7db24db1c08b7e0d -test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql fb1eb1f275ad251ba2e0876cf1d097bb33f20d06b0e50f8c01f7c11c71057688 e308567ffd18671cf172853a5c594f0f211d492c7e2fb58be412703d1b342b41 -test/extractor-tests/generated/AsmOption/AsmOption.ql d613c40391f4985414cc3541f900b6e3f5f9ef157d2bfb96a773710af4b059ed 8450ef57a5a891db514e8340151d161e515b59ae7b963fd5eebf3bf862eaff08 -test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql e0e76f1d6e454c60db632baabd29642f315c4bf9284bab9ff8368604df15e77a 8450851f062232e7ea92845f406287f945c16e1e1a69a3189773e6e86df8a64f -test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql 4ad6aa224e980602aaa77a601bda1065b1814249d889b54eda4da99dfcb53a8c b2503095957c7e3cdd345e8ccc594aa0f7590954e64a831660aed9a515f74d80 -test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql 3ae5068254b83bc4663230d2d21f16e189d213acbb4f25924819288b433d4a7c eea94d02b9bccb20d9ac9627667b84eeb486b5976b1b37fa0b94767c83c44a3e -test/extractor-tests/generated/AsmSym/AsmSym.ql b3dadbd288d92dad7517f7997aa3e5974f807a30793486d174bfa9cc67128fc3 4f82ca31ef7e5a7d9a86567516a257a212ecca911c02d9a67de792ae66960def -test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql 553cf7850a60985438e85079d3b55ec821fff6912d2076c2847e19626e9443c0 6c1c52cc2d4823b450bf3f3c9b166514863155f842faeaeae4bac8587a63efc8 -test/extractor-tests/generated/Attr/Attr.ql 88f9a524b557e81006a5079ac6d703c42df03ee510b7bc10cd22b481275d1939 49580ff1d1c34fd2ff636b983a19a96af0e36da939b5ac556817a741bb3b0435 -test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql 93ccb34e00b37deecd6d3019bb47948daffe55a2d5d031c60b4f6fa7a61412a4 5502459743efd8346ab943ff3334545407b21aaf0771bf422be58a5df5d27381 -test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql 7076b3f965c680e8f03bccd9ecb4495d03d35a4f460ec43628c19314eae8b49e 961e6e656e467ba389bbc6db39f345d9a8afaae4584d357dfe47484c6afadb99 -test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql 4e849e6eaae581f487aa74d09d1106e441c876b06474389687a04df446690a4d 6cd36dfdb0af25396d2219fe2789f898e2393cc3f10a25410b2ede5d216707cd -test/extractor-tests/generated/BlockExpr/BlockExpr.ql cd6ef66de9e56ebb74964e59617d47999fb8c9081e885acece17a3b747a35ae1 6766844c1b87e518688565f2469575af5ca4e0ff4eb0c0b620df73a451d86a0b -test/extractor-tests/generated/BoxPat/BoxPat.ql 854c9ba4e045dbe7ea1666866c1c443a92597df0ce02f4ca5993142925941c39 a22c17cce0bff7d1df51b817d2cb1a61045357f91be14465166971efa5f5daad -test/extractor-tests/generated/BreakExpr/BreakExpr.ql c2181211da3dfe983cfca93ead32d5d211e91181899b9477152c58124eaa846d 57e57b926e14db2efb2e88e04699608b2ba9797ee4f6c4f710135b6858982256 -test/extractor-tests/generated/CallExpr/CallExpr.ql 2a1cd4485ccd8d4eb24a75889e832612adef9bb7feae414c90572796380bc6d7 95060b92aa04d7ad1fc6603c5ec14a275a5788ecb5a19932732e28105607a3b7 -test/extractor-tests/generated/CastExpr/CastExpr.ql 3480ec51072399409b7553ab6139c832db6ed4ca991f3a7a2282a39afe07c6f2 614c8ea7a2fe30d57583dbf84ed7a12743c2aba49d8c6252d31af3ed10853a39 -test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql b68285fec6224b156754f51ee75a9b7ed32edaa16527e6f657a73bf6dd97eba3 d02b1b6d66dea1da892447d7b309f9b6e4eda0dd02055d71706d52aa73b5b9c4 -test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql 849c874de45781b8491cee428cc00fefc8cdc76f87de8a373a181b16ce930ab1 5e570193befae7bfe6c21ce91e20afd52bb94f234e2be89d0974bd6337221508 -test/extractor-tests/generated/Comment/Comment.ql 0e0454911d2cf2e7ef5c6d860b84c57b9d490090914ebcf4fa0e8a70f777f066 cbd1c195276ef163f8d3c122344738c884dc9fb70eb2f9b7067829d735d48c4c -test/extractor-tests/generated/Const/Const.ql 28a0f2debbf73ae867fc2d08d8e54d9e96fea69522b7180a48495c9b7fce9367 54d4a68a2b67db95ceb856535a8b27860ce2b502da17a7eeea3bb554d7fb5e43 -test/extractor-tests/generated/ConstArg/ConstArg.ql 21c7caf1939ff9fcc1bf0fe6dec5c6a6929f714cf1e17faf7a2f4a31c910194b 61eac00f4727f7269f926c53f53a62b5fae82ce7a02b42d23b9de6337b6f9d6e -test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql e2198f9ef913f7ecb9e96a4e5e4849737b664dbdf1ef67428d372ea1c29bbb35 c49aaaafd65c4dfadd1fae42a2078dba90bbd3fa1bcb09b88501c5085ab22c49 -test/extractor-tests/generated/ConstParam/ConstParam.ql 6facb2402e1cbf23d836f619ef68e2d8496b3c0c438e71266de24d8690852468 211ed6f7384f86d849f559410b2ac09da3df278bdeea9e77c4d9c26a727a6990 -test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql 58b5046a4da06a4cd2d942720603313126888b2249b218bef6f7c44ca469ccfa eeb84a04deb4c4496b7f9b38798cc7fdc179a486c8beaa0b33bf87e7f9482b1a +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 +test/extractor-tests/generated/ArgList/ArgList_getArg.ql c07c946218489a0ad5fe89e5fd4a7f0ad84a73dc2e650729f48a340cb133be84 ff2382c0693f47e5eb1290aca325290e60c19d877b25b1d7e2ee96009f5fe934 +test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql e6f9fe0dd6af5a1223e1e59827346aa2975bd665aeda36e8844ffb3a79c5e532 38576b6f7257c119917442e4f54fc883480e4da86d2542a1ac16d723ebbba039 +test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql f1ca0521f641bed17581121c0f07c7f8737d9891acdde2c68de59a0684e86a34 496da6513cfee28a31274a2e72b5a58d843407ac5e4870296da0f0b8e7fc85c1 +test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql 6920b532623e8c919701a83a059d9b1aac9e8673e7fdbe26e0a8af5ad6a34b8a 601137c715ce947d79f39d5b131d7ab167a16d29477eacdb1380cd647c4ebac4 +test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql 60a0df80fd34ca5c960b5e060c7090f8bbb8af83aba7099aa298a80e19a13346 c41f80601c7f50eee01c0ed7587e0198296d6a8a5b95c98dd8f865901d34ba5c +test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql fc6ca212aa633b73ee21f7564631c9ad345f15839656d88940dc686cf076a344 d580a367305adbe168996a294329b1adec36956a500ae9717a4af78cb2bef4e6 +test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql 6b00037350fc36cc46345a290bda4c4d4ff99050b970d23eb94294313046a884 0687638b46e43bba9dda35d78ff7b40f976e5e38271eec77e7a21c28349dc42c +test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql cfb831ccbc04092250931e0bd38c7b965fe0fd868081cd5f49fb11cd0da9aa0d 51e05a537928d7fd0aedd800f4d99c1f52630d75efe78bf7b016f1ad2380583b +test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql 38db5e08b7a78f52247b9894fe2f3dd80b89efd2a3ddce446b782f92f6e2efad 8a4d38deac59fff090617e928fb698fc3d57f3651f47b06d3f40dd4ba92b2c93 +test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql f74222b11cc52d3ac79e16d2943c1281c574fee954298752a309abc683798dbb 9701ebe468d76f72b21a7772a9e9bb82d8fd0a4e317437341f31f8395780dc33 +test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql f98889c27e64d193c61c595f0efbb6bbdae7cb214a0ce1c11dbb102979ca9714 5367f35345e665563161060a38dacebc9cf7bd3b48b2f0fd01bc8ef85ffa642c +test/extractor-tests/generated/AsmConst/AsmConst.ql 07f4d623883ad4ff0701d7dd50306c78493407295ae4ccef8c61eba2c58deb30 a66e9cbfea3c212b34628f0189a93ed493fcfd8baaa85338d746e69fe290deb0 +test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql 2ece012be6a62ea66737b2db8693f0e41bb23355d59784572d9193e056def5e4 59a4730da584dcf16e8d9e9f7d4fcd417fcf329933552e783375ad9715e46f4e +test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql d66f9672522b71318764f9c2dbdbeeaf895d66320997c3ba6a68daa7ea7c5600 de7d4231db182f63ab3e65ea5f4b548b530a6af7a79d7663a2250501a22e9783 +test/extractor-tests/generated/AsmExpr/AsmExpr.ql 81db9651d3e3cb2041316f95484bfe2a7d84a93d03a25bd6bcb3db813557a6e0 96c40bdbeadb1e52c6291a4da648304070db435e13f5881ab795f5874ef5885c +test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql 334f92d8b5ab4326d844c0e515c7cda84ba92dc598d5787dc88fe05beb04a7dd 845d6a740f5b8593a42cb00ef0212e8eae063dcd4b4e60af57e37bdfb61e4c0d +test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql 93e644147ddc4de00c882c32d17ff3c22822e116b67361d52217619153b7d4c4 4c0c3f72707f41e879426ff75c5631e9283dc0507316740bec22216c5feb04e9 +test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql d2070ad3509e5f4cf77d1ebd7ed730368627abf9c99e34cbece822f921f0a2dc 602646dd1bfcb3f6e09c1c3aa7a9d0cde38c60a397443c26d464fda15b9d86f5 +test/extractor-tests/generated/AsmLabel/AsmLabel.ql 5fa35306f29af248328e480445812d249428e1ca1ad8fd9bf6aaa92e864b14e4 93690a78ecb8bbb2fea9d56ce052bb12783596bde9664a6014b992c1ed9054a3 +test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql 2ca16a4c6cfa438393d7e805f7da3971929e18eb70014e7a9c715d043404d704 f9ea9dafa9b90cce5624e0f2f900eb2056a45a0dd4d53eb1f31267661f02d17a +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql 660b7d5a466a7d426dd212ab7e4d7e990710aedcfd9e82d94757c9d3404f6040 a0afa9d7158f285e3fa306d3189bd0babe26d53cbf53a574de8239ff1046a7a6 +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql 00c8ccb9d4694067810288022ee6d57007676f1b9d13071c2d3abc240421ed79 d0febfa9a18b9b34f747cdc23400ca6be63df187e2b37125a4da7460316ac0a9 +test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql 8a3890c5ae23ce0e20fb4ff1af574db1faffac3bdac75c1f13fb8bb3227d9335 f4ac325ffebfb1fc3cb68b4405b49a012a4cc1ad12c1f8dffb415232e2bb3ca2 +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql ab7d567a6647f5cb03586b914131897d52d66909f1c8f0178ec07975560bdd42 ef4302d3dddd4bce1420e64b870da600c4368ab8cf888dc6e260d50d9e78dc2a +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql 8836f5152483ef6897db1e6c761dfbf51df4addcd448b554ab9e397b72c8c10c 3751a2558255c721f959b9651040c0f6f7db77165492dab7555209eb36b97353 +test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql 8932726b3a76e3358a22499e4b5f6702c971d8ea6c0dad4d9edf7fd1a7e8e670 8aabd40dbdb0b46e48b875ad7fdf2dddc11d8520e94c2ef49c8fccf81f3936a1 +test/extractor-tests/generated/AsmOption/AsmOption.ql c3b734a8ed0c8cb7c2703243803244c70f6ab49cd5443808b51c69b542479cbb f33359108019bc7e489a3493a14cc8626393cf021b264e09c06f9997fb1f69ce +test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql b2be14f72b828d69058cdfe06f2e974e34ca4f864b6a792e18927ba6bad2bed8 44a766a4588b30e974e22e87c1620531b754d3d68fe30159f1cd75e556759b33 +test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql 1a775bb242deba03dcbc55469812a11e7bce4506c9258c6cb18696c4b26d7fe4 6c609d289c8bac2074513f52dd5ed5021224de212968db495f51709c9fb31dc8 +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql 809114ab618f85ba8c4b87c6602ec0641445bdd1cd679b2abc9e3b0c0c790aeb ea18549186133865bf9eb62021d16ef702365c0c919dd8a2d00ca4a337eeb65c +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql 3074826db602b4f716a7504b019d3834cd2ef1a3f411621780ef40b97603cfe1 2fa32c795d7024f6a7370edac9f9d762f685981cb5bf5886e930316a2830095a +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql 0fb1e458b477158439eaf222eeb7c16ccdb12584fd87941c0f8b058ee1e91946 6f3297fca9c90ca730e9e02eb83a54f4077e03d36f9c268515300482e5c82a0a +test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql 138acb4234fd0607e1884304e712498f4d34cb0da52f55a3729b33ec69056b10 c4207e230d60405644bc6cc56d871901116900ccb6d33398fef7292229223969 +test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql c80510ab2e3975cdec4a98df8d0d0153bc46f64c677c89c208e9ced5c78f500c daf705c0e8cace232fc4609e70f7bc2f8565f47f18d0decf7da580405609b0fd +test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql 6c02b392b2e602c7257cd5591ded2674c37a54709a84250642f56671ac993f6c e9ec9a6202f8a6774ea46686f0a2b4c6a4511fec129ff95c61159e7102a50c7b +test/extractor-tests/generated/AsmSym/AsmSym.ql aa631efd6d31f9003e8b4deaf5fd918f0a3cfe4e319ccde918b47e4a23c43eda af41534bd153d88903217230fcea58b75227bb1ebff851e288f1353250d402f5 +test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql 84943b40c30a8f630e18b9807d600cad010d5b106c68efd2b8de24e72cc4a441 b186f89c722271d98cccbd7eaad8f2a49b46983ef5b6630ac9944d5025676da6 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql e0bfc812d6bc06fcd820d67044831fbc7c6917e11f75565128c5a927c5706aa3 e4b765d91f1205ed818dc1143316aa642d968e7bcd65ed055579ab941c401637 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql c81e25fd7885f13c0500e8f9b84195876e70f2b25ad604046f497818226c8542 62ac0e7c82da169c248e4f9e0e8f866d2f4e599b03a287c2bd407b95a5d9efc8 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql 4d20375752c000aab8d2e4988fff1a5c95689d114c8d63f37b389b95000ee873 957e360a4eeefa2536958770a7d150fda610d1d45c09900dbe66e470e361e294 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql 1d6d4031ed10dbe09ba8597d9ba5417c6b890b5b745e91bca12401459fc3c4e2 7da625c3a6eaf93b0ebd5d9863aad5fad45b1baf5df27d93d7f9c5d1fb76db13 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql 586cb26683e522469a5094d359be4d8e5c6a3a74c1621a059bfcbbbedc0e34b4 84784b38c24313f3ffc88371421550922d9deb44d09ca7727ca77e892a672dc9 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql 3e18791a74c12d93ac8f786aa76bd836876052837bb9f0b25222cde47c55e419 b53bb52ff98c1ca0ba09ffce034a97ddd86e32828df7acb9bf34e20c4fb19664 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql 37252b5cee5ae64c36612aea57a6766bd34254ae35b9774642a36a8222aecfe6 c1f587d52b39c8aa66b9e6e4f36f40bda17dfcd72714ff79a262af99f829f89d +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.ql 7e006ac8e8574c66a312b1389c7a85a83561b946e060575cc7234ef523b1a3ba 6123b375796c014a0bc96d39877b3108c13eff34536aa68402bda85511da18da +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.ql 0e41d63d34076111cdd00ba08e93da36411491ea6eafa2e61e94ea6d05e6bfa6 7bf0e678fe310f9085199877ac2b0817109cd10d26a3179715493b54a2cea649 +test/extractor-tests/generated/Attr/Attr.ql 028ac0a387f674205c5ef903238872ab1b6b7e2201f58c31776cdf740daf437c cb56a22887e0737d28034b39d7c3fb37a3d6eb1f34ce3d112bcea2f0affb3b13 +test/extractor-tests/generated/Attr/Attr_getMeta.ql f1e2df2bc987c670e31b454ab51b3028efc1018fbed2298a8c97f554eb1862f0 a9115ced872c89edc398bda1cbd54068f9065debc14ea5ac887ba13ad8f4e3d8 +test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql 8dcc94a553fbddf17dfc619fbac563a9dc4fc6029860e10703e9ae9765d9ab66 52e7f0c98e6ab5dcef04b2ab5283ecde76e61a2297aa2080d16998f93dc923b7 +test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.ql c5ee1fc6017c4432a59dfec7d10d32681bd23f98cac70bbe65bc2aec8a680f3a ce6cf93c6305e6585c9d452bcc23af9dc8cbe2c872d2af5238a54c85df2071ee +test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.ql 143158284c8b7cc40fd2fa47c0bcf3f137ecd080b830476faca0c950b97c797c 0c9f64ce70cccf90fff7e7e9602f8ffdf68535d113914aab24f6450505b61d10 +test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql b095c87b128d667f76585cda671173808130df6d094ac7ebcf89fc345d7908f4 aa3f1caba1cc7a40a0903f91458807e9ac9e8e9f3f5688acea061cebc8a2ff07 +test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.ql 88c6342cfaa4d199a6c9f69612d3f783ad48c715c729f4909d563e032ee50be3 d90c139b22bf7350f9ae32b8b3ae6c19bf190fb2b4d5154b845f2252090fde32 +test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.ql c8942270a2ff2b1b5c9ee4319185f0a8f1f8acb39eb825029c02a2457a8cd641 fb4c910ab658404869506718e18a5c8097629ba56111329552abbf429df0a324 +test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql 1c36f72c679d4c0e7d0653bf5f7b70e3019d68e9115645f6db61f6fccabfeaf4 890b64875e44a73eec0d7c905de3363fffec3468171de628652b5066a4306bed +test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql 26d985ac4b668d78d2fefc6b5a37f2dc334e4c5f8511dd14b89014e2ef5c3b07 4546dae1816b2618f8d881e0ca8eaa851c768fcd994f3edd3285a3880878177c +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 19caa39aaa39356219dda740b7152f85e43a4f8d6295841e2c535c7e3bda7a5a bd668574ba41021e758e391d4790b871439badb2486ccf6a5aaf788ad6ae4142 +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 +test/extractor-tests/generated/BoxPat/BoxPat.ql 228052e5303f523797994232b1b762c26ce29bd1e38b49d496ccf04090b97c00 6501e816dcb8839b9b72c6ab231db449b8f7779e5faadf5a8c5be81f53eb001f +test/extractor-tests/generated/BoxPat/BoxPat_getPat.ql 7372e29737d968820108211612ed880f3e13084992419f5b52eaddf4bbfa874c dda2f412fcfba756604c03b766e9bbd17e6c2141b2d355fc0e33ec33573ffadb +test/extractor-tests/generated/BreakExpr/BreakExpr.ql cdde2855d98f658187c60b9edc2aa36b1853270f3c183a37b11801ff24d22a8b 687ec032ff86ee21952d2b95dde93fba026a09f6f39a284fbc6e9b42647d80e3 +test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql c7690a9aab1923bf3c2fb06f0a1d441d480b3c91ee1df3a868bbbd96c4042053 c592dd077fb6e22b2d6ddcaec37da2c5a26ba92d84f5d1ae4c78a615b9013765 +test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql 0358f4fe6a66da56177703cf0e991042729c5e34ae8b6dccbb827f95fe936c72 1cb2dd778c50e19fe04c5fdf3a08a502635ea8303e71ff38d03aa7dc53213986 +test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql ad83cc0db3c0f959fef6bb7ce0938d241a877e8cf84d15fb63879be2fe47238c 240b2fe2156b763d3a82fc64159615872db65b65ffb9ba2f3fd5d1ebd6c60f34 +test/extractor-tests/generated/CallExpr/CallExpr.ql cd38ec018b1afe9ae32ef94feca62295ad37c770c38b48a47bfb09697e7ee531 f6b0f2128cd5e63715f630c581d07b83678c298f7a7c56e38815e0d2c49ee36e +test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql 7d8d53ee4a0642f85d6bbfee6912fead699b5d117534d2b1803a670550894484 1782b33724b72afc9b7d99e3a52cacd4431ce1e12a7e43a7ac9872aad769b4ee +test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql b022e7b6b6db9932e787e37b7760c6a09c91140a0368940374a2c919688e0488 c20849c96b53c96f6f717efff5e8b4c0e900c0ef5d715cfbaf7101c7056ad8f4 +test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql 1ace458070875b9ff2c671c2ee18392ea7bf6e51b68ee98d412c8606e8eb8d33 4c35da8255d2975cef4adee15623662441bb8f2e1d73582e4c193d1bc11cc1b5 +test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql 060a6c8b5b85c839b14fe96f9e50291a7a0e5662a945f4f337070f782ec76715 e9a1e44433936146d87be939aa160848b9a7d7333c36da601fb7d1a66d71eb59 +test/extractor-tests/generated/CastExpr/CastExpr.ql f8d889de678f09c32b8e999a1667aaa38366a005d37a537883bce7ea576aad66 488f8285d6af8644968c19488ada65c8f4b7fd82f57271cb290b4896a675d2d7 +test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql 5d5d98172e495cdb8b5cea9d6588c4c245107b441464e3ffd6c27668af11ab4e 5820bf083aaa4c3275004a2cd9eeecc4b45ab96916cbc0655a1b42611c540715 +test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql c37186b8f3e3dab8ae28c0da7263ff7272c40501beb16736ec0fb8990d285e22 59d50d7349234afcf84986b7570db9dcd342e16812f7c46199d4736cdfa5462d +test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql ab6b0a61adc404c89c0e2e1962236a8e703fdc5092512bb4a5d9995af8e13c7b 4e7f6b6f58a1ef34ed45e31e35154dd8dc59054ebedcaa87200c84cc727ef1dd +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 4d5f40935d07b0b24d77b93f56e9cea47666c5a3de84744641f9a4cb5d8d1319 b9a235c0a2d6a254d15f1fd1d0c8fdb6a7af51487b3826f26d8ca7a3b6cbc9b2 +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_getParam.ql c87b61e80dd62e031e8b310d8a4b781a468ecf2e5e81662be400f18bf33c5862 22abbc976a0e6f33c32c0e93cd0dd567cead13d82d561b9214275ea01b4a0573 +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 8cae77fe63a0a64b2ff2f5e642711aa79ad29fb8705d877e195852ed148af67d 6178c888516d9d24aca14a8fdf1e94043e2a7f85332700c13f368b1e22f2bccb +test/extractor-tests/generated/Const/Const_getAttr.ql bd6296dab00065db39663db8d09fe62146838875206ff9d8595d06d6439f5043 34cb55ca6d1f44e27d82a8b624f16f9408bae2485c85da94cc76327eed168577 +test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql 82e86399d5cd72621dc8d9cd9f310d3dc7f2ecf208149dab0d202047ccbbd2f8 33df8c5b5044f49ec244e183c61c3b81fabd987f590ba6da4e18e08231343dc8 +test/extractor-tests/generated/Const/Const_getBody.ql f50f79b7f42bb1043b79ec96f999fa4740c8014e6969a25812d5d023d7a5a5d8 90e5060ba9757f1021429ed4ec4913bc78747f3fc415456ef7e7fc284b8a0026 +test/extractor-tests/generated/Const/Const_getCrateOrigin.ql f042bf15f9bde6c62d129601806c79951a2a131b6388e8df24b1dc5d17fe89f7 7c6decb624f087fda178f87f6609510907d2ed3877b0f36e605e2422b4b13f57 +test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql 3300b902e1d1f9928cfe918203b87043e13460cfa5348a8c93712d2e26d61ced 71e7b80d3290f17b1c235adaca2c48ae90eb8b2cb24d4c9e6dc66559daf3824c +test/extractor-tests/generated/Const/Const_getGenericParamList.ql 8bef3c83401a0a203d1e19a4dc652d2285870760cc2032a1b5745fae9fc3f29b 95b2f730daf19eb87b17a3f602ea3a71a1056c8f2a2328d7b46189cc82b29e4c +test/extractor-tests/generated/Const/Const_getName.ql b876a1964bbb857fbe8852fb05f589fba947a494f343e8c96a1171e791aa2b5e 83655b1fbc67a4a1704439726c1138bb6784553e35b6ac16250b807e6cd0f40c +test/extractor-tests/generated/Const/Const_getTypeRepr.ql 87c5deaa31014c40a035deaf149d76b3aca15c4560c93dd6f4b1ee5f76714baa f3e6b31e4877849792778d4535bd0389f3afd482a6a02f9ceb7e792e46fca83e +test/extractor-tests/generated/Const/Const_getVisibility.ql de6b2e9d887316e279b45fab7887980ca7d93fd32c2259f3a06de2b6e2957c12 2f135cdbbb84b43d282131edb7eb4df6caba61bf7421881a49d4679f0f44f661 +test/extractor-tests/generated/Const/Const_getWhereClause.ql 9458b25fd2567c92d1230afb844d81f1f9a9a7b4d164cbdf8b86455ef0d02251 8792f1a5cccaf77f6b1673dd5acd067acfb79f9a8a34a0769e0eb69ab89c9f16 +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 ee17b4deba9c503130e3ce565102bc8e181770efcb1309be9c822f0a7ba6fc17 638ed17b5c009e71b31f580c4060ba763bd4208c3984b6c032183ab46a4dd43d +test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql cc06e762e1652e467c7cf02c34f17c621fb3a938f294ee527fa04ed78c8701ec f863f8f6bfc9d169b585ae56b4e4ac0fc1603fd14775450e950cca4d5ea28e8a +test/extractor-tests/generated/ConstParam/ConstParam.ql de4a92306dd3f65e0d308d34715f388815dc70955b819c627f5839cbd9d8b464 ff98827d3ab57bfc48356072de0172e8e1c2374dc6a086b1ad721b6d9e6038e6 +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 +test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql f25a4695e06a6410264e979c7a4421253437cbab5837afafffbe69ecb384ce55 4b7ead1298ea0b5e12dfa2d75aa4732e1070c6880982a9cbaccc8d129956a232 +test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql 971ccb238aec663855745fa2669d5f8973a4e6c76bacdf0deaf23522ec1cf80c 4e3ceb4c4cd833ad8311bb02e5cda18163082e341cd8a3def60734a53cca8929 +test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql acb261869d3b3c65e364e7b6fbd7afdf5305806d4417b05044beed9a81e66ea4 af35ce0aee87ddc7a0cd34be4a480c619940d036d5cecce0e4e1fcd75b7c553e +test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql 39dae9872d92fa9b15343c93da545c2b0e15b4f27f2296c200fd4611b68858d5 52a209022e3b83260b4ef5513ffbcc1ca1f7c21bad2c721a0d3698793d2161d2 test/extractor-tests/generated/Crate/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql ff54195d2e09424faaac4e145a40208bf0e57acc57dfa8247b3751862a317c4b 583d5b98aa31a9af6ad73df000ca529f57f67aa6daaa50ca5673a56eb57bf507 -test/extractor-tests/generated/Enum/Enum.ql 11b8b502f0e79e0447a3d014616798448130ec5d686b5b12e0db687786065f4f 5ea58a9b57ece63253a82599c096ebbbd0a3c4ad136ca20662f47a4bafd2df41 -test/extractor-tests/generated/ExprStmt/ExprStmt.ql 7c62a97f7f910ae6e0e9aff7fdd78b369d21257ccab52afe6307ddea2e15dad1 2d32a366c4acbea3136ff1f9f9dadf76b148f82ad1d7170f02efd977d8a07ae9 -test/extractor-tests/generated/ExternBlock/ExternBlock.ql ceb04a9596c73dc2e750ce1950cefcf0b5fffd1ab7dc3e723e4a6500b3ef3ab2 4f6ab037d307ff351a9e48c37b47b8f8f25de5f3d5ecb78cb8c39d7275751d29 -test/extractor-tests/generated/ExternCrate/ExternCrate.ql 7cd54aa65300453fc031e69fde24466d01cdfb8ba73e24e4d134fbd3847b15a8 6a6fdeaee88c74caf7345dc8b85f326032eb27e63aa63a6ed883256e4da86d3b -test/extractor-tests/generated/ExternItemList/ExternItemList.ql 7f4d538d8878a0166b1868f391abf34df1d5e986a7a2e9ceaddb36d95bc7f46c 37072596f5a1e28ad98cc87dbfed00afadd83fa007f03d5b17d4dee8922b100f -test/extractor-tests/generated/FieldExpr/FieldExpr.ql 2a04baaf57a22b65bd5b9e142e59cc2b7d3dd3174910ddc0c2510094f2dd32b1 d8e4fb4384aade1770c907d16795a4af9884051390a5a05935ad4b4df2e757a0 -test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql 1501730f1e02e9d22b07b18bb42a5372e1d327bda62bdc81d75f9966946cb97d 28625f0b7ee4d7ab37fc13206585961e89a5e509a93215c16136d2382418b7af -test/extractor-tests/generated/ForExpr/ForExpr.ql 3bac38bf33e140ae9f88371ec90409f7de867e39cdea46f02b15519b236b57cb aade1baf6e6081b3b9bce5b7e95fe4b7ffe00ea9450fd6e1d6692ad97cf93fe9 -test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql b74c0034bf5d1bb4a1a73ab822daca4572e80983a0c88620abe92bb794dd9cd8 a18f9a6d95b46b808c3a25e11fc54d2564ace67fb98d0c76632c5d5894b31030 -test/extractor-tests/generated/FormatArgsExpr/Format.ql 237ed2e01d9a75ee8521d6578333a7b1d566f09ef2102c4efcbb34ea58f2f9e8 09007ce4de701c0d1c0967f4f728ea9e627d9db19431bd9caebbf28ee51a1f36 -test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql 5abcb565dcd2822e2ea142d19b8c92194ee17c71c3db7595248690034559d174 1ffa743fc678701ffeefff6c14c1414bb9158e6756f32380dd590ff44b19ca5a -test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql 243c2f9d830f1eae915749e81ac78d3c140280385b0002d10fcc4d2feaf14711 72b90a99a8b1c16baf1e254e1e3463c3ce5409624a2a90829122717d4e5a2b74 -test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql 0a345eb48dba8e535d12a00e88008e71b3ce692fbf8f9686c8885e158635dffe eab1f230fd572474a3f304f97d05bbf4a004c52773aaf2d34f999192244c0b80 -test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 24108cdc54feb77c24bb7894744e36e374f0c03d46d6e6c3fcb2012b1ad117f6 05a6b6f51029ee1a15039aa9d738bb1fd7145148f1aad790198fba832572c719 -test/extractor-tests/generated/Function/Function.ql 3a30225887bd7d6fbcd6dda1c946683a2b0e289f45bc8a8fe832abe662024d4e 225475fa02be09a1b0c0fcd56a003b026b3ac938f591a47e8fbead4873b2b202 -test/extractor-tests/generated/GenericArgList/GenericArgList.ql 9bd6873e56a381a693fed0f595d60d973d0073ba7afa303750d5c6a0b887a811 0b373079f65aa91cacabfc9729c91215082a915197eb657b66bcdb3b6d5e7e53 -test/extractor-tests/generated/GenericParamList/GenericParamList.ql 206f270690f5c142777d43cf87b65d6dda5ec9f3953c17ee943fe3d0e7b7761c 38a6e0bbca916778f85b106609df6d5929baed006d55811ec0d71c75fe137e92 -test/extractor-tests/generated/IdentPat/IdentPat.ql 23006eddf0ca1188e11ba5ee25ad62a83157b83e0b99119bf924c7f74fd8e70d 6e572f48f607f0ced309113304019ccc0a828f6ddd71e818369504dcf832a0b5 -test/extractor-tests/generated/IfExpr/IfExpr.ql 540b21838ad3e1ed879b66c1903eb8517d280f99babcbf3c5307c278db42f003 a6f84a7588ce7587936f24375518a365c571210844b99cb614596e14dd5e4dfd -test/extractor-tests/generated/Impl/Impl.ql 6db0831b8b6bbb0168a63b49aae27022546256c19cc9b36d7fdebbea6a51f2f3 4d2e6b46a9a9397e6da6a58fcea6e75c5b5df37360cdfb2d6d477140c3958fb7 -test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql 311c6c1e18bd74fbcd367f940d2cf91777eaba6b3d6307149beb529216d086fb 16c7c81618d7f49da30b4f026dcacfb23ed130dbfcfa19b5cb44dc6e15101401 -test/extractor-tests/generated/IndexExpr/IndexExpr.ql ecfca80175a78b633bf41684a0f8f5eebe0b8a23f8de9ff27142936687711263 27d4832911f7272376a199550d57d8488e75e0eeeeb7abbfb3b135350a30d277 -test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql 6ba01a9e229e7dfdb2878a0bdbeb6c0888c4a068984b820e7a48d4b84995daa2 7120cafd267e956dbb4af5e19d57237275d334ffe5ff0fb635d65d309381aa46 -test/extractor-tests/generated/ItemList/ItemList.ql e29302a9212b07fdaf93618852be30adfac64b292e9a0ddbf63addb803daaa98 7e69a78b0f58ef9344892113799092149024c1352b0965a6326d8a45cd44771a -test/extractor-tests/generated/Label/Label.ql da1f302da6cb31e6ccb73c722d9d5cfaad6a26d9869b3fa09fe50b03e26f3d9b 5fbfabfef6567ec6609be1af7859eba8ecb1f7f1878b8fac426e0d7098c17ba1 -test/extractor-tests/generated/LetElse/LetElse.ql ec8e7362ce9f903731ed6bfc190fc18a6f60abf150f5cee878a0fb9adaa20b94 2e019b6e246caabe4800ab940bc150bd8e466d59dde87bd614bf064adb703c8f -test/extractor-tests/generated/LetExpr/LetExpr.ql 59f70af49ba496559a7ccfe30e737597fb473794d677627d344a9285f85dad33 b59d1f665c600055666a422c4008878cecf17d9ff847cd02b6e0e82ca73073bc -test/extractor-tests/generated/LetStmt/LetStmt.ql d89291bb071484b1e79b009b2a310a5104a2ac0e85a8581ed73135e1351c27c8 45e20da515173e372c1d1d87392eae64d6d482eab0393f9753d1ebe792241d39 -test/extractor-tests/generated/Lifetime/Lifetime.ql 9ca2da890633be36338a60e41c19a32ed03a7397ffd5c2271de964ded59b380f 475925d5aaa3c7763f3fdc703b8510408b6f729a4855d9e7ed2cf642cb7e0f98 -test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql ba052a01e76251c45960451fa183cd33e7435dd2906a8a085d99ce7bfba8ee05 bfa2de807b23f139342ef820d05f50e3b3573027427d0c77b710aea5a94fc839 -test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql a96f586af332969878a4e9df8f9dfca99e5c98b6f60315dd1b3fea47c4cbace9 01d87c8d686466e15e19f85aa9b2536f7b8035181444d532ff11286c77b14dcb -test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql 00570642966d233a10ec3106ae65e6ea865c29d0776fdbc452815f528301117c adb286ad3bd763f1b1b350cac91bc2615869dcb9b0faf29276ace9a99d31f0cc -test/extractor-tests/generated/LiteralPat/LiteralPat.ql 863d4902e7e22de3176398cbb908e6f5f487b3d22c0f9f7a5498a1ebc112c0fd 47e3f70c5c32f17050d3ca8c8b42d94ecd38e378627880d8100b7ca182cfa793 -test/extractor-tests/generated/LoopExpr/LoopExpr.ql a178e25f63b4d517482ec63e5dfb6903dd41dadd8db39be2dd2a831e8456811f f34165f78179960cc7e5876dac26a1d0f6f67933eff9a015b92ca0e2872b63e8 -test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql 62859a25b88c93db1d47055f682f1b8ed97ef227c870bc14041af106cb9593fd 14c5831920249ef2e0799ddacca62805e2e2d8b8a6cbd244acb3a20c4542bf7b -test/extractor-tests/generated/MacroCall/MacroCall.ql f98017f6070e2a5e4b191d5380cc0491d7358c456e8459b313235e44eb368794 437129210d9b7f6850adf4d2c8ef7d0644193418645d631b8edf229656fc57ac -test/extractor-tests/generated/MacroDef/MacroDef.ql 9e3647a92713d32f87e876f37d703081855ea88a7a3104757f90bd94eb382fa9 b50e9797c1b8ea5491267ddb6778862f0541617ee60bd8e167cc23a499e36733 -test/extractor-tests/generated/MacroExpr/MacroExpr.ql 83fadb88fd8f913bb1b1cda26d21b173bdc94bb6682a74eaddce650ebf72aa41 1c502cde6a95ec637e43d348c613be3dec4092b69d2c8692abdc5a9377e37f5f -test/extractor-tests/generated/MacroItems/MacroItems.ql 0f8c1d134a28b80c70d5fff7c120f17350f6116689fdd7f67bdbfbaa0302c224 9f0594aa6d96c4f368d6c6521d0b58ab456611842afbfd040cb84f8858241677 -test/extractor-tests/generated/MacroPat/MacroPat.ql 71f65d80e670ec43db768693b8d44d627278a69e938517dc9068c76785ffd102 b1577dd669cafa9cf97aa998a7f30ac4a94aff129787a2d5a1cdac553fd56397 -test/extractor-tests/generated/MacroRules/MacroRules.ql d97daa29929a5bc4e25e65755c1929f9854beb1d2a183579a1ebec1d4b346dca 8b81026fa36152d870f91981a020ed0fa06cae0380d4e8d9496fea12a95b0326 -test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.ql ebe8451a9256c9d7e77749beca88d0fd5ab73c76404bed4ff6e0c75f126159cc 72dd6d5ca4133e318fd51bb9007519b938e618cd4ef27bfe52b9c8c8cbd484ea -test/extractor-tests/generated/MatchArm/MatchArm.ql 704976bd48e56a0a2fce7c2d9454b6cd24b1bf924633702ebcd71d8521b9b171 7c2bb501002c997a680c69b6d0856da13868125913e726f1a12b97907f32064a -test/extractor-tests/generated/MatchArmList/MatchArmList.ql bbc679fe6d8dedf9131d0fa5faa7b44c138c5f56b9cf3cb209fd3ccd614b689c 916c53a2b68646b52f2d28eca2a19218ba9d12eb8edf7c6cc4140dace1bf4e0d -test/extractor-tests/generated/MatchExpr/MatchExpr.ql b75a5936401bb5ca38686f1413f5c8267ad685722560a2e9041dacf2f8d54abc 7da57118fe5b1f7f5cbe8d6b5f3ae70816fd4837b1c2e6401b98175b36ca233f -test/extractor-tests/generated/MatchGuard/MatchGuard.ql 91de18a0a18d120db568b2c329e5cb26f83e327cf22c5825c555ea17249d7d23 0bcdb25895362128517227c860b9dad76851215c2cdf9b2d0e5cc3534278f4ec -test/extractor-tests/generated/Meta/Meta.ql 43dd1cd669099b38396b316616992af6d84b0c1cee953b19235a00ab3d3bb43c 80b1885809aa074357e21707d1f8c6dca19f0b968ccff43229bb0d5c6fffb2b2 -test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 617bc809816dc3cc1de1c0b49c494568164fe2a048472f4cce1b83f0a1f54a42 1b323e0b1812dbfdd78ee58798353e20326a3ca7529f52d5c984d1d92889a65f -test/extractor-tests/generated/Module/Module.ql 4e154af13f19ee06e88ce8ff85e143bf6ddde798b2ec6fecebf43b8015211087 78f91c2827883ea7ed1f546de80d0909f4ac57b06027439f07dcdc0a09d7888d -test/extractor-tests/generated/Name/Name.ql b2fe417f7c816f71d12622b4f84ece74eba3c128c806266a55b53f8120fa4fb3 8bc65bbf3f2909637485f5db7830d6fc110a94c9b12eefe12d7627f41eae2256 -test/extractor-tests/generated/NameRef/NameRef.ql 210a70e0957f3444195eed3a3dfbb5806e349238c0b390dc00597e6b8b05fcec d74fbce3c71aa7b08ae4cb646ccb114335767cb4fe000322f9dd371c1bb3784f -test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql 4e73ec96fccb00fe241546ff12c47329a9c67b7ae40a58a5afa39ecb611b84d4 bb716f72db039e0a82de959e390259a82cf99ba4482070602b7b6b42511976e5 -test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql 851d84073f4a14cef24ce945a099bc43b22381fc21672ba9ba424623d66d9e0e b3ca3309da0054501dc49f83b9e1b51c155966a14504521565ea980cf1600f55 -test/extractor-tests/generated/OrPat/OrPat.ql 8742e1708da0bcc172c8cc637082672c92a136aa50bb2f0ef928387337aefa3e 1901c223502e8cc046c233a10d923226373bad0837264e2b837fd549929020e3 -test/extractor-tests/generated/Param/Param.ql de90709cbd61e1852c857ffb6cedd17818464c93bb7bdc92c900ee04f4d2a27c a105ee30716345987989d48c4fa6194c34741fc48528515aeca673662b5259cb -test/extractor-tests/generated/ParamList/ParamList.ql 015cfeec048fc89698d75a04492a0e39303b1264f80e2b6977d178aba18a745d 349455ea6fe026a482bf9d63e9581ed2f368de3331bd2f0b9591ec20ee2a5f21 -test/extractor-tests/generated/ParenExpr/ParenExpr.ql 5ac9654a149f32638a663894db769152ce5a5abff7051e4d865bf0ac2485759a 3fa0afc9522c241d7530cc6d1e52b662d920f0459684bec82fcfda30d2ec9871 -test/extractor-tests/generated/ParenPat/ParenPat.ql 50f99c6a7e5e2f76dc5bbc10a6b2db5f5f40b85e80a992aa616e424744a7606d 5ae681b09e7b8793d2d8fa36e9e7d9b6c32fc94d6c26d43425407d05d351fcb3 -test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql 86a45a9f9696a55562a7125f08297bcd50b368225a13cd31b6e9eb4071d04e13 53c0b8c4f453a748c9534220960c6ce8c52bd7501cf1d1f74e3928fc6512667c -test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql 6d0e3f7cbcc835f2a5784ccb09b0d65c2bb063c1904edded2e7fc8c9fb57c4fa e41c898b8b0d61078e0d76c6e2e141251dca71f79ad5fa119c012220c54cc409 -test/extractor-tests/generated/Path/Path.ql 0f6b63c723da7f140411c8e9a4bb9fbe043a997a1748a4a491add4bd6e81fd6e 5081db5bd590b72780c3c8032532e65b5d453c327c8771da6b87c10e30071523 -test/extractor-tests/generated/Path/PathExpr.ql 2b032a00d8f5570b34f44bdb4209f199f821e093011472b5c686918a063442a5 9f10b1e38863da09365fc45f749578dde74bbb64d35972fa34b83e6814f0004a -test/extractor-tests/generated/Path/PathPat.ql 8d8053588dba1f35fff3bb89eb66f1534f637cf3b56338a6f3c19d748db7e1ca d7405ca5bf3bfa6960426964be3ea32562e1367c74b1f438c0827573eeaf773a -test/extractor-tests/generated/Path/PathSegment.ql 87774cc2e9d1be7aaf8748d418b151d7ec03fb20fda9430ebabd86ddaebf5538 699545d8eb2d6325bcd2c253d56339bd71170b34e80efe5155189fbbdde9fbbc -test/extractor-tests/generated/Path/PathTypeRepr.ql 32023340cb9aa1fbf52a1a3e330c6f3206e1c64c9dce2f795d9e434aa5a1533b f451de0d4941ab79014d2883b46291f9f05f79d479fcdcab387020ab3ed68703 -test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 63e9dbae0d0b46d5e9d60c313e408c4c7ee1a93c5a26fe4c01a632911de961d0 09fcc28bb22553356aebf9ea93811703e5404b88022be8dab61ac81d3b187b75 -test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql d9289bfe1e72d9560b3878e4557f8cfda578ef7bce67eb29d7320921c0ba46a5 f3ea108aa25635bffa7673bb66b2581ce246d3aae86edf878c6f1abca2493c16 -test/extractor-tests/generated/RangeExpr/RangeExpr.ql c9776706d933606d1463bb08ed76457ac03a9558f6dac0218ef2012bc5e8e48f 77cafee86abc2680e1f9c925fbe664c05ba1b9a2533b1873242ef01dde1ce308 -test/extractor-tests/generated/RangePat/RangePat.ql 72b6a5e250fcec844f96623f265762462966775326ad0ad4df03203ff17f0066 04c375e98d6c7d336ebf7dee522f0fc716b7ec8141752534ed083c5d2550c679 -test/extractor-tests/generated/RefExpr/RefExpr.ql 4359b9e10727fc505213a896c4c8761258f355b572e11675a5081d811affb4ea 0c46fcbd866334d168e1c4c481b4ad419df048e4ba74488875b2799d316291a7 -test/extractor-tests/generated/RefPat/RefPat.ql c83d5e79a7d5977f658d64e8caea471b948400bcb90a3610283bdb5e9757b99e 26fa8a337e242ce660eb0dc25709148b837fff3229b259bfcd2987261c58c38b -test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql c545689e4cee2035d79fdc3d9b720e7231232f57f35d16848b20d4659650a8c0 f248b342115cb0691f3ebe38ec9a65c8a36440cdf2f28b3ca7faed779a6d4164 -test/extractor-tests/generated/Rename/Rename.ql b65855515219a5fc1889f619d76e3fbb8fbe6a631f931e313608964640f68abe 7da9373ceb58054189036fcf5a262d9cb6897ea9d1008c963f8a18c34b99a60b -test/extractor-tests/generated/RestPat/RestPat.ql 59fbb7dc4bbad60a0a7ec91d8997ccf8a7036d4bb20c88332791906d88672c1f b104f06c2d350a9d703abdb28619672618d0082a0fbe7bcc67fa8df5526b266d -test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql a6a8ad01a54f8f4384d3e1ab6352cca1e55c9041673705658b9feec3e3a1d3b4 d9ba5a13087e7731019d947219f20af547664965b2b304bd23155994ea1aa397 -test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql b44ca36c30cd584c9f976e625a6bc09242792016d5e78057f9ec4174f3a0341f f61dcce549d282a9b7f0bbdcb612909799156231f22f2b5824ec6083630013ec -test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql b08a4d4ad63ea6e62f8b9646fd838cac9d122a93f5716ee91ff7c62fa987a1d0 264d485a301f4220eaa580ae90964b05c1a2b19b898698e7cdcc86b624ba3aba -test/extractor-tests/generated/SelfParam/SelfParam.ql 7e57dd845ddc9142cce250c7e67e36044f2cc27b618a3b8876db7a6ac336d3e3 e546b5a690770e57bcfb07a662430f62128a3fed4eb46bd17c60c9e4595154ba -test/extractor-tests/generated/SlicePat/SlicePat.ql ec056b803471d22c8575313e0caca89a3d527d228719375e87cc6061c3da4ffe fb0af765ce9d04805cdd445e2222d6f956c6789285705bb1079e540935ae6cc5 -test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql a009f2ba47f3b082db274b6bd7068d65c0205bd11b13d2c202e43a6b9b48e76b a3092ea5f2b7113235aec5136800205265f1607c5cfac9f5a3552bed5d98cdf2 -test/extractor-tests/generated/SourceFile/SourceFile.ql 19ae5570a88b9e2d82db66685a31b01cc8e0c86c622a4bfaabe8c5b397b27eea 60e2ba5eb82518d6408254fb4ec01277b6c6c0e4316d4f3cdc809da9c32c4a57 -test/extractor-tests/generated/Static/Static.ql 103276adfe23b609b5965439d024007d4ed6831562452f880ee89300aab3e3a6 0418668d83b2e570bddb6edbf4eb7927f4fa6933ccda86c0354463bb839f724f -test/extractor-tests/generated/StmtList/StmtList.ql 4c6b9d5d8fd7535f97d81b968d4f67fc50e10c5d0f980e7c2704bbf5cd07481e ad972adb8d9a7892e6f8a12d96649340441f947afc99e633ea438c4d5c795ce4 -test/extractor-tests/generated/Struct/Struct.ql 197de8de01ede52110d827c4a673fcedc9175b1245b736a211b8724b4345902b fdf5d848a3b5dde164f1a540d7212fd3a3f6b0228c4645ddca773190830e2eb4 -test/extractor-tests/generated/StructExpr/StructExpr.ql 1e577f7cc83aa86fc82e4ac467bfb8a0c239408d4217f92a0a689957ea4fe6fe 35568a6cb7f0aaa3026e11a3b0e750eb5e93d4c0b6f737171e27c84f5dc967ac -test/extractor-tests/generated/StructExprField/StructExprField.ql b65375963aa24f0d1dd4c10784e32ab8c337ad431462ea1d081a0e456fbb1362 7f5a49e8df03ed0890b51c2e941d636fbbf70445a53d3af2c0f34a04f26bc6ef -test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql 01dc3ef66d79836a3d372464f05454015648ab093f9547c5d9c5d55271acb718 83625301c097fa38d4e6021ea28b8adc6338076c8c2aa88a86a22aac412839f6 -test/extractor-tests/generated/StructField/StructField.ql dbdb627202975a0ca07ed441449ecc95d9d0764084a49a18e7849164b2e65ce2 8e7f32f28d15104575eaa985e892c162ec775adf3481c227ef618b5668168de7 -test/extractor-tests/generated/StructFieldList/StructFieldList.ql 292170b20f3a55c0cd6a8d78ce99474ca68daf6fb380cffe00b2bd7074e1b73a 404bab780f290ae04d1d71d3c6d4e0092bb3d8c55e956168d2a445cbd6d1f06d -test/extractor-tests/generated/StructPat/StructPat.ql 73bd755ffb8d5ff3c77d7570c6d50eab7b51d8d4a44b638cf5904c37065f496e 9589dc8d8abd80d9f48d445af3dbdbd906a9c19dc75582688bf9c3abaa16861e -test/extractor-tests/generated/StructPatField/StructPatField.ql 92cb6a4b5234359c02d66085b10d41f37b77370491ed478ad6d4d9b12b943ecf 14bc2079763b53bc6ab11356f3bb21820ae9e4dd1b2a42a78665c32181c4ef92 -test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql a3ba3e99d3c87d5e0ae0ad82cbea3600ac1745e9364d54d8d51224b51a5a09a5 5942ed2722c006bae99de9174249110bfc79594c5ef9a6dfc098ae2be269b8f3 -test/extractor-tests/generated/TokenTree/TokenTree.ql 55592f43a6fe99045d0b0b1e2323211d3a3fd64a8c7d2b083f2518d4c3e2e4b0 8eeef2060c80b0918857ba9b3a8543a4b866ca04be3d5ca18aae8a26cbdb836e -test/extractor-tests/generated/Trait/AssocItemList.ql 065c4903992500423d796800e7dc9a5835a07cbada595108f3af6efa72517782 aa797bf5ddefb800d5ca7f49c19c5124b1007e1658129b27c8c3de34427c7f08 -test/extractor-tests/generated/Trait/Trait.ql ba40c2de2e8f2225ea7876c36b2510079838c0f4a99232bf0f3a3ab56b7705c4 c34364d0425f597a645fbb8b6a3874588cc652044909f1db73b09f2b6deae072 -test/extractor-tests/generated/TraitAlias/TraitAlias.ql 434558e26e1cdc4054536dd7a3e5e636509cd0f8576ba1612224a9873882a383 c904109afa94cffeacd6749dd4ad8b9d2e2cb3b228c275898d88625615dbedfc -test/extractor-tests/generated/TryExpr/TryExpr.ql 4e3c224a7d5fb8f01654c7d3c79414daa575897cfa6f351fcd5b5832f53a151f d961a497c304c1c5aa1d94e04aed2bf17a2c422e315f05986e1a9027e69dbd2a -test/extractor-tests/generated/TupleExpr/TupleExpr.ql 4011d94438903e96fa321285558f5791bee7e1d1fb26be0381586511cf439d1b c6bc8d08a8d5d98d7a52b72d5c597b63754fe12cec653c520833e4b71a9dcea4 -test/extractor-tests/generated/TupleField/TupleField.ql ed681b7fee5e68d24db4999389727b2589e5af793d3c2ddc8b1e245713c0e1f8 4f867b29adf91b4bfa5052e16d392c16bf260e858aad11b60c42f1eddb476e61 -test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql 3c3fcef21231550bbbf6804314b94d44cc18d445987c23cb6f2c88015570cc4a 8958e6748296bc6d0ad469e52852c38445fe462a8599a2e71867aa5d7066595e -test/extractor-tests/generated/TuplePat/TuplePat.ql 80609f1c525e90e13f34d55a81d47a83a03e064241f8d33232e2a79eaeea5159 d289b19dae4cbae0180cc58bb946f41646bb9dc008f5ce8a0e12eaddbc7e63e9 -test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql d00b185013bb4e5f878a5ec261ab2cfbf1fe2f67d1ad2e05d062629211f677ec 24254631a28c24ca78b4fa1b89c53b0b002cb43fe585e274155fcca0c481056c -test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql 2f1503734d272cd0616e5885cd344659cbd0ae7309a375c8351f57f2b86c3302 276a4fe91b8dc64cdca4467343e2bb2e240c66ec1e4e11bf8cba73819c6532cc -test/extractor-tests/generated/TypeAlias/TypeAlias.ql 2b120c7fe640b233540f6982153fddf50ddc089b8284dca321b4c48eecf93dfd 6d40a0d8c927dd499fd92fd95638c50eeca8f956aa1706c17913dbf83f0f500c -test/extractor-tests/generated/TypeArg/TypeArg.ql e1ca286c03bd2d44054f5dd75aac250382037f243046c49ec752ad8d65e4c0ba f316d5fa84a721427c0aadf6bfa0ed4cfd86e4d318cfb0fe82efc52e65c4733b -test/extractor-tests/generated/TypeBound/TypeBound.ql 4f5a2a49075c01c982988e66759f61c5285343d78cda94e228e17593d16fee6e 7aae320e881d6ea969e31b1e8fe586feb07b1db43c65da684cbac66157354851 -test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql 6827529eca62f5e7be87538af6231099f5932f39d8694f7a76369273b93f28ea 539dac4ccda7e51b7ae1a9e05d8a56a98176d9de25d5ed4347ebe2fbea8adeb1 -test/extractor-tests/generated/TypeParam/TypeParam.ql c5f8f62f2877c719c3cf069f9d0ca83cebc14f7611c6c2dce86c85114ea2635c 751c630986f35a8d0d32fbeb61ca6ff801c96cd1829dbccc874fbf5f5158e98d -test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql a7b7a93104fff28515154cf8e79045d3eea2494b5c46f1caf36639c53b1c64a7 070ee2e1664e3291646ea56681b5c93331f94dcc519deb28622beca3e26e16f3 -test/extractor-tests/generated/Union/Union.ql ef31f8b10ced5ed3a441f8ad0640e2fb46e566c859856e84f5a7fd6c85424b2c 1066561577ab19bf028ea29622750adc17de5b4d5dd0a8f77a8a50c8a15062b6 -test/extractor-tests/generated/Use/Use.ql a12b9867cc71a681cd4602c4045e75288a7cca502d48e20ccf17e155be130b3b 2b9dcac18670b062461193a6b40fcf569f19605b14daff82239fb39fd7fa3408 -test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql 46ff2cf0fc8b561b21f8dff3230550f2feafbe52a7ea8b28bf183abef94ff241 92646f3bd15a8cf4c23ee9de4d857ac5c147e570ef0eb223423a109b4b79aedf -test/extractor-tests/generated/UseTree/UseTree.ql 3c2bc924b54b9af5c95784023d4098924571ba464c5982124acea712c3ce0e93 8d9f963b61a9a8a83efd93438ce8b43d4aa763493338ad9afd2a3dc7a440892d -test/extractor-tests/generated/UseTreeList/UseTreeList.ql faff7bfc060d5b0a922f38b37bf586596566186f704c9921651785580e86d684 81e5b90edeef0d3883547844a030e72b555d714de1ed8dded1c22a3772b4449a -test/extractor-tests/generated/Variant/Variant.ql 9405704e9192cac4838dcba8625261d5c1f839bb8c26dac44c2d517d172a06da 7236de83eb542cb4024e07d2cb5a899c851116a3a66b3896270ecf663439c6fe -test/extractor-tests/generated/VariantList/VariantList.ql 1c1d82ce3ecfa7daaae1920662510e81892ed899a3c2f785e2ff3670245a03cd 29d4c5ab2b737a92c7525789e10a4aa9848f1a327e34f4e9543018021106b303 -test/extractor-tests/generated/Visibility/Visibility.ql 725d47d7444332133df603f9b06592dc40b0f83bf5e21ad4781c5658e001a3aa 2d65a30702a8bb5bc91caf6ae2d0e4c769b3eeb0d72ffbd9cdb81048be4061ad -test/extractor-tests/generated/WhereClause/WhereClause.ql a6f0e69ffa6b997cac04d4da442eb8bde517a576840c953abcc40863b9099ba1 7ce888fffc3038d5b18f8c94d3b045815cd45500e1bb3849c05fc874edbeb695 -test/extractor-tests/generated/WherePred/WherePred.ql 504d00a40e418542c3e0ff30d43c4d2d0e7218b2a31fcf32c9310d705d97b9fe 61c53dde539a9e1e3d6bf13ca1d0dab8af6ea6b54ab698a0a5a5f49bf627934b -test/extractor-tests/generated/WhileExpr/WhileExpr.ql dcfe1ed375514a7b7513272767ed195cdbf339b56e00e62d207ca1eee080f164 f067283510655f0cf810cae834ac29ad2c6007ba312d027ebcdf695a23ec33e4 -test/extractor-tests/generated/WildcardPat/WildcardPat.ql d36f52a1d00d338b43894b6f8e198ad0c409542f436e3e57d527205c3dfee38c 4e1321e714cedb606e0d84f10ed37c72da61b3a1616754b967f721ff0bc0e4ee -test/extractor-tests/generated/YeetExpr/YeetExpr.ql 5c552b490ccf5b123f7a2fa3e73d03d008e4df5928ffa0bd503dc6bd7736462c 09a4f413ae045051abe392f29949d6feab1a808d666c6b8dac0901f84a8a4740 -test/extractor-tests/generated/YieldExpr/YieldExpr.ql 1d948eaa69ccffb12a2f832b84918d36becfd356d1c6d7cfa9315df03e77ca95 c31281830aee6866b0d4757a427183df4d2f06245345db61f69e9bfa5cd09a63 +test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql 513d64b564f359e1022ae6f3d6d4a8ad637f595f01f29a6c2a167d1c2e8f1f99 0c7a7af6ee1005126b9ab77b2a7732821f85f1d2d426312c98206cbbedc19bb2 +test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql b20720ff0b147d55cea6f2de44d5bf297e79991eaf103938ccd7ab9d129e9656 eb8c9db2581cea00c29d7772de0b0a125be02c37092217a419f1a2b6a9711a6c +test/extractor-tests/generated/Enum/Enum.ql 7c96c17f4adae679a7a8b097c5bfb26978263398b77dfa6e5b0e7f547d8bbd64 18375fad5a3d574c627b563529fa9c03f7d140e872ce7db81895fcb8da87f001 +test/extractor-tests/generated/Enum/Enum_getAttr.ql 8109ef2495f4a154e3bb408d549a16c6085e28de3aa9b40b51043af3d007afa7 868cf275a582266ffa8da556d99247bc8af0fdf3b43026c49e250cf0cac64687 +test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql 571ec6396fb7fc703b23aab651b3c6c05c9b5cd9d69a9ae8f5e36d69a18c89d3 c04025992f76bce7638728847f1ef835d3a48d3dc3368a4d3b73b778f1334618 +test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql 76d32838b7800ed8e5cab895c9dbea76129f96afab949598bebec2b0cb34b7ff 226d099377c9d499cc614b45aa7e26756124d82f07b797863ad2ac6a6b2f5acb +test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.ql c7d3c2f1661a0a39bacf7f4977bd484133d9ee3934956d33f77ae1c83145b027 f5e374a3b620d3ef69bcc23123598179bcb4f1167dd29c18c84ad05c94c7957b +test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql 001bb634adc4b20afb241bff41194bc91ba8544d1edd55958a01975e2ac428e1 c7c3fe3dc22a1887981a895a1e5262b1d0ad18f5052c67aa73094586de5212f6 +test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql 2a858a07195a4b26b8c92e28519995bd6eba64889bddd126e161038f4a8d78e0 db188f238db915c67b084bc85aa0784c6a20b97b5a5f1966b3530c4c945b5527 +test/extractor-tests/generated/Enum/Enum_getName.ql 32a8638534f37bfd416a6906114a3bcaf985af118a165b78f2c8fffd9f1841b8 c9ca8030622932dd6ceab7d41e05f86b923f77067b457fb7ec196fe4f4155397 +test/extractor-tests/generated/Enum/Enum_getVariantList.ql eb30e972b93770be1b64eb387814b99b3901e8884dd74701c5478574242f5269 43e2f53c339f27e71954a96e218f6fc8a631b827457f718693eb2c79737b6cb0 +test/extractor-tests/generated/Enum/Enum_getVisibility.ql 7fdae1b147d3d2ed41e055415c557e1e3d5d4c5ec0da01089c0a8a978782f9cb d377397b4d9a3f34aed2a1790d1e826c9f77b60d65d3535b7738f21c41e1a095 +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 237040dfe227530c23b77f4039d2a9ed5f247e1e8353dc99099b18d651428db2 49c8672faa8cc503cc12db6f694895ee90e9ab024a8597673fd4a620a39f28cf +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_getAttributeMacroExpansion.ql 39b006e3acb71272cd0f211d37048949c41cc2cdf5bad1702ca95d7ff889f23f 2fceb9fa8375391cfe3d062f2d96160983d4cf94281e0098ab94c7f182cb008d +test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql 5a2e0b546e17a998156f48f62e711c8a7b920d352516de3518dfcd0dfedde82d 1d11b8a790c943ef215784907ff2e367b13737a5d1c24ad0d869794114deaa32 +test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql 40d6ee4bcb77c2669e07cf8070cc1aadfca22a638412c8fcf35ff892f5393b0c e9782a3b580e076800a1ad013c8f43cdda5c08fee30947599c0c38c2638820d6 +test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f +test/extractor-tests/generated/ExternCrate/ExternCrate.ql 25721ab97d58155c7eb434dc09f458a7cb7346a81d62fae762c84ae0795da06d d8315c4cf2950d87ecf12861cf9ca1e1a5f9312939dce9d01c265b00ba8103fd +test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql cbe8efdfdbe5d46b4cd28d0e9d3bffcf08f0f9a093acf12314c15b692a9e502e 67fe03af83e4460725f371920277186c13cf1ed35629bce4ed9e23dd3d986b95 +test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql 254a0be2f36e593f1473dfc4d4466a959683a4c09d8b8273f33b39f04bb41a7b a087003503a0b611de2cd02da4414bb0bbbc73ef60021376a4748e0e34a44119 +test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql c0bf9ba36beb93dc27cd1c688f18b606f961b687fd7a7afd4b3fc7328373dcfb 312da595252812bd311aecb356dd80f2f7dc5ecf77bc956e6478bbe96ec72fd9 +test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql 88e16e2bbef466cec43ace25716e354408b5289f9054eaafe38abafd9df327e3 83a69487e16d59492d44d8c02f0baf7898c88ed5fcf67c73ed89d80f00c69fe8 +test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql 6ce362fb4df37210ce491e2ef4e04c0899a67c7e15b746c37ef87a42b2b5d5f9 5209c8a64d5707e50771521850ff6deae20892d85a82803aad1328c2d6372d09 +test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql 52007ef7745e7ceb394de73212c5566300eb7962d1de669136633aea0263afb2 da98779b9e82a1b985c1b1310f0d43c784e5e66716a791ac0f2a78a10702f34b +test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql d2c13d0c19a5ef81ca776f03a7259e743adbfa66ef440f7d402cd97391ecdfc4 c678f6ac0a075c1e0adc3768a344dbeebcf0d13e30878546094777e3fcdf92bd +test/extractor-tests/generated/ExternItemList/ExternItemList.ql 7596986006fe1084815ad47b7e1cb77c4062a8c0432c2e6234c974b8632ead40 23c30ea01dba595e6e1bfa384f3570d32df4310ec2e8dbeb9a20afab9edbbfc0 +test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql f9560f441efc30b65ad88e3d3d323f40cbe3862c04a9c044fb2ca16edac4f3ca 18138daa285c73d40e5caa03791a6133b44429bff4e14cb1f223d487cf1648b4 +test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql 2f20a6a4f41babb7340dd366a8145bb7cc9ceb75812af8a6316d076a4eac3428 4f613a73604dfe3f0d32343156e8ae30f4295186ac4ef2f733c772e96821ffc4 +test/extractor-tests/generated/FieldExpr/FieldExpr.ql bac5eb23ef2e6a69b3b898a486c2c498bd8a92233116224faaf9039225cf33bb 23a4a86b6235571b3af8a27ad88b4e163d9dc568a23b948d690662089c55e26b +test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql 609c4f1e275d963cf93a364b5ec750de8cb4790abdaa710cb533ff13ab750a4e 8c2aa84b1ea6ef40a7ee39a2168baf1b88323bfbc6b9f184e7b39631765a48dd +test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql 747b7de5f2bc23f526e96611401c897d063625912dc90544a4c57e2732c0766a 1528b998f6480bb1fd089c0115137c3a39fcfabc73d30917784a5d7ed5ef2990 +test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql 61fcbae168878f655bb35e8f1af8536c82acf02068bf782e5abdb7b780136ef9 5716c109cfbc996e884a7fbba8800cb770930060cc5c4d70c0bd434e37f2bbcb +test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql 277dc617dd193f414c777e85db358f6dc5ebd7c029ac321d92fc6f1036da6abf 2c1a245975852e010552b0e0157b0daac7137cb25aa059fa5cc3adb43544a52a +test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql c4a7519f9ab86de609a0155d41a0fd6cdfab6bbd7ffc41f3d5ef49565bdb5825 a0404f9a702f007d78f24291e80e939ce3ed2b603e436998dd1337f978499137 +test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql e097544fa9a1c173a996f323a90aa2b82aa6f12f30cd602fbcf0d4bfaf136311 6b5f8a4e4bee41343d075561005442c89b2b16ba547226f54c060c206b0b9e26 +test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.ql acd208155569ff3e9f4560f274560f1fb08585f18bfde74f3a011b469a492096 fc624e3dbe69fbda31ffcf86398213423cfabc4da33ae5099caed1f3751dad25 +test/extractor-tests/generated/ForExpr/ForExpr.ql 1f8b7a9bbe7a8c077864be64dc51d91ec267c4f34f1cad80fc79902cc0af04ff ae999fb206b04ed81fa08bdd7617cbfe932c5e4109285e10108613cdebba8f7a +test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql d3399b7453e10ff48efc79ec38dd9b6e06bb472b9c39f559242d003e7f63b1d9 ba37e6bf129e1c2f9094e093bbfbf41864f2cb7725a64334f9443270dafdbfdc +test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql 90a6540f8a91cfe3ed1bdde1e680786ce5a00edbb797a8fe70bcc0507c438fcc 65c67ad5890aa502628ee73efd26bcbd4597a8bdfc9839233ede9e26393638f8 +test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql ce90da75e040f448d524187357f3ceededba72407a84c1dc8e1498ed9788044d 0e23d43e0b3412fe90c6a5a4331f8da85eebe19e05b8c7d9710056857280797b +test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.ql 21657e470752bd83e05e176c2ca9371ba0f7ca3d1f97f764a42dff3caeb46ff2 0cafad7adf79ce90f475465b4a144e6529c6345504282b1ba3c6a12ff2e99892 +test/extractor-tests/generated/ForExpr/ForExpr_getPat.ql 1e0205a9b3a58fd2ddba49ef1b13a82c812519604d4c5bc02f23cbb6ce960016 d00efc63d714b1c76e4b0a67195d4e605f43a1e49d469f4f18bfa18d12280b63 +test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql 38fa18958dc8c1564abf0c38ebc7e76bc64904f9774a99e46504f903e9c19379 8384e007868981dcd8120f4ef52475ca99641a530a487cd9dc7eba98b9391060 +test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.ql 33535c02c7000e89e4d4e4560499b9512455fae407e72e05615b38f9e950c6bf 35a6aa7de0f627fb96ca7f4f2134b060a820327a3de4970fa2790c8fbea28a2c +test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.ql f24d02c57af9f4fb4f5c3058e236a8d9b4c4f6f2aff84e65497f693309bdf93e 1c93d6214ee0a89e2bd5d0e02800e29e8a14ebd7efdb6a62380edb97dc902def +test/extractor-tests/generated/FormatArgsExpr/Format.ql 6fa117eebe7ec99b71ffd10cf2cb2a21e67ab157f7c08feedabcc9bcc5390dce 9e7681c3bff55ed78d43ba6567f85bb98da6b166358951b1e972de1114750009 +test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql a521903c73f79e2616f7b8ef76790e11cbf432f8437825d52d117da232022b9e 4cb195d09ecb51e5bbd5c1c069ec1720f74fc074efc88b0f5c07cfc140167775 +test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.ql 7e1a7f902fb661660760d2a2f3f4cb6818a0c9f5b5061ede6ae80223774e4e09 8a50f64cba6f56320631206c801160201e3c98e74367bb035d689baaa9b4e411 +test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.ql 0e2f24388d516e14d195957163a2d5d97029c9e11a83ca71cf69e00ecc0bb2a8 dab2969f5ae6a15ec331c0152e7c116d1ee2c3d073b2d4da59ffbcb83404c65f +test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql 7b6f09b23d0dffa19b8dddf7f5cfe53068f8a8e5279e235c6d54e60616bd0822 47db74f035770ce708a00355acbfd4ae99152b7eb29cf28001985806a4efe5aa +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_getFormat.ql 02d3fad540700966488b24c62dcf200548154a2f10f578ee2995d8c4ebe32287 cccfe779b9804c2bb968a2b1f54da8a72393805c2c8b31d7160e8538f2f335f2 +test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql c912ac37275cbe7b3b29607bed1a3190c80779436422c14a475113e1bfd91a54 ef90f67a9b952a38ce557b1afbf0b5ce8551e83ddfaad8309a0c9523e40b5ea7 +test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql 7a7ee3a3322b4af8cb3b525cfed8cc9719d136ea80aa6b3fb30c7e16394dd93f 5aa8a77d7741b02f8ceb9e5991efa4c2c43c6f1624989218990e985108dae535 +test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql 7bd4ec3dde2ef0463585794101e6cc426c368b0e4ab95fbb1f24f8f0a76cf471 e7b01e8b21df5b22c51643e2c909c6fc4ca96fda41b3290c907ba228abe8669b +test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql 2793ba1ff52182dab992d82d3767a000928f6b2fbfdb621349cafc183f0d2480 c3777d03214f7feb9020de3ce45af6556129e39e9b30d083de605b70ab9a0a12 +test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql 634efdffaae4199aa9d95652cf081a8dc26e88224e24678845f8a67dc24ce090 d0302fee5c50403214771d5c6b896ba7c6e52be10c9bea59720ef2bb954e6f40 +test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql 0d2140f84d0220b0c72c48c6bd272f4cfe1863d1797eddd16a6e238552a61e4d f4fe9b29697041e30764fa3dea44f125546bfb648f32c3474a1e922a4255c534 +test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql 01ef27dd0bfab273e1ddc57ada0e079ece8a2bfd195ce413261006964b444093 acd0161f86010759417015c5b58044467a7f760f288ec4e8525458c54ae9a715 +test/extractor-tests/generated/Function/Function.ql 66e6a81a80cdf30652f00fae1b060e93b9d7c61b08cb3d3c1cac16cad445e769 97ace9f51b9ae933c79484b06b92355164ff3582cadfc6e3bac5c00072cdeff3 +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_getAttributeMacroExpansion.ql 17a346a9e5d28af99522520d1af3852db4cae01fb3d290a65c5f84d8d039c345 36fb06b55370828d9bc379cf5fad7f383cdb6f6db6f7377660276943ab0e1ec8 +test/extractor-tests/generated/Function/Function_getBody.ql cf2716a751e309deba703ee4da70e607aae767c1961d3c0ac5b6728f7791f608 3beaf4032924720cb881ef6618a3dd22316f88635c86cbc1be60e3bdad173e21 +test/extractor-tests/generated/Function/Function_getCrateOrigin.ql acec761c56b386600443411cabb438d7a88f3a5e221942b31a2bf949e77c14b4 ff2387acb13eebfad614b808278f057a702ef4a844386680b8767f9bb4438461 +test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql 0bcdca25bb92424007cea950409d73ba681e3ffbea53e0508f1d630fccfa8bed ff28c3349f5fc007d5f144e549579bd04870973c0fabef4198edce0fba0ef421 +test/extractor-tests/generated/Function/Function_getGenericParamList.ql 0b255791c153b7cb03a64f1b9ab5beccc832984251f37516e1d06ce311e71c2b d200f90d4dd6f8dfd22ce49203423715d5bef27436c56ee553097c668e71c5a1 +test/extractor-tests/generated/Function/Function_getName.ql 3d9e0518075d161213485389efe0adf8a9e6352dd1c6233ef0403a9abbcc7ed1 841e644ecefff7e9a82f458bcf14d9976d6a6dbe9191755ead88374d7c086375 +test/extractor-tests/generated/Function/Function_getParam.ql ef0b46453512fef08fbcc2a15bc14ae319bbc4810a4e4ce03a5ca3b1e8859ca7 ce36d3974059c1cd63eb1d6b76111985087f40dd4fe0c716a00aa9a178c712c4 +test/extractor-tests/generated/Function/Function_getParamList.ql f888802ab00defb58de59cc39d1e0518e3884db7eaf845f39dfa55befdda58b2 ba0d1a07676f1c987b820a3d126a563ecf9a3d53ac1115b87a5af487a8a03c3e +test/extractor-tests/generated/Function/Function_getRetType.ql b3a1ab90c8ebf0543e5db6a415896e44a02f984321f49bc409aec2657298942b cdfa37772e5026febb19c9bcd0d325688b0fbf2f6e7bba424b73eca38b9b3e38 +test/extractor-tests/generated/Function/Function_getVisibility.ql 490b0a369c809a757d4835b97becf617b0399f16a63a2b06258c9a227d5cc415 25ceff15d3cd03821e1cb2c04cb8894bcd101eeca62b66b54d1751b628107818 +test/extractor-tests/generated/Function/Function_getWhereClause.ql 37a44ce54bfa7e54dda5db2e5662d0fd70ad6e2caa07ffdedd923a6492b4c6a3 2ced4e49d19cf717b9bf26859fa20f94713b6438e817c63c29ccaf34bb5f373c +test/extractor-tests/generated/GenericArgList/GenericArgList.ql 2d3e37da2c02a88ec8a1f99baebf352196f84c76c093c6f851d2c2d2ee941e9a 1cd884cfbaf59a2da080f50d966dc511243055fcfdd08a61bdfb10cc5701e1aa +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 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 +test/extractor-tests/generated/IfExpr/IfExpr.ql 1401ba0ed88e27d24e5dc3911bfcc2aee3e0f3da30981866bfec2c71c238e6b9 2bd7abeb5ab28418eb4155206696356cc484ed83705a3a215e0d779b632a521c +test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql f5872cdbb21683bed689e753ebe1c49cded210188883a5f846ab79c0b2147e1b 6cb3a47778c3116ee95f7aeac0e2dd640bbf0c07f8b65236e9040e139f02e5fb +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 3a82dc8738ad09d624be31cad86a5a387981ec927d21074ec6c9820c124dfd57 8fabe8e48396fb3ad5102539241e6b1d3d2455e4e5831a1fa2da39e4faf68a0e +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_getAttributeMacroExpansion.ql 526d4651f2bc703ee107f72b9940a3062777645d2421a3522429bf1d3925f6a2 c08c3d7501552987e50b28ab12a34abd539f6a395b8636167b109d9a470f195e +test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql 494d5524ef7bac1286b8a465e833e98409c13f3f8155edab21d72424944f2ed9 b238ef992fce97699b14a5c45d386a2711287fd88fa44d43d18c0cdfd81ed72c +test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql 3ab82fd7831d22c7ec125908abf9238a9e8562087d783c1c12c108b449c31c83 320afd5dd1cea9017dbc25cc31ebe1588d242e273d27207a5ad2578eee638f7e +test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql 88d5cd8fd03cb4cc2887393ee38b2e2315eeef8c4db40a9bd94cf86b95935bdd 9c72828669ccf8f7ca39851bc36a0c426325a91fc428b49681e4bb680d6547a9 +test/extractor-tests/generated/Impl/Impl_getSelfTy.ql 2962d540a174b38815d150cdd9053796251de4843b7276d051191c6a6c8ecad4 b7156cec08bd6231f7b8f621e823da0642a0eb036b05476222f259101d9d37c0 +test/extractor-tests/generated/Impl/Impl_getTrait.ql 3319d2649b4a7f3c501c8e16a1a3e5d74057c94c02772d33f19b4030daf934d2 3acca9d040c3f1d90ed26b159dac71625bea689221e180c856a75c2bab95d286 +test/extractor-tests/generated/Impl/Impl_getVisibility.ql 2497bb8c867297e4c398473ee7f0ec3693f7e894b84819f6336d69bebcd3af5f d8be2e9535b06471fa873af13b0223cc79d30d63a3f5e27a0f64874d60dbf07d +test/extractor-tests/generated/Impl/Impl_getWhereClause.ql 269d4b0639db28a7535b2d745b11cda0885da7369f9cf4c4973a6ccc20c9960b c4baf89f68a173c1415baf90ddd9195e29784997a5ce45a36171485f6bb44c03 +test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql 309d5bed6a2bee9f728727338401c9c48841bd31d917dabb837bd88b78289ece 223060ef89358483a7aafed567a7b657d37eee023c49032aa55ad08a17c9e31d +test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.ql 5e3561412a8f990e7f32fb99d40b82690a9281c850226fd301b9f656f7b9ad2d 4e23068d2635056a74f40bdfa809878e31a8172086f115985ca027055e8317b8 +test/extractor-tests/generated/IndexExpr/IndexExpr.ql 0a93213b755faaab84b7eccb5b8f3d8f8ba87910ad661f194e06917722dbf6a8 46497b3e92523c6c015373fe122678846618b45412b903323ff3644e37f2c52d +test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.ql 360dbf8e7d69c691a1f4c9bb0aaa7860a6b0f09b21a1d1a6db908ec7a7d7561a e50b942f7592cb944f607bd64f8e4d4abac30bdc53f73b4dc851e689dce61be9 +test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.ql 841cacda1a1cd976229f2bd18dcee4315506105c2cb3789c30a7539fd6d49d0c 37a92e9151f10cf971b24f5af6e2ca6dccf87b6e0e0b2237a0564f97719a0d66 +test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.ql 1aa934524dd44009297ef89a657d1ba99304f6590514a0b0b51b2769780f8c20 a42f25640f0331318bbc8f44af133095580b8947309628511bf0b3675149506a +test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql a9c92ce8e20e427de3651fe59e6cbbe1b7efa8db9ef9d836da254cf07509e4ef 5ee2cb6ffcdc1fd2a7c190b1a98bb7369c114d837f7e232d425563255b71ce3c +test/extractor-tests/generated/ItemList/ItemList.ql 6c1c8ef6da0fce64b1a5edbec98fe18910b0ecc390d1219cc08124ab51b13bf6 e94e5c8d1639c1ed2ba543a521a57a026e15ea6b339b6c6d4409dd30ae67a51f +test/extractor-tests/generated/ItemList/ItemList_getAttr.ql 24d7a764d4f8997bb77e93c21e6e5ba7256ed11657bd6479bf42458b8e89b52f a6b4df0cc6bf79ab3f98c93eabbbd3aaf11ec2506a0e894fa1f51be90191d71c +test/extractor-tests/generated/ItemList/ItemList_getItem.ql 6e129499f77f7dba287b2b31b58fe6d834559e27214797807bb29b2a401f1f7d e406c07421dd6382ea73308d9124c30e971591c9e4c797b3115955f22c93589f +test/extractor-tests/generated/Label/Label.ql 6a92a27d615dd9c380cb9d889eecf827fc3a26f4bef65c2374e5ffbd6a7ce6b3 a344e26bc6ef835f2fa818413ba518c23f956750f9a2232acb1ad77aab9df446 +test/extractor-tests/generated/Label/Label_getLifetime.ql 3d6ddc3b44182e6432e938d5c1c95e0281575e320d517e431f6bad7748efb93e 56d07e485cb5e4263443eb5a0d62d7d4456bb0c2748331b371e519bfe14d3b81 +test/extractor-tests/generated/LetElse/LetElse.ql bdf2b17d5efe6b9cb5bb4fcfe854a5fcd72443d39ae1e7981d2a0459c481e394 a14a611d0783ae38d631600c2bde7409f4e739ba2f284314b90ec9a21c23ab3a +test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql 32c21ad843884944738a735f01e272032a347d1860fa6d27d17652c549f941b0 2bfd8a5e3d42eb1c73eb679ada847dd29f2f0657a0ad8ef15da126e54fff5ef5 +test/extractor-tests/generated/LetExpr/LetExpr.ql c76a0c4aaa73f4064207dacc8d2c649d3a5f8046c0f6e1aae985d2402a342e73 c5abe3845d4975d05c98ee6496732da384cdaca60ed49235776338e6dbe80b3d +test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql 911b143afebaa0a487b13d533f089c5b0eaf336a44a4cab42147c284338484ba 625c91fb6d8c2e3a9f13e5679cc0cd29329c6c2b213d2e1191e23db2b65841dd +test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql bc0363f77bc2ba583619ab7d309293ace0ed6a851bfb9b886f75729f96eb40a8 bc0cd9233b7904d8cc7f9021377120f5f4bcc5c7aa28b1b55f17bc738c434d78 +test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql ee33d3bbaf0ee7cdf9bd7b800e9684b5ac7ce8cf1939378cd460cb0c5ea11742 5d69e727b3e9d1ab4ce9eef702a7b1911515469625056bce87fac1d27ba863e6 +test/extractor-tests/generated/LetStmt/LetStmt.ql 9f8cf125eae91b190e6f534541b5fb0a0ee2391803266e9d02ef5d605bcfed81 e5cb251e9fd1a0d22553fb9180f95c697d780f51f93121d2fd654210477641df +test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql 68f69c4c054514140c0f0833a170e9f3facf950bd7af663ac9019f6c88ba0ea7 ca54d25cc052289458c7e34e40f0304bca2c412cecfb407f31279262bd74c15a +test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql 6a5f0eed3ce3e8cbc57be6ec2b4eed732f00e084108d21a61d9ab28b65e494ca a48b426b97a6c347ad04fe2e592cd25b5c66b2a6a299cbf8c0da03e14304fd70 +test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.ql 21f8f1cbf725399da80c24c4d3ca27072758b76cbdfd726a7f1e851ea12e58fc c01a4eda22088184357288910fa41692f52486d60fbf7c0bc3b5b01f8f67fe07 +test/extractor-tests/generated/LetStmt/LetStmt_getPat.ql 978e4f7861c7b03e6f2a3a2f7ae82e9b72bb5ef000f111127cb583a04ea6f971 3c92dbb765dfb01c290413e538290b0b2bee5a83bcfee383d081f56202a784fa +test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.ql 8bf8a99450b27bc97db90a323b19ab13cb266c0b6c4e7d0ccda80952f8f7987c 70227445fb87ea1afae10ced988bdfeff4a1edd3d9d787367a17ee121d31db0a +test/extractor-tests/generated/Lifetime/Lifetime.ql 07b093285b08fddc149cbce3047700072874efb29d55e591c86d53e6432a10a7 29437b1b20f6321870837c12348d165729312e164ac4fac1029c1000e48d311a +test/extractor-tests/generated/Lifetime/Lifetime_getText.ql 7b06b940145c3d1a1bb3aff67e8e106f902a737edf61ed91577cf3ca94606936 c70d6186c500fdf6bc9d9d028cf3ec093914e20ba9547a391203ac8c5df1d727 +test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql 4a0c2166d9ba79c99d6be430a28f79d3e7e971dcd96777e02c3fec56cec3ffeb 158bbf0f06ad36c81704d11f6318f80a0f7dd9c1a71409980ca60cac49dbe9c4 +test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.ql 050015eb1130bab1ff6fe7df6915a634e66e27f2c90609026aadb4287fcc0c3f e4f63abbbb7668aa36de0caa2bb38fdbb4ff198aafa312ab12c9667eea67f04e +test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql 4848a1c83b138e3842a7dbd0edb416b1ea2985b77b92d45b6d02b9f8bb997b1d 75fd2beafd2076121edb435996743e4d32ee58f6999205c9dadcb84a7fa80860 +test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.ql d1ff2d3cd34bfc0f363bcd7638d4b9fdcc604c6a9c74da22359df1877a0cb26d 57b7654249890266ecfc9a325c27da84b8b3cf21666a74f38e6439ed7a0596f9 +test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.ql 893879293bed44e7a259c7e501f8301b92be0e00665c0049cddfc7d027790284 ee74064414e6ec1299180aa00851b5f323053bf4bbc2c5db6c0bedbcc1388411 +test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.ql b1fb7f8e9fff999f7b0508951c089b2d6588a0960f172b67e7e111e64d608d49 fdfdd3a159033fca0549d6db97d681114e83f630982e72abbbf7cf1b2d77b4e9 +test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql a5644e5cf8b03121a1bdee793083cfe27286a7ac67d6ab5f1733b1fa81c5b38c 711d44afb1d0fba47f355563a040f4b21ca63a1c59a73d9b6510715133fee5b3 +test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql 6e76da2bb7858f493641f91216ea28f22dc5825931841327e34330f11d20c8b3 3f10a510944ea049b636ffc2c6223c0a15fd9b528ada7ffce54fb70637640768 +test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql 7049fec0bbbf0e048af1ff318f42f43d0f8a7354a5638dc21174c4ea725b54ce 2edc94cc0a7f58ec9808b63ddb4d20a3907c88e50bd9ffb14f0281b433f5621b +test/extractor-tests/generated/LiteralPat/LiteralPat.ql 3d3db6cad0eb13f84b69efa24a9f9a32d35c62582274d2751cc3ac54dca3b538 7feb64af87546ea64c139c61ac20176a99ad40b9949b361742a424b164fe6d54 +test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql 2cb03a22220e99237d4f3cd94d5090757cd6e57df708d32e80bca3964507651f 4dd9a6c1e23ad9851d9aa8c42c79535f7a2c7224bbaaff286eac7fd04b39c6f0 +test/extractor-tests/generated/LoopExpr/LoopExpr.ql 37b320acefa3734331f87414de270c98ab3309fe069d428550738197e3498a8c e744c25640b5c46aab53ce5114b789e13319572b0c99d0f2bc3c177849e61541 +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/MacroBlockExpr/MacroBlockExpr.ql 03144a5448de91801037f3c1e6d29a230e18f9c077c718e5c3801a31cf593977 9a035e3f119b0e0c88fc4c775a032220a01680fbea2cc7f8e98180205b9bb8da +test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql 415a762768df2c850d21742daab5e53cd248dc3dc9652414b99737f1d5c5824b bdd2ba6c004ada34f26dac3bbc7abcd5fe250c77a97faa7fd71fb54a0dd4743a +test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.ql 8f6604c09e85da1a19b0f87340cebeb1cdf4e94b208305c7393082d88cf0b032 5081d9db5b38454fad1daad2f8972661bd2fb4cce2c815a560a15f8a7b9cfcee +test/extractor-tests/generated/MacroCall/MacroCall.ql 992e338a9c1353030f4bb31cae6ae4a1b957052e28c8753bae5b6d33dbe03fe9 863fbfd712a4f9ed613abb64ecb814b0a72b9ab65c50aa0dc5279d319249ae6a +test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql c22a2a29d705e85b03a6586d1eda1a2f4f99f95f7dfeb4e6908ec3188b5ad0ad 9b8d9dcc2116a123c15c520a880efab73ade20e08197c64bc3ed0c50902c4672 +test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql 60cf2c12ec7fc3b25ed2a75bb7f3da5689469a65a418ba68db0ab26d0c227967 7f71c88c67834f82ef4bda93a678a084d41e9acb86808c3257b37dfc6c2908d2 +test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql 3030e87de6f773d510882ee4469146f6008898e23a4a4ccabcbaa7da1a4e765e a10fe67315eda1c59d726d538ead34f35ccffc3e121eeda74c286d49a4ce4f54 +test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql 553b810f611014ae04d76663d1393c93687df8b96bda325bd71e264e950a8be9 a0e80c3dac6a0e48c635e9f25926b6a97adabd4b3c0e3cfb6766ae160bcb4ee7 +test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql 1416adaedf6a11680c7261c912aa523db72d015fbfdad3a288999216050380a6 10b87d50f21ac5e1b7706fe3979cab72ecb95f51699540f2659ee161c9186138 +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 13ef4bdde6910b09cefe47f8753f092ed61db4d9f3cece0f67071b12af81991c a68091e30a38a9b42373497b79c9b4bde23ef0ab8e3a334ff73bfdde0c9895b2 +test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql 61f11d6ba6ea3bd42708c4dc172be4016277c015d3560025d776e8fef447270f 331541eff1d8a835a9ecc6306f3adf234cbff96ea74b0638e482e03f3e336fd1 +test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql 0a30875f7b02351a4facf454273fb124aa40c6ef8a47dfe5210072a226b03656 8e97307aef71bf93b28f787050bfaa50fe95edf6c3f5418acd07c1de64e62cc1 +test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql bd076cf1bab968a1502467652d73259d1ce0fe7f8af73bdf914e2ed1d903adf7 4673df049b36082be9a5b325f6afa7118b930bccdb5689e57ff7192b21d07345 +test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql 7b350f48e6f208d9fa4725919efd439baf5e9ec4563ba9be261b7a17dacc451b 33f99a707bb89705c92195a5f86055d1f6019bcd33aafcc1942358a6ed413661 +test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql 6c46366798df82ed96b8fb1efeb46bd84c2660f226ff2359af0041d5cdf004ba 8ab22599ef784dcad778d86828318699c2230c8927ae98ab0c60ac4639d6d1b5 +test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql d09b262b8e5558078506ec370255a63c861ca0c41ab9af3eb4f987325dadd90c cd466062c59b6a8ea2a05ddac1bf5b6d04165755f4773867774215ec5e79afa3 +test/extractor-tests/generated/MacroDef/MacroDef_getName.ql 6bc8a17804f23782e98f7baf70a0a87256a639c11f92e3c80940021319868847 726f9d8249b2ca6789d37bb4248bf5dd044acc9add5c25ed62607502c8af65aa +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/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 3c88db0c2ba65a1871340a5e940b66d471477852a1e3edba59a86234b7a9c498 98778dd95d029e4801c42081238db84a39e3ed60b30932436ea0fb51eedfcda1 +test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql 7de501c724e3465520cdc870c357911e7e7fce147f6fb5ed30ad37f21cf7d932 0d7754b89bcad6c012a0b43ee4e48e64dd20b608b3a7aeb4042f95eec50bb6e6 +test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql 461651a72e5f860864ed4342973a666efa5b5749b7fcb00297808352a93f86e0 8b18a507753014f9faf716061d2366f7768dee0e8ea6c04e5276729306f26ce0 +test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql fccedeee10ef85be3c26f6360b867e81d4ebce3e7f9cf90ccb641c5a14e73e7d 28c38a03a7597a9f56032077102e7a19378b0f3f3a6804e6c234526d0a441997 +test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql a0098b1d945df46e546e748c2297444aaccd04a4d543ba3d94424e7f33be6d26 3bab748c7f5bbe486f30e1a1c422a421ab622f401f4f865afb003915ae47be83 +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/MacroTypeRepr/MacroTypeRepr.ql 49c0dbf587f84023025f90d73d54f5320993f4db7dcc90e21eda53fc0b4d1f57 0a0712171db935c549a9cfddb6721c2c188c584a67be85409ffc3facf6c9a935 +test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.ql cae14884e549c74be4b600a264eb236993d7b8ddd86589a9116ee2ba18f181e1 1d4ae2d8ed9ce0d7635a2ae447b41a328e59e97c6df7827ee7d5cf62343e86e1 +test/extractor-tests/generated/MatchArm/MatchArm.ql 512aa404c94ba40b859564f07e9dffe6a5e687fafb039556e9145f4f3742981c 529f96e38cede8a26054f8981d4ba1d189c17d14d0f92d622eb20acd8f3d7e5d +test/extractor-tests/generated/MatchArm/MatchArm_getAttr.ql 4faf7a542702d13283262be7cb2e1cc3c862bc2e1953a460fd2bb5e75a7e9b1e 1d43f4d2a580d0ac309dd18a45a9693ab92107cafd817ccdb26fd7998728edf3 +test/extractor-tests/generated/MatchArm/MatchArm_getExpr.ql 116f02bef8650d27784a8657208e9215b04af9139d19a54952c6ba2523770f4b e0677aed6d53148e120fd0b03f4bc4fa108c6dd090f605c87b2e3ba413fb0155 +test/extractor-tests/generated/MatchArm/MatchArm_getGuard.ql 54e2c2805d54b353c9e36258ed750189846cd422dfb476c6eb52301860d7ff13 8fd408a3e9c6e5c138860144ba0f69dc2099a7a062e3bdf7d324c09df7d132f3 +test/extractor-tests/generated/MatchArm/MatchArm_getPat.ql b346bca229226414b32acc3d8ab0ae26647563fd79e1c434d1ef8d14bda2d65b e72eb69bb243c39fa997d17bb7060e2f82f2bb33d11a58caaae48f8372996704 +test/extractor-tests/generated/MatchArmList/MatchArmList.ql 14b5e110d48e2b77c85b7a188262e6a98300e0d4d507bb7ed9179c5802251dd6 4d091f06b12fef0fffe1c80a10f74438d8068f2fa09c50d5e240b6d140e60d90 +test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.ql 4781d002538a92b7f40fb0ec3d61aeedb6348341ddc354bbdd3ff61b74d59767 ae0da9497a30ce006e03bdb70e0ee24b685df529ac15a7d99a6869b5f7d7b371 +test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.ql 4d7e6d152d2dbeb4c9f594becabea27d3b25fecbde40d791a2907c69cc0c9631 4be9be658bb22e1b764c4ebc8d6b99bf50fd939f35ea44fbb869056c14632bd4 +test/extractor-tests/generated/MatchExpr/MatchExpr.ql 2966bf0507c0d45db1b933442ce8f1c4e0a9d4212c53a768791665cd2e0927f0 8af3b87528b6dd4cd3ff4fc6d2d389b1a743f979d9ccacd0aff134b5a4376118 +test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.ql cb8057372dcf24dfa02896ebf4e60a0b757dc4742b94011edc38f5b898ed4d25 6809695c2d3ac3b92c06049c9b920e8c0e99ee1998a11a7f181f2b0ceb47c197 +test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql d97055bcb0431e8b258b5ecdd98aa07cb24ece06b0cd658b697cd71da4ede8fc 5e9c03b2665ef6b2af98897996abb2e0a9c18d54eb64588340b8efbcee9793bd +test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.ql 0bfeb8f903fb23356d50b7edd80377f4a67045010ffbed04c835191b5bd62820 7dc8e38730ad72b4cea91c1f023cdbe83057053e8dbd077ff925c59e92744498 +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 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 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 85d3b8c794167f87840469e03d21aa00daf0998c28028f1c8848c7c4bd895db4 fa368ce4543c2544ecd2e636ade8d92849741226599290f59e0138a4a479357c +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql 10a88c3bf63dfb26f43b9cd1ed7fceef0f436ce2eff4b5a816da369bf5b775d2 ee3b5043719591b4048ec32e21bb5fb3a9f83f0420ef18c338fc0ac28d0e3240 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql 180e0b1715f5cd2be0de01bff3d3a45594b495b8250748d40ff7108d6c85923d bdadcdbecca5891287a47b6dd6b2fda62e07457718aef39212503ab63bc17783 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql 2ce876a04a159efce83b863dffc47fbb714b95daea2b91fa6fbb623d28eed9ec 7bca1cd0e8fbceec0e640afb6800e1780eff5b5b402e71b9b169c0ba26966f96 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql 655db9a0501b1ef20d604cc4cd9d708371781291443e8dec97b70ec2914601d2 2fc7df0eca22dcef2f9f5c86d37ee43452d372a4c0f9f4da0194828c82ba93e0 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql 13c08e67eda07ea9ddc6f22ab4fc7773185c0b700ae11d57b62e0c78a4dea2e3 cb812e282a77fa29c838ba939d342a29c360c263c5afa5aac4ad422a8176869b +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql 77407ac956c897ff7234132de1a825f1af5cfd0b6c1fd3a30f64fe08813d56db d80719e02d19c45bd6534c89ec7255652655f5680199854a0a6552b7c7793249 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql c22504665900715e8a32dd47627111e8cef4ed2646f74a8886dead15fbc85bb5 d92462cf3cb40dcd383bcaffc67d9a43e840494df9d7491339cbd09a0a73427b +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql 9e7bbb7ed60db49b45c3bdf8e01ec58de751889fc394f59ac33f9d6e98200aa1 c055d877e2ff0edc78cce6dd79c78b2881e7940889729cbb5c12e7029ddeb5a3 +test/extractor-tests/generated/Module/Module.ql 9e75a0f22f1f71eb473ebe73e6ffc618cbb59ea9f22b6e8bc85d3fb00b771c52 3eb5201ef046259207cb64fb123a20b01f2e742b7e4dd38400bd24743e2db1ad +test/extractor-tests/generated/Module/Module_getAttr.ql b97ae3f5175a358bf02c47ec154f7c2a0bd7ca54d0561517008d59344736d5cd f199116633c183826afa9ab8e409c3bf118d8e626647dbc617ae0d40d42e5d25 +test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql 9f7c04c405d25448ed6d0e7bf1bb7fea851ea0e400db2246151dd705292ae3a8 f55d86901c7cf053cd68cb7ceb4d6b786834d2d35394079326ea992e7fbc9ce1 +test/extractor-tests/generated/Module/Module_getCrateOrigin.ql ff479546bf8fe8ef3da60c9c95b7e8e523c415be61839b2fff5f44c146c4e7df b14d3c0577bd6d6e3b6e5f4b93448cdccde424e21327a2e0213715b16c064a52 +test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql 55c5b633d05ddbe47d324535a337d5dfed5913ab23cdb826424ddd22009a2a53 ab9e11e334e99be0d4c8d2bd0580657211d05feeeb322fbb5400f07264219497 +test/extractor-tests/generated/Module/Module_getItemList.ql 59b49af9788e9d8b5bceaeffe3c3d203038abd987880a720669117ac3db35388 9550939a0e07b11892b38ca03a0ce305d0e924c28d27f25c9acc47a819088969 +test/extractor-tests/generated/Module/Module_getName.ql 7945dc007146c650cf4f5ac6e312bbd9c8b023246ff77f033a9410da29774ace 9de11a1806487d123376c6a267a332d72cd81e7d6e4baa48669e0bb28b7e352e +test/extractor-tests/generated/Module/Module_getVisibility.ql bdce43e97b99226f55c84547a84d99b44f5d1eac757d49bcc06d732e0fb0b5a8 a482c18851286fb14ec6f709dc7f3280a62de8c3d59c49ba29d07bd24cf416cd +test/extractor-tests/generated/Name/Name.ql 0a78cd5c0c703ff30f8e3253b38f9aac98a564b22c02329d525cf101d8ac3fda 2fd83327063e6ab57dcae2dc5103c2965d7a09f6a10d553ea336cf594d32032c +test/extractor-tests/generated/Name/Name_getText.ql 5d223baad356308abc45cdce9ca9201d674de1cc1e9fff7ef55dd96082d59d99 6488ccc102ed4f0a2e1c5cef3f8b1adbe00d52c961573f1a16eca66af31e2d14 +test/extractor-tests/generated/NameRef/NameRef.ql f73d49d5c176cd7589f6ca148b0d0cc3d1084e27686910058adfd5764ef5767d ebff67ed3b325b01277e25baa1ad588e633ef8ce63209a72305465a0dc8002d1 +test/extractor-tests/generated/NameRef/NameRef_getText.ql 5212dfc1b65c0f724a72f5bffd82268d1f8ae287d3d61797673c29fd70d7ebd6 75c343614925c55a18917c07ef62af08c97c9cc714f627d1a27b9f26158a0bde +test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql 6db9820e62fe7a7395aafb6966043bd24d89833fe59c825ebbd4a2504d58bcc3 85dc1500ba751a4b3fa432fe5f5cb0c104a2179ac2e73620ed9ff08552cfbba1 +test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql ba10ed5147469564e632f9444176fffeb1accdb14ad635a3dee76044e5782eca 3f894c494421d49d3f8f2593bccd261c9defa768bd252705d4a3671ca8e8255f +test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.ql a12e828c85577184a41b255f54b10d4a654b57703074a7ebcfde2d43a358955f bc2590e76b60a3ddda9cc10903c68d07c6af19a593c8426d108a2a6520304145 +test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql 6d729fb91deacb1f620df5cbc86473183664e81849958624195da883c410a707 f3374c3d7306699d1f9d1c6c5788ee7c5a17103345bf53847be9d94e5fb9f14d +test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.ql 27f2d94699140805169a0c18068d78e10bddadb8db243bcb8957677c9d477935 4fb96f2f7a6e7217218adeb5069a7d4da548c6ac650683773bbff4fba32a99da +test/extractor-tests/generated/OrPat/OrPat.ql 49d881b384acaf68fa79de46da997cacab3e75467641f61150908f4112c47fa4 5d721da23be44e79d7b8a0dd475119836828d6a1edaff2c55decea8da83e65b8 +test/extractor-tests/generated/OrPat/OrPat_getPat.ql d56b78287cecebacb25249380647500387e0d9e28be20034b8a12406a999a7c4 cba7bb60afaaed4333ea5ff6d3850fb44a8b42edee67d86fd16df85938454269 +test/extractor-tests/generated/Param/Param.ql 0a2375e240422ced3e7e6f16da3f538501bc214d0713cf5415a91b8f9f4554f8 12b286e5622e693dfd0a614b96c5d4f0a7dad3dbd033f78ad7318d1bd85a5eaf +test/extractor-tests/generated/Param/Param_getAttr.ql e1dcf86540fd2971ced34a33b2959f001c3f654914d82e576caa4534b80fbfbf 987a826bf6dcd25c3426edb603a22f6caa030c82c1cb0e9e11062fdbfed23030 +test/extractor-tests/generated/Param/Param_getPat.ql 0c448e8ba8bf3432be08b5eb4a052aa19cccf0eb4596a3239481401dae9d2dc2 c943d4da36e1e734c1a012f092b2f597cb389a7ab33d5371ff8ee9c93e115ffc +test/extractor-tests/generated/Param/Param_getTypeRepr.ql 151a653a66722ec782af13980638b4156968a2bf1ee9221e983695712c39482e 597dd1b45078711d1ff2a5d3b0282d571b4d76d0d2e410c79a48ff9d5c8f80f6 +test/extractor-tests/generated/ParamList/ParamList.ql 4d879e6a6db24fb8d7f935c2dd332075ca4b2de41cc841aafec7e0b6b77f2cf3 b7e2357b77961f0f8315d3c9e8fde8578373ecfb9efba892416b31d7c168bb26 +test/extractor-tests/generated/ParamList/ParamList_getParam.ql dcaabf654941bf9afe50df3a5c61ef0eab50830a436eede98e30778bfd244a09 63cc7f529f96d5016804f50a385d8a736a534475a6340a8c2f51de99b54206a1 +test/extractor-tests/generated/ParamList/ParamList_getSelfParam.ql 310582a9921226a44e6fee2b386d48bf84388351204941dd12e3a2da395eefaf 6c2e0a6d5bc6db49430cf25501444da6540b7b2f9ac0052da93c8086e2af0c46 +test/extractor-tests/generated/ParenExpr/ParenExpr.ql a40c60a92be944f15f5cbcca52b0fde318bb1ad6864f9ab9302dbf5ce5f1058d a50e80b6b222fb43f9fec82677d0785c0b2696b9818887e2befafb7a6d399a7a +test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.ql e8b9016d2374d124472d135c8b9031124227cbb139362f6aa6d4d99cad631e30 4aaf95ee8a9ab1ead19eaa4dabc080f12aca49f50a150a287b93132de5c61df1 +test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.ql a75dc46dc78d3b4a4f629ba16f7129ecc0ab90f60b651259d00d241b2886bf7c 32164d75418df184618501f41fbc0a81dafe1ad2dcbc9ec87bea909aaf05ae40 +test/extractor-tests/generated/ParenPat/ParenPat.ql 565182ccd81a9b420911b488c083f540d339eec6a9c230424800bb505df13a66 876cdca008ed32f415c9ee99ce7e66b276769d0b51ad7eee716e1317484a34ce +test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd8706192a16729203448ccc7b0a12ba0abeb0c20757b64fba1 0c66ba801869dc6d48dc0b2bca146757b868e8a88ad9429ba340837750f3a902 +test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql a96bb8b51d8c0c466afc1c076834fa16edf7e67fffe2f641799850dee43099a2 0e6c375e621b7a7756d39e8edd78b671e53d1aac757ac54a26747fe5259c5394 +test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql 64fe4ea708bc489ba64ed845f63cfbcd57c1179c57d95be309db37eac2f5eb71 0f4cbbfdf39d89830b5249cabf26d834fc2310b8a9579c19383c90cb4333afb7 +test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql 6d3496449d40e7ea083530de4e407731641c6a1ba23346c6a11b8b844b067995 9d21019a49d856728c8c8b73bcf982076794d8c8c9e2f30e75a9aa31348f5c60 +test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql 256164a0909def95501022cfbb786026c08c9ef50ff8da9e851a7ca8b1aaeb1f 8bfac08d3261f2c4b84fa3da46722f9c7ca866a6b964b5f1b8f78b81c97ae3f7 +test/extractor-tests/generated/Path/Path.ql 2b02325ab1739bf41bc5f50d56b1e9cc72fca4093b03f2bda193699121e64448 c4d44402696ce10175ad8286dbd78277fbb81e7e1b886c0c27d5b88a7509052e +test/extractor-tests/generated/Path/PathExpr.ql 5039fe730998a561f51813a0716e18c7c1d36b6da89936e4cfbdb4ef0e895560 cd3ddf8ab93cd573381807f59cded7fb3206f1dbdff582490be6f23bed2d6f29 +test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d +test/extractor-tests/generated/Path/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 +test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql a68a1f0d865d10c955f7ab1fd7614b517e660553b65fabb9daa8f302adbc2602 c47480d6440ae63be27d8158a35536a8d9051817dec1521cdcab297ddb52e1ae +test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql dfa55fe480da0df37670660fc1c54b6c38d47365353bc9d4f662183b33d4e80f 1b18329a7b60805fc073df3149c48f39aa66924d7eefedecbca36a2b170a7fbe +test/extractor-tests/generated/Path/PathPat.ql 6b9d973009f1b4963c7c83b0f5051eda7a76c8fb4a789217b4a25cbab0cdb274 57f0621dd3657b6f4630d5406816effcc6bc1b03361aa12e118e807e28e9e71b +test/extractor-tests/generated/Path/PathPat_getPath.ql 6c0c71c80a6e631ea7775ec8660b470ff6b264bab14a399606cf113b1fb190fc 8e34cbb4d064db929e94652e1901ec4f26affa71e30e556b7acdff71dd622cbb +test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql f690fd9a8773e7c73b70f2d64ee919fef8eee243c5a315c4a6d2713d43ea0e43 f37817427c36cec14a2e07f99d3a32f37f3f27a8eafdf170749ec2780054729b +test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql 55df4541a7b0e82198acfcedd7dc99eb564908270e4fb2b032bf05e40fba6fef a5932d884903da901263f88644c8585a45045190d7204f630506c5aece798288 +test/extractor-tests/generated/Path/PathSegment.ql 523ec635961b9aff465dd98a1e63f8e872e147943646ea7383af95c3fa5d8e42 29bd402ee76eaa080cd6fbf29ba9d9141cc9828f1d3ddf162da6534daed52c56 +test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql 8f6e67b3e316309f20e21d7e7944accf66b0256b76fa50ee9a714044c6ec8cea 15f10a701fc4d3f9fd6734da90790cdbc8a1ddd57bf52695740acedcb2e6e485 +test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql 52fedfc7518d4646e5f90843806c70fcfde7e7af602846a4f1dd90c3a46c9229 a291e47676ee9d257ac76fd5e4088f5905ec5fefc77568038efa6c88d2116a85 +test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql 0d5919b0a240678d84dc687de954ef6dc11fe4a20f54c56578c541c573bdf3f2 5d2094ad5c0b0b7f298260511c5072b129b121928394b27c49d39e69ba6a5870 +test/extractor-tests/generated/Path/PathSegment_getRetType.ql 36386a514bc925f5b17ad87afba9fef7986900c1b791732de061213c6e86743f f38bcee68c1da19e70bb1e1c4a4047c763a466f1b8ef2c4f65f8c724c0b58197 +test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql d1db51208a311c30af369ce2fdc3a3296e7d598b27bf4960b8b34622a9d9163b 561b1e38c6d8b301fdc016e1d012dd805fde1b42b0720c17d7b15535715047f2 +test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql d7ea6ee3f6b7539786d8de92db1b5e3bb88f0da9096293107e39065a09aad20e 19e05a303472c25115a9e3cb60943109eaf4788d6ed1d37ac2114b58bb94ef04 +test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql d9d8ff43a55671616bd5b98ff2c03690ec2661817d19a61edcc4b37d23e312d0 b4dc0ae4d7f03c98c23312b358d214565b34c7a028ba8983826c6bf5c1177eeb +test/extractor-tests/generated/Path/PathTypeRepr.ql c2e069acc5111088a7287d98b4bd4bf44bd79c5a786b275f7448ebafc3613500 6e016750e5fef92a98bc5cc60bfd40d85fbb5eb2d251b4d69ffe600813f81df0 +test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql 49e96ea2aa482e3b80cb0e2d944055f8298f7fc55b36cea7468586c94bacf686 29b3c2140ac1bc6e0e6160140e292e2b84e13145c1553480e2a582cd7f7bd3fd +test/extractor-tests/generated/Path/Path_getQualifier.ql 9af95e22cdf3a65da6a41d93136aef4523db5ce81d38f6ed4bc613f1c68784d0 3102d9241a417a92c97a53ac56a7a8683463f1adc7a593cda1382c0d25b3f261 +test/extractor-tests/generated/Path/Path_getSegment.ql 475f344ee24a14468745d50922fdfd63f5d817f14cc041a184c2f8ec144a01dd 4f663c5c2b1e0cb8b9a8a0b2d8b5d81f12a3bf333c71ecbb43d9258f7dfe4ec7 +test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c720d84617c6e060c05d49c41c90433451588f8aa6f 871fab471c82fede3c36edc003f9decee5bb7844c016951d28be78d0c91487e5 +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/PtrTypeRepr/PtrTypeRepr.ql 33b38895b3a25f0cbec7040861143bd5bdc01f98beff3a6b44bb77e1e0953d4d 9ad76676a6dcdee8eceaedbd759a089eb74fcf9c51308837027cd10253f18bdd +test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.ql a1901323348a86a47b3d3d2a3d30b4f5aebf46744e4ecbcea650b3360024050c 58eb93dd76a927bb0cab1b25d01162c3b163e8a72ee13b4dd334e6017bb67db3 +test/extractor-tests/generated/RangeExpr/RangeExpr.ql 707c08aab49cc0a22c80a734e663b13ecbbddf0db28b6a25fdbc030a1ce38d6f 1f78950b30485cdde9fe7d9e416ad1dfdac8c5b6bc328172e6e721821c076131 +test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql 8767e670f88c2115bc61b16195d2c9d02bc074adc4ca57d2aa537c1af9b4c530 4fa51652c60ca7d06bd9ad604107e002603ee2a7b4587636f6b46b8e8060e06c +test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.ql 0328c3d0597004f3facf3d553ed763566344f54e1b9c9e26f2f41b8146b6bdba 8e701b595631af117fd0a79154e298dfc64cb0874eb58018921f94076a0c7ebe +test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.ql 355a4d61bcb6ac37003c49e736e0e3d4c6d223343db4d79ecb43a78fbf6b4c94 a81c79a5d54dec5f3918ad486cb07ffcb0af067823f7597d8e86efaffdb70935 +test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.ql e6e35c735b2bc56adf38f96f32ef59a004391cafbb23b9acc34d2177764588c7 478969212626b1d101c19115f726ca7616fdd4d8de82fa1e91c50a26515c2ee1 +test/extractor-tests/generated/RangePat/RangePat.ql 97314b9a5543a7471d722ae188a657fd325974eb38eafe0997a6cf1095d04d69 5dd655582157b3436722b4ba3118bdd29853b0bc170248ad2c4c1162c534afe6 +test/extractor-tests/generated/RangePat/RangePat_getEnd.ql 723eb5030ec52d3aa3650a3e2de6cc0195a0030630239b972235963320e0d808 2df3b1a6197c3abd43dc743fd09cbf55165e3191f2b49336777594541e5da96a +test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql 564216b2342f56dc8c1aed6306f57b6dafb33de9e3ba337a840a8c077ce95933 2a76ec7a59bada29733a1515bc1ea8bedd37429d1694ca63c7a8fbf94098a4c7 +test/extractor-tests/generated/RangePat/RangePat_getStart.ql ad2066efa32fced2dd107031f2a9b9635c3c892e874870a4320522bae9309aa4 b4a8c57a838074e186b823938d1a9372153c193da6c839b5f242ca25c679e83f +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 ba0f0c0b12394ed80880bea7d80a58791492f1f96a26783c2b19085d11e2fd2b 22aa62c6d4b6e4354f20511f8e6d12e6da9d8b0f0b3509eefe7a0c50f7acfb49 +test/extractor-tests/generated/RefPat/RefPat_getPat.ql 60f5e010b90c2c62d26674323d209b7e46c1c2b968a69765e1b1cde028893111 fe9e7dc6a5459250355336eca0bdf2a0be575b1e34936280fd12a76a004f7b46 +test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql 0e543a2e907bec0736a4e3821e94a49ad5127a69dab88f89a4a4bd6ff9e6a138 fe157d0a00264e2e5b7eee7248b052c960915aac14543e16a31ef659ce84978b +test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.ql 0fc1babe97a3c12609f30af8d68a2a25a588061fd92fb5a0d6ddb2afd0f87296 c9fcd48451faf77a3d47c4085904439243744119648e10499bc1b1533c5e14be +test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.ql 63130e9884b588a2e0f076a00b55e9c3106826ab78f5e7ff859d24d4f1b4d0d1 fabe9cc6967433def8ddba298d5cb4d903f8491bc4ccfa1b36e415995da9b804 +test/extractor-tests/generated/Rename/Rename.ql c8605e5d8ebb39be238ba26e46861df493d86c9caf9aa9a791ed5ff8d65a812a 7263c2c2565e41c652eda03d1e1ddd030fea79a8e3c967909df9945e30ecbe68 +test/extractor-tests/generated/Rename/Rename_getName.ql 1648191216ece0e3468823ed376292611bd3e5dbe9b3e215167d7051aa03385f 381683d4637a1a7322c9a0df2d90a30a153630965e7facbfaccd6cdb5c1de2cd +test/extractor-tests/generated/RestPat/RestPat.ql 0abc6a13ec82ebc923ce768344d468871a05a515690f0feaaf55b7967cf34a9e c2bc069de6927c6c04c89c54e694b50d6ca052230cc36668302907a7ed883e08 +test/extractor-tests/generated/RestPat/RestPat_getAttr.ql fb391ab265a454b10270136efd61c1ae9b29951cd28b0f585c6b6eea37c64745 6311e3ca49eb8a061684f8cebdfb11cc5ae09db6e145d1b2349a2ee80298cfe9 +test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql 9183fb22ed8cab493719ab4c26e9129a033962330893c21a994ca9a98de86670 4031d0ba6f2ea3bd5116c594c053bd92f10f3dd2166e5ac7d6d6006fc6c1911a +test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.ql 0cfb66dc354c6b58c695dace97c4d5ec2a730ba6076918be2beca4a4cedaae07 54a6299dfa05b7ef60feca77dbad3d0a444655df4d1d4c69a8efc3a425ca35af +test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql 8e9eba0837a466255e8e249e62c69c613cb5a78193fe50e26a617cf9d21c995a f33f6cc874f74d1ce93a6975c88748bd5bca6dc10360f8fd59493d939be63658 +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 a5be8dc977d652c6fe8b27377a3dae3e34b4e034b76d2621d6c43ea9cf07128e 099fe28e1b17238c46c457593aed8d9fca6e6e6cf8f9c4ec5b14261035261c04 +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 +test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.ql 406c04fbb5e0f4c57a2f73dfd69aff7da95fbbe552dc7391b3332d4e451b1ff4 025ef82cd0bf947333253141a5c3c4990db47a699c21a2381089428d0d133670 +test/extractor-tests/generated/SlicePat/SlicePat.ql c6ff3c926ebbea3d923ba8ed00bf9cc20eaaee4c6ae49ea797c0975d0535240e 1b27e0caeb793da3b82059268b83bd624e81f215de42acbb548c52bacba3ed9e +test/extractor-tests/generated/SlicePat/SlicePat_getPat.ql e2f892a3a4c623fe3f7e64e1438128126bc4d8b8c0f657ae53bb99d3209a3b13 af835d9ec840c63e13edc6a9230a4e34cb894f4379b85b463b8068de5a8bd717 +test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql 59c4e943626b6d284fa30778437b0ac5b10243b2dd3081200ada18e5a5f75ebc a479a079c841290a42a86da71d0b951d6ff354a4818be72180e6fe24b3eecde4 +test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql a6604fccd54cf86fb2b929ffda248a2da207e0841a46fd5e80fc18e2efccd9ca f10cc6446549214d8929521f8794a93cfacdbd71cd95e05e585bd178af414e52 +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 f5f71ff62984d3b337b2065b0a5bc13eed71a61bbf5869f1a1977c5e35dfdd50 630c4d30987e3ca873487f6f0cf7f498827ae0ace005005acdd573cf0e660f6e +test/extractor-tests/generated/Static/Static_getAttr.ql adb0bbf55fb962c0e9d317fd815c09c88793c04f2fb78dfd62c259420c70bc68 d317429171c69c4d5d926c26e97b47f5df87cf0552338f575cd3aeea0e57d2c2 +test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql 828ba050c964781dace382e4673c232f2aa80aa4e414d371fd421c3afc2b6902 018f8b75e1779829c87299d2d8f1ab5e7fa1aaa153599da789cf29b599d78477 +test/extractor-tests/generated/Static/Static_getBody.ql e735bbd421e22c67db792671f5cb78291c437621fdfd700e5ef13b5b76b3684d 9148dc9d1899cedf817258a30a274e4f2c34659140090ca2afeb1b6f2f21e52f +test/extractor-tests/generated/Static/Static_getCrateOrigin.ql f24ac3dac6a6e04d3cc58ae11b09749114a89816c28b96bf6be0e96b2e20d37f e4051426c5daa7e73c1a5a9023d6e50a2b46ebf194f45befbe3dd45e64831a55 +test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql 6ec02f7ec9cf4cb174a7cdf87921758a3e798c76171be85939614305d773b6a0 c51567dac069fc67ece0aa018ae6332187aa1145f33489093e4aee049d7cea52 +test/extractor-tests/generated/Static/Static_getName.ql c7537e166d994b6f961547e8b97ab4328b78cbd038a0eb9afaae42e35f6d9cb4 bb5ae24b85cd7a8340a4ce9e9d56ec3be31558051c82257ccb84289291f38a42 +test/extractor-tests/generated/Static/Static_getTypeRepr.ql 45efcf393a3c6d4eca92416d8d6c88e0d0e85a2bc017da097ae2bbbe8a271a32 374b551e2d58813203df6f475a1701c89508803693e2a4bec7afc86c2d58d60b +test/extractor-tests/generated/Static/Static_getVisibility.ql 0672b27f16955f7b0223a27c037884338dcf30759b7b8bb3da44e5d533228f90 0e4916f5683963041ef23c724ca8e16acfa370b583d90b76508c87131b9e1c73 +test/extractor-tests/generated/StmtList/StmtList.ql 0010df0d5e30f7bed3bd5d916faff7d101cc1edddceab7ddc12bb744f8e46cf7 aaff98988c68713b3577f3d4b4ed16b978eb11433ec7f3a32def82e96aac8c5b +test/extractor-tests/generated/StmtList/StmtList_getAttr.ql 78d4bf65273498f04238706330b03d0b61dd03b001531f05fcb2230f24ceab64 6e02cee05c0b9f104ddea72b20097034edb76e985188b3f10f079bb03163b830 +test/extractor-tests/generated/StmtList/StmtList_getStatement.ql abbc3bcf98aab395fc851d5cc58c9c8a13fe1bdd531723bec1bc1b8ddbec6614 e302a26079986fa055306a1f641533dfde36c9bc0dd7958d21e2518b59e808c2 +test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql 578d7c944ef42bdb822fc6ce52fe3d49a0012cf7854cfddbb3d5117133700587 64ea407455a3b4dfbb86202e71a72b5abbff885479367b2834c0dd16d1f9d0ee +test/extractor-tests/generated/Struct/Struct.ql ffaaa49314c26bd0a206b692d480254acc6e87233f679fbe936094c81c071de2 cae27f50c3bf787aead37077c9fe32e66c1a247a8a8c1f6f9b241493b1b793fc +test/extractor-tests/generated/Struct/Struct_getAttr.ql 028d90ddc5189b82cfc8de20f9e05d98e8a12cc185705481f91dd209f2cb1f87 760780a48c12be4581c1675c46aae054a6198196a55b6b989402cc29b7caf245 +test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql a17504527a307615d26c2c4b6c21fe9b508f5a77a741d68ca605d2e69668e385 f755d8965c10568a57ff44432a795a0a36b86007fc7470bc652d555946e19231 +test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql 289622244a1333277d3b1507c5cea7c7dd29a7905774f974d8c2100cea50b35f d32941a2d08d7830b42c263ee336bf54de5240bfc22082341b4420a20a1886c7 +test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.ql e4849a63be9f413426dd0f183d1229fa4dd1c521e87479622a80c52179e3bb03 5ae88d61ffa7b0a52a62fd16ba5cc5816c2b7b2c0db726e3125e525bbbc10a18 +test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql 866a5893bd0869224fb8aadd071fba35b5386183bb476f5de45c9de7ab88c583 267aedc228d69e31ca8e95dcab6bcb1aa30f9ebaea43896a55016b7d68e3c441 +test/extractor-tests/generated/Struct/Struct_getFieldList.ql f45d6d5d953741e52aca67129994b80f6904b2e6b43c519d6d42c29c7b663c42 77a7d07e8462fa608efc58af97ce8f17c5369f9573f9d200191136607cb0e600 +test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql cd72452713004690b77086163541fa319f8ab5faf503bb4a6a20bcaf2f790d38 4d72e891c5fac6e491d9e18b87ecf680dc423787d6b419da8f700fe1a14bc26f +test/extractor-tests/generated/Struct/Struct_getName.ql 8f1d9da4013307b4d23a1ce5dc76466ecdd7f0010b5148ec2e7dd2883efe3427 411b326d15d56713c2a5e6d22909474c5d33062296518221e36c920927f859fe +test/extractor-tests/generated/Struct/Struct_getVisibility.ql 17139d3f91e02a0fc12ad8443fe166fe11003301fee0c303f13aa6d1138e82d5 07bdc1fbcc0ea40508364ea632fce899cbe734159f5c377ea2029bc41bc9a3b4 +test/extractor-tests/generated/Struct/Struct_getWhereClause.ql d0db2c9811ed4568359e84255f04f0c75ae65a80d40981a1545d6cddf53e9c09 1133a46bc502757aaab61a8ac94b4a256b590548c5e27ec6a239ffd5a4a81577 +test/extractor-tests/generated/StructExpr/StructExpr.ql 5bdc2163b7ddd0bc3eb938acc366105590742c417b09ed814b9c4d5d78b9b90a e59a4973aa882879f1940a955020df91fb588f004d7ea83866f52b0930e46763 +test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql f6f2b26a93b24d19f74eab73518eaa688ec270f865764fb9b839ae7e029b10bd bd963650f78009ac44a2aa14f0e53f10e832a73cc69d5819ea89865874113040 +test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql c2794babda0823c62c2af6fe9e3b11d8e4b6baa8095bf8f01faee13b4894ff67 cba6a7576a572238c59142e46cc398c5f31cd91c8d1710381d579bb6bb0edb7c +test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql 5152d15064daa1da4470cdc659a07281734d56ed958e67efc54701eb44d550dc a7a78db088b0dd7b7c148ad24c8faa014e2eab29146e056bdf35bef5ca2f8485 +test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql 1c2401038fe14e660d5101951e7467dc3a56969698a8cc5b818d664902b269bc f6b7047112ade49b632d2e3f71531dd2dffe7c2cc848587908fa4b85dc06ee82 +test/extractor-tests/generated/StructExprField/StructExprField.ql f054440c074461bdb00506e775be346efc4faf8afd3e55d61f72c8776d1d4bd5 8bfacfa4864309157b6795de26e6c37676ad627e2e8771dfdc8abe57ff269c92 +test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql 660400f80824956422b95923519769df08514f089269c7a5ccc14036b90b233d f137716537f8780ad63bd6af0da06a96f0d00cb7a35402d3684e6866112b9d1a +test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql 00180d982057ee23297578d76bf1a337fde8341f0520ebfa5786c8564884ae5a c2b813c25df4ffc49486426365cc0cc0bbf07cf0c7d7adece7e6576fc8b776dc +test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql 9bacb8d6590d5cde340443c4d0963a8ef8ddf434f912a28b04f9dd9f76504f3b 1a2209ee1086873dd2b07979b089bbab849283bfb8f44ba3deb5ff480acc1cbd +test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql 33dc3f6c1f737e0ca2015530467bfa123eac0eb8ab63f2937ad0064f2246fb2d b89d5817c6a249232540570ef93ecf880a8ef74aa409c7cd8ddbc83f6d589fea +test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql cd7f5236f6b660fc064f3a04f3a58d720ed4e81916cbd1a049c1fac7171108ed 61317928d0833f7bb55255a5045bedc0913db1266e963ede97d597ee43e3ddd9 +test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql 1292aec1141bdb75fd8e0993f683035f396a0e6c841b76ee86a0a1d3dce0dbc4 450eccbd07cc0aa81cef698f43d60aeb55f8952a573eaf84a389a6449c3d63a7 +test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql d0470b9846323d0408e0f26444cdc5322d78ce1ac203073ff4f556dac5343be7 280712a0b3714256aff4c2a4370fd43e70c418f526e383ed7100d61cdf790c36 +test/extractor-tests/generated/StructField/StructField.ql 5ec75ec3c1a18299259dfa041790e9b4a791ceb1706aadea3537d0a67e7e65bb cba580a8678547dc88a736bd639cc4d8e84ec32a9ad1095e50f7e03047c37f1c +test/extractor-tests/generated/StructField/StructField_getAttr.ql a01715bc688d5fa48c9dd4bfab21d0909169f851a290895c13a181f22c0e73a9 fa6ffcf007492d9e1b7f90d571b9747bd47b2dc29e558a8e1c3013c5949dcdb7 +test/extractor-tests/generated/StructField/StructField_getDefault.ql deccc63b81892cd1b293d8b328ad5b3efdf32892efc8b161dfcd89330ca6b5a2 9a9f306f63208ce30d26f91dd15b94867a7d9affd31a0f51a3d1d2ce50786abc +test/extractor-tests/generated/StructField/StructField_getName.ql 4c5a7e00b758a744a719bff63d493ee7d31ff8b3010e00c1d1449034d00130ec 9b284d848e5c86eac089f33deca7586441a89d927e7703cb4f98bb7c65a7238c +test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql 3f36890b9ced576327d0fb6e3c80c6482c3a6d6f751fa769b24b2c14a46f8ee8 aed0681a3928b965f1448954d3a0369238a3cd715b97a0d988d15b971bf45356 +test/extractor-tests/generated/StructField/StructField_getVisibility.ql 335d097fabbc9720b065248cd1c295fe8dc040bf646ce491244b6840d9a847d3 9a9073eb52cd401b07beb4eb0aef7a15d5d398d0c76c35416ffcb059a360d654 +test/extractor-tests/generated/StructFieldList/StructFieldList.ql 02635fb8b0bccb4cb8be71a2b103c6854192dd0300669127ce74590566b0b163 62e4151cbc47ec7bd10cb9f711587454d8fcf64fb54f279b82eefcf20028c37f +test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql b70e569d48109f57a1a765fcab2329adce382a17258c4e93a57f540a408b1836 1d6a65b7ac1ed8fd0e966132ec9ecbb425fa7ca501a2cd1db7269f9534415f30 +test/extractor-tests/generated/StructPat/StructPat.ql 2fa9b13ad6752a1296908c76caf3778dfd7d31e1ffc581011366208dfc3288a4 5a61ae9056a153b526d07c451a55f3959ce90adf762fe6c31f434fae27086d5d +test/extractor-tests/generated/StructPat/StructPat_getPath.ql 03fb1254cc797239de302fbf1ad1b4e7e926e2ec4423221fbec06425e3647f63 9ab60ad1f16d4fb04d3de9f8f05d959fc90c42bb8f0dfc04ccc906897f5c1633 +test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql e3188ae0bb8835ad4aed5c775b52afb6cc7f9c520a8f62140d6cc590f2b8ce5d fd3e6eaf185e933e5ab1566cc49ef3497e50608070831879e01cf5a5ec23eae5 +test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql 1f4be7d78b187997093d52729d985dceb4c9e918274e0b9f06585e3337e3044b 2533855f07fce230dd567b2192ee20168bca077dbf7f1e8489dec142fcd396b8 +test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql f7b6dadd6ed0e40fb87e4be6eabe7fb96931b8c910c443588147202707655ced a43de755e0ca786a491afc97805e34d787c7bd03e7bca8df090e9386d4019688 +test/extractor-tests/generated/StructPatField/StructPatField.ql e6f468111706d4254b6c3e686c31e309c11b4246d8ed7eb288dd349ec0787c12 7ab1b5ead54fe09daf3d4cc6d8eb3e39fe253bede8822187de1a74a10cc59e01 +test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql 5e1df4f73291bbefda06437859aef73457fe58a22c134ceb9148cfcc19b696e7 69aea129500dca110023f03c6337e4b1a86627d6d51c43585534cf826db13d04 +test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql bf44755d6b82d69610de44cab2d49362b10621589948b68480d80412acec820a ec06b8f947cdaca913fd44685e5ce2bf52281306808cbb17e7e88118c897f877 +test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql bb3e9ad8cdaac8723504fffbafa21acc95c5bce7843fc6f3641e98758d93573f 77e6f9946e66a25ac70622e65c164413e7001f4b8e9361a0850171fc0cead935 +test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql fad84896295380e3576bfaef384ac88b2f96a73196d8df3ec39ecc6184ec053f 3dd63ce5d1ffd48c873397368c6229de8da37e8f694f395165af8257a4d2faf2 +test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql 4e6fa98e48d474f31585a644d6045b7d8427a76bb04810728ad121a43b59e8a2 e3b1d915aae3e3c3df752146e222df71667f73731d7337cc2eb391b13f097315 +test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.ql 4be5b8afebc081602429d7cfb1fd87de629abc17f3739131c93f7e0b3adaec3d d5ced2366c5a278e820261239c4de183517dadf9bc8496f3e568758ab9570752 +test/extractor-tests/generated/TokenTree/TokenTree.ql ba2ef197e0566640b57503579f3bc811a16fec56f4817117395bf81da08922a6 2e7b105cb917a444171669eb06f5491a4b222b1f81fa79209a138ab97db85aff +test/extractor-tests/generated/Trait/AssocItemList.ql 0ea572b1350f87cc09ce4dc1794b392cc9ad292abb8439c106a7a1afe166868b 6e7493a3ace65c68b714e31234e149f3fc44941c3b4d125892531102b1060b2f +test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql 8149d905f6fc6caeb51fa1ddec787d0d90f4642687461c7b1a9d4ab93a27d65d 8fb9caad7d88a89dd71e5cc8e17496afbdf33800e58179f424ef482b1b765bb1 +test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql 06526c4a28fd4fdce04ca15fbadc2205b13dcc2d2de24177c370d812e02540e6 79c8ce6e1f8acc1aaca498531e2c1a0e7e2c0f2459d7fc9fe485fd82263c433f +test/extractor-tests/generated/Trait/Trait.ql 064785e9389bdf9abd6e0c8728a90a399af568a24c4b18b32cf1c2be2bcbf0b8 a77e89ac31d12c00d1849cb666ebb1eecc4a612934a0d82cd82ecd4c549c9e97 +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_getAttributeMacroExpansion.ql 7ea169336dca0fcaf961f61d811c81834ea28b17b2a01dc57a6e89f5bedc7594 d5a542f84149c0ccd32c7b4a7a19014a99aa63a493f40ea6fbebb83395b788a1 +test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql d8433d63bb2c4b3befaaedc9ce862d1d7edcdf8b83b3fb5529262fab93880d20 3779f2678b3e00aac87259ecfe60903bb564aa5dbbc39adc6c98ad70117d8510 +test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql a2bd16e84f057ed8cb6aae3e2a117453a6e312705302f544a1496dbdd6fcb3e6 b4d419045430aa7acbc45f8043acf6bdacd8aff7fdda8a96c70ae6c364c9f4d1 +test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b27ff28e3aff9ec3369bbbcbee40a07a4bd8af40928c8c1cb7dd1e407a88ffee 2b48e2049df18de61ae3026f8ab4c3e9e517f411605328b37a0b71b288826925 +test/extractor-tests/generated/Trait/Trait_getName.ql d4ff3374f9d6068633bd125ede188fcd3f842f739ede214327cd33c3ace37379 3dcf91c303531113b65ea5205e9b6936c5d8b45cd3ddb60cd89ca7e49f0f00c1 +test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql 8a4eb898424fe476db549207d67ba520999342f708cbb89ee0713e6bbf1c050d 69d01d97d161eef86f24dd0777e510530a4db5b0c31c760a9a3a54f70d6dc144 +test/extractor-tests/generated/Trait/Trait_getVisibility.ql 8f4641558effd13a96c45d902e5726ba5e78fc9f39d3a05b4c72069993c499f4 553cf299e7d60a242cf44f2a68b8349fd8666cc4ccecab5ce200ce44ad244ba9 +test/extractor-tests/generated/Trait/Trait_getWhereClause.ql b34562e7f9ad9003d2ae1f3a9be1b5c141944d3236eae3402a6c73f14652e8ad 509fa3815933737e8996ea2c1540f5d7f3f7de21947b02e10597006967efc9d1 +test/extractor-tests/generated/TraitAlias/TraitAlias.ql c2a36ea7bf5723b9ec1fc24050c99681d9443081386980987bcb5989230a6605 b511356fea3dee5b70fee15369855002775c016db3f292e08293d0bf4b5bd33d +test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql 128c24196bfa6204fffd4154ff6acebd2d1924bb366809cdb227f33d89e185c8 56e8329e652567f19ef7d4c4933ee670a27c0afb877a0fab060a0a2031d8133e +test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql 029d261d0bdd6fe5bc30011ac72481bce9e5a6029d52fde8bd00932455703276 cad506346840304954e365743c33efed22049f0cbcbb68e21d3a95f7c2e2b301 +test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql 303212122021da7f745050c5de76c756461e5c6e8f4b20e26c43aa63d821c2b6 fdbd024cbe13e34265505147c6faffd997e5c222386c3d9e719cd2a385bde51c +test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql 601b6b0e5e7e7f2926626866085d9a4a9e31dc575791e9bd0019befc0e397193 9bd325414edc35364dba570f6eecc48a8e18c4cbff37d32e920859773c586319 +test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql 5a40c1760fcf5074dc9e9efa1a543fc6223f4e5d2984923355802f91edb307e4 9fd7ab65c1d6affe19f96b1037ec3fb9381e90f602dd4611bb958048710601fa +test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql e91fa621774b9467ae820f3c408191ac75ad33dd73bcd417d299006a84c1a069 113e0c5dd2e3ac2ddb1fd6b099b9b5c91d5cdd4a02e62d4eb8e575096f7f4c6a +test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.ql 9ab4c329b25ea5e1a899b8698093f404ee9c095f0b0e38011161ca6480cd10a7 95c3b93610cdc08a0e251ab1307523f8cfb5560460923c81aace8619e30746dd +test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.ql 7e86140d2e9081d46063a15d82719be315406eb4d6e6738b3cb5ba7bcbef458f 8fb1ecf6a96b1f1d4a840425139c4ad47feb8b0ff14a319c08f82535e62e23c7 +test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.ql 129e1f10aa23f10d71f144caa4ccb923928ec1fd791b203cdba9989b079fc1e1 1fb112215bd3e39b7bc8ebc059f9cc362e5b2f04a242df053e150efa638cfea7 +test/extractor-tests/generated/TryExpr/TryExpr.ql 3beaa08f6d734e74eca32ae2e3fb6aa7694400a429cd6b3db97bfd3402b379b8 3f55bfc71e804e2ba6f02087c0808901a379b2cb30f58d5933c91becc10f3654 +test/extractor-tests/generated/TryExpr/TryExpr_getAttr.ql a2cef886bb959ff0f47fa555e7a89075f93ab013e1766270590951bf0b14a47b 24d12c96f1c7a1ae3d0d596551fb53ef2745c890eb602e0f99db3cb70cf1e474 +test/extractor-tests/generated/TryExpr/TryExpr_getExpr.ql 4ccd50eb4bdf01381eabb843b5ea3ebddec5d5852a04f10be9b9a4ef8a3005f1 0ec050d28c70322f6f280180fee998d1b6cd82db4e114db7e10758fcee2a2fca +test/extractor-tests/generated/TupleExpr/TupleExpr.ql d6caa8d9ff94f27f88d338b07cacc280289970931e101680c6574e32bc0c863e 70508104013003dcf98f22db6eb9b60d14552831714048f348f812807189e9b1 +test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.ql b1e93069613a8cd2b49af93a5cdd1571b343571e9c3d049d8bf19b25a461f9d3 be18008a00e3b0fb786f5dd36268201fd43bf8527d8a40119b147a3a8c973b3b +test/extractor-tests/generated/TupleExpr/TupleExpr_getField.ql 308cd14873afedc74e3ed61d283f72da50008ce7690510c57fe0934c92158d58 5e3e23a7221486ead6502debb5d4978fb67046c8b0a5c8a688e4e196cb1f28a1 +test/extractor-tests/generated/TupleField/TupleField.ql ec4f5a92fd702f8ff4540f5c681d79e197354244fdcc6df8a3c50f30f7c3c4c2 ad8c7f8316dc02238c40cc79d257fdfd8614b2db14a871eea849be6551e8f0f5 +test/extractor-tests/generated/TupleField/TupleField_getAttr.ql b6b6a5349fc6767b0081d737e818425f0c93be5bd8de47c29fd89b7812e3267d 23d82a649cb733bc8c1d1b09dde84dbfcc8f847ed35be986a9ca8717ea9e5081 +test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.ql ce4b6f69779e9f3c5a8b5625137bac806fc929d1c637804edefbf804a66f88e3 a3b741a2f48cb1e275f978585d2a04a720e23a03ccc04d09eb229fec322f42e3 +test/extractor-tests/generated/TupleField/TupleField_getVisibility.ql c7af5373382394a686d12a23c4e688a7cc0dfe6b6cbee25c7e863b4713601ddb b174f30404e69eef112dedc8397ad444e968f12dde9befdccb051305d98a75d2 +test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql 7dc88440222ff036eb6aeabf9311568ea34f31f7c1ad19c71dd69a2dc17a6ed9 0255890d1389da004f18e8a0fc0b72d22790c36ccfacc6f452b269667f030f22 +test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql ad552a9c0b9964d1770f14cabbb436db60ebedc3c569006542a8eae9ddb30f6d 3a8c49d629376a9b8326138836b05ee2366b1021ffd19f5be74ab023e70aa50d +test/extractor-tests/generated/TuplePat/TuplePat.ql 24ee56bc848537da65eb8ecef71e84cc351a2aedcc31d6fb53a5b7865f15f7c2 81db1076e2e4921ceb50933b96cd7b574caab1818de257c1e9038f3f97447d59 +test/extractor-tests/generated/TuplePat/TuplePat_getField.ql f000bed41af031bc56d0705ce312abe7ab3dc6745b2936798c9938781e51475e f464a84dbc36aa371d60d6db68d6251f6b275dc4ecebdc56f195637be390b067 +test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql 967409c7bddd7fc8d0b9fdfab2f5e6c82e8b4ff57020822aa0cda177244dfbc5 eaf0b7e56c38db60fafb39f8de75b67ee1099ac540fa92b5dfe84b601d31781a +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql f3f2e23cc2a32aa5abc1e0fda1300dab1693230632b9eaa75bb3b1e82ee9ea1a 24b87a39ec639a26ff8c1d04dc3429b72266b2a3b1650a06a7cd4387b6f0e615 +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql 13a06696bbf1fa8d5b73107e28cdba40e93da04b27f9c54381b78a52368d2ad1 5558c35ea9bb371ad90a5b374d7530dd1936f83e6ba656ebfbfd5bd63598e088 +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql e409667233331a038e482de4b2669d9fac9d7eb0e3bd5580ea19828f0c4ed7ad 588e4628471f1004575900d7365490efcf9168b555ff26becfc3f27b9e657de3 +test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql 150898b6e55cc74b9ddb947f136b5a7f538ee5598928c5724d80e3ddf93ae499 66e0bd7b32df8f5bbe229cc02be6a07cb9ec0fe8b444dad3f5b32282a90551ee +test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql 2f99917a95a85a932f423cba5a619a51cada8e704b93c54b0a8cb5d7a1129fa1 759bd02347c898139ac7dabe207988eea125be24d3e4c2282b791ec810c16ea7 +test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql 615acfcbc475b5c2ffa8e46d023fc2e19d29ee879b4949644a7f0b25c33125e6 81b037af5dcb8a0489a7a81a0ad668ca781b71d4406c123c4f1c4f558722f13e +test/extractor-tests/generated/TypeAlias/TypeAlias.ql 5cbf0b82a25a492c153b4663e5a2c0bea4b15ff53fa22ba1217edaf3bb48c6af d28e6a9eafff3fb84a6f38e3c79ad0d54cb08c7609cd43c968efd3fbc4154957 +test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql ecf4b45ef4876e46252785d2e42b11207e65757cdb26e60decafd765e7b03b49 21bb4d635d3d38abd731b9ad1a2b871f8e0788f48a03e9572823abeea0ea9382 +test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql fa2f0867039866e6405a735f9251de182429d3f1fdf00a749c7cfc3e3d62a7bb 56083d34fffd07a43b5736479b4d3b191d138415759639e9dd60789fefe5cb6f +test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql cd66db5b43bcb46a6cf6db8c262fd524017ef67cdb67c010af61fab303e3bc65 2aebae618448530ec537709c5381359ea98399db83eeae3be88825ebefa1829d +test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql fe9c4132e65b54eb071b779e508e9ed0081d860df20f8d4748332b45b7215fd5 448c10c3f8f785c380ce430996af4040419d8dccfa86f75253b6af83d2c8f1c9 +test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql e7e936458dce5a8c6675485a49e2769b6dbff29c112ed744c880e0fc7ae740ef e5fcf3a33d2416db6b0a73401a3cbc0cece22d0e06794e01a1645f2b3bca9306 +test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql 757deb3493764677de3eb1ff7cc119a469482b7277ed01eb8aa0c38b4a8797fb 5efed24a6968544b10ff44bfac7d0432a9621bde0e53b8477563d600d4847825 +test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.ql 309efaa32a840fb1fca7d34b7cdbbf51ab469707fa195b69a9f1a7d141db3a02 e12bf44d8858e930bdde80ecd7909b5405a51a1b00a6d2c8ee880e68dd622075 +test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.ql 64acc817272d5ee0ff3659a6851635ec8436a8f7944c15d19c80fffa2ad29eb7 db1e91971ba1ae8ba95ba8ac1dfa91f2fe0381c1b520518d80b344878357dbf5 +test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql a1851a78f31ad6e3e5e43537832701f4c420546c2c86449c8391d3cc366d5445 23c118f662dee5f0e286753d107165b1964ce703a1378765f974530929a32723 +test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql 0cd281b7b5d3a76e4ec1938d7dcebb41e24ed54e94f352dcf48cbcdb5d48b353 5898e71246d8ba7517dab1f8d726af02a7add79924c8e6b30ce2c760e1344e8f +test/extractor-tests/generated/TypeArg/TypeArg.ql 32366a6163dcb2fbe2e98d739cc049f410a6523a135310e79b98a4c760926c8a dd52b9c138197ab07b6abbb66236c37261b47cc3201b1e1ab6ccb425b2cc6f44 +test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.ql de9102f7cb306503d1858cba40a48b8f40e192bd11b40104453a303db5c6e241 65105b7b2ee346a37a3d6ee61d4c12e34d0cd6ff4a3d79ee0634081a6f959ef6 +test/extractor-tests/generated/TypeBound/TypeBound.ql 9f688714d359bf02c39bfc1ad767df0c37465241672ecc2c7acbed76703b5b1b ce49ac6d48f96f73c1de1cc2b053c06d7ab5ced234cd005549ccb96ef7fc6584 +test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql 615b0f5ccbffc425a3fa9480197bfae649c072717697f59d2e9b8112d2ff3fcf 1f969aca15be820eb27fe80317ad7fd4ce60f1a0fbcb4ae98b04828b0aeca632 +test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.ql 5c77f9ba0ce7ccde5a512e1eb6887e1588789d2bfbaadefa42177a144ca56e37 122ab4c2eb6cf285a1ce8818c00f60a12a53765b6999879a1c3596fb48eda39e +test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.ql bdb0cf5cee3da296738224e6f44dcb348009f71e645498e72418e1b7d9b955e8 96168156dca7227f9d90dd8381bc04823dee8fae54c7eba427f99cdcae920d44 +test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql 829c62ad88caa7707a4067c1a34f81971e936af1280a134b0b3532fbd4e4c887 10133eec05b902d5f0a6b3ed66156879914a83290014ba0ded26f1c3aaeb2b28 +test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.ql a6f6ec3f8d329da3509a8040ee2383ec6d9c66fe7c5685d94e90ac989a9e61b0 c812280f09658c63beb2a2ec0ab86e007819da08b6637bb4299c6ed6c90a4c6f +test/extractor-tests/generated/TypeParam/TypeParam.ql bff624133257883477db43ae05cc17681ab20d5564c2025dc78758255a62eaf2 a25d4adbe6119f4f36fa57f08cf7ba52e0b54668047e685d811570e0126bcfaf +test/extractor-tests/generated/TypeParam/TypeParam_getAttr.ql c071639828faca21de4b65a26a712ce126f7e989118ad4a896342b8e7d2aa2d0 83050691345f58c73a47f9cfd011bdf65a0759ffb3ea957336dc0ff6d600d13a +test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.ql 705edd03cf04c030a244541de287d2acfd3842389bfc58a26cfd1577da475113 7f2680131d4bcf301e8207a4844305c459615744a83c81f2c3a245db8284df74 +test/extractor-tests/generated/TypeParam/TypeParam_getName.ql 9d5b6d6a9f2a5793e2fff8dfa69d470659cc36dc417fc8b463364892f70c9d13 91dc4396c2af6c5175c188691c84b768da0d779d5d82afee19baf31e92c7dd91 +test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql 080a6b370ad460bf128fdfd632aa443af2ad91c3483e192ad756eb234dbfa4d8 8b048d282963f670db357f1eef9b8339f83d03adf57489a22b441d5c782aff62 +test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql 4ad6ed0c803fb4f58094a55b866940b947b16259756c674200172551ee6546e0 d3270bdcc4c026325159bd2a59848eb51d96298b2bf21402ea0a83ac1ea6d291 +test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql d8502be88bcd97465f387c410b5078a4709e32b2baa556a4918ea5e609c40dd7 b238dc37404254e3e7806d50a7b1453e17e71da122931331b16a55853d3a843f +test/extractor-tests/generated/Union/Union.ql 4974339feb10ab65bef60ba713058cb73ba7dcf5e451ddf6c919e94f96f56a80 f0f0025666940e4b0f72ef2e64b28e96b1a410f25f56c98cbebdd019ceece7b6 +test/extractor-tests/generated/Union/Union_getAttr.ql 42fa0878a6566208863b1d884baf7b68b46089827fdb1dbbfacbfccf5966a9a2 54aa94f0281ca80d1a4bdb0e2240f4384af2ab8d50f251875d1877d0964579fc +test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql ddd0133a497dc057a353b86acc8ed991fefeaefa335d8ad9fe95109a90e39e54 fcaed4287815226843157c007674b1f1405cae31856fed1113d569bab5608d9b +test/extractor-tests/generated/Union/Union_getCrateOrigin.ql c218308cf17b1490550229a725542d248617661b1a5fa14e9b0e18d29c5ecc00 e0489242c8ff7aa4dbfdebcd46a5e0d9bea0aa618eb0617e76b9b6f863a2907a +test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.ql 82ee99ea42d6de9a45289a4b8e750cba887ac9daa2f6387b8c2a9062224da45c 1f18cd80f93ca2e19d3ac8ce733f264522ba785078f541342c816e16194748d6 +test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql 6268ddb68c3e05906e3fc85e40635925b84e5c7290746ded9c6814d362033068 04473b3b9891012e95733463018db8da0e96659ea0b10458b33dc857c091d278 +test/extractor-tests/generated/Union/Union_getGenericParamList.ql c55156ae26b766e385be7d21e67f8c3c45c29274201c93d660077fcc47e1ceee 4c4d338e17c32876ef6e51fd19cff67d125dd89c10e939dfaadbac824bef6a68 +test/extractor-tests/generated/Union/Union_getName.ql 17247183e1a8c8bbb15e67120f65ca323630bddeb614fa8a48e1e74319f8ed37 e21c2a0205bc991ba86f3e508451ef31398bdf5441f6d2a3f72113aaae9e152b +test/extractor-tests/generated/Union/Union_getStructFieldList.ql ae42dec53a42bcb712ec5e94a3137a5c0b7743ea3b635e44e7af8a0d59e59182 61b34bb8d6e05d9eb34ce353eef7cc07c684179bf2e3fdf9f5541e04bef41425 +test/extractor-tests/generated/Union/Union_getVisibility.ql 86628736a677343d816e541ba76db02bdae3390f8367c09be3c1ff46d1ae8274 6514cdf4bfad8d9c968de290cc981be1063c0919051822cc6fdb03e8a891f123 +test/extractor-tests/generated/Union/Union_getWhereClause.ql 508e68ffa87f4eca2e2f9c894d215ea76070d628a294809dc267082b9e36a359 29da765d11794441a32a5745d4cf594495a9733e28189d898f64da864817894f +test/extractor-tests/generated/Use/Use.ql 1adafd3adcfbf907250ce3592599d96c64572e381937fa11d11ce6d4f35cfd7f 2671e34197df8002142b5facb5380604e807e87aa41e7f8e32dc6d1eefb695f1 +test/extractor-tests/generated/Use/Use_getAttr.ql 6d43c25401398108553508aabb32ca476b3072060bb73eb07b1b60823a01f964 84e6f6953b4aa9a7472082f0a4f2df26ab1d157529ab2c661f0031603c94bb1d +test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql d02562044449f6de2c70241e0964a8dedb7d1f722c2a98ee9c96638841fa1bc5 a1db982e16b35f1a0ab4091999437a471018afd9f4f01504723aa989d49e4034 +test/extractor-tests/generated/Use/Use_getCrateOrigin.ql 912ebc1089aa3390d4142a39ea73d5490eae525d1fb51654fdd05e9dd48a94b6 c59e36362016ae536421e6d517889cea0b2670818ea1f9e997796f51a9b381e2 +test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql ccfde95c861cf4199e688b6efeeee9dab58a27cfecd520e39cc20f89143c03c9 6ff93df4134667d7cb74ae7efe102fe2db3ad4c67b4b5a0f8955f21997806f16 +test/extractor-tests/generated/Use/Use_getUseTree.ql 1dfe6bb40b29fbf823d67fecfc36ba928b43f17c38227b8eedf19fa252edf3af aacdcc4cf418ef1eec267287d2af905fe73f5bcfb080ef5373d08da31c608720 +test/extractor-tests/generated/Use/Use_getVisibility.ql 587f80acdd780042c48aeb347004be5e9fd9df063d263e6e4f2b660c48c53a8f 0c2c04f95838bca93dfe93fa208e1df7677797efc62b4e8052a4f9c5d20831dd +test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql ed7f240c960c888127298fac6b595477bc1481bdd1ed9a79124c6e6d8badc059 f30f69400600d52f10b1c54af0d00c0e617f5348cb0f5e235c93ef8e45c723a4 +test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql 971d94960a8cfcadf209202bb8d95d32da9b048ad6df9c520af1bf8e23acd1dc f6d6836592652cc63292aeb75d2349f4bed640047b130b79470703b8d1cd563d +test/extractor-tests/generated/UseTree/UseTree.ql e305edd22df9e018a58f932774447354b7fcf0ba871b52b35f0ee9cd4f6dacdf 766a84116aa8ff3d90343c6730bcb161ff1d447bdb049cd21d6b2bbf3cb9032c +test/extractor-tests/generated/UseTree/UseTree_getPath.ql 80384a99674bdda85315a36681cb22ad2ad094005a5543b63d930fc7e030dd5b 2cd92b5de8b4214527f8a58d641430f6804d9bd40927e1da0c7efda2f86f6544 +test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974fab3f812d00b159ae6f2402dd20e5b4b3f8e8426391d db9ed981ce5f822aee349e5841d3126af7878d90e64140756ab4519552defe72 +test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868 +test/extractor-tests/generated/UseTreeList/UseTreeList.ql cd943c15c86e66244caafeb95b960a5c3d351d5edbd506258744fb60a61af3b2 cfa584cd9d8aa08267fd1106745a66226b2c99fadd1da65059cc7ecf2f2e68cf +test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql dd72966b1cb7b04f0267503013809063fcfb145e2b2d7d5250d9f24d2e405f9a 75b953aa11c51ca0fe95e67d50d6238962d8df4a4b9054999a2c6338e5a5613d +test/extractor-tests/generated/Variant/Variant.ql 861e349a2c11571eb027e740b4bf29c0ce98b0f1342e45b364bb5fcbaa487d91 5825b12837862765e23ed09c08c146cc292b2305aadc531ad826ad5bb36f9cdc +test/extractor-tests/generated/Variant/Variant_getAttr.ql dd38e48e1eb05ce280b880652a90010eb63f7de3be7232411ba6265691249420 f8980680104de1e5fd40f264d8d62346aacaf6403a5e051f6fd680e234c82c1f +test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql 99e79930f8ff87a25f256926e5c3ce1ee0847daf6fadc5445fb33c85328b4c61 2dd64a53813790654c83be25b5e175c9c5b388e758723c2138fff095353fdd7b +test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql 2adba17d4acd790ea7ff738a23fc8d691e40bbc0e1770bc0f15a6a6f0f1b37f2 6e28a8aef3cde78ce8db50e4a48c663d1aacd7a4cc8c212e7c440160da7ae4c2 +test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql fe6a4bfd1440e7629d47283910de84c5e8c2f5645512780e710f53540b5bc886 b1e31b765cb1a5fe063abb8c1b2115e881ae28aa3ccd39e088ff8f2af20d6cf4 +test/extractor-tests/generated/Variant/Variant_getFieldList.ql 083c8cf61989663de33d99b72dec231c308ccc8bb6739921465c473a07e8ea03 d03bff6945853c940acdc053b813d53b008ddab9a8bd4307826433828d4763ce +test/extractor-tests/generated/Variant/Variant_getName.ql 0d7b47bec9f9031c67f7b684112a84a311ef9b2efeb260bd7cd6f424011ca0d8 73565e6f965dd7fd7bb9b3408c7d7b69120e1971b67ab307fed293eb663a59ae +test/extractor-tests/generated/Variant/Variant_getVisibility.ql 2c8f365d28d96af55589f4d71ac3fee718b319b4cbc784560c0591d1f605a119 13160d9cf39fe169410eff6c338f5d063e1948109e8f18dd33ea0064f1dd9283 +test/extractor-tests/generated/VariantList/VariantList.ql 9830a7910c10aab76af40b093f10250fc80b8e92c3e2d25c1e88f7866773119d 758d6a8499a4528468e77575ca8f436450a12d1244d17cd2ab1c375e30fea870 +test/extractor-tests/generated/VariantList/VariantList_getVariant.ql beaf322eb010ddfafc5957cd2795595bf2b331033de69842f05cc2b5f8c57da5 c57187b3105c8bcd43de018671c58d3d532cef1724cf2f82039a99061ecb8d27 +test/extractor-tests/generated/Visibility/Visibility.ql 417b501e0eef74006cdc41aef2ee7496871fac8479c93737147336d53a60b1fc f65527aeb6c888c18096efc8b3a68d02cc4e857c18ae5381d85d3e10c610812e +test/extractor-tests/generated/Visibility/Visibility_getPath.ql 53de9942208dff340d4665f602c519592c79b65dad5db217360fe23bb22b9318 6e4d2b191792d7a259f2edbbb2333df3f97c14600b04142fff4c86266dc61b75 +test/extractor-tests/generated/WhereClause/WhereClause.ql 89af4f9e3021560c67c49a3b7458449aeda469f586317d8855d00977a8969a95 59f9f9e7619fb0aa17124679c69723a31f03e7a7af24088b274234c034371e7c +test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.ql cc9f83e30aa028d0130c7f27a1cb72a2c8e3100d65de4041f24670e8062192a4 a561ef1d71efc850b73f30a695777acda4835e2b9a34b1d054a57ebb2450d73c +test/extractor-tests/generated/WherePred/WherePred.ql 3a29d0eae524810ade32546b9170f25cc243f8542b68b5fe86b0fd2d766e92b3 ff5742ad1d36f2675089c2692418e3c8e73cca3ed1e8796d795aa6c681107099 +test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql 21c3aaae697a7c8b4df82aa5c6eeef4963c9240fafb20cca3888e4361e208966 2f9ab4ed12984a4c82af2b8b805b28c2cb0c82d4e90927d9cf5be81e3bdc231a +test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql e08d9d6cccf634746f42a6ee583bbb3e7e9a9edbb63242e73b2bff4463df55d8 139543750c18f88d9c1ad2cdbcf1699d597cf2264bbb6b02a7e5792444e277ef +test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql c78e31ff4d1822a6b76f403e5ccb8f5529b4f784e14e618833df0378adca55fc 8bb1c9b5a1cfca0f5e8335464f7439aa098063176fbd3edbaf3407169f1899e6 +test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.ql e56e4989bb9b9ff1d8648641993732dac2f37c5e3b4bbf1c550735a4f1d84b3c 246cd2cfaf90115060412c9e4a15da9089f3b524f72a63ae42d17b062e7be52f +test/extractor-tests/generated/WhileExpr/WhileExpr.ql 61c49414f2ed786a68b79bd9a77093e4086457edb6c136cf8a94f2ac830c2f5b 7737f724a297d011c12143e009a63926812c63c08a1067b03e8677697ab00f83 +test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql f8527130eb2492743c0e629c97db291abcefe3d35302c840fee327ab0d8f10fd b41bedd429e5566fd68a50140ff1f50b51e2c7c351cbc8253fbc126527073f7e +test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql 84a021806423425b24eaeb9fb9967a6aadabe823c24e77a0dfefcb3509041597 147aa8bbe4dbf9b90be2467db8207dc96aed281e722eb6b9c998442a90911a6c +test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql 60ef4de57d85c7df23c0518b944b3839a9b2478044326829b5bf709a8c8d7240 3916e9ff50733c58afdc09837339b72a555a043f92f1c4e09e1652866029b017 +test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.ql cd62b7a464b5778ac925c3dbaf607e97d88ecd30f83f9106ace8e4e148d935b6 ab8027bddd6f138d3530ecd1aeb342b15015e886af1db80b75160c210a380086 +test/extractor-tests/generated/WildcardPat/WildcardPat.ql c6da9df739528763f423eac0fa537bfd524d3ea67794abdbc7f7c56193163273 42be2c5e296ad3afd05b5dcc208a4d2db2fda9323cda2df66054f921e37f6efe +test/extractor-tests/generated/YeetExpr/YeetExpr.ql 8a9f110486be12494256382374d6d5af8aa2210a84fd4452e99a3a3882b0eb59 510fa9eadeb062bd4f733ca6b6892e8908c2c6d58ec8478efc6942bd63a527f4 +test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.ql 84e44a1fbf1a9d18f255781a3a9aaa71583b6c05da228989471dbe03da4e817f 560332129d3341fbb1c0ea88c894033f0bde19d0adc081111f7bf8af55b61f88 +test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.ql d77b68b621e5b903231e2dfbc53a1e1421d59a0ad2e8c346c2abc1a2dfc11efd 642eb5791eb336ff05594d06eca08735e54bdac3aecf5d31a4de1267d10cf440 +test/extractor-tests/generated/YieldExpr/YieldExpr.ql 1700b4b2660724d8dbabde5f3441424b79690e2a43dcc599dd69af255a7fc8ff a11e48d9fab0cc358c5806c01753d61e48713b740739ffc87f933754e7f103cc +test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.ql d4c5e2710b4e41f6fcec51e74041a8af4c3e8116d42fd14fad6ae166a9c18031 cc6763b9f06a3fe6cafc672054cea8835f800f934af47c3c135b443486400394 +test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.ql 592f8938120a036d78d180eb59634341d72d5e76854d9df48ab1b9b69db99c35 efe2955a5b4acc24257f9d79a007d39951736ce8ca11970864d1e366c4e516e6 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index b083b6e6ab55..03d6e465cf0e 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -228,6 +228,7 @@ /lib/codeql/rust/elements/internal/AsmRegSpecImpl.qll linguist-generated /lib/codeql/rust/elements/internal/AsmSymConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/AsmSymImpl.qll linguist-generated +/lib/codeql/rust/elements/internal/AssocItemImpl.qll linguist-generated /lib/codeql/rust/elements/internal/AssocItemListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/AssocItemListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/AssocTypeArgConstructor.qll linguist-generated @@ -659,162 +660,612 @@ /lib/codeql/rust/elements/internal/generated/YieldExpr.qll linguist-generated /lib/codeql/rust/elements.qll linguist-generated /test/extractor-tests/generated/Abi/Abi.ql linguist-generated +/test/extractor-tests/generated/Abi/Abi_getAbiString.ql linguist-generated /test/extractor-tests/generated/ArgList/ArgList.ql linguist-generated +/test/extractor-tests/generated/ArgList/ArgList_getArg.ql linguist-generated /test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql linguist-generated +/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql linguist-generated +/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql linguist-generated +/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql linguist-generated +/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql linguist-generated /test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql linguist-generated /test/extractor-tests/generated/AsmConst/AsmConst.ql linguist-generated +/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql linguist-generated /test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql linguist-generated /test/extractor-tests/generated/AsmExpr/AsmExpr.ql linguist-generated +/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql linguist-generated +/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql linguist-generated /test/extractor-tests/generated/AsmLabel/AsmLabel.ql linguist-generated +/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql linguist-generated /test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql linguist-generated +/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql linguist-generated /test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql linguist-generated +/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql linguist-generated +/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql linguist-generated /test/extractor-tests/generated/AsmOption/AsmOption.ql linguist-generated /test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql linguist-generated +/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql linguist-generated /test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql linguist-generated +/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql linguist-generated /test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql linguist-generated +/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql linguist-generated /test/extractor-tests/generated/AsmSym/AsmSym.ql linguist-generated +/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/Attr/Attr.ql linguist-generated +/test/extractor-tests/generated/Attr/Attr_getMeta.ql linguist-generated /test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql linguist-generated +/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql linguist-generated +/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql linguist-generated +/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql linguist-generated +/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql linguist-generated +/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql linguist-generated /test/extractor-tests/generated/BlockExpr/BlockExpr.ql linguist-generated +/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql linguist-generated +/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql linguist-generated /test/extractor-tests/generated/BoxPat/BoxPat.ql linguist-generated +/test/extractor-tests/generated/BoxPat/BoxPat_getPat.ql linguist-generated /test/extractor-tests/generated/BreakExpr/BreakExpr.ql linguist-generated +/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql linguist-generated +/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql linguist-generated /test/extractor-tests/generated/CallExpr/CallExpr.ql linguist-generated +/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql linguist-generated +/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql linguist-generated +/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql linguist-generated /test/extractor-tests/generated/CastExpr/CastExpr.ql linguist-generated +/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql linguist-generated +/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql linguist-generated +/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql linguist-generated /test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql linguist-generated +/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql linguist-generated /test/extractor-tests/generated/Comment/Comment.ql linguist-generated /test/extractor-tests/generated/Const/Const.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getAttr.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getBody.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getName.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Const/Const_getWhereClause.ql linguist-generated /test/extractor-tests/generated/ConstArg/ConstArg.ql linguist-generated +/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql linguist-generated /test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql linguist-generated +/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql linguist-generated /test/extractor-tests/generated/ConstParam/ConstParam.ql linguist-generated +/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql linguist-generated +/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql linguist-generated +/test/extractor-tests/generated/ConstParam/ConstParam_getName.ql linguist-generated +/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql linguist-generated +/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql linguist-generated /test/extractor-tests/generated/Crate/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql linguist-generated +/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/Enum/Enum.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getAttr.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getName.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getVariantList.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Enum/Enum_getWhereClause.ql linguist-generated /test/extractor-tests/generated/ExprStmt/ExprStmt.ql linguist-generated +/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql linguist-generated /test/extractor-tests/generated/ExternBlock/ExternBlock.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql linguist-generated /test/extractor-tests/generated/ExternItemList/ExternItemList.ql linguist-generated +/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql linguist-generated +/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql linguist-generated /test/extractor-tests/generated/FieldExpr/FieldExpr.ql linguist-generated +/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql linguist-generated +/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql linguist-generated /test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql linguist-generated +/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql linguist-generated +/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql linguist-generated +/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.ql linguist-generated /test/extractor-tests/generated/ForExpr/ForExpr.ql linguist-generated +/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql linguist-generated +/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql linguist-generated +/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.ql linguist-generated +/test/extractor-tests/generated/ForExpr/ForExpr_getPat.ql linguist-generated /test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql linguist-generated +/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/Format.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql linguist-generated /test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql linguist-generated +/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql linguist-generated /test/extractor-tests/generated/Function/Function.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getAbi.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getAttr.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getBody.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getName.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getParam.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getParamList.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getRetType.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Function/Function_getWhereClause.ql linguist-generated /test/extractor-tests/generated/GenericArgList/GenericArgList.ql linguist-generated +/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql linguist-generated /test/extractor-tests/generated/GenericParamList/GenericParamList.ql linguist-generated +/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql linguist-generated /test/extractor-tests/generated/IdentPat/IdentPat.ql linguist-generated +/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql linguist-generated +/test/extractor-tests/generated/IdentPat/IdentPat_getName.ql linguist-generated +/test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql linguist-generated /test/extractor-tests/generated/IfExpr/IfExpr.ql linguist-generated +/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql linguist-generated +/test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql linguist-generated +/test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql linguist-generated /test/extractor-tests/generated/Impl/Impl.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getAttr.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getSelfTy.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getTrait.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Impl/Impl_getWhereClause.ql linguist-generated /test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql linguist-generated +/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/IndexExpr/IndexExpr.ql linguist-generated +/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.ql linguist-generated +/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.ql linguist-generated /test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql linguist-generated /test/extractor-tests/generated/ItemList/ItemList.ql linguist-generated +/test/extractor-tests/generated/ItemList/ItemList_getAttr.ql linguist-generated +/test/extractor-tests/generated/ItemList/ItemList_getItem.ql linguist-generated /test/extractor-tests/generated/Label/Label.ql linguist-generated +/test/extractor-tests/generated/Label/Label_getLifetime.ql linguist-generated /test/extractor-tests/generated/LetElse/LetElse.ql linguist-generated +/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql linguist-generated /test/extractor-tests/generated/LetExpr/LetExpr.ql linguist-generated +/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql linguist-generated +/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql linguist-generated /test/extractor-tests/generated/LetStmt/LetStmt.ql linguist-generated +/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql linguist-generated +/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql linguist-generated +/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.ql linguist-generated +/test/extractor-tests/generated/LetStmt/LetStmt_getPat.ql linguist-generated +/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/Lifetime/Lifetime.ql linguist-generated +/test/extractor-tests/generated/Lifetime/Lifetime_getText.ql linguist-generated /test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql linguist-generated +/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.ql linguist-generated /test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql linguist-generated +/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.ql linguist-generated +/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.ql linguist-generated +/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql linguist-generated +/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql linguist-generated /test/extractor-tests/generated/LiteralPat/LiteralPat.ql linguist-generated +/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql linguist-generated /test/extractor-tests/generated/LoopExpr/LoopExpr.ql linguist-generated +/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql linguist-generated +/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql linguist-generated /test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql linguist-generated +/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql linguist-generated +/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.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_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.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 +/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/MacroDef/MacroDef_getName.ql linguist-generated +/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/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 +/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql linguist-generated +/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql linguist-generated +/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/MacroTypeRepr/MacroTypeRepr.ql linguist-generated +/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.ql linguist-generated /test/extractor-tests/generated/MatchArm/MatchArm.ql linguist-generated +/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.ql linguist-generated +/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.ql linguist-generated +/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.ql linguist-generated +/test/extractor-tests/generated/MatchArm/MatchArm_getPat.ql linguist-generated /test/extractor-tests/generated/MatchArmList/MatchArmList.ql linguist-generated +/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.ql linguist-generated +/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.ql linguist-generated /test/extractor-tests/generated/MatchExpr/MatchExpr.ql linguist-generated +/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql linguist-generated +/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.ql linguist-generated /test/extractor-tests/generated/MatchGuard/MatchGuard.ql linguist-generated +/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql linguist-generated /test/extractor-tests/generated/Meta/Meta.ql linguist-generated +/test/extractor-tests/generated/Meta/Meta_getExpr.ql linguist-generated +/test/extractor-tests/generated/Meta/Meta_getPath.ql linguist-generated +/test/extractor-tests/generated/Meta/Meta_getTokenTree.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Module/Module.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getAttr.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getItemList.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getName.ql linguist-generated +/test/extractor-tests/generated/Module/Module_getVisibility.ql linguist-generated /test/extractor-tests/generated/Name/Name.ql linguist-generated +/test/extractor-tests/generated/Name/Name_getText.ql linguist-generated /test/extractor-tests/generated/NameRef/NameRef.ql linguist-generated +/test/extractor-tests/generated/NameRef/NameRef_getText.ql linguist-generated /test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql linguist-generated /test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql linguist-generated +/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql linguist-generated +/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/OrPat/OrPat.ql linguist-generated +/test/extractor-tests/generated/OrPat/OrPat_getPat.ql linguist-generated /test/extractor-tests/generated/Param/Param.ql linguist-generated +/test/extractor-tests/generated/Param/Param_getAttr.ql linguist-generated +/test/extractor-tests/generated/Param/Param_getPat.ql linguist-generated +/test/extractor-tests/generated/Param/Param_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/ParamList/ParamList.ql linguist-generated +/test/extractor-tests/generated/ParamList/ParamList_getParam.ql linguist-generated +/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.ql linguist-generated /test/extractor-tests/generated/ParenExpr/ParenExpr.ql linguist-generated +/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/ParenPat/ParenPat.ql linguist-generated +/test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql linguist-generated /test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql linguist-generated +/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql linguist-generated +/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql linguist-generated /test/extractor-tests/generated/Path/Path.ql linguist-generated /test/extractor-tests/generated/Path/PathExpr.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Path/PathPat.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getRetType.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/Path/PathTypeRepr.ql linguist-generated +/test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql linguist-generated +/test/extractor-tests/generated/Path/Path_getQualifier.ql linguist-generated +/test/extractor-tests/generated/Path/Path_getSegment.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql linguist-generated +/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql linguist-generated +/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql linguist-generated /test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql linguist-generated +/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/RangeExpr/RangeExpr.ql linguist-generated +/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.ql linguist-generated +/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.ql linguist-generated +/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.ql linguist-generated /test/extractor-tests/generated/RangePat/RangePat.ql linguist-generated +/test/extractor-tests/generated/RangePat/RangePat_getEnd.ql linguist-generated +/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql linguist-generated +/test/extractor-tests/generated/RangePat/RangePat_getStart.ql linguist-generated /test/extractor-tests/generated/RefExpr/RefExpr.ql linguist-generated +/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/RefPat/RefPat.ql linguist-generated +/test/extractor-tests/generated/RefPat/RefPat_getPat.ql linguist-generated /test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql linguist-generated +/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.ql linguist-generated +/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/Rename/Rename.ql linguist-generated +/test/extractor-tests/generated/Rename/Rename_getName.ql linguist-generated /test/extractor-tests/generated/RestPat/RestPat.ql linguist-generated +/test/extractor-tests/generated/RestPat/RestPat_getAttr.ql linguist-generated /test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql linguist-generated +/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql linguist-generated +/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql linguist-generated /test/extractor-tests/generated/SelfParam/SelfParam.ql linguist-generated +/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql linguist-generated +/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql linguist-generated +/test/extractor-tests/generated/SelfParam/SelfParam_getName.ql linguist-generated +/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/SlicePat/SlicePat.ql linguist-generated +/test/extractor-tests/generated/SlicePat/SlicePat_getPat.ql linguist-generated /test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql linguist-generated +/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/SourceFile/SourceFile.ql linguist-generated +/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql linguist-generated +/test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql linguist-generated /test/extractor-tests/generated/Static/Static.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getAttr.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getBody.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getName.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/Static/Static_getVisibility.ql linguist-generated /test/extractor-tests/generated/StmtList/StmtList.ql linguist-generated +/test/extractor-tests/generated/StmtList/StmtList_getAttr.ql linguist-generated +/test/extractor-tests/generated/StmtList/StmtList_getStatement.ql linguist-generated +/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql linguist-generated /test/extractor-tests/generated/Struct/Struct.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getAttr.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getFieldList.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getName.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Struct/Struct_getWhereClause.ql linguist-generated /test/extractor-tests/generated/StructExpr/StructExpr.ql linguist-generated +/test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql linguist-generated +/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql linguist-generated +/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql linguist-generated /test/extractor-tests/generated/StructExprField/StructExprField.ql linguist-generated +/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql linguist-generated +/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql linguist-generated +/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql linguist-generated /test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql linguist-generated +/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql linguist-generated +/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql linguist-generated +/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql linguist-generated /test/extractor-tests/generated/StructField/StructField.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getAttr.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getDefault.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getName.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getVisibility.ql linguist-generated /test/extractor-tests/generated/StructFieldList/StructFieldList.ql linguist-generated +/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql linguist-generated /test/extractor-tests/generated/StructPat/StructPat.ql linguist-generated +/test/extractor-tests/generated/StructPat/StructPat_getPath.ql linguist-generated +/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql linguist-generated +/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql linguist-generated /test/extractor-tests/generated/StructPatField/StructPatField.ql linguist-generated +/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql linguist-generated +/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql linguist-generated +/test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql linguist-generated /test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql linguist-generated +/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql linguist-generated +/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.ql linguist-generated /test/extractor-tests/generated/TokenTree/TokenTree.ql linguist-generated /test/extractor-tests/generated/Trait/AssocItemList.ql linguist-generated +/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql linguist-generated +/test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql linguist-generated /test/extractor-tests/generated/Trait/Trait.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getAttr.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getName.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Trait/Trait_getWhereClause.ql linguist-generated /test/extractor-tests/generated/TraitAlias/TraitAlias.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.ql linguist-generated +/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.ql linguist-generated /test/extractor-tests/generated/TryExpr/TryExpr.ql linguist-generated +/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/TupleExpr/TupleExpr.ql linguist-generated +/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.ql linguist-generated /test/extractor-tests/generated/TupleField/TupleField.ql linguist-generated +/test/extractor-tests/generated/TupleField/TupleField_getAttr.ql linguist-generated +/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/TupleField/TupleField_getVisibility.ql linguist-generated /test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql linguist-generated +/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql linguist-generated /test/extractor-tests/generated/TuplePat/TuplePat.ql linguist-generated +/test/extractor-tests/generated/TuplePat/TuplePat_getField.ql linguist-generated /test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql linguist-generated +/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql linguist-generated /test/extractor-tests/generated/TypeAlias/TypeAlias.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql linguist-generated +/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql linguist-generated /test/extractor-tests/generated/TypeArg/TypeArg.ql linguist-generated +/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/TypeBound/TypeBound.ql linguist-generated +/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql linguist-generated +/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.ql linguist-generated +/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.ql linguist-generated /test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql linguist-generated +/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.ql linguist-generated /test/extractor-tests/generated/TypeParam/TypeParam.ql linguist-generated +/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.ql linguist-generated +/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.ql linguist-generated +/test/extractor-tests/generated/TypeParam/TypeParam_getName.ql linguist-generated +/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql linguist-generated /test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql linguist-generated +/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/Union/Union.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getAttr.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getName.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getStructFieldList.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getVisibility.ql linguist-generated +/test/extractor-tests/generated/Union/Union_getWhereClause.ql linguist-generated /test/extractor-tests/generated/Use/Use.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getAttr.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getUseTree.ql linguist-generated +/test/extractor-tests/generated/Use/Use_getVisibility.ql linguist-generated /test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql linguist-generated +/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql linguist-generated /test/extractor-tests/generated/UseTree/UseTree.ql linguist-generated +/test/extractor-tests/generated/UseTree/UseTree_getPath.ql linguist-generated +/test/extractor-tests/generated/UseTree/UseTree_getRename.ql linguist-generated +/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql linguist-generated /test/extractor-tests/generated/UseTreeList/UseTreeList.ql linguist-generated +/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql linguist-generated /test/extractor-tests/generated/Variant/Variant.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getAttr.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getFieldList.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getName.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getVisibility.ql linguist-generated /test/extractor-tests/generated/VariantList/VariantList.ql linguist-generated +/test/extractor-tests/generated/VariantList/VariantList_getVariant.ql linguist-generated /test/extractor-tests/generated/Visibility/Visibility.ql linguist-generated +/test/extractor-tests/generated/Visibility/Visibility_getPath.ql linguist-generated /test/extractor-tests/generated/WhereClause/WhereClause.ql linguist-generated +/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.ql linguist-generated /test/extractor-tests/generated/WherePred/WherePred.ql linguist-generated +/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql linguist-generated +/test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql linguist-generated +/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql linguist-generated +/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/WhileExpr/WhileExpr.ql linguist-generated +/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql linguist-generated +/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql linguist-generated +/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.ql linguist-generated /test/extractor-tests/generated/WildcardPat/WildcardPat.ql linguist-generated /test/extractor-tests/generated/YeetExpr/YeetExpr.ql linguist-generated +/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.ql linguist-generated /test/extractor-tests/generated/YieldExpr/YieldExpr.ql linguist-generated +/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.ql linguist-generated +/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.ql linguist-generated diff --git a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected index 650bf3169412..c21b79749d17 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-and-quality.qls.expected @@ -16,7 +16,6 @@ ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-696/BadCtorInitialization.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql -ql/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql ql/rust/ql/src/queries/security/CWE-825/AccessInvalidPointer.ql ql/rust/ql/src/queries/summary/LinesOfCode.ql ql/rust/ql/src/queries/summary/LinesOfUserCode.ql diff --git a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected index b5df88f96eca..b3683f02d927 100644 --- a/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected +++ b/rust/ql/integration-tests/query-suite/rust-security-extended.qls.expected @@ -15,7 +15,6 @@ ql/rust/ql/src/queries/security/CWE-312/CleartextLogging.ql ql/rust/ql/src/queries/security/CWE-327/BrokenCryptoAlgorithm.ql ql/rust/ql/src/queries/security/CWE-328/WeakSensitiveDataHashing.ql ql/rust/ql/src/queries/security/CWE-770/UncontrolledAllocationSize.ql -ql/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql ql/rust/ql/src/queries/security/CWE-825/AccessInvalidPointer.ql ql/rust/ql/src/queries/summary/LinesOfCode.ql ql/rust/ql/src/queries/summary/LinesOfUserCode.ql diff --git a/rust/ql/lib/change-notes/2025-06-24-type-inference.md b/rust/ql/lib/change-notes/2025-06-24-type-inference.md deleted file mode 100644 index 5e3fd6fc53d9..000000000000 --- a/rust/ql/lib/change-notes/2025-06-24-type-inference.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added type inference for `for` loops and array expressions. diff --git a/rust/ql/lib/change-notes/2025-06-25-item-reorg.md.md b/rust/ql/lib/change-notes/2025-06-25-item-reorg.md.md deleted file mode 100644 index 842dc3b1e318..000000000000 --- a/rust/ql/lib/change-notes/2025-06-25-item-reorg.md.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* `AssocItem` and `ExternItem` are now proper subclasses of `Item`. diff --git a/rust/ql/lib/change-notes/2025-06-26-dataflow-traits.md b/rust/ql/lib/change-notes/2025-06-26-dataflow-traits.md deleted file mode 100644 index c3513958ccd1..000000000000 --- a/rust/ql/lib/change-notes/2025-06-26-dataflow-traits.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Implemented support for data flow through trait functions. For the purpose of data flow, calls to trait functions dispatch to all possible implementations. diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index db2315688de2..47fb29b2d8b7 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -88,13 +88,13 @@ final class DataFlowCall extends TDataFlowCall { ) } + Location getLocation() { result = this.asCallCfgNode().getLocation() } + //** TODO JB1: Move to subclass, monkey patching for #153 */ DataFlowCallable getARuntimeTarget(){ none() } ArgumentNode getAnArgumentNode(){ none() } int totalorder(){ none() } //** TODO JB1: end stubs for #153 */ - - Location getLocation() { result = this.asCallCfgNode().getLocation() } } /** @@ -415,20 +415,10 @@ module RustDataFlow implements InputSig { /** Gets a viable implementation of the target of the given `Call`. */ DataFlowCallable viableCallable(DataFlowCall call) { - exists(Call c | c = call.asCallCfgNode().getCall() | - result.asCfgScope() = c.getARuntimeTarget() + exists(Callable target | target = call.asCallCfgNode().getCall().getStaticTarget() | + target = result.asCfgScope() or - exists(SummarizedCallable sc, Function staticTarget | - staticTarget = c.getStaticTarget() and - sc = result.asSummarizedCallable() - | - sc = staticTarget - or - // only apply trait models to concrete implementations when they are not - // defined in source code - staticTarget.implements(sc) and - not staticTarget.fromSource() - ) + target = result.asSummarizedCallable() ) } @@ -925,11 +915,7 @@ module VariableCapture { CapturedVariable v; VariableRead() { - exists(VariableAccess read | this.getExpr() = read and v = read.getVariable() | - read instanceof VariableReadAccess - or - read = any(RefExpr re).getExpr() - ) + exists(VariableReadAccess read | this.getExpr() = read and v = read.getVariable()) } CapturedVariable getVariable() { result = v } diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 112fe6de5dcd..bc1f58824b32 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -32,8 +32,6 @@ * - `Field[t(i)]`: position `i` inside the variant/struct with canonical path `v`, for example * `Field[core::option::Option::Some(0)]`. * - `Field[i]`: the `i`th element of a tuple. - * - `Reference`: the referenced value. - * - `Future`: the value being computed asynchronously. * 3. The `kind` column is a tag that can be referenced from QL to determine to * which classes the interpreted elements should be added. For example, for * sources `"remote"` indicates a default remote flow source, and for summaries @@ -213,10 +211,6 @@ private class SummarizedCallableFromModel extends SummarizedCallable::Range { this.getCanonicalPath() = path } - override predicate hasProvenance(Provenance provenance) { - summaryModel(path, _, _, _, provenance, _) - } - override predicate propagatesFlow( string input, string output, boolean preservesValue, string model ) { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index a1bdc367d0aa..b18ccbacbd6a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -17,19 +17,13 @@ private import codeql.rust.dataflow.FlowSummary private import Node as Node private import DataFlowImpl private import FlowSummaryImpl as FlowSummaryImpl -private import codeql.rust.internal.CachedStages /** An element, viewed as a node in a data flow graph. */ -// It is important to not make this class `abstract`, as it otherwise results in -// a needless charpred, which will result in recomputation of internal non-cached -// predicates -class NodePublic extends TNode { +abstract class NodePublic extends TNode { /** Gets the location of this node. */ - cached abstract Location getLocation(); /** Gets a textual representation of this node. */ - cached abstract string toString(); /** @@ -61,6 +55,17 @@ abstract class Node extends NodePublic { CfgNode getCfgNode() { none() } } +/** A node type that is not implemented. */ +final class NaNode extends Node { + NaNode() { none() } + + override CfgScope getCfgScope() { none() } + + override string toString() { result = "N/A" } + + override Location getLocation() { none() } +} + /** A data flow node used to model flow summaries. */ class FlowSummaryNode extends Node, TFlowSummaryNode { FlowSummaryImpl::Private::SummaryNode getSummaryNode() { this = TFlowSummaryNode(result) } @@ -103,7 +108,6 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { } override Location getLocation() { - Stages::DataFlowStage::ref() and exists(this.getSummarizedCallable()) and result instanceof EmptyLocation or @@ -112,10 +116,7 @@ class FlowSummaryNode extends Node, TFlowSummaryNode { result = this.getSinkElement().getLocation() } - override string toString() { - Stages::DataFlowStage::ref() and - result = this.getSummaryNode().toString() - } + override string toString() { result = this.getSummaryNode().toString() } } /** A data flow node that corresponds directly to a CFG node for an AST node. */ @@ -439,9 +440,9 @@ private class CapturePostUpdateNode extends PostUpdateNode, CaptureNode { final override string toString() { result = PostUpdateNode.super.toString() } } -final class CastNode extends ExprNode { - CastNode() { none() } -} +final class CastNode = NaNode; + +private import codeql.rust.internal.CachedStages cached newtype TNode = diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 5144df16662c..42b1d09f8f9a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -38,22 +38,6 @@ predicate variableWrite(AstNode write, Variable v) { ) } -private predicate variableReadCertain(BasicBlock bb, int i, VariableAccess va, Variable v) { - bb.getNode(i).getAstNode() = va and - va = v.getAnAccess() and - ( - va instanceof VariableReadAccess - or - // For immutable variables, we model a read when they are borrowed - // (although the actual read happens later, if at all). - va = any(RefExpr re).getExpr() - 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() - ) -} - module SsaInput implements SsaImplCommon::InputSig { class BasicBlock = BasicBlocks::BasicBlock; @@ -82,7 +66,20 @@ module SsaInput implements SsaImplCommon::InputSig { } predicate variableRead(BasicBlock bb, int i, SourceVariable v, boolean certain) { - variableReadCertain(bb, i, _, v) and + exists(VariableAccess va | + bb.getNode(i).getAstNode() = va and + va = v.getAnAccess() + | + va instanceof VariableReadAccess + or + // For immutable variables, we model a read when they are borrowed + // (although the actual read happens later, if at all). + va = any(RefExpr re).getExpr() + 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 capturedCallRead(_, bb, i, v) and certain = false @@ -103,6 +100,16 @@ class PhiDefinition = Impl::PhiNode; module Consistency = Impl::Consistency; +/** Holds if `v` is read at index `i` in basic block `bb`. */ +private predicate variableReadActual(BasicBlock bb, int i, Variable v) { + exists(VariableAccess read | + read instanceof VariableReadAccess or read = any(RefExpr re).getExpr() + | + read.getVariable() = v and + read = bb.getNode(i).getAstNode() + ) +} + /** * Holds if captured variable `v` is written directly inside `scope`, * or inside a (transitively) nested scope of `scope`. @@ -118,10 +125,10 @@ private predicate hasCapturedWrite(Variable v, Cfg::CfgScope scope) { * immediate outer CFG scope of `scope`. */ pragma[noinline] -private predicate variableReadCertainInOuterScope( +private predicate variableReadActualInOuterScope( BasicBlock bb, int i, Variable v, Cfg::CfgScope scope ) { - variableReadCertain(bb, i, _, v) and bb.getScope() = scope.getEnclosingCfgScope() + variableReadActual(bb, i, v) and bb.getScope() = scope.getEnclosingCfgScope() } pragma[noinline] @@ -129,7 +136,7 @@ private predicate hasVariableReadWithCapturedWrite( BasicBlock bb, int i, Variable v, Cfg::CfgScope scope ) { hasCapturedWrite(v, scope) and - variableReadCertainInOuterScope(bb, i, v, scope) + variableReadActualInOuterScope(bb, i, v, scope) } private VariableAccess getACapturedVariableAccess(BasicBlock bb, Variable v) { @@ -147,7 +154,7 @@ private predicate writesCapturedVariable(BasicBlock bb, Variable v) { /** Holds if `bb` contains a captured read to variable `v`. */ pragma[nomagic] private predicate readsCapturedVariable(BasicBlock bb, Variable v) { - variableReadCertain(_, _, getACapturedVariableAccess(bb, v), _) + getACapturedVariableAccess(bb, v) instanceof VariableReadAccess } /** @@ -247,7 +254,7 @@ private module Cached { CfgNode getARead(Definition def) { exists(Variable v, BasicBlock bb, int i | Impl::ssaDefReachesRead(v, def, bb, i) and - variableReadCertain(bb, i, v.getAnAccess(), v) and + variableReadActual(bb, i, v) and result = bb.getNode(i) ) } diff --git a/rust/ql/lib/codeql/rust/elements/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/AssocItem.qll index 525df804290f..80c1ecafd7e7 100644 --- a/rust/ql/lib/codeql/rust/elements/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/AssocItem.qll @@ -4,7 +4,7 @@ */ private import internal.AssocItemImpl -import codeql.rust.elements.Item +import codeql.rust.elements.AstNode /** * An associated item in a `Trait` or `Impl`. diff --git a/rust/ql/lib/codeql/rust/elements/Const.qll b/rust/ql/lib/codeql/rust/elements/Const.qll index 39aea3e25dc4..cf02e36a43aa 100644 --- a/rust/ql/lib/codeql/rust/elements/Const.qll +++ b/rust/ql/lib/codeql/rust/elements/Const.qll @@ -8,6 +8,7 @@ import codeql.rust.elements.AssocItem import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility diff --git a/rust/ql/lib/codeql/rust/elements/ExternItem.qll b/rust/ql/lib/codeql/rust/elements/ExternItem.qll index d723af883086..7931ce81c403 100644 --- a/rust/ql/lib/codeql/rust/elements/ExternItem.qll +++ b/rust/ql/lib/codeql/rust/elements/ExternItem.qll @@ -4,7 +4,7 @@ */ private import internal.ExternItemImpl -import codeql.rust.elements.Item +import codeql.rust.elements.AstNode /** * An item inside an extern block. diff --git a/rust/ql/lib/codeql/rust/elements/Function.qll b/rust/ql/lib/codeql/rust/elements/Function.qll index c44a3b119145..2f2a151f453d 100644 --- a/rust/ql/lib/codeql/rust/elements/Function.qll +++ b/rust/ql/lib/codeql/rust/elements/Function.qll @@ -10,6 +10,7 @@ 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.RetTypeRepr import codeql.rust.elements.Visibility diff --git a/rust/ql/lib/codeql/rust/elements/MacroCall.qll b/rust/ql/lib/codeql/rust/elements/MacroCall.qll index 240ff7ab97d5..7b8a591bb62e 100644 --- a/rust/ql/lib/codeql/rust/elements/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/MacroCall.qll @@ -8,6 +8,7 @@ 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 import codeql.rust.elements.Path import codeql.rust.elements.TokenTree diff --git a/rust/ql/lib/codeql/rust/elements/Static.qll b/rust/ql/lib/codeql/rust/elements/Static.qll index ae6e8b3b6a46..2ddd82f25cd2 100644 --- a/rust/ql/lib/codeql/rust/elements/Static.qll +++ b/rust/ql/lib/codeql/rust/elements/Static.qll @@ -7,6 +7,7 @@ private import internal.StaticImpl import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.ExternItem +import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility diff --git a/rust/ql/lib/codeql/rust/elements/TypeAlias.qll b/rust/ql/lib/codeql/rust/elements/TypeAlias.qll index 051b381003bc..6cccf6a24003 100644 --- a/rust/ql/lib/codeql/rust/elements/TypeAlias.qll +++ b/rust/ql/lib/codeql/rust/elements/TypeAlias.qll @@ -8,6 +8,7 @@ import codeql.rust.elements.AssocItem import codeql.rust.elements.Attr import codeql.rust.elements.ExternItem import codeql.rust.elements.GenericParamList +import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.TypeBoundList import codeql.rust.elements.TypeRepr diff --git a/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll index e731dd5a5219..68e2945d377e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AssocItemImpl.qll @@ -1,3 +1,4 @@ +// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `AssocItem`. * @@ -11,10 +12,6 @@ private import codeql.rust.elements.internal.generated.AssocItem * be referenced directly. */ module Impl { - private import rust - private import codeql.rust.internal.PathResolution - - // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * An associated item in a `Trait` or `Impl`. * @@ -24,15 +21,5 @@ module Impl { * // ^^^^^^^^^^^^^ * ``` */ - class AssocItem extends Generated::AssocItem { - /** Holds if this item implements trait item `other`. */ - pragma[nomagic] - predicate implements(AssocItem other) { - exists(TraitItemNode t, ImplItemNode i, string name | - other = t.getAssocItem(pragma[only_bind_into](name)) and - t = i.resolveTraitTy() and - this = i.getAssocItem(pragma[only_bind_into](name)) - ) - } - } + class AssocItem extends Generated::AssocItem { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll index 237ebfa6b413..5cebd52b137c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/AstNodeImpl.qll @@ -59,17 +59,6 @@ module Impl { ) } - /** Gets the block that encloses this node, if any. */ - cached - BlockExpr getEnclosingBlock() { - exists(AstNode p | p = this.getParentNode() | - result = p - or - not p instanceof BlockExpr and - result = p.getEnclosingBlock() - ) - } - /** Holds if this node is inside a macro expansion. */ predicate isInMacroExpansion() { MacroCallImpl::isInMacroExpansion(_, this) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll index bfa6f9b7242f..9cd45ca76709 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/CallImpl.qll @@ -65,17 +65,6 @@ module Impl { not exists(TypeInference::resolveMethodCallTarget(this)) and result = this.(CallExpr).getStaticTarget() } - - /** Gets a runtime target of this call, if any. */ - pragma[nomagic] - Function getARuntimeTarget() { - result.hasImplementation() and - ( - result = this.getStaticTarget() - or - result.implements(this.getStaticTarget()) - ) - } } /** Holds if the call expression dispatches to a trait method. */ diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll index 056310492549..b645092a016a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariableImpl.qll @@ -127,9 +127,6 @@ module Impl { */ Name getName() { variableDecl(definingNode, result, text) } - /** Gets the block that encloses this variable, if any. */ - BlockExpr getEnclosingBlock() { result = definingNode.getEnclosingBlock() } - /** Gets the `self` parameter that declares this variable, if any. */ SelfParam getSelfParam() { result.getName() = this.getName() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll index 89f3a044c3ab..d63e9824efd5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocItem.qll @@ -6,7 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl /** * INTERNAL: This module contains the fully generated definition of `AssocItem` and should not @@ -24,5 +24,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::AssocItem` class directly. * Use the subclass `AssocItem`, where the following predicates are available. */ - class AssocItem extends Synth::TAssocItem, ItemImpl::Item { } + class AssocItem extends Synth::TAssocItem, AstNodeImpl::AstNode { } } 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 07ffd9058bba..5478491492d9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Const.qll @@ -10,6 +10,7 @@ import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.GenericParamList +import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility @@ -30,7 +31,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Const` class directly. * Use the subclass `Const`, where the following predicates are available. */ - class Const extends Synth::TConst, AssocItemImpl::AssocItem { + class Const extends Synth::TConst, AssocItemImpl::AssocItem, ItemImpl::Item { override string getAPrimaryQlClass() { result = "Const" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll index c42e43173ff5..09c6ed3bdeb2 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternItem.qll @@ -6,7 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl /** * INTERNAL: This module contains the fully generated definition of `ExternItem` and should not @@ -26,5 +26,5 @@ module Generated { * INTERNAL: Do not reference the `Generated::ExternItem` class directly. * Use the subclass `ExternItem`, where the following predicates are available. */ - class ExternItem extends Synth::TExternItem, ItemImpl::Item { } + class ExternItem extends Synth::TExternItem, AstNodeImpl::AstNode { } } 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 db0b4fd15091..00c4cd38c32b 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Function.qll @@ -12,6 +12,7 @@ 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.RetTypeRepr import codeql.rust.elements.Visibility @@ -37,7 +38,7 @@ module Generated { * Use the subclass `Function`, where the following predicates are available. */ class Function extends Synth::TFunction, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem, - CallableImpl::Callable + ItemImpl::Item, CallableImpl::Callable { override string getAPrimaryQlClass() { result = "Function" } 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 bcca8b8deef3..94b9c13e789c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MacroCall.qll @@ -10,6 +10,7 @@ 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 import codeql.rust.elements.Path import codeql.rust.elements.TokenTree @@ -28,7 +29,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::MacroCall` class directly. * Use the subclass `MacroCall`, where the following predicates are available. */ - class MacroCall extends Synth::TMacroCall, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem { + class MacroCall extends Synth::TMacroCall, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem, + ItemImpl::Item + { override string getAPrimaryQlClass() { result = "MacroCall" } /** 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 e2aa343f65d9..30ae1ef0be93 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -9,29 +9,107 @@ import codeql.rust.elements.internal.ExtractorStep import codeql.rust.elements.internal.NamedCrate private module Impl { + private Element getImmediateChildOfElement(Element e, int index, string partialPredicateCall) { + none() + } + private Element getImmediateChildOfExtractorStep( ExtractorStep e, int index, string partialPredicateCall ) { - none() + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLocatable(Locatable e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfNamedCrate(NamedCrate e, int index, string partialPredicateCall) { - none() + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfUnextracted( + Unextracted e, int index, string partialPredicateCall + ) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAstNode(AstNode e, int index, string partialPredicateCall) { + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfCrate(Crate e, int index, string partialPredicateCall) { - none() + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfFormat(Format e, int index, string partialPredicateCall) { - exists(int n, int nArgumentRef, int nWidthArgument, int nPrecisionArgument | - n = 0 and + exists( + int b, int bLocatable, int n, int nArgumentRef, int nWidthArgument, int nPrecisionArgument + | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and nArgumentRef = n + 1 and nWidthArgument = nArgumentRef + 1 and nPrecisionArgument = nWidthArgument + 1 and ( none() or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + or index = n and result = e.getArgumentRef() and partialPredicateCall = "ArgumentRef()" or index = nArgumentRef and @@ -48,36 +126,90 @@ private module Impl { private Element getImmediateChildOfFormatArgument( FormatArgument e, int index, string partialPredicateCall ) { - exists(int n, int nVariable | - n = 0 and + exists(int b, int bLocatable, int n, int nVariable | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and nVariable = n + 1 and ( none() or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + or index = n and result = e.getVariable() and partialPredicateCall = "Variable()" ) ) } private Element getImmediateChildOfMissing(Missing e, int index, string partialPredicateCall) { - none() + exists(int b, int bUnextracted, int n | + b = 0 and + bUnextracted = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnextracted(e, i, _)) | i) and + n = bUnextracted and + ( + none() + or + result = getImmediateChildOfUnextracted(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnimplemented( Unimplemented e, int index, string partialPredicateCall ) { - none() + exists(int b, int bUnextracted, int n | + b = 0 and + bUnextracted = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnextracted(e, i, _)) | i) and + n = bUnextracted and + ( + none() + or + result = getImmediateChildOfUnextracted(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAbi(Abi e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } - private Element getImmediateChildOfAbi(Abi e, int index, string partialPredicateCall) { none() } + private Element getImmediateChildOfAddressable( + Addressable e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } private Element getImmediateChildOfArgList(ArgList e, int index, string partialPredicateCall) { - exists(int n, int nArg | - n = 0 and + exists(int b, int bAstNode, int n, int nArg | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nArg = n + 1 + max(int i | i = -1 or exists(e.getArg(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getArg(index - n) and partialPredicateCall = "Arg(" + (index - n).toString() + ")" ) @@ -85,19 +217,45 @@ private module Impl { } private Element getImmediateChildOfAsmDirSpec(AsmDirSpec e, int index, string partialPredicateCall) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAsmOperand(AsmOperand e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfAsmOperandExpr( AsmOperandExpr e, int index, string partialPredicateCall ) { - exists(int n, int nInExpr, int nOutExpr | - n = 0 and + exists(int b, int bAstNode, int n, int nInExpr, int nOutExpr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nInExpr = n + 1 and nOutExpr = nInExpr + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getInExpr() and partialPredicateCall = "InExpr()" or index = nInExpr and result = e.getOutExpr() and partialPredicateCall = "OutExpr()" @@ -106,31 +264,74 @@ private module Impl { } private Element getImmediateChildOfAsmOption(AsmOption e, int index, string partialPredicateCall) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAsmPiece(AsmPiece e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfAsmRegSpec(AsmRegSpec e, int index, string partialPredicateCall) { - exists(int n, int nIdentifier | - n = 0 and + exists(int b, int bAstNode, int n, int nIdentifier | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nIdentifier = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getIdentifier() and partialPredicateCall = "Identifier()" ) ) } + private Element getImmediateChildOfAssocItem(AssocItem e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfAssocItemList( AssocItemList e, int index, string partialPredicateCall ) { - exists(int n, int nAssocItem, int nAttr | - n = 0 and + exists(int b, int bAstNode, int n, int nAssocItem, int nAttr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAssocItem = n + 1 + max(int i | i = -1 or exists(e.getAssocItem(i)) | i) and nAttr = nAssocItem + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAssocItem(index - n) and partialPredicateCall = "AssocItem(" + (index - n).toString() + ")" or @@ -141,26 +342,54 @@ private module Impl { } private Element getImmediateChildOfAttr(Attr e, int index, string partialPredicateCall) { - exists(int n, int nMeta | - n = 0 and + exists(int b, int bAstNode, int n, int nMeta | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nMeta = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getMeta() and partialPredicateCall = "Meta()" ) ) } + 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 ) { - exists(int n, int nGenericParamList | - n = 0 and + exists(int b, int bAstNode, int n, int nGenericParamList | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nGenericParamList = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getGenericParamList() and partialPredicateCall = "GenericParamList()" @@ -168,16 +397,46 @@ private module Impl { ) } + private Element getImmediateChildOfExpr(Expr e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfExternItem(ExternItem e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfExternItemList( ExternItemList e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nExternItem | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nExternItem | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExternItem = nAttr + 1 + max(int i | i = -1 or exists(e.getExternItem(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -187,16 +446,33 @@ private module Impl { ) } + private Element getImmediateChildOfFieldList(FieldList e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfFormatArgsArg( FormatArgsArg e, int index, string partialPredicateCall ) { - exists(int n, int nExpr, int nName | - n = 0 and + exists(int b, int bAstNode, int n, int nExpr, int nName | + 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 nName = nExpr + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" or index = nExpr and result = e.getName() and partialPredicateCall = "Name()" @@ -204,30 +480,66 @@ private module Impl { ) } + private Element getImmediateChildOfGenericArg(GenericArg e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfGenericArgList( GenericArgList e, int index, string partialPredicateCall ) { - exists(int n, int nGenericArg | - n = 0 and + exists(int b, int bAstNode, int n, int nGenericArg | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nGenericArg = n + 1 + max(int i | i = -1 or exists(e.getGenericArg(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getGenericArg(index - n) and partialPredicateCall = "GenericArg(" + (index - n).toString() + ")" ) ) } + private Element getImmediateChildOfGenericParam( + GenericParam e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfGenericParamList( GenericParamList e, int index, string partialPredicateCall ) { - exists(int n, int nGenericParam | - n = 0 and + exists(int b, int bAstNode, int n, int nGenericParam | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nGenericParam = n + 1 + max(int i | i = -1 or exists(e.getGenericParam(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getGenericParam(index - n) and partialPredicateCall = "GenericParam(" + (index - n).toString() + ")" ) @@ -235,13 +547,17 @@ private module Impl { } private Element getImmediateChildOfItemList(ItemList e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nItem | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nItem | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nItem = nAttr + 1 + max(int i | i = -1 or exists(e.getItem(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -252,36 +568,48 @@ private module Impl { } private Element getImmediateChildOfLabel(Label e, int index, string partialPredicateCall) { - exists(int n, int nLifetime | - n = 0 and + exists(int b, int bAstNode, int n, int nLifetime | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nLifetime = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" ) ) } private Element getImmediateChildOfLetElse(LetElse e, int index, string partialPredicateCall) { - exists(int n, int nBlockExpr | - n = 0 and + exists(int b, int bAstNode, int n, int nBlockExpr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nBlockExpr = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getBlockExpr() and partialPredicateCall = "BlockExpr()" ) ) } private Element getImmediateChildOfMacroItems(MacroItems e, int index, string partialPredicateCall) { - exists(int n, int nItem | - n = 0 and + 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() + ")" ) @@ -289,8 +617,10 @@ private module Impl { } private Element getImmediateChildOfMatchArm(MatchArm e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr, int nGuard, int nPat | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nGuard, int nPat | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and nGuard = nExpr + 1 and @@ -298,6 +628,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -313,13 +645,17 @@ private module Impl { private Element getImmediateChildOfMatchArmList( MatchArmList e, int index, string partialPredicateCall ) { - exists(int n, int nArm, int nAttr | - n = 0 and + exists(int b, int bAstNode, int n, int nArm, int nAttr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nArm = n + 1 + max(int i | i = -1 or exists(e.getArm(i)) | i) and nAttr = nArm + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getArm(index - n) and partialPredicateCall = "Arm(" + (index - n).toString() + ")" or @@ -330,26 +666,34 @@ private module Impl { } private Element getImmediateChildOfMatchGuard(MatchGuard e, int index, string partialPredicateCall) { - exists(int n, int nCondition | - n = 0 and + exists(int b, int bAstNode, int n, int nCondition | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nCondition = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getCondition() and partialPredicateCall = "Condition()" ) ) } private Element getImmediateChildOfMeta(Meta e, int index, string partialPredicateCall) { - exists(int n, int nExpr, int nPath, int nTokenTree | - n = 0 and + exists(int b, int bAstNode, int n, int nExpr, int nPath, int nTokenTree | + 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 nPath = nExpr + 1 and nTokenTree = nPath + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" or index = nExpr and result = e.getPath() and partialPredicateCall = "Path()" @@ -359,16 +703,51 @@ private module Impl { ) } - private Element getImmediateChildOfName(Name e, int index, string partialPredicateCall) { none() } + private Element getImmediateChildOfName(Name e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfParamBase(ParamBase e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nAttr, int nTypeRepr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nTypeRepr = nAttr + 1 and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + ) + ) + } private Element getImmediateChildOfParamList(ParamList e, int index, string partialPredicateCall) { - exists(int n, int nParam, int nSelfParam | - n = 0 and + exists(int b, int bAstNode, int n, int nParam, int nSelfParam | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nParam = n + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and nSelfParam = nParam + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getParam(index - n) and partialPredicateCall = "Param(" + (index - n).toString() + ")" or @@ -380,26 +759,47 @@ private module Impl { private Element getImmediateChildOfParenthesizedArgList( ParenthesizedArgList e, int index, string partialPredicateCall ) { - exists(int n, int nTypeArg | - n = 0 and + exists(int b, int bAstNode, int n, int nTypeArg | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nTypeArg = n + 1 + max(int i | i = -1 or exists(e.getTypeArg(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getTypeArg(index - n) and partialPredicateCall = "TypeArg(" + (index - n).toString() + ")" ) ) } + private Element getImmediateChildOfPat(Pat e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfPath(Path e, int index, string partialPredicateCall) { - exists(int n, int nQualifier, int nSegment | - n = 0 and + exists(int b, int bAstNode, int n, int nQualifier, int nSegment | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nQualifier = n + 1 and nSegment = nQualifier + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getQualifier() and partialPredicateCall = "Qualifier()" or index = nQualifier and result = e.getSegment() and partialPredicateCall = "Segment()" @@ -411,10 +811,12 @@ private module Impl { PathSegment e, int index, string partialPredicateCall ) { exists( - int n, int nGenericArgList, int nIdentifier, int nParenthesizedArgList, int nRetType, - int nReturnTypeSyntax, int nTypeRepr, int nTraitTypeRepr + int b, int bAstNode, int n, int nGenericArgList, int nIdentifier, int nParenthesizedArgList, + int nRetType, int nReturnTypeSyntax, int nTypeRepr, int nTraitTypeRepr | - n = 0 and + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nGenericArgList = n + 1 and nIdentifier = nGenericArgList + 1 and nParenthesizedArgList = nIdentifier + 1 and @@ -425,6 +827,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or index = nGenericArgList and @@ -455,26 +859,47 @@ private module Impl { } private Element getImmediateChildOfRename(Rename e, int index, string partialPredicateCall) { - exists(int n, int nName | - n = 0 and + exists(int b, int bAstNode, int n, int nName | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nName = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getName() and partialPredicateCall = "Name()" ) ) } + private Element getImmediateChildOfResolvable(Resolvable e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfRetTypeRepr( RetTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bAstNode, int n, int nTypeRepr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) @@ -483,17 +908,30 @@ private module Impl { private Element getImmediateChildOfReturnTypeSyntax( ReturnTypeSyntax e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfSourceFile(SourceFile e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nItem | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nItem | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nItem = nAttr + 1 + max(int i | i = -1 or exists(e.getItem(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -503,15 +941,32 @@ private module Impl { ) } + private Element getImmediateChildOfStmt(Stmt e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfStmtList(StmtList e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nStatement, int nTailExpr | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nStatement, int nTailExpr | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nStatement = nAttr + 1 + max(int i | i = -1 or exists(e.getStatement(i)) | i) and nTailExpr = nStatement + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -526,14 +981,18 @@ private module Impl { private Element getImmediateChildOfStructExprField( StructExprField e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nExpr, int nIdentifier | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nIdentifier | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and nIdentifier = nExpr + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -547,14 +1006,18 @@ private module Impl { private Element getImmediateChildOfStructExprFieldList( StructExprFieldList e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nField, int nSpread | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nField, int nSpread | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nField = nAttr + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and nSpread = nField + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -569,8 +1032,12 @@ private module Impl { private Element getImmediateChildOfStructField( StructField e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nDefault, int nName, int nTypeRepr, int nVisibility | - n = 0 and + exists( + int b, int bAstNode, int n, int nAttr, int nDefault, int nName, int nTypeRepr, int nVisibility + | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nDefault = nAttr + 1 and nName = nDefault + 1 and @@ -579,6 +1046,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -596,14 +1065,18 @@ private module Impl { private Element getImmediateChildOfStructPatField( StructPatField e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nIdentifier, int nPat | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nIdentifier, int nPat | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nIdentifier = nAttr + 1 and nPat = nIdentifier + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -617,13 +1090,17 @@ private module Impl { private Element getImmediateChildOfStructPatFieldList( StructPatFieldList e, int index, string partialPredicateCall ) { - exists(int n, int nField, int nRestPat | - n = 0 and + exists(int b, int bAstNode, int n, int nField, int nRestPat | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and nRestPat = nField + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" or @@ -632,19 +1109,45 @@ private module Impl { ) } + private Element getImmediateChildOfToken(Token e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfTokenTree(TokenTree e, int index, string partialPredicateCall) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfTupleField(TupleField e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nTypeRepr, int nVisibility | - n = 0 and + exists(int b, int bAstNode, int n, int nAttr, int nTypeRepr, int nVisibility | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nTypeRepr = nAttr + 1 and nVisibility = nTypeRepr + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -656,14 +1159,18 @@ private module Impl { } private Element getImmediateChildOfTypeBound(TypeBound e, int index, string partialPredicateCall) { - exists(int n, int nLifetime, int nTypeRepr, int nUseBoundGenericArgs | - n = 0 and + exists(int b, int bAstNode, int n, int nLifetime, int nTypeRepr, int nUseBoundGenericArgs | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nLifetime = n + 1 and nTypeRepr = nLifetime + 1 and nUseBoundGenericArgs = nTypeRepr + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" or index = nLifetime and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" @@ -678,27 +1185,63 @@ private module Impl { private Element getImmediateChildOfTypeBoundList( TypeBoundList e, int index, string partialPredicateCall ) { - exists(int n, int nBound | - n = 0 and + exists(int b, int bAstNode, int n, int nBound | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nBound = n + 1 + max(int i | i = -1 or exists(e.getBound(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getBound(index - n) and partialPredicateCall = "Bound(" + (index - n).toString() + ")" ) ) } - private Element getImmediateChildOfUseBoundGenericArgs( - UseBoundGenericArgs e, int index, string partialPredicateCall - ) { - exists(int n, int nUseBoundGenericArg | - n = 0 and - nUseBoundGenericArg = n + 1 + max(int i | i = -1 or exists(e.getUseBoundGenericArg(i)) | i) and + private Element getImmediateChildOfTypeRepr(TypeRepr e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfUseBoundGenericArg( + UseBoundGenericArg e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfUseBoundGenericArgs( + UseBoundGenericArgs e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n, int nUseBoundGenericArg | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nUseBoundGenericArg = n + 1 + max(int i | i = -1 or exists(e.getUseBoundGenericArg(i)) | i) and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getUseBoundGenericArg(index - n) and partialPredicateCall = "UseBoundGenericArg(" + (index - n).toString() + ")" ) @@ -706,14 +1249,18 @@ private module Impl { } private Element getImmediateChildOfUseTree(UseTree e, int index, string partialPredicateCall) { - exists(int n, int nPath, int nRename, int nUseTreeList | - n = 0 and + exists(int b, int bAstNode, int n, int nPath, int nRename, int nUseTreeList | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nPath = n + 1 and nRename = nPath + 1 and nUseTreeList = nRename + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" or index = nPath and result = e.getRename() and partialPredicateCall = "Rename()" @@ -726,12 +1273,16 @@ private module Impl { private Element getImmediateChildOfUseTreeList( UseTreeList e, int index, string partialPredicateCall ) { - exists(int n, int nUseTree | - n = 0 and + exists(int b, int bAstNode, int n, int nUseTree | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nUseTree = n + 1 + max(int i | i = -1 or exists(e.getUseTree(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getUseTree(index - n) and partialPredicateCall = "UseTree(" + (index - n).toString() + ")" ) @@ -741,12 +1292,16 @@ private module Impl { private Element getImmediateChildOfVariantList( VariantList e, int index, string partialPredicateCall ) { - exists(int n, int nVariant | - n = 0 and + exists(int b, int bAstNode, int n, int nVariant | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nVariant = n + 1 + max(int i | i = -1 or exists(e.getVariant(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getVariant(index - n) and partialPredicateCall = "Variant(" + (index - n).toString() + ")" ) @@ -754,12 +1309,16 @@ private module Impl { } private Element getImmediateChildOfVisibility(Visibility e, int index, string partialPredicateCall) { - exists(int n, int nPath | - n = 0 and + exists(int b, int bAstNode, int n, int nPath | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nPath = n + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" ) ) @@ -768,12 +1327,16 @@ private module Impl { private Element getImmediateChildOfWhereClause( WhereClause e, int index, string partialPredicateCall ) { - exists(int n, int nPredicate | - n = 0 and + exists(int b, int bAstNode, int n, int nPredicate | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nPredicate = n + 1 + max(int i | i = -1 or exists(e.getPredicate(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getPredicate(index - n) and partialPredicateCall = "Predicate(" + (index - n).toString() + ")" ) @@ -781,8 +1344,13 @@ private module Impl { } private Element getImmediateChildOfWherePred(WherePred e, int index, string partialPredicateCall) { - exists(int n, int nGenericParamList, int nLifetime, int nTypeRepr, int nTypeBoundList | - n = 0 and + exists( + int b, int bAstNode, int n, int nGenericParamList, int nLifetime, int nTypeRepr, + int nTypeBoundList + | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nGenericParamList = n + 1 and nLifetime = nGenericParamList + 1 and nTypeRepr = nLifetime + 1 and @@ -790,6 +1358,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getGenericParamList() and partialPredicateCall = "GenericParamList()" @@ -807,16 +1377,41 @@ private module Impl { ) } + private Element getImmediateChildOfArrayExpr(ArrayExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int n, int nExpr, int nAttr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nExpr = n + 1 + max(int i | i = -1 or exists(e.getExpr(i)) | i) and + nAttr = nExpr + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = e.getExpr(index - n) and + partialPredicateCall = "Expr(" + (index - n).toString() + ")" + or + result = e.getAttr(index - nExpr) and + partialPredicateCall = "Attr(" + (index - nExpr).toString() + ")" + ) + ) + } + private Element getImmediateChildOfArrayExprInternal( ArrayExprInternal e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 + max(int i | i = -1 or exists(e.getExpr(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -829,13 +1424,17 @@ private module Impl { private Element getImmediateChildOfArrayTypeRepr( ArrayTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nConstArg, int nElementTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nConstArg, int nElementTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nConstArg = n + 1 and nElementTypeRepr = nConstArg + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getConstArg() and partialPredicateCall = "ConstArg()" or index = nConstArg and @@ -848,30 +1447,48 @@ private module Impl { private Element getImmediateChildOfAsmClobberAbi( AsmClobberAbi e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAsmPiece, int n | + b = 0 and + bAsmPiece = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmPiece(e, i, _)) | i) and + n = bAsmPiece and + ( + none() + or + result = getImmediateChildOfAsmPiece(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfAsmConst(AsmConst e, int index, string partialPredicateCall) { - exists(int n, int nExpr | - n = 0 and + exists(int b, int bAsmOperand, int n, int nExpr | + b = 0 and + bAsmOperand = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmOperand(e, i, _)) | i) and + n = bAsmOperand and nExpr = n + 1 and ( none() or + result = getImmediateChildOfAsmOperand(e, index - b, partialPredicateCall) + or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" ) ) } private Element getImmediateChildOfAsmExpr(AsmExpr e, int index, string partialPredicateCall) { - exists(int n, int nAsmPiece, int nAttr, int nTemplate | - n = 0 and + exists(int b, int bExpr, int n, int nAsmPiece, int nAttr, int nTemplate | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nAsmPiece = n + 1 + max(int i | i = -1 or exists(e.getAsmPiece(i)) | i) and nAttr = nAsmPiece + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nTemplate = nAttr + 1 + max(int i | i = -1 or exists(e.getTemplate(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAsmPiece(index - n) and partialPredicateCall = "AsmPiece(" + (index - n).toString() + ")" or @@ -885,12 +1502,17 @@ private module Impl { } private Element getImmediateChildOfAsmLabel(AsmLabel e, int index, string partialPredicateCall) { - exists(int n, int nBlockExpr | - n = 0 and + exists(int b, int bAsmOperand, int n, int nBlockExpr | + b = 0 and + bAsmOperand = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmOperand(e, i, _)) | i) and + n = bAsmOperand and nBlockExpr = n + 1 and ( none() or + result = getImmediateChildOfAsmOperand(e, index - b, partialPredicateCall) + or index = n and result = e.getBlockExpr() and partialPredicateCall = "BlockExpr()" ) ) @@ -899,13 +1521,17 @@ private module Impl { private Element getImmediateChildOfAsmOperandNamed( AsmOperandNamed e, int index, string partialPredicateCall ) { - exists(int n, int nAsmOperand, int nName | - n = 0 and + exists(int b, int bAsmPiece, int n, int nAsmOperand, int nName | + b = 0 and + bAsmPiece = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmPiece(e, i, _)) | i) and + n = bAsmPiece and nAsmOperand = n + 1 and nName = nAsmOperand + 1 and ( none() or + result = getImmediateChildOfAsmPiece(e, index - b, partialPredicateCall) + or index = n and result = e.getAsmOperand() and partialPredicateCall = "AsmOperand()" or index = nAsmOperand and result = e.getName() and partialPredicateCall = "Name()" @@ -916,12 +1542,16 @@ private module Impl { private Element getImmediateChildOfAsmOptionsList( AsmOptionsList e, int index, string partialPredicateCall ) { - exists(int n, int nAsmOption | - n = 0 and + exists(int b, int bAsmPiece, int n, int nAsmOption | + b = 0 and + bAsmPiece = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmPiece(e, i, _)) | i) and + n = bAsmPiece and nAsmOption = n + 1 + max(int i | i = -1 or exists(e.getAsmOption(i)) | i) and ( none() or + result = getImmediateChildOfAsmPiece(e, index - b, partialPredicateCall) + or result = e.getAsmOption(index - n) and partialPredicateCall = "AsmOption(" + (index - n).toString() + ")" ) @@ -931,14 +1561,19 @@ private module Impl { private Element getImmediateChildOfAsmRegOperand( AsmRegOperand e, int index, string partialPredicateCall ) { - exists(int n, int nAsmDirSpec, int nAsmOperandExpr, int nAsmRegSpec | - n = 0 and + exists(int b, int bAsmOperand, int n, int nAsmDirSpec, int nAsmOperandExpr, int nAsmRegSpec | + b = 0 and + bAsmOperand = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmOperand(e, i, _)) | i) and + n = bAsmOperand and nAsmDirSpec = n + 1 and nAsmOperandExpr = nAsmDirSpec + 1 and nAsmRegSpec = nAsmOperandExpr + 1 and ( none() or + result = getImmediateChildOfAsmOperand(e, index - b, partialPredicateCall) + or index = n and result = e.getAsmDirSpec() and partialPredicateCall = "AsmDirSpec()" or index = nAsmDirSpec and @@ -953,12 +1588,17 @@ private module Impl { } private Element getImmediateChildOfAsmSym(AsmSym e, int index, string partialPredicateCall) { - exists(int n, int nPath | - n = 0 and + exists(int b, int bAsmOperand, int n, int nPath | + b = 0 and + bAsmOperand = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAsmOperand(e, i, _)) | i) and + n = bAsmOperand and nPath = n + 1 and ( none() or + result = getImmediateChildOfAsmOperand(e, index - b, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" ) ) @@ -968,10 +1608,13 @@ private module Impl { AssocTypeArg e, int index, string partialPredicateCall ) { exists( - int n, int nConstArg, int nGenericArgList, int nIdentifier, int nParamList, int nRetType, - int nReturnTypeSyntax, int nTypeRepr, int nTypeBoundList + int b, int bGenericArg, int n, int nConstArg, int nGenericArgList, int nIdentifier, + int nParamList, int nRetType, int nReturnTypeSyntax, int nTypeRepr, int nTypeBoundList | - n = 0 and + b = 0 and + bGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericArg(e, i, _)) | i) and + n = bGenericArg and nConstArg = n + 1 and nGenericArgList = nConstArg + 1 and nIdentifier = nGenericArgList + 1 and @@ -983,6 +1626,8 @@ private module Impl { ( none() or + result = getImmediateChildOfGenericArg(e, index - b, partialPredicateCall) + or index = n and result = e.getConstArg() and partialPredicateCall = "ConstArg()" or index = nConstArg and @@ -1013,13 +1658,17 @@ private module Impl { } private Element getImmediateChildOfAwaitExpr(AwaitExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1029,13 +1678,17 @@ private module Impl { } private Element getImmediateChildOfBecomeExpr(BecomeExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1045,14 +1698,18 @@ private module Impl { } private Element getImmediateChildOfBinaryExpr(BinaryExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nLhs, int nRhs | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nLhs, int nRhs | + 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 nLhs = nAttr + 1 and nRhs = nLhs + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1064,26 +1721,34 @@ private module Impl { } private Element getImmediateChildOfBoxPat(BoxPat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nPat = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getPat() and partialPredicateCall = "Pat()" ) ) } private Element getImmediateChildOfBreakExpr(BreakExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr, int nLifetime | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nExpr, int nLifetime | + 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 nExpr = nAttr + 1 and nLifetime = nExpr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1094,15 +1759,41 @@ 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 n, int nAttr, int nExpr, int nTypeRepr | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nExpr, int nTypeRepr | + 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 nExpr = nAttr + 1 and nTypeRepr = nExpr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1116,22 +1807,23 @@ private module Impl { private Element getImmediateChildOfClosureExpr( ClosureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nParamList, int nAttr, int nBody, int nClosureBinder, int nRetType | - n = 0 and - nParamList = n + 1 and - nAttr = nParamList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nBody = nAttr + 1 and + 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 + 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 nRetType = nClosureBinder + 1 and ( none() or - index = n and result = e.getParamList() and partialPredicateCall = "ParamList()" + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nParamList) and - partialPredicateCall = "Attr(" + (index - nParamList).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 @@ -1141,16 +1833,30 @@ private module Impl { } private Element getImmediateChildOfComment(Comment e, int index, string partialPredicateCall) { - none() + exists(int b, int bToken, int n | + b = 0 and + bToken = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfToken(e, i, _)) | i) and + n = bToken and + ( + none() + or + result = getImmediateChildOfToken(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfConstArg(ConstArg e, int index, string partialPredicateCall) { - exists(int n, int nExpr | - n = 0 and + exists(int b, int bGenericArg, int n, int nExpr | + b = 0 and + bGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericArg(e, i, _)) | i) and + n = bGenericArg and nExpr = n + 1 and ( none() or + result = getImmediateChildOfGenericArg(e, index - b, partialPredicateCall) + or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" ) ) @@ -1159,20 +1865,27 @@ private module Impl { private Element getImmediateChildOfConstBlockPat( ConstBlockPat e, int index, string partialPredicateCall ) { - exists(int n, int nBlockExpr | - n = 0 and + exists(int b, int bPat, int n, int nBlockExpr | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nBlockExpr = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getBlockExpr() and partialPredicateCall = "BlockExpr()" ) ) } private Element getImmediateChildOfConstParam(ConstParam e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nDefaultVal, int nName, int nTypeRepr | - n = 0 and + exists(int b, int bGenericParam, int n, int nAttr, int nDefaultVal, int nName, int nTypeRepr | + b = 0 and + bGenericParam = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericParam(e, i, _)) | i) and + n = bGenericParam and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nDefaultVal = nAttr + 1 and nName = nDefaultVal + 1 and @@ -1180,6 +1893,8 @@ private module Impl { ( none() or + result = getImmediateChildOfGenericParam(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1195,13 +1910,17 @@ private module Impl { private Element getImmediateChildOfContinueExpr( ContinueExpr e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nLifetime | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nLifetime | + 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 nLifetime = nAttr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1213,38 +1932,50 @@ private module Impl { private Element getImmediateChildOfDynTraitTypeRepr( DynTraitTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeBoundList | - n = 0 and + exists(int b, int bTypeRepr, int n, int nTypeBoundList | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nTypeBoundList = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" ) ) } private Element getImmediateChildOfExprStmt(ExprStmt e, int index, string partialPredicateCall) { - exists(int n, int nExpr | - n = 0 and + exists(int b, int bStmt, int n, int nExpr | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nExpr = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getExpr() and partialPredicateCall = "Expr()" ) ) } private Element getImmediateChildOfFieldExpr(FieldExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nContainer, int nIdentifier | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nContainer, int nIdentifier | + 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 nContainer = nAttr + 1 and nIdentifier = nContainer + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1258,14 +1989,18 @@ private module Impl { private Element getImmediateChildOfFnPtrTypeRepr( FnPtrTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nAbi, int nParamList, int nRetType | - n = 0 and + exists(int b, int bTypeRepr, int n, int nAbi, int nParamList, int nRetType | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nAbi = n + 1 and nParamList = nAbi + 1 and nRetType = nParamList + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getAbi() and partialPredicateCall = "Abi()" or index = nAbi and result = e.getParamList() and partialPredicateCall = "ParamList()" @@ -1278,13 +2013,17 @@ private module Impl { private Element getImmediateChildOfForTypeRepr( ForTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nGenericParamList, int nTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nGenericParamList, int nTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nGenericParamList = n + 1 and nTypeRepr = nGenericParamList + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getGenericParamList() and partialPredicateCall = "GenericParamList()" @@ -1299,8 +2038,10 @@ private module Impl { private Element getImmediateChildOfFormatArgsExpr( FormatArgsExpr e, int index, string partialPredicateCall ) { - exists(int n, int nArg, int nAttr, int nTemplate, int nFormat | - n = 0 and + exists(int b, int bExpr, int n, int nArg, int nAttr, int nTemplate, int nFormat | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nArg = n + 1 + max(int i | i = -1 or exists(e.getArg(i)) | i) and nAttr = nArg + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nTemplate = nAttr + 1 and @@ -1308,6 +2049,8 @@ private module Impl { ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getArg(index - n) and partialPredicateCall = "Arg(" + (index - n).toString() + ")" or @@ -1323,14 +2066,18 @@ private module Impl { } private Element getImmediateChildOfIdentPat(IdentPat e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nName, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nAttr, int nName, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nName = nAttr + 1 and nPat = nName + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1342,8 +2089,10 @@ private module Impl { } private Element getImmediateChildOfIfExpr(IfExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nCondition, int nElse, int nThen | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nCondition, int nElse, int nThen | + 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 nCondition = nAttr + 1 and nElse = nCondition + 1 and @@ -1351,6 +2100,8 @@ private module Impl { ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1366,26 +2117,34 @@ private module Impl { private Element getImmediateChildOfImplTraitTypeRepr( ImplTraitTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeBoundList | - n = 0 and + exists(int b, int bTypeRepr, int n, int nTypeBoundList | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nTypeBoundList = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" ) ) } private Element getImmediateChildOfIndexExpr(IndexExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nBase, int nIndex | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nBase, int nIndex | + 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 nBase = nAttr + 1 and nIndex = nBase + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1399,18 +2158,71 @@ private module Impl { private Element getImmediateChildOfInferTypeRepr( InferTypeRepr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bTypeRepr, int n | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and + ( + none() + or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfItem(Item e, int index, string partialPredicateCall) { + exists(int b, int bStmt, int bAddressable, int n, int nAttributeMacroExpansion | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + bAddressable = + bStmt + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and + n = bAddressable and + nAttributeMacroExpansion = n + 1 and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfAddressable(e, index - bStmt, partialPredicateCall) + or + index = n and + result = e.getAttributeMacroExpansion() and + partialPredicateCall = "AttributeMacroExpansion()" + ) + ) + } + + private Element getImmediateChildOfLabelableExpr( + LabelableExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nLabel | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nLabel = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getLabel() and partialPredicateCall = "Label()" + ) + ) } private Element getImmediateChildOfLetExpr(LetExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nScrutinee, int nPat | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nScrutinee, int nPat | + 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 nScrutinee = nAttr + 1 and nPat = nScrutinee + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1422,8 +2234,12 @@ private module Impl { } private Element getImmediateChildOfLetStmt(LetStmt e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nInitializer, int nLetElse, int nPat, int nTypeRepr | - n = 0 and + exists( + int b, int bStmt, int n, int nAttr, int nInitializer, int nLetElse, int nPat, int nTypeRepr + | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nInitializer = nAttr + 1 and nLetElse = nInitializer + 1 and @@ -1432,6 +2248,8 @@ private module Impl { ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1447,18 +2265,33 @@ private module Impl { } private Element getImmediateChildOfLifetime(Lifetime e, int index, string partialPredicateCall) { - none() + exists(int b, int bUseBoundGenericArg, int n | + b = 0 and + bUseBoundGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUseBoundGenericArg(e, i, _)) | i) and + n = bUseBoundGenericArg and + ( + none() + or + result = getImmediateChildOfUseBoundGenericArg(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfLifetimeArg( LifetimeArg e, int index, string partialPredicateCall ) { - exists(int n, int nLifetime | - n = 0 and + exists(int b, int bGenericArg, int n, int nLifetime | + b = 0 and + bGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericArg(e, i, _)) | i) and + n = bGenericArg and nLifetime = n + 1 and ( none() or + result = getImmediateChildOfGenericArg(e, index - b, partialPredicateCall) + or index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" ) ) @@ -1467,14 +2300,19 @@ private module Impl { private Element getImmediateChildOfLifetimeParam( LifetimeParam e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nLifetime, int nTypeBoundList | - n = 0 and + exists(int b, int bGenericParam, int n, int nAttr, int nLifetime, int nTypeBoundList | + b = 0 and + bGenericParam = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericParam(e, i, _)) | i) and + n = bGenericParam and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nLifetime = nAttr + 1 and nTypeBoundList = nLifetime + 1 and ( none() or + result = getImmediateChildOfGenericParam(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1490,12 +2328,16 @@ private module Impl { private Element getImmediateChildOfLiteralExpr( LiteralExpr e, int index, string partialPredicateCall ) { - exists(int n, int nAttr | - n = 0 and + exists(int b, int bExpr, int n, int nAttr | + 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 ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" ) @@ -1503,12 +2345,16 @@ private module Impl { } private Element getImmediateChildOfLiteralPat(LiteralPat e, int index, string partialPredicateCall) { - exists(int n, int nLiteral | - n = 0 and + exists(int b, int bPat, int n, int nLiteral | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nLiteral = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getLiteral() and partialPredicateCall = "Literal()" ) ) @@ -1517,13 +2363,17 @@ private module Impl { private Element getImmediateChildOfMacroBlockExpr( MacroBlockExpr e, int index, string partialPredicateCall ) { - exists(int n, int nTailExpr, int nStatement | - n = 0 and + exists(int b, int bExpr, int n, int nTailExpr, int nStatement | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nTailExpr = n + 1 and nStatement = nTailExpr + 1 + max(int i | i = -1 or exists(e.getStatement(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getTailExpr() and partialPredicateCall = "TailExpr()" or result = e.getStatement(index - nTailExpr) and @@ -1533,24 +2383,32 @@ private module Impl { } private Element getImmediateChildOfMacroExpr(MacroExpr e, int index, string partialPredicateCall) { - exists(int n, int nMacroCall | - n = 0 and + exists(int b, int bExpr, int n, int nMacroCall | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nMacroCall = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getMacroCall() and partialPredicateCall = "MacroCall()" ) ) } private Element getImmediateChildOfMacroPat(MacroPat e, int index, string partialPredicateCall) { - exists(int n, int nMacroCall | - n = 0 and + exists(int b, int bPat, int n, int nMacroCall | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nMacroCall = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getMacroCall() and partialPredicateCall = "MacroCall()" ) ) @@ -1559,26 +2417,34 @@ private module Impl { private Element getImmediateChildOfMacroTypeRepr( MacroTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nMacroCall | - n = 0 and + exists(int b, int bTypeRepr, int n, int nMacroCall | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nMacroCall = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getMacroCall() and partialPredicateCall = "MacroCall()" ) ) } private Element getImmediateChildOfMatchExpr(MatchExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nScrutinee, int nMatchArmList | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nScrutinee, int nMatchArmList | + 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 nScrutinee = nAttr + 1 and nMatchArmList = nScrutinee + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1592,26 +2458,49 @@ private module Impl { } private Element getImmediateChildOfNameRef(NameRef e, int index, string partialPredicateCall) { - none() + exists(int b, int bUseBoundGenericArg, int n | + b = 0 and + bUseBoundGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUseBoundGenericArg(e, i, _)) | i) and + n = bUseBoundGenericArg and + ( + none() + or + result = getImmediateChildOfUseBoundGenericArg(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfNeverTypeRepr( NeverTypeRepr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bTypeRepr, int n | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and + ( + none() + or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOffsetOfExpr( OffsetOfExpr e, int index, string partialPredicateCall ) { - exists(int n, int nAttr, int nField, int nTypeRepr | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nField, int nTypeRepr | + 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 nField = nAttr + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and nTypeRepr = nField + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1624,12 +2513,16 @@ private module Impl { } private Element getImmediateChildOfOrPat(OrPat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nPat = n + 1 + max(int i | i = -1 or exists(e.getPat(i)) | i) and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or result = e.getPat(index - n) and partialPredicateCall = "Pat(" + (index - n).toString() + ")" ) @@ -1637,32 +2530,33 @@ private module Impl { } private Element getImmediateChildOfParam(Param e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nTypeRepr, int nPat | - n = 0 and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nTypeRepr = nAttr + 1 and - nPat = nTypeRepr + 1 and + exists(int b, int bParamBase, int n, int nPat | + b = 0 and + bParamBase = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfParamBase(e, i, _)) | i) and + n = bParamBase and + nPat = n + 1 and ( none() or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + result = getImmediateChildOfParamBase(e, index - b, partialPredicateCall) or - index = nTypeRepr and result = e.getPat() and partialPredicateCall = "Pat()" + index = n and result = e.getPat() and partialPredicateCall = "Pat()" ) ) } private Element getImmediateChildOfParenExpr(ParenExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1672,12 +2566,16 @@ private module Impl { } private Element getImmediateChildOfParenPat(ParenPat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nPat = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getPat() and partialPredicateCall = "Pat()" ) ) @@ -1686,39 +2584,85 @@ private module Impl { private Element getImmediateChildOfParenTypeRepr( ParenTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) } + private Element getImmediateChildOfPathAstNode( + PathAstNode e, int index, string partialPredicateCall + ) { + exists(int b, int bResolvable, int n, int nPath | + b = 0 and + bResolvable = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and + nPath = n + 1 and + ( + none() + or + result = getImmediateChildOfResolvable(e, index - b, partialPredicateCall) + or + index = n and result = e.getPath() and partialPredicateCall = "Path()" + ) + ) + } + + private Element getImmediateChildOfPathExprBase( + PathExprBase e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfPathTypeRepr( PathTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nPath | - n = 0 and + exists(int b, int bTypeRepr, int n, int nPath | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nPath = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getPath() and partialPredicateCall = "Path()" ) ) } private Element getImmediateChildOfPrefixExpr(PrefixExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1730,26 +2674,34 @@ private module Impl { private Element getImmediateChildOfPtrTypeRepr( PtrTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) } private Element getImmediateChildOfRangeExpr(RangeExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nEnd, int nStart | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nEnd, int nStart | + 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 nEnd = nAttr + 1 and nStart = nEnd + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1761,13 +2713,17 @@ private module Impl { } private Element getImmediateChildOfRangePat(RangePat e, int index, string partialPredicateCall) { - exists(int n, int nEnd, int nStart | - n = 0 and + exists(int b, int bPat, int n, int nEnd, int nStart | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nEnd = n + 1 and nStart = nEnd + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getEnd() and partialPredicateCall = "End()" or index = nEnd and result = e.getStart() and partialPredicateCall = "Start()" @@ -1776,13 +2732,17 @@ private module Impl { } private Element getImmediateChildOfRefExpr(RefExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1792,12 +2752,16 @@ private module Impl { } private Element getImmediateChildOfRefPat(RefPat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nPat = n + 1 and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or index = n and result = e.getPat() and partialPredicateCall = "Pat()" ) ) @@ -1806,13 +2770,17 @@ private module Impl { private Element getImmediateChildOfRefTypeRepr( RefTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nLifetime, int nTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nLifetime, int nTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nLifetime = n + 1 and nTypeRepr = nLifetime + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" or index = nLifetime and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" @@ -1821,12 +2789,16 @@ private module Impl { } private Element getImmediateChildOfRestPat(RestPat e, int index, string partialPredicateCall) { - exists(int n, int nAttr | - n = 0 and + exists(int b, int bPat, int n, int nAttr | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" ) @@ -1834,13 +2806,17 @@ private module Impl { } private Element getImmediateChildOfReturnExpr(ReturnExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1850,21 +2826,18 @@ private module Impl { } private Element getImmediateChildOfSelfParam(SelfParam e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nTypeRepr, int nLifetime, int nName | - n = 0 and - nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nTypeRepr = nAttr + 1 and - nLifetime = nTypeRepr + 1 and + exists(int b, int bParamBase, int n, int nLifetime, int nName | + b = 0 and + bParamBase = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfParamBase(e, i, _)) | i) and + n = bParamBase and + nLifetime = n + 1 and nName = nLifetime + 1 and ( none() or - result = e.getAttr(index - n) and - partialPredicateCall = "Attr(" + (index - n).toString() + ")" - or - index = nAttr and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + result = getImmediateChildOfParamBase(e, index - b, partialPredicateCall) or - index = nTypeRepr and result = e.getLifetime() and partialPredicateCall = "Lifetime()" + index = n and result = e.getLifetime() and partialPredicateCall = "Lifetime()" or index = nLifetime and result = e.getName() and partialPredicateCall = "Name()" ) @@ -1872,12 +2845,16 @@ private module Impl { } private Element getImmediateChildOfSlicePat(SlicePat e, int index, string partialPredicateCall) { - exists(int n, int nPat | - n = 0 and + exists(int b, int bPat, int n, int nPat | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nPat = n + 1 + max(int i | i = -1 or exists(e.getPat(i)) | i) and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or result = e.getPat(index - n) and partialPredicateCall = "Pat(" + (index - n).toString() + ")" ) @@ -1887,12 +2864,16 @@ private module Impl { private Element getImmediateChildOfSliceTypeRepr( SliceTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bTypeRepr, int n, int nTypeRepr | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) @@ -1901,12 +2882,16 @@ private module Impl { private Element getImmediateChildOfStructFieldList( StructFieldList e, int index, string partialPredicateCall ) { - exists(int n, int nField | - n = 0 and + exists(int b, int bFieldList, int n, int nField | + b = 0 and + bFieldList = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFieldList(e, i, _)) | i) and + n = bFieldList and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or + result = getImmediateChildOfFieldList(e, index - b, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" ) @@ -1914,13 +2899,17 @@ private module Impl { } private Element getImmediateChildOfTryExpr(TryExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1930,13 +2919,17 @@ private module Impl { } private Element getImmediateChildOfTupleExpr(TupleExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nField | - n = 0 and + exists(int b, int bExpr, int n, int nAttr, int nField | + 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 nField = nAttr + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -1949,12 +2942,16 @@ private module Impl { private Element getImmediateChildOfTupleFieldList( TupleFieldList e, int index, string partialPredicateCall ) { - exists(int n, int nField | - n = 0 and + exists(int b, int bFieldList, int n, int nField | + b = 0 and + bFieldList = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFieldList(e, i, _)) | i) and + n = bFieldList and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or + result = getImmediateChildOfFieldList(e, index - b, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" ) @@ -1962,12 +2959,16 @@ private module Impl { } private Element getImmediateChildOfTuplePat(TuplePat e, int index, string partialPredicateCall) { - exists(int n, int nField | - n = 0 and + exists(int b, int bPat, int n, int nField | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" ) @@ -1977,12 +2978,16 @@ private module Impl { private Element getImmediateChildOfTupleTypeRepr( TupleTypeRepr e, int index, string partialPredicateCall ) { - exists(int n, int nField | - n = 0 and + exists(int b, int bTypeRepr, int n, int nField | + b = 0 and + bTypeRepr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeRepr(e, i, _)) | i) and + n = bTypeRepr and nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or + result = getImmediateChildOfTypeRepr(e, index - b, partialPredicateCall) + or result = e.getField(index - n) and partialPredicateCall = "Field(" + (index - n).toString() + ")" ) @@ -1990,20 +2995,30 @@ private module Impl { } private Element getImmediateChildOfTypeArg(TypeArg e, int index, string partialPredicateCall) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bGenericArg, int n, int nTypeRepr | + b = 0 and + bGenericArg = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericArg(e, i, _)) | i) and + n = bGenericArg and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfGenericArg(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) } private Element getImmediateChildOfTypeParam(TypeParam e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nDefaultType, int nName, int nTypeBoundList | - n = 0 and + exists( + int b, int bGenericParam, int n, int nAttr, int nDefaultType, int nName, int nTypeBoundList + | + b = 0 and + bGenericParam = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericParam(e, i, _)) | i) and + n = bGenericParam and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nDefaultType = nAttr + 1 and nName = nDefaultType + 1 and @@ -2011,6 +3026,8 @@ private module Impl { ( none() or + result = getImmediateChildOfGenericParam(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -2026,12 +3043,16 @@ private module Impl { private Element getImmediateChildOfUnderscoreExpr( UnderscoreExpr e, int index, string partialPredicateCall ) { - exists(int n, int nAttr | - n = 0 and + exists(int b, int bExpr, int n, int nAttr | + 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 ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" ) @@ -2039,8 +3060,14 @@ private module Impl { } private Element getImmediateChildOfVariant(Variant e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nDiscriminant, int nFieldList, int nName, int nVisibility | - n = 0 and + exists( + int b, int bAddressable, int n, int nAttr, int nDiscriminant, int nFieldList, int nName, + int nVisibility + | + b = 0 and + bAddressable = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and + n = bAddressable and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nDiscriminant = nAttr + 1 and nFieldList = nDiscriminant + 1 and @@ -2049,6 +3076,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAddressable(e, index - b, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -2066,17 +3095,30 @@ private module Impl { private Element getImmediateChildOfWildcardPat( WildcardPat e, int index, string partialPredicateCall ) { - none() + exists(int b, int bPat, int n | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + n = bPat and + ( + none() + or + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfYeetExpr(YeetExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -2086,13 +3128,17 @@ private module Impl { } private Element getImmediateChildOfYieldExpr(YieldExpr e, int index, string partialPredicateCall) { - exists(int n, int nAttr, int nExpr | - n = 0 and + exists(int b, int bExpr, int n, 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 nAttr = n + 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 result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -2101,44 +3147,54 @@ private module Impl { ) } - private Element getImmediateChildOfArrayListExpr( - ArrayListExpr e, int index, string partialPredicateCall - ) { - exists(int n, int nExpr, int nAttr | - n = 0 and - nExpr = n + 1 + max(int i | i = -1 or exists(e.getExpr(i)) | i) and - nAttr = nExpr + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + private Element getImmediateChildOfAdt(Adt e, int index, string partialPredicateCall) { + exists(int b, int bItem, int n, int nDeriveMacroExpansion | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nDeriveMacroExpansion = + n + 1 + max(int i | i = -1 or exists(e.getDeriveMacroExpansion(i)) | i) and ( none() or - result = e.getExpr(index - n) and - partialPredicateCall = "Expr(" + (index - n).toString() + ")" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nExpr) and - partialPredicateCall = "Attr(" + (index - nExpr).toString() + ")" + result = e.getDeriveMacroExpansion(index - n) and + partialPredicateCall = "DeriveMacroExpansion(" + (index - n).toString() + ")" ) ) } - private Element getImmediateChildOfArrayRepeatExpr( - ArrayRepeatExpr e, int index, string partialPredicateCall - ) { - exists(int n, int nExpr, int nAttr, int nRepeatOperand, int nRepeatLength | - n = 0 and - nExpr = n + 1 + max(int i | i = -1 or exists(e.getExpr(i)) | i) and - nAttr = nExpr + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nRepeatOperand = nAttr + 1 and - nRepeatLength = nRepeatOperand + 1 and + private Element getImmediateChildOfArrayListExpr( + ArrayListExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bArrayExpr, int n | + b = 0 and + bArrayExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArrayExpr(e, i, _)) | i) and + n = bArrayExpr and ( none() or - result = e.getExpr(index - n) and - partialPredicateCall = "Expr(" + (index - n).toString() + ")" + result = getImmediateChildOfArrayExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfArrayRepeatExpr( + ArrayRepeatExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bArrayExpr, int n, int nRepeatOperand, int nRepeatLength | + b = 0 and + bArrayExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArrayExpr(e, i, _)) | i) and + n = bArrayExpr and + nRepeatOperand = n + 1 and + nRepeatLength = nRepeatOperand + 1 and + ( + none() or - result = e.getAttr(index - nExpr) and - partialPredicateCall = "Attr(" + (index - nExpr).toString() + ")" + result = getImmediateChildOfArrayExpr(e, index - b, partialPredicateCall) or - index = nAttr and result = e.getRepeatOperand() and partialPredicateCall = "RepeatOperand()" + index = n and result = e.getRepeatOperand() and partialPredicateCall = "RepeatOperand()" or index = nRepeatOperand and result = e.getRepeatLength() and @@ -2148,18 +3204,20 @@ private module Impl { } private Element getImmediateChildOfBlockExpr(BlockExpr e, int index, string partialPredicateCall) { - exists(int n, int nLabel, int nAttr, int nStmtList | - n = 0 and - nLabel = n + 1 and - nAttr = nLabel + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + exists(int b, int bLabelableExpr, int n, int nAttr, int nStmtList | + b = 0 and + bLabelableExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabelableExpr(e, i, _)) | i) and + n = bLabelableExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nStmtList = nAttr + 1 and ( none() or - index = n and result = e.getLabel() and partialPredicateCall = "Label()" + result = getImmediateChildOfLabelableExpr(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nLabel) and - partialPredicateCall = "Attr(" + (index - nLabel).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getStmtList() and partialPredicateCall = "StmtList()" ) @@ -2167,20 +3225,63 @@ private module Impl { } private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { - exists(int n, int nArgList, int nAttr, int nFunction | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nFunction = nAttr + 1 and + exists(int b, int bCallExprBase, int n, int nFunction | + b = 0 and + bCallExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and + n = bCallExprBase and + nFunction = n + 1 and ( none() or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + index = n and result = e.getFunction() and partialPredicateCall = "Function()" + ) + ) + } + + private Element getImmediateChildOfConst(Const e, int index, string partialPredicateCall) { + exists( + int b, int bAssocItem, int bItem, int n, int nAttr, int nBody, int nGenericParamList, + int nName, int nTypeRepr, int nVisibility, int nWhereClause + | + b = 0 and + bAssocItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAssocItem(e, i, _)) | i) and + bItem = bAssocItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nBody = nAttr + 1 and + nGenericParamList = nBody + 1 and + nName = nGenericParamList + 1 and + nTypeRepr = nName + 1 and + nVisibility = nTypeRepr + 1 and + nWhereClause = nVisibility + 1 and + ( + none() + or + result = getImmediateChildOfAssocItem(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfItem(e, index - bAssocItem, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" + or + index = nBody and + result = e.getGenericParamList() and + partialPredicateCall = "GenericParamList()" + or + index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" + or + index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + or + index = nTypeRepr and result = e.getVisibility() and partialPredicateCall = "Visibility()" or - index = nAttr and result = e.getFunction() and partialPredicateCall = "Function()" + index = nVisibility and + result = e.getWhereClause() and + partialPredicateCall = "WhereClause()" ) ) } @@ -2188,20 +3289,19 @@ private module Impl { private Element getImmediateChildOfExternBlock( ExternBlock e, int index, string partialPredicateCall ) { - exists(int n, int nAttributeMacroExpansion, int nAbi, int nAttr, int nExternItemList | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAbi = nAttributeMacroExpansion + 1 and + exists(int b, int bItem, int n, int nAbi, int nAttr, int nExternItemList | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAbi = n + 1 and nAttr = nAbi + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExternItemList = nAttr + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - index = nAttributeMacroExpansion and result = e.getAbi() and partialPredicateCall = "Abi()" + index = n and result = e.getAbi() and partialPredicateCall = "Abi()" or result = e.getAttr(index - nAbi) and partialPredicateCall = "Attr(" + (index - nAbi).toString() + ")" @@ -2216,24 +3316,21 @@ private module Impl { private Element getImmediateChildOfExternCrate( ExternCrate e, int index, string partialPredicateCall ) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nIdentifier, int nRename, int nVisibility - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + exists(int b, int bItem, int n, int nAttr, int nIdentifier, int nRename, int nVisibility | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nIdentifier = nAttr + 1 and nRename = nIdentifier + 1 and nVisibility = nRename + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getIdentifier() and partialPredicateCall = "Identifier()" or @@ -2247,17 +3344,80 @@ private module Impl { private Element getImmediateChildOfFormatTemplateVariableAccess( FormatTemplateVariableAccess e, int index, string partialPredicateCall ) { - none() + exists(int b, int bPathExprBase, int n | + b = 0 and + bPathExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathExprBase(e, i, _)) | i) and + n = bPathExprBase and + ( + none() + or + result = getImmediateChildOfPathExprBase(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfFunction(Function e, int index, string partialPredicateCall) { + exists( + 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 + bCallable = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and + n = bCallable and + nAbi = n + 1 and + nBody = nAbi + 1 and + nGenericParamList = nBody + 1 and + nName = nGenericParamList + 1 and + nRetType = nName + 1 and + nVisibility = nRetType + 1 and + nWhereClause = nVisibility + 1 and + ( + none() + or + result = getImmediateChildOfAssocItem(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfExternItem(e, index - bAssocItem, partialPredicateCall) + or + result = getImmediateChildOfItem(e, index - bExternItem, partialPredicateCall) + or + result = getImmediateChildOfCallable(e, index - bItem, partialPredicateCall) + or + index = n and result = e.getAbi() and partialPredicateCall = "Abi()" + or + index = nAbi and result = e.getBody() and partialPredicateCall = "Body()" + or + index = nBody and + result = e.getGenericParamList() and + partialPredicateCall = "GenericParamList()" + or + index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" + or + index = nName and result = e.getRetType() and partialPredicateCall = "RetType()" + or + index = nRetType and result = e.getVisibility() and partialPredicateCall = "Visibility()" + or + index = nVisibility and + result = e.getWhereClause() and + partialPredicateCall = "WhereClause()" + ) + ) } private Element getImmediateChildOfImpl(Impl e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nAssocItemList, int nAttr, int nGenericParamList, - int nSelfTy, int nTrait, int nVisibility, int nWhereClause + int b, int bItem, int n, int nAssocItemList, int nAttr, int nGenericParamList, int nSelfTy, + int nTrait, int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAssocItemList = nAttributeMacroExpansion + 1 and + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAssocItemList = n + 1 and nAttr = nAssocItemList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nSelfTy = nGenericParamList + 1 and @@ -2267,13 +3427,9 @@ private module Impl { ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - index = nAttributeMacroExpansion and - result = e.getAssocItemList() and - partialPredicateCall = "AssocItemList()" + index = n and result = e.getAssocItemList() and partialPredicateCall = "AssocItemList()" or result = e.getAttr(index - nAssocItemList) and partialPredicateCall = "Attr(" + (index - nAssocItemList).toString() + ")" @@ -2295,14 +3451,69 @@ private module Impl { ) } - private Element getImmediateChildOfMacroDef(MacroDef e, int index, string partialPredicateCall) { + private Element getImmediateChildOfLoopingExpr( + LoopingExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bLabelableExpr, int n, int nLoopBody | + b = 0 and + bLabelableExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabelableExpr(e, i, _)) | i) and + n = bLabelableExpr and + nLoopBody = n + 1 and + ( + none() + or + result = getImmediateChildOfLabelableExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" + ) + ) + } + + private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nArgs, int nAttr, int nBody, int nName, - int nVisibility + int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nPath, + int nTokenTree, int nMacroCallExpansion | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nArgs = nAttributeMacroExpansion + 1 and + 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 + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nPath = nAttr + 1 and + nTokenTree = nPath + 1 and + nMacroCallExpansion = nTokenTree + 1 and + ( + none() + or + result = getImmediateChildOfAssocItem(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfExternItem(e, index - bAssocItem, partialPredicateCall) + or + result = getImmediateChildOfItem(e, index - bExternItem, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" + or + 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.getMacroCallExpansion() and + partialPredicateCall = "MacroCallExpansion()" + ) + ) + } + + private Element getImmediateChildOfMacroDef(MacroDef e, int index, string partialPredicateCall) { + exists(int b, int bItem, int n, int nArgs, int nAttr, int nBody, int nName, int nVisibility | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nArgs = n + 1 and nAttr = nArgs + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nBody = nAttr + 1 and nName = nBody + 1 and @@ -2310,13 +3521,9 @@ private module Impl { ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - index = nAttributeMacroExpansion and - result = e.getArgs() and - partialPredicateCall = "Args()" + index = n and result = e.getArgs() and partialPredicateCall = "Args()" or result = e.getAttr(index - nArgs) and partialPredicateCall = "Attr(" + (index - nArgs).toString() + ")" @@ -2331,24 +3538,21 @@ private module Impl { } private Element getImmediateChildOfMacroRules(MacroRules e, int index, string partialPredicateCall) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nName, int nTokenTree, int nVisibility - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + exists(int b, int bItem, int n, int nAttr, int nName, int nTokenTree, int nVisibility | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nName = nAttr + 1 and nTokenTree = nName + 1 and nVisibility = nTokenTree + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getName() and partialPredicateCall = "Name()" or @@ -2362,24 +3566,28 @@ private module Impl { private Element getImmediateChildOfMethodCallExpr( MethodCallExpr e, int index, string partialPredicateCall ) { - exists(int n, int nArgList, int nAttr, int nGenericArgList, int nIdentifier, int nReceiver | - n = 0 and - nArgList = n + 1 and - nAttr = nArgList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nGenericArgList = nAttr + 1 and + exists( + int b, int bCallExprBase, int bResolvable, int n, int nGenericArgList, int nIdentifier, + int nReceiver + | + b = 0 and + bCallExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallExprBase(e, i, _)) | i) and + bResolvable = + bCallExprBase + 1 + + max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and + n = bResolvable and + nGenericArgList = n + 1 and nIdentifier = nGenericArgList + 1 and nReceiver = nIdentifier + 1 and ( none() or - index = n and result = e.getArgList() and partialPredicateCall = "ArgList()" + result = getImmediateChildOfCallExprBase(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nArgList) and - partialPredicateCall = "Attr(" + (index - nArgList).toString() + ")" + result = getImmediateChildOfResolvable(e, index - bCallExprBase, partialPredicateCall) or - index = nAttr and - result = e.getGenericArgList() and - partialPredicateCall = "GenericArgList()" + index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or index = nGenericArgList and result = e.getIdentifier() and @@ -2391,24 +3599,21 @@ private module Impl { } private Element getImmediateChildOfModule(Module e, int index, string partialPredicateCall) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nItemList, int nName, int nVisibility - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + exists(int b, int bItem, int n, int nAttr, int nItemList, int nName, int nVisibility | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nItemList = nAttr + 1 and nName = nItemList + 1 and nVisibility = nName + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getItemList() and partialPredicateCall = "ItemList()" or @@ -2420,233 +3625,161 @@ private module Impl { } private Element getImmediateChildOfPathExpr(PathExpr e, int index, string partialPredicateCall) { - exists(int n, int nPath, int nAttr | - n = 0 and - nPath = n + 1 and - nAttr = nPath + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - ( - none() - or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - or - result = e.getAttr(index - nPath) and - partialPredicateCall = "Attr(" + (index - nPath).toString() + ")" - ) - ) - } - - private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { - exists(int n, int nPath | - n = 0 and - nPath = n + 1 and + exists(int b, int bPathExprBase, int bPathAstNode, int n, int nAttr | + b = 0 and + bPathExprBase = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathExprBase(e, i, _)) | i) and + bPathAstNode = + bPathExprBase + 1 + + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and ( none() or - index = n and result = e.getPath() and partialPredicateCall = "Path()" - ) - ) - } - - private Element getImmediateChildOfStructExpr(StructExpr e, int index, string partialPredicateCall) { - exists(int n, int nPath, int nStructExprFieldList | - n = 0 and - nPath = n + 1 and - nStructExprFieldList = nPath + 1 and - ( - none() + result = getImmediateChildOfPathExprBase(e, index - b, partialPredicateCall) or - index = n and result = e.getPath() and partialPredicateCall = "Path()" + result = getImmediateChildOfPathAstNode(e, index - bPathExprBase, partialPredicateCall) or - index = nPath and - result = e.getStructExprFieldList() and - partialPredicateCall = "StructExprFieldList()" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" ) ) } - private Element getImmediateChildOfStructPat(StructPat e, int index, string partialPredicateCall) { - exists(int n, int nPath, int nStructPatFieldList | - n = 0 and - nPath = n + 1 and - nStructPatFieldList = nPath + 1 and + private Element getImmediateChildOfPathPat(PathPat e, int index, string partialPredicateCall) { + exists(int b, int bPat, int bPathAstNode, int n | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and ( none() or - index = n and result = e.getPath() and partialPredicateCall = "Path()" + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or - index = nPath and - result = e.getStructPatFieldList() and - partialPredicateCall = "StructPatFieldList()" + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) ) ) } - private Element getImmediateChildOfTrait(Trait e, int index, string partialPredicateCall) { + private Element getImmediateChildOfStatic(Static e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nAssocItemList, int nAttr, int nGenericParamList, - int nName, int nTypeBoundList, int nVisibility, int nWhereClause + int b, int bExternItem, int bItem, int n, int nAttr, int nBody, int nName, int nTypeRepr, + int nVisibility | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAssocItemList = nAttributeMacroExpansion + 1 and - nAttr = nAssocItemList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nGenericParamList = nAttr + 1 and - nName = nGenericParamList + 1 and - nTypeBoundList = nName + 1 and - nVisibility = nTypeBoundList + 1 and - nWhereClause = nVisibility + 1 and + b = 0 and + bExternItem = + b + 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 + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nBody = nAttr + 1 and + nName = nBody + 1 and + nTypeRepr = nName + 1 and + nVisibility = nTypeRepr + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - index = nAttributeMacroExpansion and - result = e.getAssocItemList() and - partialPredicateCall = "AssocItemList()" + result = getImmediateChildOfExternItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAssocItemList) and - partialPredicateCall = "Attr(" + (index - nAssocItemList).toString() + ")" + result = getImmediateChildOfItem(e, index - bExternItem, partialPredicateCall) or - index = nAttr and - result = e.getGenericParamList() and - partialPredicateCall = "GenericParamList()" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" + index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" or - index = nName and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" + index = nBody and result = e.getName() and partialPredicateCall = "Name()" or - index = nTypeBoundList and - result = e.getVisibility() and - partialPredicateCall = "Visibility()" + index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" or - index = nVisibility and - result = e.getWhereClause() and - partialPredicateCall = "WhereClause()" + index = nTypeRepr and result = e.getVisibility() and partialPredicateCall = "Visibility()" ) ) } - private Element getImmediateChildOfTraitAlias(TraitAlias e, int index, string partialPredicateCall) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nGenericParamList, int nName, - int nTypeBoundList, int nVisibility, int nWhereClause - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nGenericParamList = nAttr + 1 and - nName = nGenericParamList + 1 and - nTypeBoundList = nName + 1 and - nVisibility = nTypeBoundList + 1 and - nWhereClause = nVisibility + 1 and + private Element getImmediateChildOfStructExpr(StructExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int bPathAstNode, int n, int nStructExprFieldList | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bPathAstNode = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nStructExprFieldList = n + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" - or - index = nAttr and - result = e.getGenericParamList() and - partialPredicateCall = "GenericParamList()" - or - index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" - or - index = nName and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) or - index = nTypeBoundList and - result = e.getVisibility() and - partialPredicateCall = "Visibility()" + result = getImmediateChildOfPathAstNode(e, index - bExpr, partialPredicateCall) or - index = nVisibility and - result = e.getWhereClause() and - partialPredicateCall = "WhereClause()" + index = n and + result = e.getStructExprFieldList() and + partialPredicateCall = "StructExprFieldList()" ) ) } - private Element getImmediateChildOfTupleStructPat( - TupleStructPat e, int index, string partialPredicateCall - ) { - exists(int n, int nPath, int nField | - n = 0 and - nPath = n + 1 and - nField = nPath + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and + private Element getImmediateChildOfStructPat(StructPat e, int index, string partialPredicateCall) { + exists(int b, int bPat, int bPathAstNode, int n, int nStructPatFieldList | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nStructPatFieldList = n + 1 and ( none() or - index = n and result = e.getPath() and partialPredicateCall = "Path()" + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or - result = e.getField(index - nPath) and - partialPredicateCall = "Field(" + (index - nPath).toString() + ")" - ) - ) - } - - private Element getImmediateChildOfUse(Use e, int index, string partialPredicateCall) { - exists(int n, int nAttributeMacroExpansion, int nAttr, int nUseTree, int nVisibility | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nUseTree = nAttr + 1 and - nVisibility = nUseTree + 1 and - ( - none() + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) or index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" - or - index = nAttr and result = e.getUseTree() and partialPredicateCall = "UseTree()" - or - index = nUseTree and result = e.getVisibility() and partialPredicateCall = "Visibility()" + result = e.getStructPatFieldList() and + partialPredicateCall = "StructPatFieldList()" ) ) } - private Element getImmediateChildOfConst(Const e, int index, string partialPredicateCall) { + private Element getImmediateChildOfTrait(Trait e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nAttr, int nBody, int nGenericParamList, int nName, - int nTypeRepr, int nVisibility, int nWhereClause - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nBody = nAttr + 1 and - nGenericParamList = nBody + 1 and + int b, int bItem, int n, int nAssocItemList, int nAttr, int nGenericParamList, int nName, + int nTypeBoundList, int nVisibility, int nWhereClause + | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAssocItemList = n + 1 and + nAttr = nAssocItemList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and - nTypeRepr = nName + 1 and - nVisibility = nTypeRepr + 1 and + nTypeBoundList = nName + 1 and + nVisibility = nTypeBoundList + 1 and nWhereClause = nVisibility + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + index = n and result = e.getAssocItemList() and partialPredicateCall = "AssocItemList()" or - index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" + result = e.getAttr(index - nAssocItemList) and + partialPredicateCall = "Attr(" + (index - nAssocItemList).toString() + ")" or - index = nBody and + index = nAttr and result = e.getGenericParamList() and partialPredicateCall = "GenericParamList()" or index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" or - index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + index = nName and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" or - index = nTypeRepr and result = e.getVisibility() and partialPredicateCall = "Visibility()" + index = nTypeBoundList and + result = e.getVisibility() and + partialPredicateCall = "Visibility()" or index = nVisibility and result = e.getWhereClause() and @@ -2655,35 +3788,27 @@ private module Impl { ) } - private Element getImmediateChildOfEnum(Enum e, int index, string partialPredicateCall) { + private Element getImmediateChildOfTraitAlias(TraitAlias e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nDeriveMacroExpansion, int nAttr, - int nGenericParamList, int nName, int nVariantList, int nVisibility, int nWhereClause + int b, int bItem, int n, int nAttr, int nGenericParamList, int nName, int nTypeBoundList, + int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nDeriveMacroExpansion = - nAttributeMacroExpansion + 1 + - max(int i | i = -1 or exists(e.getDeriveMacroExpansion(i)) | i) and - nAttr = nDeriveMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and - nVariantList = nName + 1 and - nVisibility = nVariantList + 1 and + nTypeBoundList = nName + 1 and + nVisibility = nTypeBoundList + 1 and nWhereClause = nVisibility + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getDeriveMacroExpansion(index - nAttributeMacroExpansion) and - partialPredicateCall = - "DeriveMacroExpansion(" + (index - nAttributeMacroExpansion).toString() + ")" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nDeriveMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nDeriveMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getGenericParamList() and @@ -2691,9 +3816,9 @@ private module Impl { or index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" or - index = nName and result = e.getVariantList() and partialPredicateCall = "VariantList()" + index = nName and result = e.getTypeBoundList() and partialPredicateCall = "TypeBoundList()" or - index = nVariantList and + index = nTypeBoundList and result = e.getVisibility() and partialPredicateCall = "Visibility()" or @@ -2704,74 +3829,74 @@ private module Impl { ) } - private Element getImmediateChildOfForExpr(ForExpr e, int index, string partialPredicateCall) { - exists(int n, int nLabel, int nLoopBody, int nAttr, int nIterable, int nPat | - n = 0 and - nLabel = n + 1 and - nLoopBody = nLabel + 1 and - nAttr = nLoopBody + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nIterable = nAttr + 1 and - nPat = nIterable + 1 and + private Element getImmediateChildOfTupleStructPat( + TupleStructPat e, int index, string partialPredicateCall + ) { + exists(int b, int bPat, int bPathAstNode, int n, int nField | + b = 0 and + bPat = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPat(e, i, _)) | i) and + bPathAstNode = + bPat + 1 + max(int i | i = -1 or exists(getImmediateChildOfPathAstNode(e, i, _)) | i) and + n = bPathAstNode and + nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and ( none() or - index = n and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" + result = getImmediateChildOfPat(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nLoopBody) and - partialPredicateCall = "Attr(" + (index - nLoopBody).toString() + ")" - or - index = nAttr and result = e.getIterable() and partialPredicateCall = "Iterable()" + result = getImmediateChildOfPathAstNode(e, index - bPat, partialPredicateCall) or - index = nIterable and result = e.getPat() and partialPredicateCall = "Pat()" + result = e.getField(index - n) and + partialPredicateCall = "Field(" + (index - n).toString() + ")" ) ) } - private Element getImmediateChildOfFunction(Function e, int index, string partialPredicateCall) { + private Element getImmediateChildOfTypeAlias(TypeAlias e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nParamList, int nAttr, int nAbi, int nBody, - int nGenericParamList, int nName, int nRetType, int nVisibility, int nWhereClause + int b, int bAssocItem, int bExternItem, int bItem, int n, int nAttr, int nGenericParamList, + int nName, int nTypeRepr, int nTypeBoundList, int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nParamList = nAttributeMacroExpansion + 1 and - nAttr = nParamList + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nAbi = nAttr + 1 and - nBody = nAbi + 1 and - nGenericParamList = nBody + 1 and + 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 + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and - nRetType = nName + 1 and - nVisibility = nRetType + 1 and + nTypeRepr = nName + 1 and + nTypeBoundList = nTypeRepr + 1 and + nVisibility = nTypeBoundList + 1 and nWhereClause = nVisibility + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - index = nAttributeMacroExpansion and - result = e.getParamList() and - partialPredicateCall = "ParamList()" + result = getImmediateChildOfAssocItem(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nParamList) and - partialPredicateCall = "Attr(" + (index - nParamList).toString() + ")" + result = getImmediateChildOfExternItem(e, index - bAssocItem, partialPredicateCall) or - index = nAttr and result = e.getAbi() and partialPredicateCall = "Abi()" + result = getImmediateChildOfItem(e, index - bExternItem, partialPredicateCall) or - index = nAbi and result = e.getBody() and partialPredicateCall = "Body()" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nBody and + index = nAttr and result = e.getGenericParamList() and partialPredicateCall = "GenericParamList()" or index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" or - index = nName and result = e.getRetType() and partialPredicateCall = "RetType()" + index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" or - index = nRetType and result = e.getVisibility() and partialPredicateCall = "Visibility()" + index = nTypeRepr and + result = e.getTypeBoundList() and + partialPredicateCall = "TypeBoundList()" + or + index = nTypeBoundList and + result = e.getVisibility() and + partialPredicateCall = "Visibility()" or index = nVisibility and result = e.getWhereClause() and @@ -2780,101 +3905,121 @@ private module Impl { ) } - private Element getImmediateChildOfLoopExpr(LoopExpr e, int index, string partialPredicateCall) { - exists(int n, int nLabel, int nLoopBody, int nAttr | - n = 0 and - nLabel = n + 1 and - nLoopBody = nLabel + 1 and - nAttr = nLoopBody + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + private Element getImmediateChildOfUse(Use e, int index, string partialPredicateCall) { + exists(int b, int bItem, int n, int nAttr, int nUseTree, int nVisibility | + b = 0 and + bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and + n = bItem and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nUseTree = nAttr + 1 and + nVisibility = nUseTree + 1 and ( none() or - index = n and result = e.getLabel() and partialPredicateCall = "Label()" + result = getImmediateChildOfItem(e, index - b, partialPredicateCall) + or + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" + index = nAttr and result = e.getUseTree() and partialPredicateCall = "UseTree()" or - result = e.getAttr(index - nLoopBody) and - partialPredicateCall = "Attr(" + (index - nLoopBody).toString() + ")" + index = nUseTree and result = e.getVisibility() and partialPredicateCall = "Visibility()" ) ) } - private Element getImmediateChildOfMacroCall(MacroCall e, int index, string partialPredicateCall) { + private Element getImmediateChildOfEnum(Enum e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nAttr, int nPath, int nTokenTree, - int nMacroCallExpansion + int b, int bAdt, int n, int nAttr, int nGenericParamList, int nName, int nVariantList, + int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nPath = nAttr + 1 and - nTokenTree = nPath + 1 and - nMacroCallExpansion = nTokenTree + 1 and + b = 0 and + bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and + n = bAdt and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nGenericParamList = nAttr + 1 and + nName = nGenericParamList + 1 and + nVariantList = nName + 1 and + nVisibility = nVariantList + 1 and + nWhereClause = nVisibility + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getPath() and partialPredicateCall = "Path()" + index = nAttr and + result = e.getGenericParamList() and + partialPredicateCall = "GenericParamList()" or - index = nPath and result = e.getTokenTree() and partialPredicateCall = "TokenTree()" + index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" or - index = nTokenTree and - result = e.getMacroCallExpansion() and - partialPredicateCall = "MacroCallExpansion()" + index = nName and result = e.getVariantList() and partialPredicateCall = "VariantList()" + or + index = nVariantList and + result = e.getVisibility() and + partialPredicateCall = "Visibility()" + or + index = nVisibility and + result = e.getWhereClause() and + partialPredicateCall = "WhereClause()" ) ) } - private Element getImmediateChildOfStatic(Static e, int index, string partialPredicateCall) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nBody, int nName, int nTypeRepr, - int nVisibility - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nBody = nAttr + 1 and - nName = nBody + 1 and - nTypeRepr = nName + 1 and - nVisibility = nTypeRepr + 1 and + private Element getImmediateChildOfForExpr(ForExpr e, int index, string partialPredicateCall) { + exists(int b, int bLoopingExpr, int n, int nAttr, int nIterable, int nPat | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + nIterable = nAttr + 1 and + nPat = nIterable + 1 and ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getBody() and partialPredicateCall = "Body()" + index = nAttr and result = e.getIterable() and partialPredicateCall = "Iterable()" or - index = nBody and result = e.getName() and partialPredicateCall = "Name()" + index = nIterable and result = e.getPat() and partialPredicateCall = "Pat()" + ) + ) + } + + private Element getImmediateChildOfLoopExpr(LoopExpr e, int index, string partialPredicateCall) { + exists(int b, int bLoopingExpr, int n, int nAttr | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + ( + none() or - index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) or - index = nTypeRepr and result = e.getVisibility() and partialPredicateCall = "Visibility()" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" ) ) } private Element getImmediateChildOfStruct(Struct e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nDeriveMacroExpansion, int nAttr, int nFieldList, - int nGenericParamList, int nName, int nVisibility, int nWhereClause + int b, int bAdt, int n, int nAttr, int nFieldList, int nGenericParamList, int nName, + int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nDeriveMacroExpansion = - nAttributeMacroExpansion + 1 + - max(int i | i = -1 or exists(e.getDeriveMacroExpansion(i)) | i) and - nAttr = nDeriveMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + b = 0 and + bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and + n = bAdt and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nFieldList = nAttr + 1 and nGenericParamList = nFieldList + 1 and nName = nGenericParamList + 1 and @@ -2883,16 +4028,10 @@ private module Impl { ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getDeriveMacroExpansion(index - nAttributeMacroExpansion) and - partialPredicateCall = - "DeriveMacroExpansion(" + (index - nAttributeMacroExpansion).toString() + ")" + result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nDeriveMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nDeriveMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getFieldList() and partialPredicateCall = "FieldList()" or @@ -2911,64 +4050,15 @@ private module Impl { ) } - private Element getImmediateChildOfTypeAlias(TypeAlias e, int index, string partialPredicateCall) { - exists( - int n, int nAttributeMacroExpansion, int nAttr, int nGenericParamList, int nName, - int nTypeRepr, int nTypeBoundList, int nVisibility, int nWhereClause - | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nAttr = nAttributeMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nGenericParamList = nAttr + 1 and - nName = nGenericParamList + 1 and - nTypeRepr = nName + 1 and - nTypeBoundList = nTypeRepr + 1 and - nVisibility = nTypeBoundList + 1 and - nWhereClause = nVisibility + 1 and - ( - none() - or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getAttr(index - nAttributeMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nAttributeMacroExpansion).toString() + ")" - or - index = nAttr and - result = e.getGenericParamList() and - partialPredicateCall = "GenericParamList()" - or - index = nGenericParamList and result = e.getName() and partialPredicateCall = "Name()" - or - index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" - or - index = nTypeRepr and - result = e.getTypeBoundList() and - partialPredicateCall = "TypeBoundList()" - or - index = nTypeBoundList and - result = e.getVisibility() and - partialPredicateCall = "Visibility()" - or - index = nVisibility and - result = e.getWhereClause() and - partialPredicateCall = "WhereClause()" - ) - ) - } - private Element getImmediateChildOfUnion(Union e, int index, string partialPredicateCall) { exists( - int n, int nAttributeMacroExpansion, int nDeriveMacroExpansion, int nAttr, - int nGenericParamList, int nName, int nStructFieldList, int nVisibility, int nWhereClause + int b, int bAdt, int n, int nAttr, int nGenericParamList, int nName, int nStructFieldList, + int nVisibility, int nWhereClause | - n = 0 and - nAttributeMacroExpansion = n + 1 and - nDeriveMacroExpansion = - nAttributeMacroExpansion + 1 + - max(int i | i = -1 or exists(e.getDeriveMacroExpansion(i)) | i) and - nAttr = nDeriveMacroExpansion + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + b = 0 and + bAdt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAdt(e, i, _)) | i) and + n = bAdt and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and nStructFieldList = nName + 1 and @@ -2977,16 +4067,10 @@ private module Impl { ( none() or - index = n and - result = e.getAttributeMacroExpansion() and - partialPredicateCall = "AttributeMacroExpansion()" - or - result = e.getDeriveMacroExpansion(index - nAttributeMacroExpansion) and - partialPredicateCall = - "DeriveMacroExpansion(" + (index - nAttributeMacroExpansion).toString() + ")" + result = getImmediateChildOfAdt(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nDeriveMacroExpansion) and - partialPredicateCall = "Attr(" + (index - nDeriveMacroExpansion).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getGenericParamList() and @@ -3010,21 +4094,20 @@ private module Impl { } private Element getImmediateChildOfWhileExpr(WhileExpr e, int index, string partialPredicateCall) { - exists(int n, int nLabel, int nLoopBody, int nAttr, int nCondition | - n = 0 and - nLabel = n + 1 and - nLoopBody = nLabel + 1 and - nAttr = nLoopBody + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and + exists(int b, int bLoopingExpr, int n, int nAttr, int nCondition | + b = 0 and + bLoopingExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLoopingExpr(e, i, _)) | i) and + n = bLoopingExpr and + nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nCondition = nAttr + 1 and ( none() or - index = n and result = e.getLabel() and partialPredicateCall = "Label()" - or - index = nLabel and result = e.getLoopBody() and partialPredicateCall = "LoopBody()" + result = getImmediateChildOfLoopingExpr(e, index - b, partialPredicateCall) or - result = e.getAttr(index - nLoopBody) and - partialPredicateCall = "Attr(" + (index - nLoopBody).toString() + ")" + result = e.getAttr(index - n) and + partialPredicateCall = "Attr(" + (index - n).toString() + ")" or index = nAttr and result = e.getCondition() and partialPredicateCall = "Condition()" ) @@ -3313,14 +4396,20 @@ private module Impl { or result = getImmediateChildOfCallExpr(e, index, partialAccessor) or + result = getImmediateChildOfConst(e, index, partialAccessor) + or result = getImmediateChildOfExternBlock(e, index, partialAccessor) or result = getImmediateChildOfExternCrate(e, index, partialAccessor) or result = getImmediateChildOfFormatTemplateVariableAccess(e, index, partialAccessor) or + result = getImmediateChildOfFunction(e, index, partialAccessor) + or result = getImmediateChildOfImpl(e, index, partialAccessor) or + result = getImmediateChildOfMacroCall(e, index, partialAccessor) + or result = getImmediateChildOfMacroDef(e, index, partialAccessor) or result = getImmediateChildOfMacroRules(e, index, partialAccessor) @@ -3333,6 +4422,8 @@ private module Impl { or result = getImmediateChildOfPathPat(e, index, partialAccessor) or + result = getImmediateChildOfStatic(e, index, partialAccessor) + or result = getImmediateChildOfStructExpr(e, index, partialAccessor) or result = getImmediateChildOfStructPat(e, index, partialAccessor) @@ -3343,26 +4434,18 @@ private module Impl { or result = getImmediateChildOfTupleStructPat(e, index, partialAccessor) or - result = getImmediateChildOfUse(e, index, partialAccessor) + result = getImmediateChildOfTypeAlias(e, index, partialAccessor) or - result = getImmediateChildOfConst(e, index, partialAccessor) + result = getImmediateChildOfUse(e, index, partialAccessor) or result = getImmediateChildOfEnum(e, index, partialAccessor) or result = getImmediateChildOfForExpr(e, index, partialAccessor) or - result = getImmediateChildOfFunction(e, index, partialAccessor) - or result = getImmediateChildOfLoopExpr(e, index, partialAccessor) or - result = getImmediateChildOfMacroCall(e, index, partialAccessor) - or - result = getImmediateChildOfStatic(e, index, partialAccessor) - or result = getImmediateChildOfStruct(e, index, partialAccessor) or - result = getImmediateChildOfTypeAlias(e, index, partialAccessor) - or result = getImmediateChildOfUnion(e, index, partialAccessor) or result = getImmediateChildOfWhileExpr(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 a8e526e52639..6a380fdf1ff3 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -265,6 +265,18 @@ module Raw { NameRef getIdentifier() { asm_reg_spec_identifiers(this, result) } } + /** + * INTERNAL: Do not use. + * An associated item in a `Trait` or `Impl`. + * + * For example: + * ```rust + * trait T {fn foo(&self);} + * // ^^^^^^^^^^^^^ + * ``` + */ + class AssocItem extends @assoc_item, AstNode { } + /** * INTERNAL: Do not use. * A list of `AssocItem` elements, as appearing in a `Trait` or `Impl`. @@ -349,6 +361,20 @@ module Raw { */ class Expr extends @expr, AstNode { } + /** + * INTERNAL: Do not use. + * An item inside an extern block. + * + * For example: + * ```rust + * extern "C" { + * fn foo(); + * static BAR: i32; + * } + * ``` + */ + class ExternItem extends @extern_item, AstNode { } + /** * INTERNAL: Do not use. * A list of items inside an extern block. @@ -3592,18 +3618,6 @@ module Raw { } } - /** - * INTERNAL: Do not use. - * An associated item in a `Trait` or `Impl`. - * - * For example: - * ```rust - * trait T {fn foo(&self);} - * // ^^^^^^^^^^^^^ - * ``` - */ - class AssocItem extends @assoc_item, Item { } - /** * INTERNAL: Do not use. * A block expression. For example: @@ -3682,6 +3696,72 @@ module Raw { Expr getFunction() { call_expr_functions(this, result) } } + /** + * INTERNAL: Do not use. + * A constant item declaration. + * + * For example: + * ```rust + * const X: i32 = 42; + * ``` + */ + class Const extends @const, AssocItem, Item { + override string toString() { result = "Const" } + + /** + * Gets the `index`th attr of this const (0-based). + */ + Attr getAttr(int index) { const_attrs(this, index, result) } + + /** + * Gets the body of this const, if it exists. + */ + Expr getBody() { const_bodies(this, result) } + + /** + * Gets the generic parameter list of this const, if it exists. + */ + GenericParamList getGenericParamList() { const_generic_param_lists(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. + */ + Name getName() { const_names(this, result) } + + /** + * Gets the type representation of this const, if it exists. + */ + TypeRepr getTypeRepr() { const_type_reprs(this, result) } + + /** + * Gets the visibility of this const, if it exists. + */ + Visibility getVisibility() { const_visibilities(this, result) } + + /** + * Gets the where clause of this const, if it exists. + */ + WhereClause getWhereClause() { const_where_clauses(this, result) } + + /** + * Holds if this constant has an implementation. + * + * This is the same as `hasBody` for source code, but for library code (for which we always skip + * the body), this will hold when the body was present in the original code. + */ + predicate hasImplementation() { const_has_implementation(this) } + } + /** * INTERNAL: Do not use. * An extern block containing foreign function declarations. @@ -3752,17 +3832,88 @@ module Raw { /** * INTERNAL: Do not use. - * An item inside an extern block. - * - * For example: + * A function declaration. For example * ```rust - * extern "C" { - * fn foo(); - * static BAR: i32; + * fn foo(x: u32) -> u64 {(x + 1).into()} + * ``` + * A function declaration within a trait might not have a body: + * ```rust + * trait Trait { + * fn bar(); * } * ``` */ - class ExternItem extends @extern_item, Item { } + class Function extends @function, AssocItem, ExternItem, Item, Callable { + override string toString() { result = "Function" } + + /** + * Gets the abi of this function, if it exists. + */ + Abi getAbi() { function_abis(this, result) } + + /** + * Gets the body of this function, if it exists. + */ + BlockExpr getBody() { function_bodies(this, result) } + + /** + * Gets the generic parameter list of this function, if it exists. + */ + 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. + */ + Name getName() { function_names(this, result) } + + /** + * Gets the ret type of this function, if it exists. + */ + RetTypeRepr getRetType() { function_ret_types(this, result) } + + /** + * Gets the visibility of this function, if it exists. + */ + Visibility getVisibility() { function_visibilities(this, result) } + + /** + * Gets the where clause of this function, if it exists. + */ + WhereClause getWhereClause() { function_where_clauses(this, result) } + + /** + * Holds if this function has an implementation. + * + * This is the same as `hasBody` for source code, but for library code (for which we always skip + * the body), this will hold when the body was present in the original code. + */ + predicate hasImplementation() { function_has_implementation(this) } + } /** * INTERNAL: Do not use. @@ -3840,6 +3991,39 @@ module Raw { BlockExpr getLoopBody() { looping_expr_loop_bodies(this, result) } } + /** + * INTERNAL: Do not use. + * A macro invocation. + * + * For example: + * ```rust + * println!("Hello, world!"); + * ``` + */ + class MacroCall extends @macro_call, AssocItem, ExternItem, Item { + override string toString() { result = "MacroCall" } + + /** + * Gets the `index`th attr of this macro call (0-based). + */ + Attr getAttr(int index) { macro_call_attrs(this, index, result) } + + /** + * Gets the path of this macro call, if it exists. + */ + Path getPath() { macro_call_paths(this, result) } + + /** + * Gets the token tree of this macro call, if it exists. + */ + TokenTree getTokenTree() { macro_call_token_trees(this, result) } + + /** + * Gets the macro call expansion of this macro call, if it exists. + */ + AstNode getMacroCallExpansion() { macro_call_macro_call_expansions(this, result) } + } + /** * INTERNAL: Do not use. * A Rust 2.0 style declarative macro definition. @@ -4013,45 +4197,98 @@ module Raw { /** * INTERNAL: Do not use. - * A struct expression. For example: + * A static item declaration. + * + * For example: * ```rust - * let first = Foo { a: 1, b: 2 }; - * let second = Foo { a: 2, ..first }; - * Foo { a: 1, b: 2 }[2] = 10; - * Foo { .. } = second; + * static X: i32 = 42; * ``` */ - class StructExpr extends @struct_expr, Expr, PathAstNode { - override string toString() { result = "StructExpr" } + class Static extends @static, ExternItem, Item { + override string toString() { result = "Static" } /** - * Gets the struct expression field list of this struct expression, if it exists. + * Gets the `index`th attr of this static (0-based). */ - StructExprFieldList getStructExprFieldList() { - struct_expr_struct_expr_field_lists(this, result) - } - } + Attr getAttr(int index) { static_attrs(this, index, result) } - /** - * INTERNAL: Do not use. - * A struct pattern. For example: - * ```rust - * match x { - * Foo { a: 1, b: 2 } => "ok", - * Foo { .. } => "fail", - * } - * ``` - */ - class StructPat extends @struct_pat, Pat, PathAstNode { - override string toString() { result = "StructPat" } + /** + * Gets the body of this static, if it exists. + */ + Expr getBody() { static_bodies(this, result) } /** - * Gets the struct pattern field list of this struct pattern, if it exists. + * Holds if this static is mut. */ - StructPatFieldList getStructPatFieldList() { struct_pat_struct_pat_field_lists(this, result) } - } + predicate isMut() { static_is_mut(this) } - /** + /** + * Holds if this static is static. + */ + predicate isStatic() { static_is_static(this) } + + /** + * Holds if this static is unsafe. + */ + predicate isUnsafe() { static_is_unsafe(this) } + + /** + * Gets the name of this static, if it exists. + */ + Name getName() { static_names(this, result) } + + /** + * Gets the type representation of this static, if it exists. + */ + TypeRepr getTypeRepr() { static_type_reprs(this, result) } + + /** + * Gets the visibility of this static, if it exists. + */ + Visibility getVisibility() { static_visibilities(this, result) } + } + + /** + * INTERNAL: Do not use. + * A struct expression. For example: + * ```rust + * let first = Foo { a: 1, b: 2 }; + * let second = Foo { a: 2, ..first }; + * Foo { a: 1, b: 2 }[2] = 10; + * Foo { .. } = second; + * ``` + */ + class StructExpr extends @struct_expr, Expr, PathAstNode { + override string toString() { result = "StructExpr" } + + /** + * Gets the struct expression field list of this struct expression, if it exists. + */ + StructExprFieldList getStructExprFieldList() { + struct_expr_struct_expr_field_lists(this, result) + } + } + + /** + * INTERNAL: Do not use. + * A struct pattern. For example: + * ```rust + * match x { + * Foo { a: 1, b: 2 } => "ok", + * Foo { .. } => "fail", + * } + * ``` + */ + class StructPat extends @struct_pat, Pat, PathAstNode { + override string toString() { result = "StructPat" } + + /** + * Gets the struct pattern field list of this struct pattern, if it exists. + */ + StructPatFieldList getStructPatFieldList() { struct_pat_struct_pat_field_lists(this, result) } + } + + /** * INTERNAL: Do not use. * A Trait. For example: * ``` @@ -4178,94 +4415,84 @@ module Raw { /** * INTERNAL: Do not use. - * A `use` statement. For example: + * A type alias. For example: * ```rust - * use std::collections::HashMap; + * type Point = (u8, u8); + * + * trait Trait { + * type Output; + * // ^^^^^^^^^^^ + * } * ``` */ - class Use extends @use, Item { - override string toString() { result = "Use" } - - /** - * Gets the `index`th attr of this use (0-based). - */ - Attr getAttr(int index) { use_attrs(this, index, result) } + class TypeAlias extends @type_alias, AssocItem, ExternItem, Item { + override string toString() { result = "TypeAlias" } /** - * Gets the use tree of this use, if it exists. + * Gets the `index`th attr of this type alias (0-based). */ - UseTree getUseTree() { use_use_trees(this, result) } + Attr getAttr(int index) { type_alias_attrs(this, index, result) } /** - * Gets the visibility of this use, if it exists. + * Gets the generic parameter list of this type alias, if it exists. */ - Visibility getVisibility() { use_visibilities(this, result) } - } - - /** - * INTERNAL: Do not use. - * A constant item declaration. - * - * For example: - * ```rust - * const X: i32 = 42; - * ``` - */ - class Const extends @const, AssocItem { - override string toString() { result = "Const" } + GenericParamList getGenericParamList() { type_alias_generic_param_lists(this, result) } /** - * Gets the `index`th attr of this const (0-based). + * Holds if this type alias is default. */ - Attr getAttr(int index) { const_attrs(this, index, result) } + predicate isDefault() { type_alias_is_default(this) } /** - * Gets the body of this const, if it exists. + * Gets the name of this type alias, if it exists. */ - Expr getBody() { const_bodies(this, result) } + Name getName() { type_alias_names(this, result) } /** - * Gets the generic parameter list of this const, if it exists. + * Gets the type representation of this type alias, if it exists. */ - GenericParamList getGenericParamList() { const_generic_param_lists(this, result) } + TypeRepr getTypeRepr() { type_alias_type_reprs(this, result) } /** - * Holds if this const is const. + * Gets the type bound list of this type alias, if it exists. */ - predicate isConst() { const_is_const(this) } + TypeBoundList getTypeBoundList() { type_alias_type_bound_lists(this, result) } /** - * Holds if this const is default. + * Gets the visibility of this type alias, if it exists. */ - predicate isDefault() { const_is_default(this) } + Visibility getVisibility() { type_alias_visibilities(this, result) } /** - * Gets the name of this const, if it exists. + * Gets the where clause of this type alias, if it exists. */ - Name getName() { const_names(this, result) } + WhereClause getWhereClause() { type_alias_where_clauses(this, result) } + } - /** - * Gets the type representation of this const, if it exists. - */ - TypeRepr getTypeRepr() { const_type_reprs(this, result) } + /** + * INTERNAL: Do not use. + * A `use` statement. For example: + * ```rust + * use std::collections::HashMap; + * ``` + */ + class Use extends @use, Item { + override string toString() { result = "Use" } /** - * Gets the visibility of this const, if it exists. + * Gets the `index`th attr of this use (0-based). */ - Visibility getVisibility() { const_visibilities(this, result) } + Attr getAttr(int index) { use_attrs(this, index, result) } /** - * Gets the where clause of this const, if it exists. + * Gets the use tree of this use, if it exists. */ - WhereClause getWhereClause() { const_where_clauses(this, result) } + UseTree getUseTree() { use_use_trees(this, result) } /** - * Holds if this constant has an implementation. - * - * This is the same as `hasBody` for source code, but for library code (for which we always skip - * the body), this will hold when the body was present in the original code. + * Gets the visibility of this use, if it exists. */ - predicate hasImplementation() { const_has_implementation(this) } + Visibility getVisibility() { use_visibilities(this, result) } } /** @@ -4341,91 +4568,6 @@ module Raw { Pat getPat() { for_expr_pats(this, result) } } - /** - * INTERNAL: Do not use. - * A function declaration. For example - * ```rust - * fn foo(x: u32) -> u64 {(x + 1).into()} - * ``` - * A function declaration within a trait might not have a body: - * ```rust - * trait Trait { - * fn bar(); - * } - * ``` - */ - class Function extends @function, AssocItem, ExternItem, Callable { - override string toString() { result = "Function" } - - /** - * Gets the abi of this function, if it exists. - */ - Abi getAbi() { function_abis(this, result) } - - /** - * Gets the body of this function, if it exists. - */ - BlockExpr getBody() { function_bodies(this, result) } - - /** - * Gets the generic parameter list of this function, if it exists. - */ - 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. - */ - Name getName() { function_names(this, result) } - - /** - * Gets the ret type of this function, if it exists. - */ - RetTypeRepr getRetType() { function_ret_types(this, result) } - - /** - * Gets the visibility of this function, if it exists. - */ - Visibility getVisibility() { function_visibilities(this, result) } - - /** - * Gets the where clause of this function, if it exists. - */ - WhereClause getWhereClause() { function_where_clauses(this, result) } - - /** - * Holds if this function has an implementation. - * - * This is the same as `hasBody` for source code, but for library code (for which we always skip - * the body), this will hold when the body was present in the original code. - */ - predicate hasImplementation() { function_has_implementation(this) } - } - /** * INTERNAL: Do not use. * A loop expression. For example: @@ -4460,92 +4602,6 @@ module Raw { Attr getAttr(int index) { loop_expr_attrs(this, index, result) } } - /** - * INTERNAL: Do not use. - * A macro invocation. - * - * For example: - * ```rust - * println!("Hello, world!"); - * ``` - */ - class MacroCall extends @macro_call, AssocItem, ExternItem { - override string toString() { result = "MacroCall" } - - /** - * Gets the `index`th attr of this macro call (0-based). - */ - Attr getAttr(int index) { macro_call_attrs(this, index, result) } - - /** - * Gets the path of this macro call, if it exists. - */ - Path getPath() { macro_call_paths(this, result) } - - /** - * Gets the token tree of this macro call, if it exists. - */ - TokenTree getTokenTree() { macro_call_token_trees(this, result) } - - /** - * Gets the macro call expansion of this macro call, if it exists. - */ - AstNode getMacroCallExpansion() { macro_call_macro_call_expansions(this, result) } - } - - /** - * INTERNAL: Do not use. - * A static item declaration. - * - * For example: - * ```rust - * static X: i32 = 42; - * ``` - */ - class Static extends @static, ExternItem { - override string toString() { result = "Static" } - - /** - * Gets the `index`th attr of this static (0-based). - */ - Attr getAttr(int index) { static_attrs(this, index, result) } - - /** - * Gets the body of this static, if it exists. - */ - 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) } - - /** - * Holds if this static is unsafe. - */ - predicate isUnsafe() { static_is_unsafe(this) } - - /** - * Gets the name of this static, if it exists. - */ - Name getName() { static_names(this, result) } - - /** - * Gets the type representation of this static, if it exists. - */ - TypeRepr getTypeRepr() { static_type_reprs(this, result) } - - /** - * Gets the visibility of this static, if it exists. - */ - Visibility getVisibility() { static_visibilities(this, result) } - } - /** * INTERNAL: Do not use. * A Struct. For example: @@ -4590,62 +4646,6 @@ module Raw { WhereClause getWhereClause() { struct_where_clauses(this, result) } } - /** - * INTERNAL: Do not use. - * A type alias. For example: - * ```rust - * type Point = (u8, u8); - * - * trait Trait { - * type Output; - * // ^^^^^^^^^^^ - * } - * ``` - */ - class TypeAlias extends @type_alias, AssocItem, ExternItem { - override string toString() { result = "TypeAlias" } - - /** - * Gets the `index`th attr of this type alias (0-based). - */ - Attr getAttr(int index) { type_alias_attrs(this, index, result) } - - /** - * Gets the generic parameter list of this type alias, if it exists. - */ - 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. - */ - Name getName() { type_alias_names(this, result) } - - /** - * Gets the type representation of this type alias, if it exists. - */ - TypeRepr getTypeRepr() { type_alias_type_reprs(this, result) } - - /** - * Gets the type bound list of this type alias, if it exists. - */ - TypeBoundList getTypeBoundList() { type_alias_type_bound_lists(this, result) } - - /** - * Gets the visibility of this type alias, if it exists. - */ - Visibility getVisibility() { type_alias_visibilities(this, result) } - - /** - * Gets the where clause of this type alias, if it exists. - */ - WhereClause getWhereClause() { type_alias_where_clauses(this, result) } - } - /** * INTERNAL: Do not use. * A union declaration. 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 075b48c42e31..0fb3c627de29 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Static.qll @@ -9,6 +9,7 @@ private import codeql.rust.elements.internal.generated.Raw import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.internal.ExternItemImpl::Impl as ExternItemImpl +import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.TypeRepr import codeql.rust.elements.Visibility @@ -28,7 +29,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Static` class directly. * Use the subclass `Static`, where the following predicates are available. */ - class Static extends Synth::TStatic, ExternItemImpl::ExternItem { + class Static extends Synth::TStatic, ExternItemImpl::ExternItem, ItemImpl::Item { override string getAPrimaryQlClass() { result = "Static" } /** 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 3d89d74b7e8c..003d4fa9feb5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -718,16 +718,17 @@ module Synth { */ class TAstNode = TAbi or TAddressable or TArgList or TAsmDirSpec or TAsmOperand or TAsmOperandExpr or - TAsmOption or TAsmPiece or TAsmRegSpec or TAssocItemList or TAttr or TCallable or - TClosureBinder or TExpr or TExternItemList or TFieldList or TFormatArgsArg or TGenericArg or - TGenericArgList or TGenericParam or TGenericParamList or TItemList or TLabel or TLetElse or - TMacroItems or TMatchArm or TMatchArmList or TMatchGuard or TMeta or TName or TParamBase or - TParamList or TParenthesizedArgList or TPat or TPath or TPathSegment or TRename or - TResolvable or TRetTypeRepr or TReturnTypeSyntax or TSourceFile or TStmt or TStmtList or - TStructExprField or TStructExprFieldList or TStructField or TStructPatField or - TStructPatFieldList or TToken or TTokenTree or TTupleField or TTypeBound or - TTypeBoundList or TTypeRepr or TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or - TUseTreeList or TVariantList or TVisibility or TWhereClause or TWherePred; + TAsmOption or TAsmPiece or TAsmRegSpec 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 TMacroItems or TMatchArm or TMatchArmList or + TMatchGuard or TMeta or TName or TParamBase or TParamList or TParenthesizedArgList or + TPat or TPath or TPathSegment or TRename or TResolvable or TRetTypeRepr or + TReturnTypeSyntax or TSourceFile or TStmt or TStmtList or TStructExprField or + TStructExprFieldList or TStructField or TStructPatField or TStructPatFieldList or TToken or + TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRepr or + TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or TUseTreeList or TVariantList or + TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -774,8 +775,9 @@ module Synth { * INTERNAL: Do not use. */ class TItem = - TAdt or TAssocItem or TExternBlock or TExternCrate or TExternItem or TImpl or TMacroDef or - TMacroRules or TModule or TTrait or TTraitAlias or TUse; + TAdt or TConst or TExternBlock or TExternCrate or TFunction or TImpl or TMacroCall or + TMacroDef or TMacroRules or TModule or TStatic or TTrait or TTraitAlias or TTypeAlias or + TUse; /** * INTERNAL: Do not use. @@ -1947,6 +1949,8 @@ module Synth { or result = convertAsmRegSpecFromRaw(e) or + result = convertAssocItemFromRaw(e) + or result = convertAssocItemListFromRaw(e) or result = convertAttrFromRaw(e) @@ -1957,6 +1961,8 @@ module Synth { or result = convertExprFromRaw(e) or + result = convertExternItemFromRaw(e) + or result = convertExternItemListFromRaw(e) or result = convertFieldListFromRaw(e) @@ -2219,26 +2225,32 @@ module Synth { TItem convertItemFromRaw(Raw::Element e) { result = convertAdtFromRaw(e) or - result = convertAssocItemFromRaw(e) + result = convertConstFromRaw(e) or result = convertExternBlockFromRaw(e) or result = convertExternCrateFromRaw(e) or - result = convertExternItemFromRaw(e) + result = convertFunctionFromRaw(e) or result = convertImplFromRaw(e) or + result = convertMacroCallFromRaw(e) + or result = convertMacroDefFromRaw(e) or result = convertMacroRulesFromRaw(e) or result = convertModuleFromRaw(e) or + result = convertStaticFromRaw(e) + or result = convertTraitFromRaw(e) or result = convertTraitAliasFromRaw(e) or + result = convertTypeAliasFromRaw(e) + or result = convertUseFromRaw(e) } @@ -3531,6 +3543,8 @@ module Synth { or result = convertAsmRegSpecToRaw(e) or + result = convertAssocItemToRaw(e) + or result = convertAssocItemListToRaw(e) or result = convertAttrToRaw(e) @@ -3541,6 +3555,8 @@ module Synth { or result = convertExprToRaw(e) or + result = convertExternItemToRaw(e) + or result = convertExternItemListToRaw(e) or result = convertFieldListToRaw(e) @@ -3803,26 +3819,32 @@ module Synth { Raw::Element convertItemToRaw(TItem e) { result = convertAdtToRaw(e) or - result = convertAssocItemToRaw(e) + result = convertConstToRaw(e) or result = convertExternBlockToRaw(e) or result = convertExternCrateToRaw(e) or - result = convertExternItemToRaw(e) + result = convertFunctionToRaw(e) or result = convertImplToRaw(e) or + result = convertMacroCallToRaw(e) + or result = convertMacroDefToRaw(e) or result = convertMacroRulesToRaw(e) or result = convertModuleToRaw(e) or + result = convertStaticToRaw(e) + or result = convertTraitToRaw(e) or result = convertTraitAliasToRaw(e) or + result = convertTypeAliasToRaw(e) + or result = convertUseToRaw(e) } 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 063658e0a7bc..7f2f904bd437 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/TypeAlias.qll @@ -10,6 +10,7 @@ import codeql.rust.elements.internal.AssocItemImpl::Impl as AssocItemImpl import codeql.rust.elements.Attr 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.TypeBoundList import codeql.rust.elements.TypeRepr @@ -34,7 +35,9 @@ module Generated { * INTERNAL: Do not reference the `Generated::TypeAlias` class directly. * Use the subclass `TypeAlias`, where the following predicates are available. */ - class TypeAlias extends Synth::TTypeAlias, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem { + class TypeAlias extends Synth::TTypeAlias, AssocItemImpl::AssocItem, ExternItemImpl::ExternItem, + ItemImpl::Item + { override string getAPrimaryQlClass() { result = "TypeAlias" } /** diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index 0c2099d4dcde..2a7447ed7a3f 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -186,9 +186,7 @@ module Stages { predicate backref() { 1 = 1 or - exists(any(Node n).toString()) - or - exists(any(Node n).getLocation()) + exists(Node n) or RustTaintTracking::defaultAdditionalTaintStep(_, _, _) or diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 520b924aa32d..2f8c051d7704 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -194,7 +194,7 @@ abstract class ItemNode extends Locatable { Stages::PathResolutionStage::ref() and result = this.getASuccessorRec(name) or - preludeEdge(this, name, result) + preludeEdge(this, name, result) and not declares(this, _, name) or this instanceof SourceFile and builtin(name, result) @@ -401,7 +401,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { } /** An item that can occur in a trait or an `impl` block. */ -abstract private class AssocItemNode extends ItemNode instanceof AssocItem { +abstract private class AssocItemNode extends ItemNode, AssocItem { /** Holds if this associated item has an implementation. */ abstract predicate hasImplementation(); @@ -540,13 +540,6 @@ abstract class ImplOrTraitItemNode extends ItemNode { /** Gets an associated item belonging to this trait or `impl` block. */ abstract AssocItemNode getAnAssocItem(); - /** Gets the associated item named `name` belonging to this trait or `impl` block. */ - pragma[nomagic] - AssocItemNode getAssocItem(string name) { - result = this.getAnAssocItem() and - result.getName() = name - } - /** Holds if this trait or `impl` block declares an associated item named `name`. */ pragma[nomagic] predicate hasAssocItem(string name) { name = this.getAnAssocItem().getName() } @@ -1505,8 +1498,12 @@ private predicate externCrateEdge(ExternCrateItemNode ec, string name, CrateItem */ pragma[nomagic] private predicate preludeEdge(SourceFile f, string name, ItemNode i) { - not declares(f, _, name) and exists(Crate stdOrCore, ModuleLikeNode mod, ModuleItemNode prelude, ModuleItemNode rust | + f = any(Crate c0 | stdOrCore = c0.getDependency(_) or stdOrCore = c0).getASourceFile() + or + // Give builtin files access to the prelude + f instanceof BuiltinSourceFile + | stdOrCore.getName() = ["std", "core"] and mod = stdOrCore.getSourceFile() and prelude = mod.getASuccessorRec("prelude") and diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 1e1e411d5d83..618377e9c3eb 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -285,16 +285,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix2.isEmpty() ) ) - or - // an array list expression (`[1, 2, 3]`) has the type of the first (any) element - n1.(ArrayListExpr).getExpr(_) = n2 and - prefix1 = TypePath::singleton(TArrayTypeParameter()) and - prefix2.isEmpty() - or - // an array repeat expression (`[1; 3]`) has the type of the repeat operand - n1.(ArrayRepeatExpr).getRepeatOperand() = n2 and - prefix1 = TypePath::singleton(TArrayTypeParameter()) and - prefix2.isEmpty() } pragma[nomagic] @@ -699,7 +689,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } Declaration getTarget() { - result = resolveMethodCallTarget(this) // mutual recursion; resolving method calls requires resolving types and vice versa + result = inferMethodCallTarget(this) // mutual recursion; resolving method calls requires resolving types and vice versa or result = CallExprImpl::getResolvedFunction(this) } @@ -1047,12 +1037,6 @@ private class Vec extends Struct { } } -/** - * Gets the root type of the array expression `ae`. - */ -pragma[nomagic] -private Type inferArrayExprType(ArrayExpr ae) { exists(ae) and result = TArrayType() } - /** * According to [the Rust reference][1]: _"array and slice-typed expressions * can be indexed with a `usize` index ... For other types an index expression @@ -1089,26 +1073,6 @@ private Type inferIndexExprType(IndexExpr ie, TypePath path) { ) } -pragma[nomagic] -private Type inferForLoopExprType(AstNode n, TypePath path) { - // type of iterable -> type of pattern (loop variable) - exists(ForExpr fe, Type iterableType, TypePath iterablePath | - n = fe.getPat() and - iterableType = inferType(fe.getIterable(), iterablePath) and - result = iterableType and - ( - iterablePath.isCons(any(Vec v).getElementTypeParameter(), path) - or - iterablePath.isCons(any(ArrayTypeParameter tp), path) - or - iterablePath - .stripPrefix(TypePath::cons(TRefTypeParameter(), - TypePath::singleton(any(SliceTypeParameter tp)))) = path - // TODO: iterables (general case for containers, ranges etc) - ) - ) -} - final class MethodCall extends Call { MethodCall() { exists(this.getReceiver()) and @@ -1178,14 +1142,14 @@ private predicate methodCandidateTrait(Type type, Trait trait, string name, int methodCandidate(type, name, arity, impl) } -pragma[nomagic] -private predicate isMethodCall(MethodCall mc, Type rootType, string name, int arity) { - rootType = mc.getTypeAt(TypePath::nil()) and - name = mc.getMethodName() and - arity = mc.getNumberOfArguments() -} - private module IsInstantiationOfInput implements IsInstantiationOfInputSig { + pragma[nomagic] + private predicate isMethodCall(MethodCall mc, Type rootType, string name, int arity) { + rootType = mc.getTypeAt(TypePath::nil()) and + name = mc.getMethodName() and + arity = mc.getNumberOfArguments() + } + pragma[nomagic] predicate potentialInstantiationOf(MethodCall mc, TypeAbstraction impl, TypeMention constraint) { exists(Type rootType, string name, int arity | @@ -1334,46 +1298,17 @@ private predicate methodResolutionDependsOnArgument( ) } -/** - * Holds if the method call `mc` has no inherent target, i.e., it does not - * resolve to a method in an `impl` block for the type of the receiver. - */ -pragma[nomagic] -private predicate methodCallHasNoInherentTarget(MethodCall mc) { - exists(Type rootType, string name, int arity | - isMethodCall(mc, rootType, name, arity) and - forall(Impl impl | - methodCandidate(rootType, name, arity, impl) and - not impl.hasTrait() - | - IsInstantiationOf::isNotInstantiationOf(mc, impl, _) - ) - ) -} - -pragma[nomagic] -private predicate methodCallHasImplCandidate(MethodCall mc, Impl impl) { - IsInstantiationOf::isInstantiationOf(mc, impl, _) and - if impl.hasTrait() and not exists(mc.getTrait()) - then - // inherent methods take precedence over trait methods, so only allow - // trait methods when there are no matching inherent methods - methodCallHasNoInherentTarget(mc) - else any() -} - /** Gets a method from an `impl` block that matches the method call `mc`. */ -pragma[nomagic] private Function getMethodFromImpl(MethodCall mc) { - exists(Impl impl, string name | - methodCallHasImplCandidate(mc, impl) and - name = mc.getMethodName() and - result = getMethodSuccessor(impl, name) + exists(Impl impl | + IsInstantiationOf::isInstantiationOf(mc, impl, _) and + result = getMethodSuccessor(impl, mc.getMethodName()) | - not methodResolutionDependsOnArgument(impl, _, _, _, _, _) + not methodResolutionDependsOnArgument(impl, _, _, _, _, _) and + result = getMethodSuccessor(impl, mc.getMethodName()) or exists(int pos, TypePath path, Type type | - methodResolutionDependsOnArgument(impl, name, result, pos, path, type) and + methodResolutionDependsOnArgument(impl, mc.getMethodName(), result, pos, path, type) and inferType(mc.getPositionalArgument(pos), path) = type ) ) @@ -1385,6 +1320,22 @@ private Function getTraitMethod(ImplTraitReturnType trait, string name) { result = getMethodSuccessor(trait.getImplTraitTypeRepr(), name) } +/** + * Gets a method that the method call `mc` resolves to based on type inference, + * if any. + */ +private Function inferMethodCallTarget(MethodCall mc) { + // The method comes from an `impl` block targeting the type of the receiver. + result = getMethodFromImpl(mc) + or + // The type of the receiver is a type parameter and the method comes from a + // trait bound on the type parameter. + result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + or + // The type of the receiver is an `impl Trait` type. + result = getTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) +} + cached private module Cached { private import codeql.rust.internal.CachedStages @@ -1413,18 +1364,47 @@ private module Cached { ) } + private predicate isInherentImplFunction(Function f) { + f = any(Impl impl | not impl.hasTrait()).(ImplItemNode).getAnAssocItem() + } + + private predicate isTraitImplFunction(Function f) { + f = any(Impl impl | impl.hasTrait()).(ImplItemNode).getAnAssocItem() + } + + private Function resolveMethodCallTargetFrom(MethodCall mc, boolean fromSource) { + result = inferMethodCallTarget(mc) and + (if result.fromSource() then fromSource = true else fromSource = false) and + ( + // prioritize inherent implementation methods first + isInherentImplFunction(result) + or + not isInherentImplFunction(inferMethodCallTarget(mc)) and + ( + // then trait implementation methods + isTraitImplFunction(result) + or + not isTraitImplFunction(inferMethodCallTarget(mc)) and + ( + // then trait methods with default implementations + result.hasBody() + or + // and finally trait methods without default implementations + not inferMethodCallTarget(mc).hasBody() + ) + ) + ) + } + /** Gets a method that the method call `mc` resolves to, if any. */ cached Function resolveMethodCallTarget(MethodCall mc) { - // The method comes from an `impl` block targeting the type of the receiver. - result = getMethodFromImpl(mc) - or - // The type of the receiver is a type parameter and the method comes from a - // trait bound on the type parameter. - result = getTypeParameterMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + // Functions in source code also gets extracted as library code, due to + // this duplication we prioritize functions from source code. + result = resolveMethodCallTargetFrom(mc, true) or - // The type of the receiver is an `impl Trait` type. - result = getTraitMethod(mc.getTypeAt(TypePath::nil()), mc.getMethodName()) + not exists(resolveMethodCallTargetFrom(mc, true)) and + result = resolveMethodCallTargetFrom(mc, false) } pragma[inline] @@ -1538,12 +1518,7 @@ private module Cached { or result = inferAwaitExprType(n, path) or - result = inferArrayExprType(n) and - path.isEmpty() - or result = inferIndexExprType(n, path) - or - result = inferForLoopExprType(n, path) } } diff --git a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll b/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll deleted file mode 100644 index 4b3177c9df95..000000000000 --- a/rust/ql/lib/codeql/rust/security/AccessAfterLifetimeExtensions.qll +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Provides classes and predicates for reasoning about accesses to a pointer - * after its lifetime has ended. - */ - -import rust -private import codeql.rust.dataflow.DataFlow -private import codeql.rust.security.AccessInvalidPointerExtensions -private import codeql.rust.internal.Type -private import codeql.rust.internal.TypeInference as TypeInference - -/** - * Provides default sources, sinks and barriers for detecting accesses to a - * pointer after its lifetime has ended, as well as extension points for - * adding your own. Note that a particular `(source, sink)` pair must be - * checked with `dereferenceAfterLifetime` to determine if it is a result. - */ -module AccessAfterLifetime { - /** - * A data flow source for accesses to a pointer after its lifetime has ended, - * that is, creation of a pointer or reference. - */ - abstract class Source extends DataFlow::Node { - /** - * Gets the value this pointer or reference points to. - */ - abstract Expr getTarget(); - } - - /** - * A data flow sink for accesses to a pointer after its lifetime has ended, - * that is, a dereference. We re-use the same sinks as for the accesses to - * invalid pointers query. - */ - class Sink = AccessInvalidPointer::Sink; - - /** - * A barrier for accesses to a pointer after its lifetime has ended. - */ - abstract class Barrier extends DataFlow::Node { } - - /** - * Holds if the pair `(source, sink)`, that represents a flow from a - * pointer or reference to a dereference, has its dereference outside the - * lifetime of the target variable `target`. - */ - bindingset[source, sink] - predicate dereferenceAfterLifetime(Source source, Sink sink, Variable target) { - exists(BlockExpr valueScope, BlockExpr accessScope | - valueScope(source.getTarget(), target, valueScope) and - accessScope = sink.asExpr().getExpr().getEnclosingBlock() and - not mayEncloseOnStack(valueScope, accessScope) - ) - } - - /** - * Holds if `var` has scope `scope`. - */ - private predicate variableScope(Variable var, BlockExpr scope) { - // local variable - scope = var.getEnclosingBlock() - or - // parameter - exists(Callable c | - var.getParameter().getEnclosingCallable() = c and - scope.getParentNode() = c - ) - } - - /** - * Holds if `value` accesses a variable `target` with scope `scope`. - */ - private predicate valueScope(Expr value, Variable target, BlockExpr scope) { - // variable access (to a non-reference) - target = value.(VariableAccess).getVariable() and - variableScope(target, scope) and - not TypeInference::inferType(value) instanceof RefType - or - // field access - valueScope(value.(FieldExpr).getContainer(), target, scope) - } - - /** - * Holds if block `a` contains block `b`, in the sense that a stack allocated variable in - * `a` may still be on the stack during execution of `b`. This is interprocedural, - * but is an overapproximation that doesn't accurately track call contexts - * (for example if `f` and `g` both call `b`, then then depending on the - * caller a variable in `f` or `g` may or may-not be on the stack during `b`). - */ - private predicate mayEncloseOnStack(BlockExpr a, BlockExpr b) { - // `b` is a child of `a` - a = b.getEnclosingBlock*() - or - // propagate through function calls - exists(CallExprBase ce | - mayEncloseOnStack(a, ce.getEnclosingBlock()) and - ce.getStaticTarget() = b.getEnclosingCallable() - ) - } - - /** - * A source that is a `RefExpr`. - */ - private class RefExprSource extends Source { - Expr targetValue; - - RefExprSource() { this.asExpr().getExpr().(RefExpr).getExpr() = targetValue } - - override Expr getTarget() { result = targetValue } - } - - /** - * A barrier for nodes inside closures, as we don't model lifetimes of - * variables through closures properly. - */ - private class ClosureBarrier extends Barrier { - ClosureBarrier() { this.asExpr().getExpr().getEnclosingCallable() instanceof ClosureExpr } - } -} diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index f2a10f4c4f74..a559ad4266e7 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.12-dev +version: 0.1.11 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 8e9b0c516ae8..e3b3765116ec 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -108,12 +108,6 @@ yaml_locations(unique int locatable: @yaml_locatable ref, @yaml_locatable = @yaml_node | @yaml_error; -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - // from prefix.dbscheme #keyset[id] @@ -170,11 +164,13 @@ named_crates( | @asm_option | @asm_piece | @asm_reg_spec +| @assoc_item | @assoc_item_list | @attr | @callable | @closure_binder | @expr +| @extern_item | @extern_item_list | @field_list | @format_args_arg @@ -353,6 +349,13 @@ asm_reg_spec_identifiers( int identifier: @name_ref ref ); +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + assoc_item_lists( unique int id: @assoc_item_list ); @@ -445,6 +448,13 @@ closure_binder_generic_param_lists( | @yield_expr ; +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + extern_item_lists( unique int id: @extern_item_list ); @@ -1901,16 +1911,19 @@ infer_type_reprs( @item = @adt -| @assoc_item +| @const | @extern_block | @extern_crate -| @extern_item +| @function | @impl +| @macro_call | @macro_def | @macro_rules | @module +| @static | @trait | @trait_alias +| @type_alias | @use ; @@ -2705,13 +2718,6 @@ adt_derive_macro_expansions( int derive_macro_expansion: @macro_items ref ); -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - block_exprs( unique int id: @block_expr ); @@ -2769,6 +2775,68 @@ call_expr_functions( int function: @expr ref ); +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_generic_param_lists( + int id: @const ref, + int generic_param_list: @generic_param_list 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, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +#keyset[id] +const_where_clauses( + int id: @const ref, + int where_clause: @where_clause ref +); + +#keyset[id] +const_has_implementation( + int id: @const ref +); + extern_blocks( unique int id: @extern_block ); @@ -2826,12 +2894,81 @@ extern_crate_visibilities( int visibility: @visibility ref ); -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_bodies( + int id: @function ref, + int body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + 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, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +#keyset[id] +function_has_implementation( + int id: @function ref +); impls( unique int id: @impl @@ -2907,6 +3044,35 @@ looping_expr_loop_bodies( int loop_body: @block_expr ref ); +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_macro_call_expansions( + int id: @macro_call ref, + int macro_call_expansion: @ast_node ref +); + macro_defs( unique int id: @macro_def ); @@ -3037,6 +3203,56 @@ path_pats( unique int id: @path_pat ); +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + 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_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + struct_exprs( unique int id: @struct_expr ); @@ -3166,89 +3382,79 @@ tuple_struct_pat_fields( int field: @pat ref ); -uses( - unique int id: @use -); +type_aliases( + unique int id: @type_alias +); #keyset[id, index] -use_attrs( - int id: @use ref, +type_alias_attrs( + int id: @type_alias ref, int index: int ref, int attr: @attr ref ); #keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref ); #keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref +type_alias_is_default( + int id: @type_alias ref ); #keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref +type_alias_names( + int id: @type_alias ref, + int name: @name ref ); #keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list ref +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref ); #keyset[id] -const_is_const( - int id: @const ref +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref ); #keyset[id] -const_is_default( - int id: @const ref +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref ); #keyset[id] -const_names( - int id: @const ref, - int name: @name ref +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref ); -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref +uses( + unique int id: @use ); -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref ); #keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref ); #keyset[id] -const_has_implementation( - int id: @const ref +use_visibilities( + int id: @use ref, + int visibility: @visibility ref ); enums( @@ -3315,82 +3521,6 @@ for_expr_pats( int pat: @pat ref ); -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - loop_exprs( unique int id: @loop_expr ); @@ -3402,85 +3532,6 @@ loop_expr_attrs( int attr: @attr ref ); -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - structs( unique int id: @struct ); @@ -3522,58 +3573,6 @@ struct_where_clauses( int where_clause: @where_clause ref ); -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - unions( unique int id: @union ); diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme deleted file mode 100644 index e3b3765116ec..000000000000 --- a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/old.dbscheme +++ /dev/null @@ -1,3632 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme deleted file mode 100644 index f72a3d8d021c..000000000000 --- a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/rust.dbscheme +++ /dev/null @@ -1,3638 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties b/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties deleted file mode 100644 index 9b83871fb9b6..000000000000 --- a/rust/ql/lib/upgrades/e3b3765116ecb8d796979f0b4787926cb8d691b5/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Add databaseMetadata relation -compatibility: full diff --git a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme b/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme deleted file mode 100644 index f72a3d8d021c..000000000000 --- a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/old.dbscheme +++ /dev/null @@ -1,3638 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @const -| @extern_block -| @extern_crate -| @function -| @impl -| @macro_call -| @macro_def -| @macro_rules -| @module -| @static -| @trait -| @trait_alias -| @type_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme b/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme deleted file mode 100644 index 8e9b0c516ae8..000000000000 --- a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/rust.dbscheme +++ /dev/null @@ -1,3633 +0,0 @@ -// generated by codegen, do not edit - -// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme -/*- 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 -); - -/*- Empty location -*/ - -empty_location( - int location: @location_default ref -); - -/*- Source location prefix -*/ - -/** - * The source location of the snapshot. - */ -sourceLocationPrefix(string prefix : string ref); - -/*- Diagnostic messages -*/ - -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 -); - -/*- Diagnostic messages: severity -*/ - -case @diagnostic.severity of - 10 = @diagnostic_debug -| 20 = @diagnostic_info -| 30 = @diagnostic_warning -| 40 = @diagnostic_error -; - -/*- 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; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); - - -// from prefix.dbscheme -#keyset[id] -locatable_locations( - int id: @locatable ref, - int location: @location_default ref -); - - -// from schema - -@element = - @extractor_step -| @locatable -| @named_crate -| @unextracted -; - -extractor_steps( - unique int id: @extractor_step, - string action: string ref, - int duration_ms: int ref -); - -#keyset[id] -extractor_step_files( - int id: @extractor_step ref, - int file: @file ref -); - -@locatable = - @ast_node -| @crate -; - -named_crates( - unique int id: @named_crate, - string name: string ref, - int crate: @crate ref -); - -@unextracted = - @missing -| @unimplemented -; - -@ast_node = - @abi -| @addressable -| @arg_list -| @asm_dir_spec -| @asm_operand -| @asm_operand_expr -| @asm_option -| @asm_piece -| @asm_reg_spec -| @assoc_item_list -| @attr -| @callable -| @closure_binder -| @expr -| @extern_item_list -| @field_list -| @format_args_arg -| @generic_arg -| @generic_arg_list -| @generic_param -| @generic_param_list -| @item_list -| @label -| @let_else -| @macro_items -| @match_arm -| @match_arm_list -| @match_guard -| @meta -| @name -| @param_base -| @param_list -| @parenthesized_arg_list -| @pat -| @path -| @path_segment -| @rename -| @resolvable -| @ret_type_repr -| @return_type_syntax -| @source_file -| @stmt -| @stmt_list -| @struct_expr_field -| @struct_expr_field_list -| @struct_field -| @struct_pat_field -| @struct_pat_field_list -| @token -| @token_tree -| @tuple_field -| @type_bound -| @type_bound_list -| @type_repr -| @use_bound_generic_arg -| @use_bound_generic_args -| @use_tree -| @use_tree_list -| @variant_list -| @visibility -| @where_clause -| @where_pred -; - -crates( - unique int id: @crate -); - -#keyset[id] -crate_names( - int id: @crate ref, - string name: string ref -); - -#keyset[id] -crate_versions( - int id: @crate ref, - string version: string ref -); - -#keyset[id, index] -crate_cfg_options( - int id: @crate ref, - int index: int ref, - string cfg_option: string ref -); - -#keyset[id, index] -crate_named_dependencies( - int id: @crate ref, - int index: int ref, - int named_dependency: @named_crate ref -); - -missings( - unique int id: @missing -); - -unimplementeds( - unique int id: @unimplemented -); - -abis( - unique int id: @abi -); - -#keyset[id] -abi_abi_strings( - int id: @abi ref, - string abi_string: string ref -); - -@addressable = - @item -| @variant -; - -#keyset[id] -addressable_extended_canonical_paths( - int id: @addressable ref, - string extended_canonical_path: string ref -); - -#keyset[id] -addressable_crate_origins( - int id: @addressable ref, - string crate_origin: string ref -); - -arg_lists( - unique int id: @arg_list -); - -#keyset[id, index] -arg_list_args( - int id: @arg_list ref, - int index: int ref, - int arg: @expr ref -); - -asm_dir_specs( - unique int id: @asm_dir_spec -); - -@asm_operand = - @asm_const -| @asm_label -| @asm_reg_operand -| @asm_sym -; - -asm_operand_exprs( - unique int id: @asm_operand_expr -); - -#keyset[id] -asm_operand_expr_in_exprs( - int id: @asm_operand_expr ref, - int in_expr: @expr ref -); - -#keyset[id] -asm_operand_expr_out_exprs( - int id: @asm_operand_expr ref, - int out_expr: @expr ref -); - -asm_options( - unique int id: @asm_option -); - -#keyset[id] -asm_option_is_raw( - int id: @asm_option ref -); - -@asm_piece = - @asm_clobber_abi -| @asm_operand_named -| @asm_options_list -; - -asm_reg_specs( - unique int id: @asm_reg_spec -); - -#keyset[id] -asm_reg_spec_identifiers( - int id: @asm_reg_spec ref, - int identifier: @name_ref ref -); - -assoc_item_lists( - unique int id: @assoc_item_list -); - -#keyset[id, index] -assoc_item_list_assoc_items( - int id: @assoc_item_list ref, - int index: int ref, - int assoc_item: @assoc_item ref -); - -#keyset[id, index] -assoc_item_list_attrs( - int id: @assoc_item_list ref, - int index: int ref, - int attr: @attr ref -); - -attrs( - unique int id: @attr -); - -#keyset[id] -attr_meta( - int id: @attr ref, - 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 -); - -#keyset[id] -closure_binder_generic_param_lists( - int id: @closure_binder ref, - int generic_param_list: @generic_param_list ref -); - -@expr = - @array_expr_internal -| @asm_expr -| @await_expr -| @become_expr -| @binary_expr -| @break_expr -| @call_expr_base -| @cast_expr -| @closure_expr -| @continue_expr -| @field_expr -| @format_args_expr -| @if_expr -| @index_expr -| @labelable_expr -| @let_expr -| @literal_expr -| @macro_block_expr -| @macro_expr -| @match_expr -| @offset_of_expr -| @paren_expr -| @path_expr_base -| @prefix_expr -| @range_expr -| @ref_expr -| @return_expr -| @struct_expr -| @try_expr -| @tuple_expr -| @underscore_expr -| @yeet_expr -| @yield_expr -; - -extern_item_lists( - unique int id: @extern_item_list -); - -#keyset[id, index] -extern_item_list_attrs( - int id: @extern_item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -extern_item_list_extern_items( - int id: @extern_item_list ref, - int index: int ref, - int extern_item: @extern_item ref -); - -@field_list = - @struct_field_list -| @tuple_field_list -; - -format_args_args( - unique int id: @format_args_arg -); - -#keyset[id] -format_args_arg_exprs( - int id: @format_args_arg ref, - int expr: @expr ref -); - -#keyset[id] -format_args_arg_names( - int id: @format_args_arg ref, - int name: @name ref -); - -@generic_arg = - @assoc_type_arg -| @const_arg -| @lifetime_arg -| @type_arg -; - -generic_arg_lists( - unique int id: @generic_arg_list -); - -#keyset[id, index] -generic_arg_list_generic_args( - int id: @generic_arg_list ref, - int index: int ref, - int generic_arg: @generic_arg ref -); - -@generic_param = - @const_param -| @lifetime_param -| @type_param -; - -generic_param_lists( - unique int id: @generic_param_list -); - -#keyset[id, index] -generic_param_list_generic_params( - int id: @generic_param_list ref, - int index: int ref, - int generic_param: @generic_param ref -); - -item_lists( - unique int id: @item_list -); - -#keyset[id, index] -item_list_attrs( - int id: @item_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -item_list_items( - int id: @item_list ref, - int index: int ref, - int item: @item ref -); - -labels( - unique int id: @label -); - -#keyset[id] -label_lifetimes( - int id: @label ref, - int lifetime: @lifetime ref -); - -let_elses( - unique int id: @let_else -); - -#keyset[id] -let_else_block_exprs( - int id: @let_else ref, - int block_expr: @block_expr 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 -); - -match_arms( - unique int id: @match_arm -); - -#keyset[id, index] -match_arm_attrs( - int id: @match_arm ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_arm_exprs( - int id: @match_arm ref, - int expr: @expr ref -); - -#keyset[id] -match_arm_guards( - int id: @match_arm ref, - int guard: @match_guard ref -); - -#keyset[id] -match_arm_pats( - int id: @match_arm ref, - int pat: @pat ref -); - -match_arm_lists( - unique int id: @match_arm_list -); - -#keyset[id, index] -match_arm_list_arms( - int id: @match_arm_list ref, - int index: int ref, - int arm: @match_arm ref -); - -#keyset[id, index] -match_arm_list_attrs( - int id: @match_arm_list ref, - int index: int ref, - int attr: @attr ref -); - -match_guards( - unique int id: @match_guard -); - -#keyset[id] -match_guard_conditions( - int id: @match_guard ref, - int condition: @expr ref -); - -meta( - unique int id: @meta -); - -#keyset[id] -meta_exprs( - int id: @meta ref, - int expr: @expr ref -); - -#keyset[id] -meta_is_unsafe( - int id: @meta ref -); - -#keyset[id] -meta_paths( - int id: @meta ref, - int path: @path ref -); - -#keyset[id] -meta_token_trees( - int id: @meta ref, - int token_tree: @token_tree ref -); - -names( - unique int id: @name -); - -#keyset[id] -name_texts( - int id: @name ref, - string text: string ref -); - -@param_base = - @param -| @self_param -; - -#keyset[id, index] -param_base_attrs( - int id: @param_base ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -param_base_type_reprs( - int id: @param_base ref, - int type_repr: @type_repr ref -); - -param_lists( - unique int id: @param_list -); - -#keyset[id, index] -param_list_params( - int id: @param_list ref, - int index: int ref, - int param: @param ref -); - -#keyset[id] -param_list_self_params( - int id: @param_list ref, - int self_param: @self_param ref -); - -parenthesized_arg_lists( - unique int id: @parenthesized_arg_list -); - -#keyset[id, index] -parenthesized_arg_list_type_args( - int id: @parenthesized_arg_list ref, - int index: int ref, - int type_arg: @type_arg ref -); - -@pat = - @box_pat -| @const_block_pat -| @ident_pat -| @literal_pat -| @macro_pat -| @or_pat -| @paren_pat -| @path_pat -| @range_pat -| @ref_pat -| @rest_pat -| @slice_pat -| @struct_pat -| @tuple_pat -| @tuple_struct_pat -| @wildcard_pat -; - -paths( - unique int id: @path -); - -#keyset[id] -path_qualifiers( - int id: @path ref, - int qualifier: @path ref -); - -#keyset[id] -path_segments_( - int id: @path ref, - int segment: @path_segment ref -); - -path_segments( - unique int id: @path_segment -); - -#keyset[id] -path_segment_generic_arg_lists( - int id: @path_segment ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -path_segment_identifiers( - int id: @path_segment ref, - int identifier: @name_ref ref -); - -#keyset[id] -path_segment_parenthesized_arg_lists( - int id: @path_segment ref, - int parenthesized_arg_list: @parenthesized_arg_list ref -); - -#keyset[id] -path_segment_ret_types( - int id: @path_segment ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -path_segment_return_type_syntaxes( - int id: @path_segment ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -path_segment_type_reprs( - int id: @path_segment ref, - int type_repr: @type_repr ref -); - -#keyset[id] -path_segment_trait_type_reprs( - int id: @path_segment ref, - int trait_type_repr: @path_type_repr ref -); - -renames( - unique int id: @rename -); - -#keyset[id] -rename_names( - int id: @rename ref, - int name: @name ref -); - -@resolvable = - @method_call_expr -| @path_ast_node -; - -#keyset[id] -resolvable_resolved_paths( - int id: @resolvable ref, - string resolved_path: string ref -); - -#keyset[id] -resolvable_resolved_crate_origins( - int id: @resolvable ref, - string resolved_crate_origin: string ref -); - -ret_type_reprs( - unique int id: @ret_type_repr -); - -#keyset[id] -ret_type_repr_type_reprs( - int id: @ret_type_repr ref, - int type_repr: @type_repr ref -); - -return_type_syntaxes( - unique int id: @return_type_syntax -); - -source_files( - unique int id: @source_file -); - -#keyset[id, index] -source_file_attrs( - int id: @source_file ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -source_file_items( - int id: @source_file ref, - int index: int ref, - int item: @item ref -); - -@stmt = - @expr_stmt -| @item -| @let_stmt -; - -stmt_lists( - unique int id: @stmt_list -); - -#keyset[id, index] -stmt_list_attrs( - int id: @stmt_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -stmt_list_statements( - int id: @stmt_list ref, - int index: int ref, - int statement: @stmt ref -); - -#keyset[id] -stmt_list_tail_exprs( - int id: @stmt_list ref, - int tail_expr: @expr ref -); - -struct_expr_fields( - unique int id: @struct_expr_field -); - -#keyset[id, index] -struct_expr_field_attrs( - int id: @struct_expr_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_expr_field_exprs( - int id: @struct_expr_field ref, - int expr: @expr ref -); - -#keyset[id] -struct_expr_field_identifiers( - int id: @struct_expr_field ref, - int identifier: @name_ref ref -); - -struct_expr_field_lists( - unique int id: @struct_expr_field_list -); - -#keyset[id, index] -struct_expr_field_list_attrs( - int id: @struct_expr_field_list ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -struct_expr_field_list_fields( - int id: @struct_expr_field_list ref, - int index: int ref, - int field: @struct_expr_field ref -); - -#keyset[id] -struct_expr_field_list_spreads( - int id: @struct_expr_field_list ref, - int spread: @expr ref -); - -struct_fields( - unique int id: @struct_field -); - -#keyset[id, index] -struct_field_attrs( - int id: @struct_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_defaults( - int id: @struct_field ref, - int default: @expr ref -); - -#keyset[id] -struct_field_is_unsafe( - int id: @struct_field ref -); - -#keyset[id] -struct_field_names( - int id: @struct_field ref, - int name: @name ref -); - -#keyset[id] -struct_field_type_reprs( - int id: @struct_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -struct_field_visibilities( - int id: @struct_field ref, - int visibility: @visibility ref -); - -struct_pat_fields( - unique int id: @struct_pat_field -); - -#keyset[id, index] -struct_pat_field_attrs( - int id: @struct_pat_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_pat_field_identifiers( - int id: @struct_pat_field ref, - int identifier: @name_ref ref -); - -#keyset[id] -struct_pat_field_pats( - int id: @struct_pat_field ref, - int pat: @pat ref -); - -struct_pat_field_lists( - unique int id: @struct_pat_field_list -); - -#keyset[id, index] -struct_pat_field_list_fields( - int id: @struct_pat_field_list ref, - int index: int ref, - int field: @struct_pat_field ref -); - -#keyset[id] -struct_pat_field_list_rest_pats( - int id: @struct_pat_field_list ref, - int rest_pat: @rest_pat ref -); - -@token = - @comment -; - -token_trees( - unique int id: @token_tree -); - -tuple_fields( - unique int id: @tuple_field -); - -#keyset[id, index] -tuple_field_attrs( - int id: @tuple_field ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -tuple_field_type_reprs( - int id: @tuple_field ref, - int type_repr: @type_repr ref -); - -#keyset[id] -tuple_field_visibilities( - int id: @tuple_field ref, - int visibility: @visibility ref -); - -type_bounds( - unique int id: @type_bound -); - -#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, - int lifetime: @lifetime ref -); - -#keyset[id] -type_bound_type_reprs( - int id: @type_bound ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_bound_use_bound_generic_args( - int id: @type_bound ref, - int use_bound_generic_args: @use_bound_generic_args ref -); - -type_bound_lists( - unique int id: @type_bound_list -); - -#keyset[id, index] -type_bound_list_bounds( - int id: @type_bound_list ref, - int index: int ref, - int bound: @type_bound ref -); - -@type_repr = - @array_type_repr -| @dyn_trait_type_repr -| @fn_ptr_type_repr -| @for_type_repr -| @impl_trait_type_repr -| @infer_type_repr -| @macro_type_repr -| @never_type_repr -| @paren_type_repr -| @path_type_repr -| @ptr_type_repr -| @ref_type_repr -| @slice_type_repr -| @tuple_type_repr -; - -@use_bound_generic_arg = - @lifetime -| @name_ref -; - -use_bound_generic_args( - unique int id: @use_bound_generic_args -); - -#keyset[id, index] -use_bound_generic_args_use_bound_generic_args( - int id: @use_bound_generic_args ref, - int index: int ref, - int use_bound_generic_arg: @use_bound_generic_arg ref -); - -use_trees( - unique int id: @use_tree -); - -#keyset[id] -use_tree_is_glob( - int id: @use_tree ref -); - -#keyset[id] -use_tree_paths( - int id: @use_tree ref, - int path: @path ref -); - -#keyset[id] -use_tree_renames( - int id: @use_tree ref, - int rename: @rename ref -); - -#keyset[id] -use_tree_use_tree_lists( - int id: @use_tree ref, - int use_tree_list: @use_tree_list ref -); - -use_tree_lists( - unique int id: @use_tree_list -); - -#keyset[id, index] -use_tree_list_use_trees( - int id: @use_tree_list ref, - int index: int ref, - int use_tree: @use_tree ref -); - -variant_lists( - unique int id: @variant_list -); - -#keyset[id, index] -variant_list_variants( - int id: @variant_list ref, - int index: int ref, - int variant: @variant ref -); - -visibilities( - unique int id: @visibility -); - -#keyset[id] -visibility_paths( - int id: @visibility ref, - int path: @path ref -); - -where_clauses( - unique int id: @where_clause -); - -#keyset[id, index] -where_clause_predicates( - int id: @where_clause ref, - int index: int ref, - int predicate: @where_pred ref -); - -where_preds( - unique int id: @where_pred -); - -#keyset[id] -where_pred_generic_param_lists( - int id: @where_pred ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -where_pred_lifetimes( - int id: @where_pred ref, - int lifetime: @lifetime ref -); - -#keyset[id] -where_pred_type_reprs( - int id: @where_pred ref, - int type_repr: @type_repr ref -); - -#keyset[id] -where_pred_type_bound_lists( - int id: @where_pred ref, - int type_bound_list: @type_bound_list ref -); - -array_expr_internals( - unique int id: @array_expr_internal -); - -#keyset[id, index] -array_expr_internal_attrs( - int id: @array_expr_internal ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -array_expr_internal_exprs( - int id: @array_expr_internal ref, - int index: int ref, - int expr: @expr ref -); - -#keyset[id] -array_expr_internal_is_semicolon( - int id: @array_expr_internal ref -); - -array_type_reprs( - unique int id: @array_type_repr -); - -#keyset[id] -array_type_repr_const_args( - int id: @array_type_repr ref, - int const_arg: @const_arg ref -); - -#keyset[id] -array_type_repr_element_type_reprs( - int id: @array_type_repr ref, - int element_type_repr: @type_repr ref -); - -asm_clobber_abis( - unique int id: @asm_clobber_abi -); - -asm_consts( - unique int id: @asm_const -); - -#keyset[id] -asm_const_exprs( - int id: @asm_const ref, - int expr: @expr ref -); - -#keyset[id] -asm_const_is_const( - int id: @asm_const ref -); - -asm_exprs( - unique int id: @asm_expr -); - -#keyset[id, index] -asm_expr_asm_pieces( - int id: @asm_expr ref, - int index: int ref, - int asm_piece: @asm_piece ref -); - -#keyset[id, index] -asm_expr_attrs( - int id: @asm_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -asm_expr_templates( - int id: @asm_expr ref, - int index: int ref, - int template: @expr ref -); - -asm_labels( - unique int id: @asm_label -); - -#keyset[id] -asm_label_block_exprs( - int id: @asm_label ref, - int block_expr: @block_expr ref -); - -asm_operand_nameds( - unique int id: @asm_operand_named -); - -#keyset[id] -asm_operand_named_asm_operands( - int id: @asm_operand_named ref, - int asm_operand: @asm_operand ref -); - -#keyset[id] -asm_operand_named_names( - int id: @asm_operand_named ref, - int name: @name ref -); - -asm_options_lists( - unique int id: @asm_options_list -); - -#keyset[id, index] -asm_options_list_asm_options( - int id: @asm_options_list ref, - int index: int ref, - int asm_option: @asm_option ref -); - -asm_reg_operands( - unique int id: @asm_reg_operand -); - -#keyset[id] -asm_reg_operand_asm_dir_specs( - int id: @asm_reg_operand ref, - int asm_dir_spec: @asm_dir_spec ref -); - -#keyset[id] -asm_reg_operand_asm_operand_exprs( - int id: @asm_reg_operand ref, - int asm_operand_expr: @asm_operand_expr ref -); - -#keyset[id] -asm_reg_operand_asm_reg_specs( - int id: @asm_reg_operand ref, - int asm_reg_spec: @asm_reg_spec ref -); - -asm_syms( - unique int id: @asm_sym -); - -#keyset[id] -asm_sym_paths( - int id: @asm_sym ref, - int path: @path ref -); - -assoc_type_args( - unique int id: @assoc_type_arg -); - -#keyset[id] -assoc_type_arg_const_args( - int id: @assoc_type_arg ref, - int const_arg: @const_arg ref -); - -#keyset[id] -assoc_type_arg_generic_arg_lists( - int id: @assoc_type_arg ref, - int generic_arg_list: @generic_arg_list ref -); - -#keyset[id] -assoc_type_arg_identifiers( - int id: @assoc_type_arg ref, - int identifier: @name_ref ref -); - -#keyset[id] -assoc_type_arg_param_lists( - int id: @assoc_type_arg ref, - int param_list: @param_list ref -); - -#keyset[id] -assoc_type_arg_ret_types( - int id: @assoc_type_arg ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -assoc_type_arg_return_type_syntaxes( - int id: @assoc_type_arg ref, - int return_type_syntax: @return_type_syntax ref -); - -#keyset[id] -assoc_type_arg_type_reprs( - int id: @assoc_type_arg ref, - int type_repr: @type_repr ref -); - -#keyset[id] -assoc_type_arg_type_bound_lists( - int id: @assoc_type_arg ref, - int type_bound_list: @type_bound_list ref -); - -await_exprs( - unique int id: @await_expr -); - -#keyset[id, index] -await_expr_attrs( - int id: @await_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -await_expr_exprs( - int id: @await_expr ref, - int expr: @expr ref -); - -become_exprs( - unique int id: @become_expr -); - -#keyset[id, index] -become_expr_attrs( - int id: @become_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -become_expr_exprs( - int id: @become_expr ref, - int expr: @expr ref -); - -binary_exprs( - unique int id: @binary_expr -); - -#keyset[id, index] -binary_expr_attrs( - int id: @binary_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -binary_expr_lhs( - int id: @binary_expr ref, - int lhs: @expr ref -); - -#keyset[id] -binary_expr_operator_names( - int id: @binary_expr ref, - string operator_name: string ref -); - -#keyset[id] -binary_expr_rhs( - int id: @binary_expr ref, - int rhs: @expr ref -); - -box_pats( - unique int id: @box_pat -); - -#keyset[id] -box_pat_pats( - int id: @box_pat ref, - int pat: @pat ref -); - -break_exprs( - unique int id: @break_expr -); - -#keyset[id, index] -break_expr_attrs( - int id: @break_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -break_expr_exprs( - int id: @break_expr ref, - int expr: @expr ref -); - -#keyset[id] -break_expr_lifetimes( - int id: @break_expr ref, - 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 -); - -#keyset[id, index] -cast_expr_attrs( - int id: @cast_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -cast_expr_exprs( - int id: @cast_expr ref, - int expr: @expr ref -); - -#keyset[id] -cast_expr_type_reprs( - int id: @cast_expr ref, - int type_repr: @type_repr ref -); - -closure_exprs( - unique int id: @closure_expr -); - -#keyset[id] -closure_expr_bodies( - int id: @closure_expr ref, - int body: @expr ref -); - -#keyset[id] -closure_expr_closure_binders( - int id: @closure_expr ref, - 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_ret_types( - int id: @closure_expr ref, - int ret_type: @ret_type_repr ref -); - -comments( - unique int id: @comment, - int parent: @ast_node ref, - string text: string ref -); - -const_args( - unique int id: @const_arg -); - -#keyset[id] -const_arg_exprs( - int id: @const_arg ref, - int expr: @expr ref -); - -const_block_pats( - unique int id: @const_block_pat -); - -#keyset[id] -const_block_pat_block_exprs( - int id: @const_block_pat ref, - 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 -); - -#keyset[id, index] -const_param_attrs( - int id: @const_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_param_default_vals( - int id: @const_param ref, - 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, - int name: @name ref -); - -#keyset[id] -const_param_type_reprs( - int id: @const_param ref, - int type_repr: @type_repr ref -); - -continue_exprs( - unique int id: @continue_expr -); - -#keyset[id, index] -continue_expr_attrs( - int id: @continue_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -continue_expr_lifetimes( - int id: @continue_expr ref, - int lifetime: @lifetime ref -); - -dyn_trait_type_reprs( - unique int id: @dyn_trait_type_repr -); - -#keyset[id] -dyn_trait_type_repr_type_bound_lists( - int id: @dyn_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -expr_stmts( - unique int id: @expr_stmt -); - -#keyset[id] -expr_stmt_exprs( - int id: @expr_stmt ref, - int expr: @expr ref -); - -field_exprs( - unique int id: @field_expr -); - -#keyset[id, index] -field_expr_attrs( - int id: @field_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -field_expr_containers( - int id: @field_expr ref, - int container: @expr ref -); - -#keyset[id] -field_expr_identifiers( - int id: @field_expr ref, - int identifier: @name_ref ref -); - -fn_ptr_type_reprs( - unique int id: @fn_ptr_type_repr -); - -#keyset[id] -fn_ptr_type_repr_abis( - int id: @fn_ptr_type_repr ref, - int abi: @abi ref -); - -#keyset[id] -fn_ptr_type_repr_is_async( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_const( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_is_unsafe( - int id: @fn_ptr_type_repr ref -); - -#keyset[id] -fn_ptr_type_repr_param_lists( - int id: @fn_ptr_type_repr ref, - int param_list: @param_list ref -); - -#keyset[id] -fn_ptr_type_repr_ret_types( - int id: @fn_ptr_type_repr ref, - int ret_type: @ret_type_repr ref -); - -for_type_reprs( - unique int id: @for_type_repr -); - -#keyset[id] -for_type_repr_generic_param_lists( - int id: @for_type_repr ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -for_type_repr_type_reprs( - int id: @for_type_repr ref, - int type_repr: @type_repr ref -); - -format_args_exprs( - unique int id: @format_args_expr -); - -#keyset[id, index] -format_args_expr_args( - int id: @format_args_expr ref, - int index: int ref, - int arg: @format_args_arg ref -); - -#keyset[id, index] -format_args_expr_attrs( - int id: @format_args_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -format_args_expr_templates( - int id: @format_args_expr ref, - int template: @expr ref -); - -ident_pats( - unique int id: @ident_pat -); - -#keyset[id, index] -ident_pat_attrs( - int id: @ident_pat ref, - int index: int ref, - 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, - int name: @name ref -); - -#keyset[id] -ident_pat_pats( - int id: @ident_pat ref, - int pat: @pat ref -); - -if_exprs( - unique int id: @if_expr -); - -#keyset[id, index] -if_expr_attrs( - int id: @if_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -if_expr_conditions( - int id: @if_expr ref, - int condition: @expr ref -); - -#keyset[id] -if_expr_elses( - int id: @if_expr ref, - int else: @expr ref -); - -#keyset[id] -if_expr_thens( - int id: @if_expr ref, - int then: @block_expr ref -); - -impl_trait_type_reprs( - unique int id: @impl_trait_type_repr -); - -#keyset[id] -impl_trait_type_repr_type_bound_lists( - int id: @impl_trait_type_repr ref, - int type_bound_list: @type_bound_list ref -); - -index_exprs( - unique int id: @index_expr -); - -#keyset[id, index] -index_expr_attrs( - int id: @index_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -index_expr_bases( - int id: @index_expr ref, - int base: @expr ref -); - -#keyset[id] -index_expr_indices( - int id: @index_expr ref, - int index: @expr ref -); - -infer_type_reprs( - unique int id: @infer_type_repr -); - -@item = - @adt -| @assoc_item -| @extern_block -| @extern_crate -| @extern_item -| @impl -| @macro_def -| @macro_rules -| @module -| @trait -| @trait_alias -| @use -; - -#keyset[id] -item_attribute_macro_expansions( - int id: @item ref, - int attribute_macro_expansion: @macro_items ref -); - -@labelable_expr = - @block_expr -| @looping_expr -; - -#keyset[id] -labelable_expr_labels( - int id: @labelable_expr ref, - int label: @label ref -); - -let_exprs( - unique int id: @let_expr -); - -#keyset[id, index] -let_expr_attrs( - int id: @let_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_expr_scrutinees( - int id: @let_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -let_expr_pats( - int id: @let_expr ref, - int pat: @pat ref -); - -let_stmts( - unique int id: @let_stmt -); - -#keyset[id, index] -let_stmt_attrs( - int id: @let_stmt ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -let_stmt_initializers( - int id: @let_stmt ref, - int initializer: @expr ref -); - -#keyset[id] -let_stmt_let_elses( - int id: @let_stmt ref, - int let_else: @let_else ref -); - -#keyset[id] -let_stmt_pats( - int id: @let_stmt ref, - int pat: @pat ref -); - -#keyset[id] -let_stmt_type_reprs( - int id: @let_stmt ref, - int type_repr: @type_repr ref -); - -lifetimes( - unique int id: @lifetime -); - -#keyset[id] -lifetime_texts( - int id: @lifetime ref, - string text: string ref -); - -lifetime_args( - unique int id: @lifetime_arg -); - -#keyset[id] -lifetime_arg_lifetimes( - int id: @lifetime_arg ref, - int lifetime: @lifetime ref -); - -lifetime_params( - unique int id: @lifetime_param -); - -#keyset[id, index] -lifetime_param_attrs( - int id: @lifetime_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -lifetime_param_lifetimes( - int id: @lifetime_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -lifetime_param_type_bound_lists( - int id: @lifetime_param ref, - int type_bound_list: @type_bound_list ref -); - -literal_exprs( - unique int id: @literal_expr -); - -#keyset[id, index] -literal_expr_attrs( - int id: @literal_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -literal_expr_text_values( - int id: @literal_expr ref, - string text_value: string ref -); - -literal_pats( - unique int id: @literal_pat -); - -#keyset[id] -literal_pat_literals( - int id: @literal_pat ref, - int literal: @literal_expr ref -); - -macro_block_exprs( - unique int id: @macro_block_expr -); - -#keyset[id] -macro_block_expr_tail_exprs( - int id: @macro_block_expr ref, - int tail_expr: @expr ref -); - -#keyset[id, index] -macro_block_expr_statements( - int id: @macro_block_expr ref, - int index: int ref, - int statement: @stmt ref -); - -macro_exprs( - unique int id: @macro_expr -); - -#keyset[id] -macro_expr_macro_calls( - int id: @macro_expr ref, - int macro_call: @macro_call ref -); - -macro_pats( - unique int id: @macro_pat -); - -#keyset[id] -macro_pat_macro_calls( - int id: @macro_pat ref, - int macro_call: @macro_call ref -); - -macro_type_reprs( - unique int id: @macro_type_repr -); - -#keyset[id] -macro_type_repr_macro_calls( - int id: @macro_type_repr ref, - int macro_call: @macro_call ref -); - -match_exprs( - unique int id: @match_expr -); - -#keyset[id, index] -match_expr_attrs( - int id: @match_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -match_expr_scrutinees( - int id: @match_expr ref, - int scrutinee: @expr ref -); - -#keyset[id] -match_expr_match_arm_lists( - int id: @match_expr ref, - int match_arm_list: @match_arm_list ref -); - -name_refs( - unique int id: @name_ref -); - -#keyset[id] -name_ref_texts( - int id: @name_ref ref, - string text: string ref -); - -never_type_reprs( - unique int id: @never_type_repr -); - -offset_of_exprs( - unique int id: @offset_of_expr -); - -#keyset[id, index] -offset_of_expr_attrs( - int id: @offset_of_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -offset_of_expr_fields( - int id: @offset_of_expr ref, - int index: int ref, - int field: @name_ref ref -); - -#keyset[id] -offset_of_expr_type_reprs( - int id: @offset_of_expr ref, - int type_repr: @type_repr ref -); - -or_pats( - unique int id: @or_pat -); - -#keyset[id, index] -or_pat_pats( - int id: @or_pat ref, - int index: int ref, - int pat: @pat ref -); - -params( - unique int id: @param -); - -#keyset[id] -param_pats( - int id: @param ref, - int pat: @pat ref -); - -paren_exprs( - unique int id: @paren_expr -); - -#keyset[id, index] -paren_expr_attrs( - int id: @paren_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -paren_expr_exprs( - int id: @paren_expr ref, - int expr: @expr ref -); - -paren_pats( - unique int id: @paren_pat -); - -#keyset[id] -paren_pat_pats( - int id: @paren_pat ref, - int pat: @pat ref -); - -paren_type_reprs( - unique int id: @paren_type_repr -); - -#keyset[id] -paren_type_repr_type_reprs( - int id: @paren_type_repr ref, - int type_repr: @type_repr ref -); - -@path_ast_node = - @path_expr -| @path_pat -| @struct_expr -| @struct_pat -| @tuple_struct_pat -; - -#keyset[id] -path_ast_node_paths( - int id: @path_ast_node ref, - int path: @path ref -); - -@path_expr_base = - @path_expr -; - -path_type_reprs( - unique int id: @path_type_repr -); - -#keyset[id] -path_type_repr_paths( - int id: @path_type_repr ref, - int path: @path ref -); - -prefix_exprs( - unique int id: @prefix_expr -); - -#keyset[id, index] -prefix_expr_attrs( - int id: @prefix_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -prefix_expr_exprs( - int id: @prefix_expr ref, - int expr: @expr ref -); - -#keyset[id] -prefix_expr_operator_names( - int id: @prefix_expr ref, - string operator_name: string ref -); - -ptr_type_reprs( - unique int id: @ptr_type_repr -); - -#keyset[id] -ptr_type_repr_is_const( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_is_mut( - int id: @ptr_type_repr ref -); - -#keyset[id] -ptr_type_repr_type_reprs( - int id: @ptr_type_repr ref, - int type_repr: @type_repr ref -); - -range_exprs( - unique int id: @range_expr -); - -#keyset[id, index] -range_expr_attrs( - int id: @range_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -range_expr_ends( - int id: @range_expr ref, - int end: @expr ref -); - -#keyset[id] -range_expr_operator_names( - int id: @range_expr ref, - string operator_name: string ref -); - -#keyset[id] -range_expr_starts( - int id: @range_expr ref, - int start: @expr ref -); - -range_pats( - unique int id: @range_pat -); - -#keyset[id] -range_pat_ends( - int id: @range_pat ref, - int end: @pat ref -); - -#keyset[id] -range_pat_operator_names( - int id: @range_pat ref, - string operator_name: string ref -); - -#keyset[id] -range_pat_starts( - int id: @range_pat ref, - int start: @pat ref -); - -ref_exprs( - unique int id: @ref_expr -); - -#keyset[id, index] -ref_expr_attrs( - int id: @ref_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -ref_expr_exprs( - int id: @ref_expr ref, - 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, - int pat: @pat ref -); - -ref_type_reprs( - unique int id: @ref_type_repr -); - -#keyset[id] -ref_type_repr_is_mut( - int id: @ref_type_repr ref -); - -#keyset[id] -ref_type_repr_lifetimes( - int id: @ref_type_repr ref, - int lifetime: @lifetime ref -); - -#keyset[id] -ref_type_repr_type_reprs( - int id: @ref_type_repr ref, - int type_repr: @type_repr ref -); - -rest_pats( - unique int id: @rest_pat -); - -#keyset[id, index] -rest_pat_attrs( - int id: @rest_pat ref, - int index: int ref, - int attr: @attr ref -); - -return_exprs( - unique int id: @return_expr -); - -#keyset[id, index] -return_expr_attrs( - int id: @return_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -return_expr_exprs( - int id: @return_expr ref, - int expr: @expr ref -); - -self_params( - unique int id: @self_param -); - -#keyset[id] -self_param_is_ref( - int id: @self_param ref -); - -#keyset[id] -self_param_is_mut( - int id: @self_param ref -); - -#keyset[id] -self_param_lifetimes( - int id: @self_param ref, - int lifetime: @lifetime ref -); - -#keyset[id] -self_param_names( - int id: @self_param ref, - int name: @name ref -); - -slice_pats( - unique int id: @slice_pat -); - -#keyset[id, index] -slice_pat_pats( - int id: @slice_pat ref, - int index: int ref, - int pat: @pat ref -); - -slice_type_reprs( - unique int id: @slice_type_repr -); - -#keyset[id] -slice_type_repr_type_reprs( - int id: @slice_type_repr ref, - int type_repr: @type_repr ref -); - -struct_field_lists( - unique int id: @struct_field_list -); - -#keyset[id, index] -struct_field_list_fields( - int id: @struct_field_list ref, - int index: int ref, - int field: @struct_field ref -); - -try_exprs( - unique int id: @try_expr -); - -#keyset[id, index] -try_expr_attrs( - int id: @try_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -try_expr_exprs( - int id: @try_expr ref, - int expr: @expr ref -); - -tuple_exprs( - unique int id: @tuple_expr -); - -#keyset[id, index] -tuple_expr_attrs( - int id: @tuple_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id, index] -tuple_expr_fields( - int id: @tuple_expr ref, - int index: int ref, - int field: @expr ref -); - -tuple_field_lists( - unique int id: @tuple_field_list -); - -#keyset[id, index] -tuple_field_list_fields( - int id: @tuple_field_list ref, - int index: int ref, - int field: @tuple_field ref -); - -tuple_pats( - unique int id: @tuple_pat -); - -#keyset[id, index] -tuple_pat_fields( - int id: @tuple_pat ref, - int index: int ref, - int field: @pat ref -); - -tuple_type_reprs( - unique int id: @tuple_type_repr -); - -#keyset[id, index] -tuple_type_repr_fields( - int id: @tuple_type_repr ref, - int index: int ref, - int field: @type_repr ref -); - -type_args( - unique int id: @type_arg -); - -#keyset[id] -type_arg_type_reprs( - int id: @type_arg ref, - int type_repr: @type_repr ref -); - -type_params( - unique int id: @type_param -); - -#keyset[id, index] -type_param_attrs( - int id: @type_param ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_param_default_types( - int id: @type_param ref, - int default_type: @type_repr ref -); - -#keyset[id] -type_param_names( - int id: @type_param ref, - int name: @name ref -); - -#keyset[id] -type_param_type_bound_lists( - int id: @type_param ref, - int type_bound_list: @type_bound_list ref -); - -underscore_exprs( - unique int id: @underscore_expr -); - -#keyset[id, index] -underscore_expr_attrs( - int id: @underscore_expr ref, - int index: int ref, - int attr: @attr ref -); - -variants( - unique int id: @variant -); - -#keyset[id, index] -variant_attrs( - int id: @variant ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -variant_discriminants( - int id: @variant ref, - int discriminant: @expr ref -); - -#keyset[id] -variant_field_lists( - int id: @variant ref, - int field_list: @field_list ref -); - -#keyset[id] -variant_names( - int id: @variant ref, - int name: @name ref -); - -#keyset[id] -variant_visibilities( - int id: @variant ref, - int visibility: @visibility ref -); - -wildcard_pats( - unique int id: @wildcard_pat -); - -yeet_exprs( - unique int id: @yeet_expr -); - -#keyset[id, index] -yeet_expr_attrs( - int id: @yeet_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yeet_expr_exprs( - int id: @yeet_expr ref, - int expr: @expr ref -); - -yield_exprs( - unique int id: @yield_expr -); - -#keyset[id, index] -yield_expr_attrs( - int id: @yield_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -yield_expr_exprs( - int id: @yield_expr ref, - int expr: @expr ref -); - -@adt = - @enum -| @struct -| @union -; - -#keyset[id, index] -adt_derive_macro_expansions( - int id: @adt ref, - int index: int ref, - int derive_macro_expansion: @macro_items ref -); - -@assoc_item = - @const -| @function -| @macro_call -| @type_alias -; - -block_exprs( - unique int id: @block_expr -); - -#keyset[id, index] -block_expr_attrs( - int id: @block_expr ref, - int index: int ref, - 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_stmt_lists( - int id: @block_expr ref, - int stmt_list: @stmt_list ref -); - -call_exprs( - unique int id: @call_expr -); - -#keyset[id] -call_expr_functions( - int id: @call_expr ref, - int function: @expr ref -); - -extern_blocks( - unique int id: @extern_block -); - -#keyset[id] -extern_block_abis( - int id: @extern_block ref, - int abi: @abi ref -); - -#keyset[id, index] -extern_block_attrs( - int id: @extern_block ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_block_extern_item_lists( - int id: @extern_block ref, - 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 -); - -#keyset[id, index] -extern_crate_attrs( - int id: @extern_crate ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -extern_crate_identifiers( - int id: @extern_crate ref, - int identifier: @name_ref ref -); - -#keyset[id] -extern_crate_renames( - int id: @extern_crate ref, - int rename: @rename ref -); - -#keyset[id] -extern_crate_visibilities( - int id: @extern_crate ref, - int visibility: @visibility ref -); - -@extern_item = - @function -| @macro_call -| @static -| @type_alias -; - -impls( - unique int id: @impl -); - -#keyset[id] -impl_assoc_item_lists( - int id: @impl ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -impl_attrs( - int id: @impl ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -impl_generic_param_lists( - int id: @impl ref, - 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, - int self_ty: @type_repr ref -); - -#keyset[id] -impl_traits( - int id: @impl ref, - int trait: @type_repr ref -); - -#keyset[id] -impl_visibilities( - int id: @impl ref, - int visibility: @visibility ref -); - -#keyset[id] -impl_where_clauses( - int id: @impl ref, - int where_clause: @where_clause ref -); - -@looping_expr = - @for_expr -| @loop_expr -| @while_expr -; - -#keyset[id] -looping_expr_loop_bodies( - int id: @looping_expr ref, - int loop_body: @block_expr ref -); - -macro_defs( - unique int id: @macro_def -); - -#keyset[id] -macro_def_args( - int id: @macro_def ref, - int args: @token_tree ref -); - -#keyset[id, index] -macro_def_attrs( - int id: @macro_def ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_def_bodies( - int id: @macro_def ref, - int body: @token_tree ref -); - -#keyset[id] -macro_def_names( - int id: @macro_def ref, - int name: @name ref -); - -#keyset[id] -macro_def_visibilities( - int id: @macro_def ref, - int visibility: @visibility ref -); - -macro_rules( - unique int id: @macro_rules -); - -#keyset[id, index] -macro_rules_attrs( - int id: @macro_rules ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_rules_names( - int id: @macro_rules ref, - int name: @name ref -); - -#keyset[id] -macro_rules_token_trees( - int id: @macro_rules ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_rules_visibilities( - int id: @macro_rules ref, - 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_identifiers( - int id: @method_call_expr ref, - int identifier: @name_ref ref -); - -#keyset[id] -method_call_expr_receivers( - int id: @method_call_expr ref, - int receiver: @expr ref -); - -modules( - unique int id: @module -); - -#keyset[id, index] -module_attrs( - int id: @module ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -module_item_lists( - int id: @module ref, - int item_list: @item_list ref -); - -#keyset[id] -module_names( - int id: @module ref, - int name: @name ref -); - -#keyset[id] -module_visibilities( - int id: @module ref, - int visibility: @visibility ref -); - -path_exprs( - unique int id: @path_expr -); - -#keyset[id, index] -path_expr_attrs( - int id: @path_expr ref, - int index: int ref, - int attr: @attr ref -); - -path_pats( - unique int id: @path_pat -); - -struct_exprs( - unique int id: @struct_expr -); - -#keyset[id] -struct_expr_struct_expr_field_lists( - int id: @struct_expr ref, - int struct_expr_field_list: @struct_expr_field_list ref -); - -struct_pats( - unique int id: @struct_pat -); - -#keyset[id] -struct_pat_struct_pat_field_lists( - int id: @struct_pat ref, - int struct_pat_field_list: @struct_pat_field_list ref -); - -traits( - unique int id: @trait -); - -#keyset[id] -trait_assoc_item_lists( - int id: @trait ref, - int assoc_item_list: @assoc_item_list ref -); - -#keyset[id, index] -trait_attrs( - int id: @trait ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_generic_param_lists( - int id: @trait ref, - 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, - int name: @name ref -); - -#keyset[id] -trait_type_bound_lists( - int id: @trait ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_visibilities( - int id: @trait ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_where_clauses( - int id: @trait ref, - int where_clause: @where_clause ref -); - -trait_aliases( - unique int id: @trait_alias -); - -#keyset[id, index] -trait_alias_attrs( - int id: @trait_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -trait_alias_generic_param_lists( - int id: @trait_alias ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -trait_alias_names( - int id: @trait_alias ref, - int name: @name ref -); - -#keyset[id] -trait_alias_type_bound_lists( - int id: @trait_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -trait_alias_visibilities( - int id: @trait_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -trait_alias_where_clauses( - int id: @trait_alias ref, - int where_clause: @where_clause ref -); - -tuple_struct_pats( - unique int id: @tuple_struct_pat -); - -#keyset[id, index] -tuple_struct_pat_fields( - int id: @tuple_struct_pat ref, - int index: int ref, - int field: @pat ref -); - -uses( - unique int id: @use -); - -#keyset[id, index] -use_attrs( - int id: @use ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -use_use_trees( - int id: @use ref, - int use_tree: @use_tree ref -); - -#keyset[id] -use_visibilities( - int id: @use ref, - int visibility: @visibility ref -); - -consts( - unique int id: @const -); - -#keyset[id, index] -const_attrs( - int id: @const ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -const_bodies( - int id: @const ref, - int body: @expr ref -); - -#keyset[id] -const_generic_param_lists( - int id: @const ref, - int generic_param_list: @generic_param_list 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, - int name: @name ref -); - -#keyset[id] -const_type_reprs( - int id: @const ref, - int type_repr: @type_repr ref -); - -#keyset[id] -const_visibilities( - int id: @const ref, - int visibility: @visibility ref -); - -#keyset[id] -const_where_clauses( - int id: @const ref, - int where_clause: @where_clause ref -); - -#keyset[id] -const_has_implementation( - int id: @const ref -); - -enums( - unique int id: @enum -); - -#keyset[id, index] -enum_attrs( - int id: @enum ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -enum_generic_param_lists( - int id: @enum ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -enum_names( - int id: @enum ref, - int name: @name ref -); - -#keyset[id] -enum_variant_lists( - int id: @enum ref, - int variant_list: @variant_list ref -); - -#keyset[id] -enum_visibilities( - int id: @enum ref, - int visibility: @visibility ref -); - -#keyset[id] -enum_where_clauses( - int id: @enum ref, - int where_clause: @where_clause ref -); - -for_exprs( - unique int id: @for_expr -); - -#keyset[id, index] -for_expr_attrs( - int id: @for_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -for_expr_iterables( - int id: @for_expr ref, - int iterable: @expr ref -); - -#keyset[id] -for_expr_pats( - int id: @for_expr ref, - int pat: @pat ref -); - -functions( - unique int id: @function -); - -#keyset[id] -function_abis( - int id: @function ref, - int abi: @abi ref -); - -#keyset[id] -function_bodies( - int id: @function ref, - int body: @block_expr ref -); - -#keyset[id] -function_generic_param_lists( - int id: @function ref, - 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, - int name: @name ref -); - -#keyset[id] -function_ret_types( - int id: @function ref, - int ret_type: @ret_type_repr ref -); - -#keyset[id] -function_visibilities( - int id: @function ref, - int visibility: @visibility ref -); - -#keyset[id] -function_where_clauses( - int id: @function ref, - int where_clause: @where_clause ref -); - -#keyset[id] -function_has_implementation( - int id: @function ref -); - -loop_exprs( - unique int id: @loop_expr -); - -#keyset[id, index] -loop_expr_attrs( - int id: @loop_expr ref, - int index: int ref, - int attr: @attr ref -); - -macro_calls( - unique int id: @macro_call -); - -#keyset[id, index] -macro_call_attrs( - int id: @macro_call ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -macro_call_paths( - int id: @macro_call ref, - int path: @path ref -); - -#keyset[id] -macro_call_token_trees( - int id: @macro_call ref, - int token_tree: @token_tree ref -); - -#keyset[id] -macro_call_macro_call_expansions( - int id: @macro_call ref, - int macro_call_expansion: @ast_node ref -); - -statics( - unique int id: @static -); - -#keyset[id, index] -static_attrs( - int id: @static ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -static_bodies( - int id: @static ref, - 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_is_unsafe( - int id: @static ref -); - -#keyset[id] -static_names( - int id: @static ref, - int name: @name ref -); - -#keyset[id] -static_type_reprs( - int id: @static ref, - int type_repr: @type_repr ref -); - -#keyset[id] -static_visibilities( - int id: @static ref, - int visibility: @visibility ref -); - -structs( - unique int id: @struct -); - -#keyset[id, index] -struct_attrs( - int id: @struct ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -struct_field_lists_( - int id: @struct ref, - int field_list: @field_list ref -); - -#keyset[id] -struct_generic_param_lists( - int id: @struct ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -struct_names( - int id: @struct ref, - int name: @name ref -); - -#keyset[id] -struct_visibilities( - int id: @struct ref, - int visibility: @visibility ref -); - -#keyset[id] -struct_where_clauses( - int id: @struct ref, - int where_clause: @where_clause ref -); - -type_aliases( - unique int id: @type_alias -); - -#keyset[id, index] -type_alias_attrs( - int id: @type_alias ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -type_alias_generic_param_lists( - int id: @type_alias ref, - 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, - int name: @name ref -); - -#keyset[id] -type_alias_type_reprs( - int id: @type_alias ref, - int type_repr: @type_repr ref -); - -#keyset[id] -type_alias_type_bound_lists( - int id: @type_alias ref, - int type_bound_list: @type_bound_list ref -); - -#keyset[id] -type_alias_visibilities( - int id: @type_alias ref, - int visibility: @visibility ref -); - -#keyset[id] -type_alias_where_clauses( - int id: @type_alias ref, - int where_clause: @where_clause ref -); - -unions( - unique int id: @union -); - -#keyset[id, index] -union_attrs( - int id: @union ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -union_generic_param_lists( - int id: @union ref, - int generic_param_list: @generic_param_list ref -); - -#keyset[id] -union_names( - int id: @union ref, - int name: @name ref -); - -#keyset[id] -union_struct_field_lists( - int id: @union ref, - int struct_field_list: @struct_field_list ref -); - -#keyset[id] -union_visibilities( - int id: @union ref, - int visibility: @visibility ref -); - -#keyset[id] -union_where_clauses( - int id: @union ref, - int where_clause: @where_clause ref -); - -while_exprs( - unique int id: @while_expr -); - -#keyset[id, index] -while_expr_attrs( - int id: @while_expr ref, - int index: int ref, - int attr: @attr ref -); - -#keyset[id] -while_expr_conditions( - int id: @while_expr ref, - int condition: @expr ref -); diff --git a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties b/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties deleted file mode 100644 index 709ef9de611c..000000000000 --- a/rust/ql/lib/upgrades/f72a3d8d021c81c67ba046c6af15c61a79cb8163/upgrade.properties +++ /dev/null @@ -1,2 +0,0 @@ -description: Make `@assoc_item` and `@extern_item` subtypes of `@item` -compatibility: full diff --git a/rust/ql/src/change-notes/2025-06-24-access-after-lifetime-ended.md b/rust/ql/src/change-notes/2025-06-24-access-after-lifetime-ended.md deleted file mode 100644 index 7b92a3de78b7..000000000000 --- a/rust/ql/src/change-notes/2025-06-24-access-after-lifetime-ended.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rust/access-after-lifetime-ended`, for detecting pointer dereferences after the lifetime of the pointed-to object has ended. diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 478c7139d5a7..03403d6aaf4f 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.12-dev +version: 0.1.11 groups: - rust - queries diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.qhelp b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.qhelp deleted file mode 100644 index fe5dd64a270f..000000000000 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.qhelp +++ /dev/null @@ -1,50 +0,0 @@ - - - - -

    -Dereferencing a pointer after the lifetime of its target has ended causes undefined behavior. Memory -may be corrupted, causing the program to crash or behave incorrectly, in some cases exposing the program -to potential attacks. -

    - -
    - - -

    -When dereferencing a pointer in unsafe code, take care that the pointer is still valid -at the time it is dereferenced. Code may need to be rearranged or changed to extend lifetimes. If -possible, rewrite the code using safe Rust types to avoid this kind of problem altogether. -

    - -
    - - -

    -In the following example, val is local to get_pointer so its lifetime -ends when that function returns. However, a pointer to val is returned and dereferenced -after that lifetime has ended, causing undefined behavior: -

    - - - -

    -One way to fix this is to change the return type of the function from a pointer to a Box, -which ensures that the value it points to remains on the heap for the lifetime of the Box -itself. Note that there is no longer a need for an unsafe block as the code no longer -handles pointers directly: -

    - - - -
    - - -
  • Rust Documentation: Behavior considered undefined >> Dangling pointers.
  • -
  • Rust Documentation: Module ptr - Safety.
  • -
  • Massachusetts Institute of Technology: Unsafe Rust - Dereferencing a Raw Pointer.
  • - -
    -
    diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql deleted file mode 100644 index b4f652668b71..000000000000 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetime.ql +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @name Access of a pointer after its lifetime has ended - * @description Dereferencing a pointer after the lifetime of its target has ended - * causes undefined behavior and may result in memory corruption. - * @kind path-problem - * @problem.severity error - * @security-severity 9.8 - * @precision medium - * @id rust/access-after-lifetime-ended - * @tags reliability - * security - * external/cwe/cwe-825 - */ - -import rust -import codeql.rust.dataflow.DataFlow -import codeql.rust.dataflow.TaintTracking -import codeql.rust.security.AccessAfterLifetimeExtensions -import AccessAfterLifetimeFlow::PathGraph - -/** - * A data flow configuration for detecting accesses to a pointer after its - * lifetime has ended. - */ -module AccessAfterLifetimeConfig implements DataFlow::ConfigSig { - predicate isSource(DataFlow::Node node) { node instanceof AccessAfterLifetime::Source } - - predicate isSink(DataFlow::Node node) { node instanceof AccessAfterLifetime::Sink } - - predicate isBarrier(DataFlow::Node barrier) { barrier instanceof AccessAfterLifetime::Barrier } -} - -module AccessAfterLifetimeFlow = TaintTracking::Global; - -from - AccessAfterLifetimeFlow::PathNode sourceNode, AccessAfterLifetimeFlow::PathNode sinkNode, - Variable target -where - // flow from a pointer or reference to the dereference - AccessAfterLifetimeFlow::flowPath(sourceNode, sinkNode) and - // check that the dereference is outside the lifetime of the target - AccessAfterLifetime::dereferenceAfterLifetime(sourceNode.getNode(), sinkNode.getNode(), target) and - // include only results inside `unsafe` blocks, as other results tend to be false positives - ( - sinkNode.getNode().asExpr().getExpr().getEnclosingBlock*().isUnsafe() or - sinkNode.getNode().asExpr().getExpr().getEnclosingCallable().(Function).isUnsafe() - ) and - // exclude cases with sources / sinks in macros, since these results are difficult to interpret - not sourceNode.getNode().asExpr().getExpr().isFromMacroExpansion() and - not sinkNode.getNode().asExpr().getExpr().isFromMacroExpansion() -select sinkNode.getNode(), sourceNode, sinkNode, - "Access of a pointer to $@ after its lifetime has ended.", target, target.toString() diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeBad.rs b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeBad.rs deleted file mode 100644 index b2512f9424f2..000000000000 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeBad.rs +++ /dev/null @@ -1,19 +0,0 @@ - -fn get_pointer() -> *const i64 { - let val = 123; - - &val -} // lifetime of `val` ends here, the pointer becomes dangling - -fn example() { - let ptr = get_pointer(); - let dereferenced_ptr; - - // ... - - unsafe { - dereferenced_ptr = *ptr; // BAD: dereferences `ptr` after the lifetime of `val` has ended - } - - // ... -} diff --git a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeGood.rs b/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeGood.rs deleted file mode 100644 index 84f19a8a6c90..000000000000 --- a/rust/ql/src/queries/security/CWE-825/AccessAfterLifetimeGood.rs +++ /dev/null @@ -1,17 +0,0 @@ - -fn get_box() -> Box { - let val = 123; - - Box::new(val) // copies `val` onto the heap, where it remains for the lifetime of the `Box`. -} - -fn example() { - let ptr = get_box(); - let dereferenced_ptr; - - // ... - - dereferenced_ptr = *ptr; // GOOD - - // ... -} diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi.expected b/rust/ql/test/extractor-tests/generated/Abi/Abi.expected index 158233ee757b..1184fc0e3742 100644 --- a/rust/ql/test/extractor-tests/generated/Abi/Abi.expected +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi.expected @@ -1,4 +1 @@ -instances -| gen_abi.rs:7:5:7:14 | Abi | -getAbiString -| gen_abi.rs:7:5:7:14 | Abi | "C" | +| gen_abi.rs:7:5:7:14 | Abi | hasAbiString: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi.ql b/rust/ql/test/extractor-tests/generated/Abi/Abi.ql index bbf211911a47..3c0fd40eaeb3 100644 --- a/rust/ql/test/extractor-tests/generated/Abi/Abi.ql +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Abi x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAbiString(Abi x, string getAbiString) { - toBeTested(x) and not x.isUnknown() and getAbiString = x.getAbiString() -} +from Abi x, string hasAbiString +where + toBeTested(x) and + not x.isUnknown() and + if x.hasAbiString() then hasAbiString = "yes" else hasAbiString = "no" +select x, "hasAbiString:", hasAbiString diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected new file mode 100644 index 000000000000..278aa2d83252 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.expected @@ -0,0 +1 @@ +| gen_abi.rs:7:5:7:14 | Abi | "C" | diff --git a/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.ql b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.ql new file mode 100644 index 000000000000..77104019b328 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Abi/Abi_getAbiString.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Abi x +where toBeTested(x) and not x.isUnknown() +select x, x.getAbiString() diff --git a/rust/ql/test/extractor-tests/generated/Abi/Cargo.lock b/rust/ql/test/extractor-tests/generated/Abi/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Abi/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected index cf6f3a3a0587..86eca9460ef4 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.expected @@ -1,6 +1 @@ -instances -| gen_arg_list.rs:7:8:7:16 | ArgList | -getArg -| gen_arg_list.rs:7:8:7:16 | ArgList | 0 | gen_arg_list.rs:7:9:7:9 | 1 | -| gen_arg_list.rs:7:8:7:16 | ArgList | 1 | gen_arg_list.rs:7:12:7:12 | 2 | -| gen_arg_list.rs:7:8:7:16 | ArgList | 2 | gen_arg_list.rs:7:15:7:15 | 3 | +| gen_arg_list.rs:7:8:7:16 | ArgList | getNumberOfArgs: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.ql b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.ql index 91bbcef10e62..0e8c23922b5a 100644 --- a/rust/ql/test/extractor-tests/generated/ArgList/ArgList.ql +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ArgList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getArg(ArgList x, int index, Expr getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} +from ArgList x, int getNumberOfArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfArgs = x.getNumberOfArgs() +select x, "getNumberOfArgs:", getNumberOfArgs diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected new file mode 100644 index 000000000000..2cfb771d6cb6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.expected @@ -0,0 +1,3 @@ +| gen_arg_list.rs:7:8:7:16 | ArgList | 0 | gen_arg_list.rs:7:9:7:9 | 1 | +| gen_arg_list.rs:7:8:7:16 | ArgList | 1 | gen_arg_list.rs:7:12:7:12 | 2 | +| gen_arg_list.rs:7:8:7:16 | ArgList | 2 | gen_arg_list.rs:7:15:7:15 | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.ql b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.ql new file mode 100644 index 000000000000..253d13f2b56a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArgList/ArgList_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArgList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/ql/test/extractor-tests/generated/ArgList/Cargo.lock b/rust/ql/test/extractor-tests/generated/ArgList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ArgList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.expected index fbe635d579d2..31fd8036aad7 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.expected @@ -1,7 +1 @@ -instances -| gen_array_list_expr.rs:5:5:5:13 | [...] | -getExpr -| gen_array_list_expr.rs:5:5:5:13 | [...] | 0 | gen_array_list_expr.rs:5:6:5:6 | 1 | -| gen_array_list_expr.rs:5:5:5:13 | [...] | 1 | gen_array_list_expr.rs:5:9:5:9 | 2 | -| gen_array_list_expr.rs:5:5:5:13 | [...] | 2 | gen_array_list_expr.rs:5:12:5:12 | 3 | -getAttr +| gen_array_list_expr.rs:5:5:5:13 | [...] | getNumberOfExprs: | 3 | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql index 36f7bb41db93..72f74d5ce34d 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ArrayListExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExpr(ArrayListExpr x, int index, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr(index) -} - -query predicate getAttr(ArrayListExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from ArrayListExpr x, int getNumberOfExprs, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfExprs = x.getNumberOfExprs() and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "getNumberOfExprs:", getNumberOfExprs, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql new file mode 100644 index 000000000000..10a9b3d52b34 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayListExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.expected new file mode 100644 index 000000000000..ac836b145bd7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.expected @@ -0,0 +1,3 @@ +| gen_array_list_expr.rs:5:5:5:13 | [...] | 0 | gen_array_list_expr.rs:5:6:5:6 | 1 | +| gen_array_list_expr.rs:5:5:5:13 | [...] | 1 | gen_array_list_expr.rs:5:9:5:9 | 2 | +| gen_array_list_expr.rs:5:5:5:13 | [...] | 2 | gen_array_list_expr.rs:5:12:5:12 | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql new file mode 100644 index 000000000000..96d635c3c175 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayListExpr/ArrayListExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayListExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getExpr(index) diff --git a/rust/ql/test/extractor-tests/generated/ArrayListExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ArrayListExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ArrayListExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected index 39bb2b685bea..e19394137d93 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.expected @@ -1,6 +1 @@ -instances -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 | -getExpr -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 0 | gen_array_repeat_expr.rs:5:6:5:6 | 1 | -| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 1 | gen_array_repeat_expr.rs:5:9:5:10 | 10 | -getAttr +| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | getNumberOfExprs: | 2 | getNumberOfAttrs: | 0 | getRepeatOperand: | gen_array_repeat_expr.rs:5:6:5:6 | 1 | getRepeatLength: | gen_array_repeat_expr.rs:5:9:5:10 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql index 7f337fc87b55..cda59a0d6387 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr.ql @@ -2,22 +2,15 @@ import codeql.rust.elements import TestUtils -query predicate instances( - ArrayRepeatExpr x, string getRepeatOperand__label, Expr getRepeatOperand, - string getRepeatLength__label, Expr getRepeatLength -) { +from + ArrayRepeatExpr x, int getNumberOfExprs, int getNumberOfAttrs, Expr getRepeatOperand, + Expr getRepeatLength +where toBeTested(x) and not x.isUnknown() and - getRepeatOperand__label = "getRepeatOperand:" and + getNumberOfExprs = x.getNumberOfExprs() and + getNumberOfAttrs = x.getNumberOfAttrs() and getRepeatOperand = x.getRepeatOperand() and - getRepeatLength__label = "getRepeatLength:" and getRepeatLength = x.getRepeatLength() -} - -query predicate getExpr(ArrayRepeatExpr x, int index, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr(index) -} - -query predicate getAttr(ArrayRepeatExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +select x, "getNumberOfExprs:", getNumberOfExprs, "getNumberOfAttrs:", getNumberOfAttrs, + "getRepeatOperand:", getRepeatOperand, "getRepeatLength:", getRepeatLength diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql new file mode 100644 index 000000000000..30c64104eeef --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayRepeatExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected new file mode 100644 index 000000000000..ccf6290172e6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.expected @@ -0,0 +1,2 @@ +| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 0 | gen_array_repeat_expr.rs:5:6:5:6 | 1 | +| gen_array_repeat_expr.rs:5:5:5:11 | [1; 10] | 1 | gen_array_repeat_expr.rs:5:9:5:10 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql new file mode 100644 index 000000000000..63352ff7776e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/ArrayRepeatExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayRepeatExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getExpr(index) diff --git a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ArrayRepeatExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected index 98da7c6b5a96..b19154aca0b0 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.expected @@ -1,6 +1 @@ -instances -| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | -getConstArg -| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:20:7:20 | ConstArg | -getElementTypeRepr -| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:15:7:17 | i32 | +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | hasConstArg: | yes | hasElementTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql index e12f81b7b716..5ec3d499addc 100644 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ArrayTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getConstArg(ArrayTypeRepr x, ConstArg getConstArg) { - toBeTested(x) and not x.isUnknown() and getConstArg = x.getConstArg() -} - -query predicate getElementTypeRepr(ArrayTypeRepr x, TypeRepr getElementTypeRepr) { - toBeTested(x) and not x.isUnknown() and getElementTypeRepr = x.getElementTypeRepr() -} +from ArrayTypeRepr x, string hasConstArg, string hasElementTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasConstArg() then hasConstArg = "yes" else hasConstArg = "no") and + if x.hasElementTypeRepr() then hasElementTypeRepr = "yes" else hasElementTypeRepr = "no" +select x, "hasConstArg:", hasConstArg, "hasElementTypeRepr:", hasElementTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected new file mode 100644 index 000000000000..9ab029133f6b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.expected @@ -0,0 +1 @@ +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:20:7:20 | ConstArg | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql new file mode 100644 index 000000000000..f89dc93f5b83 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getConstArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getConstArg() diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected new file mode 100644 index 000000000000..86b22f2f39d8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.expected @@ -0,0 +1 @@ +| gen_array_type_repr.rs:7:14:7:21 | ArrayTypeRepr | gen_array_type_repr.rs:7:15:7:17 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql new file mode 100644 index 000000000000..f343cbd19c99 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/ArrayTypeRepr_getElementTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ArrayTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getElementTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ArrayTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql index 65680442dfb8..087663779dbd 100644 --- a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql +++ b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/AsmClobberAbi.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmClobberAbi x) { toBeTested(x) and not x.isUnknown() } +from AsmClobberAbi x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmClobberAbi/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmClobberAbi/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected index 30ed42e46f90..5a82c38127c1 100644 --- a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.expected @@ -1,4 +1 @@ -instances -| gen_asm_const.rs:8:30:8:37 | AsmConst | isConst: | yes | -getExpr -| gen_asm_const.rs:8:30:8:37 | AsmConst | gen_asm_const.rs:8:36:8:37 | 42 | +| gen_asm_const.rs:8:30:8:37 | AsmConst | hasExpr: | yes | isConst: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql index dbec4fe27e34..151d7a70fa21 100644 --- a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst.ql @@ -2,13 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmConst x, string isConst__label, string isConst) { +from AsmConst x, string hasExpr, string isConst +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and if x.isConst() then isConst = "yes" else isConst = "no" -} - -query predicate getExpr(AsmConst x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +select x, "hasExpr:", hasExpr, "isConst:", isConst diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected new file mode 100644 index 000000000000..f1bb1ffc0533 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.expected @@ -0,0 +1 @@ +| gen_asm_const.rs:8:30:8:37 | AsmConst | gen_asm_const.rs:8:36:8:37 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql new file mode 100644 index 000000000000..e01d9d86fbe3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmConst/AsmConst_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmConst x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmConst/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmConst/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmConst/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql index 2507d0e20812..0d009492422b 100644 --- a/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql +++ b/rust/ql/test/extractor-tests/generated/AsmDirSpec/AsmDirSpec.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmDirSpec x) { toBeTested(x) and not x.isUnknown() } +from AsmDirSpec x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/AsmDirSpec/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmDirSpec/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmDirSpec/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected index 2091c3814d5d..3a039fe43fe4 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.expected @@ -1,9 +1 @@ -instances -| gen_asm_expr.rs:6:9:7:59 | AsmExpr | -getAsmPiece -| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:39:7:47 | AsmOperandNamed | -| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 1 | gen_asm_expr.rs:7:50:7:58 | AsmOperandNamed | -getAttr -| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:6:9:6:25 | Attr | -getTemplate -| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:23:7:36 | "cmp {0}, {1}" | +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | getNumberOfAsmPieces: | 2 | getNumberOfAttrs: | 1 | getNumberOfTemplates: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql index 11cc082dae04..1658328f7b67 100644 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAsmPiece(AsmExpr x, int index, AsmPiece getAsmPiece) { - toBeTested(x) and not x.isUnknown() and getAsmPiece = x.getAsmPiece(index) -} - -query predicate getAttr(AsmExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTemplate(AsmExpr x, int index, Expr getTemplate) { - toBeTested(x) and not x.isUnknown() and getTemplate = x.getTemplate(index) -} +from AsmExpr x, int getNumberOfAsmPieces, int getNumberOfAttrs, int getNumberOfTemplates +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAsmPieces = x.getNumberOfAsmPieces() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfTemplates = x.getNumberOfTemplates() +select x, "getNumberOfAsmPieces:", getNumberOfAsmPieces, "getNumberOfAttrs:", getNumberOfAttrs, + "getNumberOfTemplates:", getNumberOfTemplates diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected new file mode 100644 index 000000000000..449113ff8fab --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.expected @@ -0,0 +1,2 @@ +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:39:7:47 | AsmOperandNamed | +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 1 | gen_asm_expr.rs:7:50:7:58 | AsmOperandNamed | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql new file mode 100644 index 000000000000..a29ac3d48891 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAsmPiece.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAsmPiece(index) diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected new file mode 100644 index 000000000000..1e8572997556 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.expected @@ -0,0 +1 @@ +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:6:9:6:25 | Attr | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql new file mode 100644 index 000000000000..4455caf1aa5d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected new file mode 100644 index 000000000000..fa3414743e92 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.expected @@ -0,0 +1 @@ +| gen_asm_expr.rs:6:9:7:59 | AsmExpr | 0 | gen_asm_expr.rs:7:23:7:36 | "cmp {0}, {1}" | diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql new file mode 100644 index 000000000000..71e98db67db4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getTemplate.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getTemplate(index) diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected index cbd9eac398a0..e77dfa46a42f 100644 --- a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.expected @@ -1,4 +1 @@ -instances -| gen_asm_label.rs:10:9:10:47 | AsmLabel | -getBlockExpr -| gen_asm_label.rs:10:9:10:47 | AsmLabel | gen_asm_label.rs:10:15:10:47 | { ... } | +| gen_asm_label.rs:10:9:10:47 | AsmLabel | hasBlockExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql index d2517cdd4136..fd81bc1820af 100644 --- a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmLabel x) { toBeTested(x) and not x.isUnknown() } - -query predicate getBlockExpr(AsmLabel x, BlockExpr getBlockExpr) { - toBeTested(x) and not x.isUnknown() and getBlockExpr = x.getBlockExpr() -} +from AsmLabel x, string hasBlockExpr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no" +select x, "hasBlockExpr:", hasBlockExpr diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected new file mode 100644 index 000000000000..8f99b753a284 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.expected @@ -0,0 +1 @@ +| gen_asm_label.rs:10:9:10:47 | AsmLabel | gen_asm_label.rs:10:15:10:47 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql new file mode 100644 index 000000000000..910efd74be1b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmLabel/AsmLabel_getBlockExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmLabel x +where toBeTested(x) and not x.isUnknown() +select x, x.getBlockExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmLabel/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmLabel/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmLabel/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected index 262ca3ada579..f71018339116 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.expected @@ -1,9 +1,2 @@ -instances -| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | -| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | -getInExpr -| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | -| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | -getOutExpr -| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | -| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | hasInExpr: | yes | hasOutExpr: | yes | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | hasInExpr: | yes | hasOutExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql index c8dda7a07e0b..b7ccc0b5722e 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmOperandExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getInExpr(AsmOperandExpr x, Expr getInExpr) { - toBeTested(x) and not x.isUnknown() and getInExpr = x.getInExpr() -} - -query predicate getOutExpr(AsmOperandExpr x, Expr getOutExpr) { - toBeTested(x) and not x.isUnknown() and getOutExpr = x.getOutExpr() -} +from AsmOperandExpr x, string hasInExpr, string hasOutExpr +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasInExpr() then hasInExpr = "yes" else hasInExpr = "no") and + if x.hasOutExpr() then hasOutExpr = "yes" else hasOutExpr = "no" +select x, "hasInExpr:", hasInExpr, "hasOutExpr:", hasOutExpr diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected new file mode 100644 index 000000000000..642838b0ef3c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql new file mode 100644 index 000000000000..95aec8cc53d0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getInExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getInExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected new file mode 100644 index 000000000000..642838b0ef3c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_expr.rs:8:35:8:35 | AsmOperandExpr | gen_asm_operand_expr.rs:8:35:8:35 | x | +| gen_asm_operand_expr.rs:8:46:8:46 | AsmOperandExpr | gen_asm_operand_expr.rs:8:46:8:46 | y | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql new file mode 100644 index 000000000000..a137533938a6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/AsmOperandExpr_getOutExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getOutExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmOperandExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOperandExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected index c8aec731ff8c..4f8c21cb7ef6 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.expected @@ -1,8 +1,2 @@ -instances -| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | -| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | -getAsmOperand -| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | gen_asm_operand_named.rs:8:34:8:43 | AsmRegOperand | -| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:54:8:62 | AsmRegOperand | -getName -| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:46:8:50 | input | +| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | hasAsmOperand: | yes | hasName: | no | +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | hasAsmOperand: | yes | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql index 9c900afe42e1..7cb204f6b9e6 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmOperandNamed x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAsmOperand(AsmOperandNamed x, AsmOperand getAsmOperand) { - toBeTested(x) and not x.isUnknown() and getAsmOperand = x.getAsmOperand() -} - -query predicate getName(AsmOperandNamed x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} +from AsmOperandNamed x, string hasAsmOperand, string hasName +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasAsmOperand() then hasAsmOperand = "yes" else hasAsmOperand = "no") and + if x.hasName() then hasName = "yes" else hasName = "no" +select x, "hasAsmOperand:", hasAsmOperand, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected new file mode 100644 index 000000000000..8e008a44f8aa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.expected @@ -0,0 +1,2 @@ +| gen_asm_operand_named.rs:8:34:8:43 | AsmOperandNamed | gen_asm_operand_named.rs:8:34:8:43 | AsmRegOperand | +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:54:8:62 | AsmRegOperand | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql new file mode 100644 index 000000000000..c3cd36b2ac5b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getAsmOperand.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandNamed x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmOperand() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected new file mode 100644 index 000000000000..aad90d4b5e81 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.expected @@ -0,0 +1 @@ +| gen_asm_operand_named.rs:8:46:8:62 | AsmOperandNamed | gen_asm_operand_named.rs:8:46:8:50 | input | diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql new file mode 100644 index 000000000000..a8b856ffaa82 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/AsmOperandNamed_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOperandNamed x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmOperandNamed/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOperandNamed/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql index 3247f52ea366..c9e3997ed42e 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql +++ b/rust/ql/test/extractor-tests/generated/AsmOption/AsmOption.ql @@ -2,9 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmOption x, string isRaw__label, string isRaw) { +from AsmOption x, string isRaw +where toBeTested(x) and not x.isUnknown() and - isRaw__label = "isRaw:" and if x.isRaw() then isRaw = "yes" else isRaw = "no" -} +select x, "isRaw:", isRaw diff --git a/rust/ql/test/extractor-tests/generated/AsmOption/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmOption/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOption/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected index cf9ec35d070e..692d66164f83 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.expected @@ -1,5 +1 @@ -instances -| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | -getAsmOption -| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 0 | gen_asm_options_list.rs:8:22:8:28 | AsmOption | -| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 1 | gen_asm_options_list.rs:8:31:8:35 | AsmOption | +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | getNumberOfAsmOptions: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql index a4806cce3535..77790bb85068 100644 --- a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmOptionsList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAsmOption(AsmOptionsList x, int index, AsmOption getAsmOption) { - toBeTested(x) and not x.isUnknown() and getAsmOption = x.getAsmOption(index) -} +from AsmOptionsList x, int getNumberOfAsmOptions +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAsmOptions = x.getNumberOfAsmOptions() +select x, "getNumberOfAsmOptions:", getNumberOfAsmOptions diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected new file mode 100644 index 000000000000..f159de9080ed --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.expected @@ -0,0 +1,2 @@ +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 0 | gen_asm_options_list.rs:8:22:8:28 | AsmOption | +| gen_asm_options_list.rs:8:14:8:36 | AsmOptionsList | 1 | gen_asm_options_list.rs:8:31:8:35 | AsmOption | diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql new file mode 100644 index 000000000000..06f2ba54b6e7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmOptionsList/AsmOptionsList_getAsmOption.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmOptionsList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAsmOption(index) diff --git a/rust/ql/test/extractor-tests/generated/AsmOptionsList/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmOptionsList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmOptionsList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected index a141f1a25c24..c9eca662143b 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.expected @@ -1,12 +1,2 @@ -instances -| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | -| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | -getAsmDirSpec -| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:26:8:28 | AsmDirSpec | -| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:38:8:39 | AsmDirSpec | -getAsmOperandExpr -| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:35:8:35 | AsmOperandExpr | -| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:46:8:46 | AsmOperandExpr | -getAsmRegSpec -| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:30:8:32 | AsmRegSpec | -| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:41:8:43 | AsmRegSpec | +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | hasAsmDirSpec: | yes | hasAsmOperandExpr: | yes | hasAsmRegSpec: | yes | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | hasAsmDirSpec: | yes | hasAsmOperandExpr: | yes | hasAsmRegSpec: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql index ae7a9bb84f1e..05685f3d994e 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmRegOperand x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAsmDirSpec(AsmRegOperand x, AsmDirSpec getAsmDirSpec) { - toBeTested(x) and not x.isUnknown() and getAsmDirSpec = x.getAsmDirSpec() -} - -query predicate getAsmOperandExpr(AsmRegOperand x, AsmOperandExpr getAsmOperandExpr) { - toBeTested(x) and not x.isUnknown() and getAsmOperandExpr = x.getAsmOperandExpr() -} - -query predicate getAsmRegSpec(AsmRegOperand x, AsmRegSpec getAsmRegSpec) { - toBeTested(x) and not x.isUnknown() and getAsmRegSpec = x.getAsmRegSpec() -} +from AsmRegOperand x, string hasAsmDirSpec, string hasAsmOperandExpr, string hasAsmRegSpec +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasAsmDirSpec() then hasAsmDirSpec = "yes" else hasAsmDirSpec = "no") and + (if x.hasAsmOperandExpr() then hasAsmOperandExpr = "yes" else hasAsmOperandExpr = "no") and + if x.hasAsmRegSpec() then hasAsmRegSpec = "yes" else hasAsmRegSpec = "no" +select x, "hasAsmDirSpec:", hasAsmDirSpec, "hasAsmOperandExpr:", hasAsmOperandExpr, + "hasAsmRegSpec:", hasAsmRegSpec diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected new file mode 100644 index 000000000000..e47c650ada01 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:26:8:28 | AsmDirSpec | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:38:8:39 | AsmDirSpec | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql new file mode 100644 index 000000000000..5542617aea6c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmDirSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmDirSpec() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected new file mode 100644 index 000000000000..c43a8ca14439 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:35:8:35 | AsmOperandExpr | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:46:8:46 | AsmOperandExpr | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql new file mode 100644 index 000000000000..bcda631ef9d9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmOperandExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmOperandExpr() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected new file mode 100644 index 000000000000..b1da1a4d1d43 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.expected @@ -0,0 +1,2 @@ +| gen_asm_reg_operand.rs:8:26:8:35 | AsmRegOperand | gen_asm_reg_operand.rs:8:30:8:32 | AsmRegSpec | +| gen_asm_reg_operand.rs:8:38:8:46 | AsmRegOperand | gen_asm_reg_operand.rs:8:41:8:43 | AsmRegSpec | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql new file mode 100644 index 000000000000..aaf03f132120 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegOperand/AsmRegOperand_getAsmRegSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegOperand x +where toBeTested(x) and not x.isUnknown() +select x, x.getAsmRegSpec() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegOperand/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmRegOperand/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmRegOperand/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected index 120ba8d20934..0ecd2dfbdf83 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.expected @@ -1,5 +1,2 @@ -instances -| gen_asm_reg_spec.rs:8:30:8:34 | AsmRegSpec | -| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | -getIdentifier -| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | gen_asm_reg_spec.rs:8:43:8:45 | EBX | +| gen_asm_reg_spec.rs:8:30:8:34 | AsmRegSpec | hasIdentifier: | no | +| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql index a84d2843da2b..5fce70e50f94 100644 --- a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmRegSpec x) { toBeTested(x) and not x.isUnknown() } - -query predicate getIdentifier(AsmRegSpec x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} +from AsmRegSpec x, string hasIdentifier +where + toBeTested(x) and + not x.isUnknown() and + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "hasIdentifier:", hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected new file mode 100644 index 000000000000..d40d67cb6a7e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.expected @@ -0,0 +1 @@ +| gen_asm_reg_spec.rs:8:43:8:45 | AsmRegSpec | gen_asm_reg_spec.rs:8:43:8:45 | EBX | diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql new file mode 100644 index 000000000000..3fe54bd3697b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmRegSpec/AsmRegSpec_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmRegSpec x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/AsmRegSpec/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmRegSpec/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmRegSpec/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected index e3f8fbc9ec7c..664c70d06ba1 100644 --- a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.expected @@ -1,4 +1 @@ -instances -| gen_asm_sym.rs:8:30:8:44 | AsmSym | -getPath -| gen_asm_sym.rs:8:30:8:44 | AsmSym | gen_asm_sym.rs:8:34:8:44 | my_function | +| gen_asm_sym.rs:8:30:8:44 | AsmSym | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql index d105903ad166..e7841f07f689 100644 --- a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(AsmSym x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPath(AsmSym x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} +from AsmSym x, string hasPath +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPath() then hasPath = "yes" else hasPath = "no" +select x, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected new file mode 100644 index 000000000000..0bcf012c475a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.expected @@ -0,0 +1 @@ +| gen_asm_sym.rs:8:30:8:44 | AsmSym | gen_asm_sym.rs:8:34:8:44 | my_function | diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql new file mode 100644 index 000000000000..b753181e7282 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AsmSym/AsmSym_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AsmSym x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/AsmSym/Cargo.lock b/rust/ql/test/extractor-tests/generated/AsmSym/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AsmSym/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected index 83bfd832501b..2c62ef6594b4 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.expected @@ -1,12 +1 @@ -instances -| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | -getConstArg -getGenericArgList -getIdentifier -| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:21:9:24 | Item | -getParamList -getRetType -getReturnTypeSyntax -getTypeRepr -getTypeBoundList -| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:27:9:31 | TypeBoundList | +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | hasConstArg: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasParamList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql index 1117c9341809..52095924f852 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql @@ -2,36 +2,21 @@ import codeql.rust.elements import TestUtils -query predicate instances(AssocTypeArg x) { toBeTested(x) and not x.isUnknown() } - -query predicate getConstArg(AssocTypeArg x, ConstArg getConstArg) { - toBeTested(x) and not x.isUnknown() and getConstArg = x.getConstArg() -} - -query predicate getGenericArgList(AssocTypeArg x, GenericArgList getGenericArgList) { - toBeTested(x) and not x.isUnknown() and getGenericArgList = x.getGenericArgList() -} - -query predicate getIdentifier(AssocTypeArg x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} - -query predicate getParamList(AssocTypeArg x, ParamList getParamList) { - toBeTested(x) and not x.isUnknown() and getParamList = x.getParamList() -} - -query predicate getRetType(AssocTypeArg x, RetTypeRepr getRetType) { - toBeTested(x) and not x.isUnknown() and getRetType = x.getRetType() -} - -query predicate getReturnTypeSyntax(AssocTypeArg x, ReturnTypeSyntax getReturnTypeSyntax) { - toBeTested(x) and not x.isUnknown() and getReturnTypeSyntax = x.getReturnTypeSyntax() -} - -query predicate getTypeRepr(AssocTypeArg x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getTypeBoundList(AssocTypeArg x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from + AssocTypeArg x, string hasConstArg, string hasGenericArgList, string hasIdentifier, + string hasParamList, string hasRetType, string hasReturnTypeSyntax, string hasTypeRepr, + string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasConstArg() then hasConstArg = "yes" else hasConstArg = "no") and + (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and + (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and + (if x.hasRetType() then hasRetType = "yes" else hasRetType = "no") and + (if x.hasReturnTypeSyntax() then hasReturnTypeSyntax = "yes" else hasReturnTypeSyntax = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "hasConstArg:", hasConstArg, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", + hasIdentifier, "hasParamList:", hasParamList, "hasRetType:", hasRetType, "hasReturnTypeSyntax:", + hasReturnTypeSyntax, "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql new file mode 100644 index 000000000000..6619858dfe39 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getConstArg() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql new file mode 100644 index 000000000000..09c1924f693f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericArgList() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected new file mode 100644 index 000000000000..901ebce3a552 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected @@ -0,0 +1 @@ +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:21:9:24 | Item | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql new file mode 100644 index 000000000000..ce4016622d42 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql new file mode 100644 index 000000000000..e745669c52df --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getParamList() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql new file mode 100644 index 000000000000..413b05df0d44 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getRetType() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql new file mode 100644 index 000000000000..f3929edba7ec --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getReturnTypeSyntax() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected new file mode 100644 index 000000000000..b6c9b7e740d2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_assoc_type_arg.rs:9:21:9:31 | AssocTypeArg | gen_assoc_type_arg.rs:9:27:9:31 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.ql new file mode 100644 index 000000000000..e798c8bbaa42 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.ql new file mode 100644 index 000000000000..0e4d81812edf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocTypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/Cargo.lock b/rust/ql/test/extractor-tests/generated/AssocTypeArg/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr.expected b/rust/ql/test/extractor-tests/generated/Attr/Attr.expected index 1272453173d9..e0c63af7678e 100644 --- a/rust/ql/test/extractor-tests/generated/Attr/Attr.expected +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr.expected @@ -1,4 +1 @@ -instances -| gen_attr.rs:7:5:7:20 | Attr | -getMeta -| gen_attr.rs:7:5:7:20 | Attr | gen_attr.rs:7:7:7:19 | Meta | +| gen_attr.rs:7:5:7:20 | Attr | hasMeta: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr.ql b/rust/ql/test/extractor-tests/generated/Attr/Attr.ql index 4f717cc7f4d5..b80d3089be9b 100644 --- a/rust/ql/test/extractor-tests/generated/Attr/Attr.ql +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Attr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getMeta(Attr x, Meta getMeta) { - toBeTested(x) and not x.isUnknown() and getMeta = x.getMeta() -} +from Attr x, string hasMeta +where + toBeTested(x) and + not x.isUnknown() and + if x.hasMeta() then hasMeta = "yes" else hasMeta = "no" +select x, "hasMeta:", hasMeta diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected new file mode 100644 index 000000000000..8b7c87927b29 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.expected @@ -0,0 +1 @@ +| gen_attr.rs:7:5:7:20 | Attr | gen_attr.rs:7:7:7:19 | Meta | diff --git a/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.ql b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.ql new file mode 100644 index 000000000000..dd4ed7f56efb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Attr/Attr_getMeta.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Attr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMeta() diff --git a/rust/ql/test/extractor-tests/generated/Attr/Cargo.lock b/rust/ql/test/extractor-tests/generated/Attr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Attr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected index 1135e3b3e453..9104ba77e5fe 100644 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.expected @@ -1,5 +1 @@ -instances -| gen_await_expr.rs:6:17:6:27 | await ... | -getAttr -getExpr -| gen_await_expr.rs:6:17:6:27 | await ... | gen_await_expr.rs:6:17:6:21 | foo(...) | +| gen_await_expr.rs:6:17:6:27 | await ... | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql index d98d833c9515..f78d81a3ec4f 100644 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(AwaitExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(AwaitExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(AwaitExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from AwaitExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.ql new file mode 100644 index 000000000000..9ac930312b5c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AwaitExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected new file mode 100644 index 000000000000..a1ea7809bb01 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_await_expr.rs:6:17:6:27 | await ... | gen_await_expr.rs:6:17:6:21 | foo(...) | diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.ql new file mode 100644 index 000000000000..45e9d40ec736 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/AwaitExpr/AwaitExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AwaitExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/AwaitExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/AwaitExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/AwaitExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected index 2ec05480e367..ce3e6a096909 100644 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.expected @@ -1,5 +1 @@ -instances -| gen_become_expr.rs:8:10:8:36 | become ... | -getAttr -getExpr -| gen_become_expr.rs:8:10:8:36 | become ... | gen_become_expr.rs:8:17:8:36 | fact_a(...) | +| gen_become_expr.rs:8:10:8:36 | become ... | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql index d8b5775da70f..e297230419c4 100644 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(BecomeExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(BecomeExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(BecomeExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from BecomeExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.ql new file mode 100644 index 000000000000..aac3e259a326 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BecomeExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected new file mode 100644 index 000000000000..d0cb86a0303c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_become_expr.rs:8:10:8:36 | become ... | gen_become_expr.rs:8:17:8:36 | fact_a(...) | diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.ql new file mode 100644 index 000000000000..697178d5e489 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BecomeExpr/BecomeExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BecomeExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/BecomeExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/BecomeExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/BecomeExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.expected b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.expected index f1b99f24258e..2f7a47933b1c 100644 --- a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.expected @@ -1,25 +1,5 @@ -instances -| gen_binary_expr.rs:5:5:5:9 | ... + ... | -| gen_binary_expr.rs:6:5:6:10 | ... && ... | -| gen_binary_expr.rs:7:5:7:10 | ... <= ... | -| gen_binary_expr.rs:8:5:8:9 | ... = ... | -| gen_binary_expr.rs:9:5:9:10 | ... += ... | -getAttr -getLhs -| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:5:5:5 | x | -| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:5:6:5 | x | -| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:5:7:5 | x | -| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:5:8:5 | x | -| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:5:9:5 | x | -getOperatorName -| gen_binary_expr.rs:5:5:5:9 | ... + ... | + | -| gen_binary_expr.rs:6:5:6:10 | ... && ... | && | -| gen_binary_expr.rs:7:5:7:10 | ... <= ... | <= | -| gen_binary_expr.rs:8:5:8:9 | ... = ... | = | -| gen_binary_expr.rs:9:5:9:10 | ... += ... | += | -getRhs -| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:9:5:9 | y | -| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:10:6:10 | y | -| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:10:7:10 | y | -| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:9:8:9 | y | -| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:10:9:10 | y | +| gen_binary_expr.rs:5:5:5:9 | ... + ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes | +| gen_binary_expr.rs:6:5:6:10 | ... && ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes | +| gen_binary_expr.rs:7:5:7:10 | ... <= ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes | +| gen_binary_expr.rs:8:5:8:9 | ... = ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes | +| gen_binary_expr.rs:9:5:9:10 | ... += ... | getNumberOfAttrs: | 0 | hasLhs: | yes | hasOperatorName: | yes | hasRhs: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql index 6b5bf4ba206b..87c00d18e3e6 100644 --- a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(BinaryExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(BinaryExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getLhs(BinaryExpr x, Expr getLhs) { - toBeTested(x) and not x.isUnknown() and getLhs = x.getLhs() -} - -query predicate getOperatorName(BinaryExpr x, string getOperatorName) { - toBeTested(x) and not x.isUnknown() and getOperatorName = x.getOperatorName() -} - -query predicate getRhs(BinaryExpr x, Expr getRhs) { - toBeTested(x) and not x.isUnknown() and getRhs = x.getRhs() -} +from BinaryExpr x, int getNumberOfAttrs, string hasLhs, string hasOperatorName, string hasRhs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasLhs() then hasLhs = "yes" else hasLhs = "no") and + (if x.hasOperatorName() then hasOperatorName = "yes" else hasOperatorName = "no") and + if x.hasRhs() then hasRhs = "yes" else hasRhs = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLhs:", hasLhs, "hasOperatorName:", + hasOperatorName, "hasRhs:", hasRhs diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql new file mode 100644 index 000000000000..0d4503c82bde --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BinaryExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.expected b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.expected new file mode 100644 index 000000000000..9321ce0724a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.expected @@ -0,0 +1,5 @@ +| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:5:5:5 | x | +| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:5:6:5 | x | +| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:5:7:5 | x | +| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:5:8:5 | x | +| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:5:9:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql new file mode 100644 index 000000000000..a8b21f014959 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getLhs.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BinaryExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLhs() diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.expected new file mode 100644 index 000000000000..e55ca0c63a05 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.expected @@ -0,0 +1,5 @@ +| gen_binary_expr.rs:5:5:5:9 | ... + ... | + | +| gen_binary_expr.rs:6:5:6:10 | ... && ... | && | +| gen_binary_expr.rs:7:5:7:10 | ... <= ... | <= | +| gen_binary_expr.rs:8:5:8:9 | ... = ... | = | +| gen_binary_expr.rs:9:5:9:10 | ... += ... | += | diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql new file mode 100644 index 000000000000..05da704202da --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getOperatorName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BinaryExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getOperatorName() diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.expected b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.expected new file mode 100644 index 000000000000..9bd36da5fa6a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.expected @@ -0,0 +1,5 @@ +| gen_binary_expr.rs:5:5:5:9 | ... + ... | gen_binary_expr.rs:5:9:5:9 | y | +| gen_binary_expr.rs:6:5:6:10 | ... && ... | gen_binary_expr.rs:6:10:6:10 | y | +| gen_binary_expr.rs:7:5:7:10 | ... <= ... | gen_binary_expr.rs:7:10:7:10 | y | +| gen_binary_expr.rs:8:5:8:9 | ... = ... | gen_binary_expr.rs:8:9:8:9 | y | +| gen_binary_expr.rs:9:5:9:10 | ... += ... | gen_binary_expr.rs:9:10:9:10 | y | diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql new file mode 100644 index 000000000000..8c491b7f575d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BinaryExpr/BinaryExpr_getRhs.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BinaryExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getRhs() diff --git a/rust/ql/test/extractor-tests/generated/BinaryExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/BinaryExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/BinaryExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected index 0423524834b7..b6be24d0bb73 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.expected @@ -1,11 +1,3 @@ -instances -| gen_block_expr.rs:3:28:12:1 | { ... } | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | -| gen_block_expr.rs:5:5:7:5 | { ... } | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | -| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | -getLabel -| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:5:8:11 | 'label | -getAttr -getStmtList -| gen_block_expr.rs:3:28:12:1 | { ... } | gen_block_expr.rs:3:28:12:1 | StmtList | -| gen_block_expr.rs:5:5:7:5 | { ... } | gen_block_expr.rs:5:5:7:5 | StmtList | -| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | +| gen_block_expr.rs:3:28:12:1 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | +| gen_block_expr.rs:5:5:7:5 | { ... } | hasLabel: | no | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | hasLabel: | yes | getNumberOfAttrs: | 0 | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isTry: | no | isUnsafe: | no | hasStmtList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql index 4b69689bb913..992c06a605b6 100644 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr.ql @@ -2,35 +2,21 @@ import codeql.rust.elements import TestUtils -query predicate instances( - BlockExpr x, string isAsync__label, string isAsync, string isConst__label, string isConst, - string isGen__label, string isGen, string isMove__label, string isMove, string isTry__label, - string isTry, string isUnsafe__label, string isUnsafe -) { +from + BlockExpr x, string hasLabel, int getNumberOfAttrs, string isAsync, string isConst, string isGen, + string isMove, string isTry, string isUnsafe, string hasStmtList +where toBeTested(x) and not x.isUnknown() and - isAsync__label = "isAsync:" and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and - isConst__label = "isConst:" and (if x.isConst() then isConst = "yes" else isConst = "no") and - isGen__label = "isGen:" and (if x.isGen() then isGen = "yes" else isGen = "no") and - isMove__label = "isMove:" and (if x.isMove() then isMove = "yes" else isMove = "no") and - isTry__label = "isTry:" and (if x.isTry() then isTry = "yes" else isTry = "no") and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getLabel(BlockExpr x, Label getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getAttr(BlockExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getStmtList(BlockExpr x, StmtList getStmtList) { - toBeTested(x) and not x.isUnknown() and getStmtList = x.getStmtList() -} + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and + if x.hasStmtList() then hasStmtList = "yes" else hasStmtList = "no" +select x, "hasLabel:", hasLabel, "getNumberOfAttrs:", getNumberOfAttrs, "isAsync:", isAsync, + "isConst:", isConst, "isGen:", isGen, "isMove:", isMove, "isTry:", isTry, "isUnsafe:", isUnsafe, + "hasStmtList:", hasStmtList diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql new file mode 100644 index 000000000000..b44ebf9d08d6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BlockExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected new file mode 100644 index 000000000000..a6933d65b22b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.expected @@ -0,0 +1 @@ +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:5:8:11 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql new file mode 100644 index 000000000000..25f432e2a990 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BlockExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected new file mode 100644 index 000000000000..4863264491b3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.expected @@ -0,0 +1,3 @@ +| gen_block_expr.rs:3:28:12:1 | { ... } | gen_block_expr.rs:3:28:12:1 | StmtList | +| gen_block_expr.rs:5:5:7:5 | { ... } | gen_block_expr.rs:5:5:7:5 | StmtList | +| gen_block_expr.rs:8:5:11:5 | 'label: { ... } | gen_block_expr.rs:8:13:11:5 | StmtList | diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql new file mode 100644 index 000000000000..493e9ad5d4af --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BlockExpr/BlockExpr_getStmtList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BlockExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getStmtList() diff --git a/rust/ql/test/extractor-tests/generated/BlockExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/BlockExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/BlockExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected index 67b2f917b496..8ca2412e8ff5 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.expected @@ -1,6 +1,2 @@ -instances -| gen_box_pat.rs:6:9:6:27 | box ... | -| gen_box_pat.rs:7:9:7:24 | box ...::None | -getPat -| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | ...::Some(...) | -| gen_box_pat.rs:7:9:7:24 | box ...::None | gen_box_pat.rs:7:13:7:24 | ...::None | +| gen_box_pat.rs:6:9:6:27 | box ... | hasPat: | yes | +| gen_box_pat.rs:7:9:7:24 | box ...::None | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.ql b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.ql index 3bed43b630a7..cee3b683e66d 100644 --- a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.ql +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(BoxPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPat(BoxPat x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from BoxPat x, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected new file mode 100644 index 000000000000..a43975657a84 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.expected @@ -0,0 +1,2 @@ +| gen_box_pat.rs:6:9:6:27 | box ... | gen_box_pat.rs:6:13:6:27 | ...::Some(...) | +| gen_box_pat.rs:7:9:7:24 | box ...::None | gen_box_pat.rs:7:13:7:24 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.ql b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.ql new file mode 100644 index 000000000000..d1a4ad6fca81 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BoxPat/BoxPat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BoxPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/BoxPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/BoxPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/BoxPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected index 6901bc607f49..26a3ea2d9987 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.expected @@ -1,11 +1,3 @@ -instances -| gen_break_expr.rs:7:13:7:17 | break | -| gen_break_expr.rs:12:13:12:27 | break 'label 42 | -| gen_break_expr.rs:17:13:17:27 | break 'label 42 | -getAttr -getExpr -| gen_break_expr.rs:12:13:12:27 | break 'label 42 | gen_break_expr.rs:12:26:12:27 | 42 | -| gen_break_expr.rs:17:13:17:27 | break 'label 42 | gen_break_expr.rs:17:26:17:27 | 42 | -getLifetime -| gen_break_expr.rs:12:13:12:27 | break 'label 42 | gen_break_expr.rs:12:19:12:24 | 'label | -| gen_break_expr.rs:17:13:17:27 | break 'label 42 | gen_break_expr.rs:17:19:17:24 | 'label | +| gen_break_expr.rs:7:13:7:17 | break | getNumberOfAttrs: | 0 | hasExpr: | no | hasLifetime: | no | +| gen_break_expr.rs:12:13:12:27 | break 'label 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | +| gen_break_expr.rs:17:13:17:27 | break 'label 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.ql b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.ql index c9d9fb9ee66a..1238e6e42319 100644 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.ql +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(BreakExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(BreakExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(BreakExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getLifetime(BreakExpr x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} +from BreakExpr x, int getNumberOfAttrs, string hasExpr, string hasLifetime +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasLifetime:", hasLifetime diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql new file mode 100644 index 000000000000..dca05d9b8902 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BreakExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected new file mode 100644 index 000000000000..276f1d3333be --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.expected @@ -0,0 +1,2 @@ +| gen_break_expr.rs:12:13:12:27 | break 'label 42 | gen_break_expr.rs:12:26:12:27 | 42 | +| gen_break_expr.rs:17:13:17:27 | break 'label 42 | gen_break_expr.rs:17:26:17:27 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql new file mode 100644 index 000000000000..0ae64a4d5331 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BreakExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected new file mode 100644 index 000000000000..09f1132362f6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.expected @@ -0,0 +1,2 @@ +| gen_break_expr.rs:12:13:12:27 | break 'label 42 | gen_break_expr.rs:12:19:12:24 | 'label | +| gen_break_expr.rs:17:13:17:27 | break 'label 42 | gen_break_expr.rs:17:19:17:24 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql new file mode 100644 index 000000000000..c272d79f9cfb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/BreakExpr/BreakExpr_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from BreakExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/BreakExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/BreakExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/BreakExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected index 3aaaed00da2d..31824b731a65 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.expected @@ -1,21 +1,4 @@ -instances -| gen_call_expr.rs:5:5:5:11 | foo(...) | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | -| gen_call_expr.rs:7:5:7:14 | ...(...) | -| gen_call_expr.rs:8:5:8:10 | foo(...) | -getArgList -| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:8:5:11 | ArgList | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:20:6:23 | ArgList | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:11:7:14 | ArgList | -| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:8:8:10 | ArgList | -getAttr -getArg -| gen_call_expr.rs:5:5:5:11 | foo(...) | 0 | gen_call_expr.rs:5:9:5:10 | 42 | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | 0 | gen_call_expr.rs:6:21:6:22 | 42 | -| gen_call_expr.rs:7:5:7:14 | ...(...) | 0 | gen_call_expr.rs:7:12:7:13 | 42 | -| gen_call_expr.rs:8:5:8:10 | foo(...) | 0 | gen_call_expr.rs:8:9:8:9 | 1 | -getFunction -| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] | -| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | +| gen_call_expr.rs:5:5:5:11 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:7:5:7:14 | ...(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | +| gen_call_expr.rs:8:5:8:10 | foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasFunction: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql index e16ab837325b..8abf8b2a08e0 100644 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(CallExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getArgList(CallExpr x, ArgList getArgList) { - toBeTested(x) and not x.isUnknown() and getArgList = x.getArgList() -} - -query predicate getAttr(CallExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getArg(CallExpr x, int index, Expr getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} - -query predicate getFunction(CallExpr x, Expr getFunction) { - toBeTested(x) and not x.isUnknown() and getFunction = x.getFunction() -} +from CallExpr x, string hasArgList, int getNumberOfAttrs, int getNumberOfArgs, string hasFunction +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasArgList() then hasArgList = "yes" else hasArgList = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfArgs = x.getNumberOfArgs() and + if x.hasFunction() then hasFunction = "yes" else hasFunction = "no" +select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfArgs:", + getNumberOfArgs, "hasFunction:", hasFunction diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected new file mode 100644 index 000000000000..2bf849534104 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.expected @@ -0,0 +1,4 @@ +| gen_call_expr.rs:5:5:5:11 | foo(...) | 0 | gen_call_expr.rs:5:9:5:10 | 42 | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | 0 | gen_call_expr.rs:6:21:6:22 | 42 | +| gen_call_expr.rs:7:5:7:14 | ...(...) | 0 | gen_call_expr.rs:7:12:7:13 | 42 | +| gen_call_expr.rs:8:5:8:10 | foo(...) | 0 | gen_call_expr.rs:8:9:8:9 | 1 | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql new file mode 100644 index 000000000000..37483c3e6378 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected new file mode 100644 index 000000000000..13c426db99d1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.expected @@ -0,0 +1,4 @@ +| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:8:5:11 | ArgList | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:20:6:23 | ArgList | +| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:11:7:14 | ArgList | +| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:8:8:10 | ArgList | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql new file mode 100644 index 000000000000..088f92ec06db --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getArgList() diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql new file mode 100644 index 000000000000..53b8ec257a69 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.expected new file mode 100644 index 000000000000..ecaaf15cebbc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.expected @@ -0,0 +1,4 @@ +| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | +| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | +| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] | +| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql new file mode 100644 index 000000000000..61196bcd14df --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getFunction.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getFunction() diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/CallExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/CallExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/CastExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/CastExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected index 05f618ced101..76e6f567b061 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.expected @@ -1,7 +1 @@ -instances -| gen_cast_expr.rs:5:5:5:16 | value as u64 | -getAttr -getExpr -| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:5:5:9 | value | -getTypeRepr -| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | +| gen_cast_expr.rs:5:5:5:16 | value as u64 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.ql b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.ql index 46c06b4c21cd..0c60d9f8c4e2 100644 --- a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.ql +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(CastExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(CastExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(CastExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getTypeRepr(CastExpr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from CastExpr x, int getNumberOfAttrs, string hasExpr, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql new file mode 100644 index 000000000000..afb47c82fdbd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CastExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected new file mode 100644 index 000000000000..01a710bfb533 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:5:5:9 | value | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql new file mode 100644 index 000000000000..3d8c47f13546 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CastExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.expected new file mode 100644 index 000000000000..87c07babb021 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_cast_expr.rs:5:5:5:16 | value as u64 | gen_cast_expr.rs:5:14:5:16 | u64 | diff --git a/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql new file mode 100644 index 000000000000..34ee4c5ef9df --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/CastExpr/CastExpr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from CastExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/Cargo.lock b/rust/ql/test/extractor-tests/generated/ClosureBinder/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ClosureBinder/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.expected b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.expected index dfd2bd58d077..66e669e9e9f8 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.expected @@ -1,4 +1 @@ -instances -| gen_closure_binder.rs:7:21:7:43 | ClosureBinder | -getGenericParamList -| gen_closure_binder.rs:7:21:7:43 | ClosureBinder | gen_closure_binder.rs:7:24:7:43 | <...> | +| gen_closure_binder.rs:7:21:7:43 | ClosureBinder | hasGenericParamList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql index d204c5fbde18..b099f4aa548d 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ClosureBinder x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericParamList(ClosureBinder x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} +from ClosureBinder x, string hasGenericParamList +where + toBeTested(x) and + not x.isUnknown() and + if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no" +select x, "hasGenericParamList:", hasGenericParamList diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.expected new file mode 100644 index 000000000000..f3d94f1b8fa5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.expected @@ -0,0 +1 @@ +| gen_closure_binder.rs:7:21:7:43 | ClosureBinder | gen_closure_binder.rs:7:24:7:43 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql new file mode 100644 index 000000000000..553bcf8970e3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureBinder/ClosureBinder_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureBinder x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ClosureExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected index 041669861b93..d8a9b33ce0eb 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.expected @@ -1,31 +1,5 @@ -instances -| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | yes | -getParamList -| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:5:5:7 | ParamList | -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:10:6:17 | ParamList | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:11:7:21 | ParamList | -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:5:9:7 | ParamList | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:13:11:15 | ParamList | -getAttr -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:8:6:8:17 | Attr | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:10:6:10:17 | Attr | -getParam -| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | 0 | gen_closure_expr.rs:5:6:5:6 | ... | -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | 0 | gen_closure_expr.rs:6:11:6:16 | ...: i32 | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 0 | gen_closure_expr.rs:7:12:7:17 | ...: i32 | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 1 | gen_closure_expr.rs:7:20:7:20 | ... | -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:9:6:9:6 | ... | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:11:14:11:14 | ... | -getBody -| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:9:5:13 | ... + ... | -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:26:6:34 | { ... } | -| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:23:7:27 | ... + ... | -| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:9:9:15 | YieldExpr | -| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:17:11:23 | YieldExpr | -getClosureBinder -getRetType -| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:19:6:24 | RetTypeRepr | +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasBody: | yes | hasClosureBinder: | no | isAsync: | no | isConst: | no | isGen: | no | isMove: | yes | isStatic: | no | hasRetType: | yes | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 2 | hasBody: | yes | hasClosureBinder: | no | isAsync: | yes | isConst: | no | isGen: | no | isMove: | no | isStatic: | no | hasRetType: | no | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | getNumberOfParams: | 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 | \|...\| ... | hasParamList: | yes | getNumberOfAttrs: | 1 | getNumberOfParams: | 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/ClosureExpr/ClosureExpr.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql index acf3b1306776..6a5536c5be13 100644 --- a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr.ql @@ -2,45 +2,25 @@ import codeql.rust.elements import TestUtils -query predicate instances( - ClosureExpr x, string isAsync__label, string isAsync, string isConst__label, string isConst, - string isGen__label, string isGen, string isMove__label, string isMove, string isStatic__label, - string isStatic -) { +from + ClosureExpr x, string hasParamList, int getNumberOfAttrs, int getNumberOfParams, string hasBody, + string hasClosureBinder, string isAsync, string isConst, string isGen, string isMove, + string isStatic, string hasRetType +where toBeTested(x) and not x.isUnknown() and - isAsync__label = "isAsync:" and + (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfParams = x.getNumberOfParams() 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 - isConst__label = "isConst:" and (if x.isConst() then isConst = "yes" else isConst = "no") and - isGen__label = "isGen:" and (if x.isGen() then isGen = "yes" else isGen = "no") and - isMove__label = "isMove:" and (if x.isMove() then isMove = "yes" else isMove = "no") and - isStatic__label = "isStatic:" and - if x.isStatic() then isStatic = "yes" else isStatic = "no" -} - -query predicate getParamList(ClosureExpr x, ParamList getParamList) { - toBeTested(x) and not x.isUnknown() and getParamList = x.getParamList() -} - -query predicate getAttr(ClosureExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getParam(ClosureExpr x, int index, Param getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} - -query predicate getBody(ClosureExpr x, Expr getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getClosureBinder(ClosureExpr x, ClosureBinder getClosureBinder) { - toBeTested(x) and not x.isUnknown() and getClosureBinder = x.getClosureBinder() -} - -query predicate getRetType(ClosureExpr x, RetTypeRepr getRetType) { - toBeTested(x) and not x.isUnknown() and getRetType = x.getRetType() -} + (if x.isStatic() then isStatic = "yes" else isStatic = "no") and + if x.hasRetType() then hasRetType = "yes" else hasRetType = "no" +select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, + "getNumberOfParams:", getNumberOfParams, "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/ClosureExpr/ClosureExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected new file mode 100644 index 000000000000..4de6e17d785a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.expected @@ -0,0 +1,2 @@ +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:8:6:8:17 | Attr | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:10:6:10:17 | Attr | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql new file mode 100644 index 000000000000..b32da8e541bc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected new file mode 100644 index 000000000000..d7b6180e63b2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.expected @@ -0,0 +1,5 @@ +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:9:5:13 | ... + ... | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:26:6:34 | { ... } | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:23:7:27 | ... + ... | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:9:9:15 | YieldExpr | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:17:11:23 | YieldExpr | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql new file mode 100644 index 000000000000..cee8662cc44e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql new file mode 100644 index 000000000000..fc838f8e2542 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getClosureBinder.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getClosureBinder() diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected new file mode 100644 index 000000000000..29be6ae9ef03 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.expected @@ -0,0 +1,6 @@ +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | 0 | gen_closure_expr.rs:5:6:5:6 | ... | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | 0 | gen_closure_expr.rs:6:11:6:16 | ...: i32 | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 0 | gen_closure_expr.rs:7:12:7:17 | ...: i32 | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | 1 | gen_closure_expr.rs:7:20:7:20 | ... | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | 0 | gen_closure_expr.rs:9:6:9:6 | ... | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | 0 | gen_closure_expr.rs:11:14:11:14 | ... | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql new file mode 100644 index 000000000000..06cef03f2065 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected new file mode 100644 index 000000000000..5945738433bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.expected @@ -0,0 +1,5 @@ +| gen_closure_expr.rs:5:5:5:13 | \|...\| ... | gen_closure_expr.rs:5:5:5:7 | ParamList | +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:10:6:17 | ParamList | +| gen_closure_expr.rs:7:5:7:27 | \|...\| ... | gen_closure_expr.rs:7:11:7:21 | ParamList | +| gen_closure_expr.rs:8:6:9:15 | \|...\| ... | gen_closure_expr.rs:9:5:9:7 | ParamList | +| gen_closure_expr.rs:10:6:11:23 | \|...\| ... | gen_closure_expr.rs:11:13:11:15 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql new file mode 100644 index 000000000000..d055aa69de30 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getParamList() diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected new file mode 100644 index 000000000000..d5b2095eaccf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.expected @@ -0,0 +1 @@ +| gen_closure_expr.rs:6:5:6:34 | \|...\| ... | gen_closure_expr.rs:6:19:6:24 | RetTypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql new file mode 100644 index 000000000000..acafcc710620 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ClosureExpr/ClosureExpr_getRetType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ClosureExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getRetType() diff --git a/rust/ql/test/extractor-tests/generated/Comment/Cargo.lock b/rust/ql/test/extractor-tests/generated/Comment/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Comment/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Comment/Comment.ql b/rust/ql/test/extractor-tests/generated/Comment/Comment.ql index 43aad9a404bd..7e940186748a 100644 --- a/rust/ql/test/extractor-tests/generated/Comment/Comment.ql +++ b/rust/ql/test/extractor-tests/generated/Comment/Comment.ql @@ -2,13 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Comment x, string getParent__label, AstNode getParent, string getText__label, string getText -) { +from Comment x, AstNode getParent, string getText +where toBeTested(x) and not x.isUnknown() and - getParent__label = "getParent:" and getParent = x.getParent() and - getText__label = "getText:" and getText = x.getText() -} +select x, "getParent:", getParent, "getText:", getText diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.expected b/rust/ql/test/extractor-tests/generated/Const/Const.expected index 64b20c95e261..09c791ffe4f6 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.expected +++ b/rust/ql/test/extractor-tests/generated/Const/Const.expected @@ -1,15 +1 @@ -instances -| gen_const.rs:4:5:7:22 | Const | isConst: | yes | isDefault: | no | hasImplementation: | yes | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getBody -| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:20:7:21 | 42 | -getGenericParamList -getName -| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:11:7:11 | X | -getTypeRepr -| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:14:7:16 | i32 | -getVisibility -getWhereClause +| gen_const.rs:4:5:7:22 | Const | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasBody: | yes | hasGenericParamList: | no | isConst: | yes | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const.ql b/rust/ql/test/extractor-tests/generated/Const/Const.ql index ef88f980fc0a..348f7bec1a6d 100644 --- a/rust/ql/test/extractor-tests/generated/Const/Const.ql +++ b/rust/ql/test/extractor-tests/generated/Const/Const.ql @@ -2,58 +2,37 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Const x, string isConst__label, string isConst, string isDefault__label, string isDefault, - string hasImplementation__label, string hasImplementation -) { +from + Const x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasBody, + string hasGenericParamList, string isConst, string isDefault, string hasName, string hasTypeRepr, + string hasVisibility, string hasWhereClause, string hasImplementation +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + 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.isConst() then isConst = "yes" else isConst = "no") and - isDefault__label = "isDefault:" and (if x.isDefault() then isDefault = "yes" else isDefault = "no") and - hasImplementation__label = "hasImplementation:" and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and + (if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no") and if x.hasImplementation() then hasImplementation = "yes" else hasImplementation = "no" -} - -query predicate getExtendedCanonicalPath(Const x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Const x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Const x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(Const x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getBody(Const x, Expr getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getGenericParamList(Const x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Const x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeRepr(Const x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getVisibility(Const x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Const x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasBody:", hasBody, "hasGenericParamList:", hasGenericParamList, "isConst:", isConst, + "isDefault:", isDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause, "hasImplementation:", hasImplementation diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getAttr.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getAttr.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getAttr.ql new file mode 100644 index 000000000000..0b4adeec093f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..4056751f9726 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected new file mode 100644 index 000000000000..e6653a26b918 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:20:7:21 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getBody.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.ql new file mode 100644 index 000000000000..368aa82afb41 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getCrateOrigin.ql new file mode 100644 index 000000000000..644b92409802 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..c11c4e0856d7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getGenericParamList.ql new file mode 100644 index 000000000000..6c62c3eac408 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected new file mode 100644 index 000000000000..e0c9ac085543 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getName.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:11:7:11 | X | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getName.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getName.ql new file mode 100644 index 000000000000..23698a012eb3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected new file mode 100644 index 000000000000..dde3546336aa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_const.rs:4:5:7:22 | Const | gen_const.rs:7:14:7:16 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.ql new file mode 100644 index 000000000000..4185581df19d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getVisibility.ql new file mode 100644 index 000000000000..c0599d921a0d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Const/Const_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Const/Const_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Const/Const_getWhereClause.ql new file mode 100644 index 000000000000..a6667b9b8d29 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Const/Const_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Const x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/Cargo.lock b/rust/ql/test/extractor-tests/generated/ConstArg/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ConstArg/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected index 111690872fe3..56a3b5946fa9 100644 --- a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.expected @@ -1,4 +1 @@ -instances -| gen_const_arg.rs:7:11:7:11 | ConstArg | -getExpr -| gen_const_arg.rs:7:11:7:11 | ConstArg | gen_const_arg.rs:7:11:7:11 | 3 | +| gen_const_arg.rs:7:11:7:11 | ConstArg | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.ql b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.ql index c89b791090a1..4080bf099c44 100644 --- a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.ql +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ConstArg x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExpr(ConstArg x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from ConstArg x, string hasExpr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasExpr() then hasExpr = "yes" else hasExpr = "no" +select x, "hasExpr:", hasExpr diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected new file mode 100644 index 000000000000..c26632a25e76 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.expected @@ -0,0 +1 @@ +| gen_const_arg.rs:7:11:7:11 | ConstArg | gen_const_arg.rs:7:11:7:11 | 3 | diff --git a/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql new file mode 100644 index 000000000000..702328c2aacd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstArg/ConstArg_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/ConstBlockPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected index 742ac11f9859..21feba1f729f 100644 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.expected @@ -1,4 +1 @@ -instances -| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | isConst: | yes | -getBlockExpr -| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | gen_const_block_pat.rs:6:15:6:27 | { ... } | +| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | hasBlockExpr: | yes | isConst: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql index 324b275e0071..005f8a752c1f 100644 --- a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat.ql @@ -2,13 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ConstBlockPat x, string isConst__label, string isConst) { +from ConstBlockPat x, string hasBlockExpr, string isConst +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and + (if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no") and if x.isConst() then isConst = "yes" else isConst = "no" -} - -query predicate getBlockExpr(ConstBlockPat x, BlockExpr getBlockExpr) { - toBeTested(x) and not x.isUnknown() and getBlockExpr = x.getBlockExpr() -} +select x, "hasBlockExpr:", hasBlockExpr, "isConst:", isConst diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected new file mode 100644 index 000000000000..42cdb5ef4c30 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.expected @@ -0,0 +1 @@ +| gen_const_block_pat.rs:6:9:6:27 | ConstBlockPat | gen_const_block_pat.rs:6:15:6:27 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql new file mode 100644 index 000000000000..e2c0f6440078 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstBlockPat/ConstBlockPat_getBlockExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstBlockPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getBlockExpr() diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/Cargo.lock b/rust/ql/test/extractor-tests/generated/ConstParam/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ConstParam/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected index f6067623d272..9632fea6dd54 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.expected @@ -1,8 +1 @@ -instances -| gen_const_param.rs:7:17:7:30 | ConstParam | isConst: | yes | -getAttr -getDefaultVal -getName -| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:23:7:23 | N | -getTypeRepr -| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:26:7:30 | usize | +| gen_const_param.rs:7:17:7:30 | ConstParam | getNumberOfAttrs: | 0 | hasDefaultVal: | no | isConst: | yes | hasName: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql index cfbf6f3cc45a..4f7fbab909ee 100644 --- a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam.ql @@ -2,25 +2,16 @@ import codeql.rust.elements import TestUtils -query predicate instances(ConstParam x, string isConst__label, string isConst) { +from + ConstParam x, int getNumberOfAttrs, string hasDefaultVal, string isConst, string hasName, + string hasTypeRepr +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and - if x.isConst() then isConst = "yes" else isConst = "no" -} - -query predicate getAttr(ConstParam x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getDefaultVal(ConstParam x, ConstArg getDefaultVal) { - toBeTested(x) and not x.isUnknown() and getDefaultVal = x.getDefaultVal() -} - -query predicate getName(ConstParam x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeRepr(ConstParam x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} + 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.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefaultVal:", hasDefaultVal, "isConst:", + isConst, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql new file mode 100644 index 000000000000..ed8406eecefc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstParam x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql new file mode 100644 index 000000000000..f4af24f39b73 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getDefaultVal.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getDefaultVal() diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected new file mode 100644 index 000000000000..65eb953a20b1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.expected @@ -0,0 +1 @@ +| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:23:7:23 | N | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.ql new file mode 100644 index 000000000000..7c627d43650b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected new file mode 100644 index 000000000000..5a96f2d3ad6d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_const_param.rs:7:17:7:30 | ConstParam | gen_const_param.rs:7:26:7:30 | usize | diff --git a/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql new file mode 100644 index 000000000000..d789f9eb1445 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ConstParam/ConstParam_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ConstParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ContinueExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected index e9547d569a3d..a09556b9a3ff 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.expected @@ -1,6 +1,2 @@ -instances -| gen_continue_expr.rs:7:13:7:20 | continue | -| gen_continue_expr.rs:12:13:12:27 | continue 'label | -getAttr -getLifetime -| gen_continue_expr.rs:12:13:12:27 | continue 'label | gen_continue_expr.rs:12:22:12:27 | 'label | +| gen_continue_expr.rs:7:13:7:20 | continue | getNumberOfAttrs: | 0 | hasLifetime: | no | +| gen_continue_expr.rs:12:13:12:27 | continue 'label | getNumberOfAttrs: | 0 | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql index 590b8d1faa50..9d2e2d5177d2 100644 --- a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ContinueExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ContinueExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getLifetime(ContinueExpr x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} +from ContinueExpr x, int getNumberOfAttrs, string hasLifetime +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLifetime:", hasLifetime diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql new file mode 100644 index 000000000000..d6166fe4a29a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ContinueExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected new file mode 100644 index 000000000000..3260e45d1b74 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.expected @@ -0,0 +1 @@ +| gen_continue_expr.rs:12:13:12:27 | continue 'label | gen_continue_expr.rs:12:22:12:27 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql new file mode 100644 index 000000000000..89bc6f68dd38 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ContinueExpr/ContinueExpr_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ContinueExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected index 14ff9874ffb3..af1df824814b 100644 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.expected @@ -1,4 +1 @@ -instances -| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | -getTypeBoundList -| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | gen_dyn_trait_type_repr.rs:7:17:7:21 | TypeBoundList | +| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql index e67423fadfd9..c67812dec36f 100644 --- a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(DynTraitTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeBoundList(DynTraitTypeRepr x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from DynTraitTypeRepr x, string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected new file mode 100644 index 000000000000..63b58d830c1e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_dyn_trait_type_repr.rs:7:13:7:21 | DynTraitTypeRepr | gen_dyn_trait_type_repr.rs:7:17:7:21 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql new file mode 100644 index 000000000000..f9c215991a33 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/DynTraitTypeRepr/DynTraitTypeRepr_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from DynTraitTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected index 45154c93e487..cefb56b3334d 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.expected +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.expected @@ -1,14 +1 @@ -instances -| gen_enum.rs:4:5:7:34 | enum E | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getDeriveMacroExpansion -getAttr -getGenericParamList -getName -| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:10:7:10 | E | -getVariantList -| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:12:7:34 | VariantList | -getVisibility -getWhereClause +| gen_enum.rs:4:5:7:34 | enum E | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfDeriveMacroExpansions: | 0 | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasVariantList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql index e5c4c12693e9..4c7f7a835ac6 100644 --- a/rust/ql/test/extractor-tests/generated/Enum/Enum.ql +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum.ql @@ -2,46 +2,33 @@ import codeql.rust.elements import TestUtils -query predicate instances(Enum x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Enum x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Enum x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Enum x, MacroItems getAttributeMacroExpansion) { +from + Enum x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, + int getNumberOfDeriveMacroExpansions, int getNumberOfAttrs, string hasGenericParamList, + string hasName, string hasVariantList, string hasVisibility, string hasWhereClause +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getDeriveMacroExpansion(Enum x, int index, MacroItems getDeriveMacroExpansion) { - toBeTested(x) and not x.isUnknown() and getDeriveMacroExpansion = x.getDeriveMacroExpansion(index) -} - -query predicate getAttr(Enum x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(Enum x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Enum x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getVariantList(Enum x, VariantList getVariantList) { - toBeTested(x) and not x.isUnknown() and getVariantList = x.getVariantList() -} - -query predicate getVisibility(Enum x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Enum x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfDeriveMacroExpansions = x.getNumberOfDeriveMacroExpansions() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasVariantList() then hasVariantList = "yes" else hasVariantList = "no") and + (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and + if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfDeriveMacroExpansions:", + getNumberOfDeriveMacroExpansions, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "hasName:", hasName, "hasVariantList:", hasVariantList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttr.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttr.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttr.ql new file mode 100644 index 000000000000..b2ffb4b5666d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..6f0623348c4c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql new file mode 100644 index 000000000000..07fdc2fe5cde --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.ql new file mode 100644 index 000000000000..1bb9710f97db --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getDeriveMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getDeriveMacroExpansion(index) diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..fa456ecd9d03 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql new file mode 100644 index 000000000000..79486fad3eb5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected new file mode 100644 index 000000000000..0e5f3660d5ee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.expected @@ -0,0 +1 @@ +| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:10:7:10 | E | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.ql new file mode 100644 index 000000000000..218e5ee494b1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected new file mode 100644 index 000000000000..4827f814fac6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.expected @@ -0,0 +1 @@ +| gen_enum.rs:4:5:7:34 | enum E | gen_enum.rs:7:12:7:34 | VariantList | diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.ql new file mode 100644 index 000000000000..35af7d9d396f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVariantList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getVariantList() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVisibility.ql new file mode 100644 index 000000000000..b437e30e2ca8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Enum/Enum_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Enum/Enum_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Enum/Enum_getWhereClause.ql new file mode 100644 index 000000000000..b9aaa3f34993 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Enum/Enum_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Enum x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/Cargo.lock b/rust/ql/test/extractor-tests/generated/ExprStmt/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ExprStmt/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.expected b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.expected index 35db91b7cfb7..61f85c10f9e6 100644 --- a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.expected +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.expected @@ -1,6 +1,2 @@ -instances -| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | -| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | -getExpr -| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | start(...) | -| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | finish(...) | +| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | hasExpr: | yes | +| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.ql b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.ql index 34995cf50149..977516d1eea1 100644 --- a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.ql +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ExprStmt x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExpr(ExprStmt x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from ExprStmt x, string hasExpr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasExpr() then hasExpr = "yes" else hasExpr = "no" +select x, "hasExpr:", hasExpr diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected new file mode 100644 index 000000000000..1cacf1e84241 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.expected @@ -0,0 +1,2 @@ +| gen_expr_stmt.rs:5:5:5:12 | ExprStmt | gen_expr_stmt.rs:5:5:5:11 | start(...) | +| gen_expr_stmt.rs:6:5:6:13 | ExprStmt | gen_expr_stmt.rs:6:5:6:12 | finish(...) | diff --git a/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql new file mode 100644 index 000000000000..df142202a02d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExprStmt/ExprStmt_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExprStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/Cargo.lock b/rust/ql/test/extractor-tests/generated/ExternBlock/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected index 8e061f24a562..9c06abfad701 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.expected @@ -1,10 +1 @@ -instances -| gen_extern_block.rs:7:5:9:5 | ExternBlock | isUnsafe: | no | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAbi -| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:5:7:14 | Abi | -getAttr -getExternItemList -| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:16:9:5 | ExternItemList | +| gen_extern_block.rs:7:5:9:5 | ExternBlock | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasAbi: | yes | getNumberOfAttrs: | 0 | hasExternItemList: | yes | isUnsafe: | no | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql index 2f07e5dfcae3..e7ef0f90fe93 100644 --- a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock.ql @@ -2,35 +2,28 @@ import codeql.rust.elements import TestUtils -query predicate instances(ExternBlock x, string isUnsafe__label, string isUnsafe) { +from + ExternBlock x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, string hasAbi, int getNumberOfAttrs, string hasExternItemList, + string isUnsafe +where toBeTested(x) and not x.isUnknown() and - isUnsafe__label = "isUnsafe:" and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExternItemList() then hasExternItemList = "yes" else hasExternItemList = "no") and if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getExtendedCanonicalPath(ExternBlock x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(ExternBlock x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(ExternBlock x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAbi(ExternBlock x, Abi getAbi) { - toBeTested(x) and not x.isUnknown() and getAbi = x.getAbi() -} - -query predicate getAttr(ExternBlock x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExternItemList(ExternBlock x, ExternItemList getExternItemList) { - toBeTested(x) and not x.isUnknown() and getExternItemList = x.getExternItemList() -} +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAbi:", hasAbi, "getNumberOfAttrs:", + getNumberOfAttrs, "hasExternItemList:", hasExternItemList, "isUnsafe:", isUnsafe diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected new file mode 100644 index 000000000000..ea8e7797362c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.expected @@ -0,0 +1 @@ +| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:5:7:14 | Abi | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql new file mode 100644 index 000000000000..d713045ef755 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAbi.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getAbi() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql new file mode 100644 index 000000000000..2ac7fc2aa724 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..f3b6ad363fa9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql new file mode 100644 index 000000000000..5be455fe7d24 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..f0bd607a179a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected new file mode 100644 index 000000000000..83bb34c61abc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.expected @@ -0,0 +1 @@ +| gen_extern_block.rs:7:5:9:5 | ExternBlock | gen_extern_block.rs:7:16:9:5 | ExternItemList | diff --git a/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql new file mode 100644 index 000000000000..6d04cb67441a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternBlock x +where toBeTested(x) and not x.isUnknown() +select x, x.getExternItemList() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/Cargo.lock b/rust/ql/test/extractor-tests/generated/ExternCrate/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected index 6e1b1a84e1ae..f47afb2acb52 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.expected @@ -1,10 +1 @@ -instances -| gen_extern_crate.rs:4:5:7:23 | ExternCrate | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getIdentifier -| gen_extern_crate.rs:4:5:7:23 | ExternCrate | gen_extern_crate.rs:7:18:7:22 | serde | -getRename -getVisibility +| gen_extern_crate.rs:4:5:7:23 | ExternCrate | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasRename: | no | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql index b0c2c372896e..cbcfd462473c 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql @@ -2,34 +2,28 @@ import codeql.rust.elements import TestUtils -query predicate instances(ExternCrate x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(ExternCrate x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(ExternCrate x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(ExternCrate x, MacroItems getAttributeMacroExpansion) { +from + ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasIdentifier, string hasRename, + string hasVisibility +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(ExternCrate x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getIdentifier(ExternCrate x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} - -query predicate getRename(ExternCrate x, Rename getRename) { - toBeTested(x) and not x.isUnknown() and getRename = x.getRename() -} - -query predicate getVisibility(ExternCrate x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and + (if x.hasRename() then hasRename = "yes" else hasRename = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasIdentifier:", hasIdentifier, "hasRename:", hasRename, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql new file mode 100644 index 000000000000..68edd573a7a0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..0c7c0e8c89dc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql new file mode 100644 index 000000000000..b6b74730fe40 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..15959426eed0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected new file mode 100644 index 000000000000..3e545d1761da --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected @@ -0,0 +1 @@ +| gen_extern_crate.rs:4:5:7:23 | ExternCrate | gen_extern_crate.rs:7:18:7:22 | serde | diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql new file mode 100644 index 000000000000..1a8f5693f13c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql new file mode 100644 index 000000000000..82df3d60e05a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getRename() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql new file mode 100644 index 000000000000..e7a9b316e1bc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternCrate x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/Cargo.lock b/rust/ql/test/extractor-tests/generated/ExternItemList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected index 8b6eb94b1b2c..9cc7190339f5 100644 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.expected @@ -1,6 +1 @@ -instances -| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | -getAttr -getExternItem -| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 0 | gen_extern_item_list.rs:8:9:8:17 | fn foo | -| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 1 | gen_extern_item_list.rs:9:9:9:24 | Static | +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | getNumberOfAttrs: | 0 | getNumberOfExternItems: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.ql b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.ql index b947daaff649..e9530f3c1aa8 100644 --- a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.ql +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ExternItemList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ExternItemList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExternItem(ExternItemList x, int index, ExternItem getExternItem) { - toBeTested(x) and not x.isUnknown() and getExternItem = x.getExternItem(index) -} +from ExternItemList x, int getNumberOfAttrs, int getNumberOfExternItems +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfExternItems = x.getNumberOfExternItems() +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfExternItems:", getNumberOfExternItems diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.expected b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql new file mode 100644 index 000000000000..33a1c2f4c5ca --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternItemList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected new file mode 100644 index 000000000000..a1f1b91aca6f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.expected @@ -0,0 +1,2 @@ +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 0 | gen_extern_item_list.rs:8:9:8:17 | fn foo | +| gen_extern_item_list.rs:7:16:10:5 | ExternItemList | 1 | gen_extern_item_list.rs:9:9:9:24 | Static | diff --git a/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql new file mode 100644 index 000000000000..d4be03a1d479 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ExternItemList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getExternItem(index) diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/FieldExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected index dab9e4a05b44..9bb0e244fd19 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected @@ -1,7 +1 @@ -instances -| gen_field_expr.rs:5:5:5:9 | x.foo | -getAttr -getContainer -| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:5:5:5 | x | -getIdentifier -| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:7:5:9 | foo | +| gen_field_expr.rs:5:5:5:9 | x.foo | getNumberOfAttrs: | 0 | hasContainer: | yes | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql index 49780f145b8f..631e15698b66 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(FieldExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(FieldExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getContainer(FieldExpr x, Expr getContainer) { - toBeTested(x) and not x.isUnknown() and getContainer = x.getContainer() -} - -query predicate getIdentifier(FieldExpr x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} +from FieldExpr x, int getNumberOfAttrs, string hasContainer, string hasIdentifier +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasContainer() then hasContainer = "yes" else hasContainer = "no") and + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasContainer:", hasContainer, "hasIdentifier:", + hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql new file mode 100644 index 000000000000..eeaad96fb6af --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FieldExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected new file mode 100644 index 000000000000..7d21f7f7af81 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected @@ -0,0 +1 @@ +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:5:5:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql new file mode 100644 index 000000000000..b32e302ad913 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FieldExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getContainer() diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected new file mode 100644 index 000000000000..0722ca1aaf28 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected @@ -0,0 +1 @@ +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:7:5:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql new file mode 100644 index 000000000000..766fc85ab0fc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FieldExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected index 1e61549b3f3c..e70c54798b2c 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.expected @@ -1,7 +1 @@ -instances -| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | isAsync: | no | isConst: | no | isUnsafe: | no | -getAbi -getParamList -| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:14:7:18 | ParamList | -getRetType -| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:20:7:25 | RetTypeRepr | +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | hasAbi: | no | isAsync: | no | isConst: | no | isUnsafe: | no | hasParamList: | yes | hasRetType: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql index 47cbb8ee28c1..a3f3b81fcde8 100644 --- a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql @@ -2,28 +2,17 @@ import codeql.rust.elements import TestUtils -query predicate instances( - FnPtrTypeRepr x, string isAsync__label, string isAsync, string isConst__label, string isConst, - string isUnsafe__label, string isUnsafe -) { +from + FnPtrTypeRepr x, string hasAbi, string isAsync, string isConst, string isUnsafe, + string hasParamList, string hasRetType +where toBeTested(x) and not x.isUnknown() and - isAsync__label = "isAsync:" and + (if x.hasAbi() then hasAbi = "yes" else hasAbi = "no") and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and - isConst__label = "isConst:" and (if x.isConst() then isConst = "yes" else isConst = "no") and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getAbi(FnPtrTypeRepr x, Abi getAbi) { - toBeTested(x) and not x.isUnknown() and getAbi = x.getAbi() -} - -query predicate getParamList(FnPtrTypeRepr x, ParamList getParamList) { - toBeTested(x) and not x.isUnknown() and getParamList = x.getParamList() -} - -query predicate getRetType(FnPtrTypeRepr x, RetTypeRepr getRetType) { - toBeTested(x) and not x.isUnknown() and getRetType = x.getRetType() -} + (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, "isAsync:", isAsync, "isConst:", isConst, "isUnsafe:", isUnsafe, + "hasParamList:", hasParamList, "hasRetType:", hasRetType diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql new file mode 100644 index 000000000000..738031ddf22e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FnPtrTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getAbi() diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected new file mode 100644 index 000000000000..26e6ae2ef9f6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.expected @@ -0,0 +1 @@ +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:14:7:18 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql new file mode 100644 index 000000000000..bc5b5d935ca8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FnPtrTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getParamList() diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected new file mode 100644 index 000000000000..244765e95063 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.expected @@ -0,0 +1 @@ +| gen_fn_ptr_type_repr.rs:7:12:7:25 | FnPtrTypeRepr | gen_fn_ptr_type_repr.rs:7:20:7:25 | RetTypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.ql b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.ql new file mode 100644 index 000000000000..a0bd1df08d9c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getRetType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FnPtrTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getRetType() diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ForExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ForExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected index 2e91473136f4..afe5349abb52 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.expected @@ -1,10 +1 @@ -instances -| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | -getLabel -getLoopBody -| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:20:9:5 | { ... } | -getAttr -getIterable -| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:14:7:18 | 0..10 | -getPat -| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:9:7:9 | x | +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | hasIterable: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql index 1bb7bba5c49b..60f5ab1e0809 100644 --- a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr.ql @@ -2,24 +2,16 @@ import codeql.rust.elements import TestUtils -query predicate instances(ForExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLabel(ForExpr x, Label getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getLoopBody(ForExpr x, BlockExpr getLoopBody) { - toBeTested(x) and not x.isUnknown() and getLoopBody = x.getLoopBody() -} - -query predicate getAttr(ForExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getIterable(ForExpr x, Expr getIterable) { - toBeTested(x) and not x.isUnknown() and getIterable = x.getIterable() -} - -query predicate getPat(ForExpr x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from + ForExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs, string hasIterable, + string hasPat +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasIterable() then hasIterable = "yes" else hasIterable = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs, + "hasIterable:", hasIterable, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql new file mode 100644 index 000000000000..c348759b84ee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected new file mode 100644 index 000000000000..d73979b6df8a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:14:7:18 | 0..10 | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql new file mode 100644 index 000000000000..742189903504 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getIterable.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getIterable() diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql new file mode 100644 index 000000000000..019495fcf98c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected new file mode 100644 index 000000000000..d0460f8ed7a4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:20:9:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.ql new file mode 100644 index 000000000000..5cc166fa96f5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getLoopBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLoopBody() diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected new file mode 100644 index 000000000000..44c312073f9c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.expected @@ -0,0 +1 @@ +| gen_for_expr.rs:7:5:9:5 | for ... in ... { ... } | gen_for_expr.rs:7:9:7:9 | x | diff --git a/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.ql b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.ql new file mode 100644 index 000000000000..9f83218ea31e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForExpr/ForExpr_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ForTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected index 8f5ac12ec364..6adad498f31d 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.expected @@ -1,6 +1 @@ -instances -| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | -getGenericParamList -| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:15:9:18 | <...> | -getTypeRepr -| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:20:9:41 | Fn | +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | hasGenericParamList: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql index 398a317a3ddc..5cb8aeecde1f 100644 --- a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ForTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericParamList(ForTypeRepr x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getTypeRepr(ForTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from ForTypeRepr x, string hasGenericParamList, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "hasGenericParamList:", hasGenericParamList, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected new file mode 100644 index 000000000000..0cb4ba872092 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.expected @@ -0,0 +1 @@ +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:15:9:18 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.ql new file mode 100644 index 000000000000..3ee936fca2ad --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..14610d6319f8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_for_type_repr.rs:9:12:9:41 | ForTypeRepr | gen_for_type_repr.rs:9:20:9:41 | Fn | diff --git a/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..677f61b023da --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ForTypeRepr/ForTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ForTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected index ec9fba8965aa..efd593719cc0 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.expected @@ -1,40 +1,17 @@ -instances -| gen_format.rs:5:21:5:22 | {} | getParent: | gen_format.rs:5:14:5:32 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | getParent: | gen_format.rs:7:14:7:47 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:11:15:11:20 | {name} | getParent: | gen_format.rs:11:14:11:35 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:12:15:12:17 | {0} | getParent: | gen_format.rs:12:14:12:38 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:16:15:16:23 | {:width$} | getParent: | gen_format.rs:16:14:16:28 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:17:15:17:19 | {:1$} | getParent: | gen_format.rs:17:14:17:31 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:21:15:21:23 | {:.prec$} | getParent: | gen_format.rs:21:14:21:28 | FormatArgsExpr | getIndex: | 1 | -| gen_format.rs:22:15:22:20 | {:.1$} | getParent: | gen_format.rs:22:14:22:31 | FormatArgsExpr | getIndex: | 1 | -| gen_format_args_arg.rs:5:26:5:27 | {} | getParent: | gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getIndex: | 1 | -| gen_format_args_expr.rs:6:19:6:20 | {} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 1 | -| gen_format_args_expr.rs:6:26:6:29 | {:?} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 3 | -| gen_format_args_expr.rs:7:19:7:21 | {b} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 1 | -| gen_format_args_expr.rs:7:27:7:31 | {a:?} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 3 | -| gen_format_args_expr.rs:9:19:9:21 | {x} | getParent: | gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | getIndex: | 1 | -| gen_format_args_expr.rs:9:24:9:26 | {y} | getParent: | gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | getIndex: | 3 | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | getParent: | gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | getIndex: | 1 | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | getParent: | gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | getIndex: | 1 | -getArgumentRef -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:22:7:26 | value | -| gen_format.rs:11:15:11:20 | {name} | gen_format.rs:11:16:11:19 | name | -| gen_format.rs:12:15:12:17 | {0} | gen_format.rs:12:16:12:16 | 0 | -| gen_format_args_expr.rs:7:19:7:21 | {b} | gen_format_args_expr.rs:7:20:7:20 | b | -| gen_format_args_expr.rs:7:27:7:31 | {a:?} | gen_format_args_expr.rs:7:28:7:28 | a | -| gen_format_args_expr.rs:9:19:9:21 | {x} | gen_format_args_expr.rs:9:20:9:20 | x | -| gen_format_args_expr.rs:9:24:9:26 | {y} | gen_format_args_expr.rs:9:25:9:25 | y | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:22:5:26 | value | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:22:7:22 | 0 | -getWidthArgument -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:29:7:33 | width | -| gen_format.rs:16:15:16:23 | {:width$} | gen_format.rs:16:17:16:21 | width | -| gen_format.rs:17:15:17:19 | {:1$} | gen_format.rs:17:17:17:17 | 1 | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:29:5:33 | width | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:25:7:25 | 1 | -getPrecisionArgument -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:36:7:44 | precision | -| gen_format.rs:21:15:21:23 | {:.prec$} | gen_format.rs:21:18:21:21 | prec | -| gen_format.rs:22:15:22:20 | {:.1$} | gen_format.rs:22:18:22:18 | 1 | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:36:5:44 | precision | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:28:7:28 | 2 | +| gen_format.rs:5:21:5:22 | {} | getParent: | gen_format.rs:5:14:5:32 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | getParent: | gen_format.rs:7:14:7:47 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | yes | hasPrecisionArgument: | yes | +| gen_format.rs:11:15:11:20 | {name} | getParent: | gen_format.rs:11:14:11:35 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format.rs:12:15:12:17 | {0} | getParent: | gen_format.rs:12:14:12:38 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format.rs:16:15:16:23 | {:width$} | getParent: | gen_format.rs:16:14:16:28 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | yes | hasPrecisionArgument: | no | +| gen_format.rs:17:15:17:19 | {:1$} | getParent: | gen_format.rs:17:14:17:31 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | yes | hasPrecisionArgument: | no | +| gen_format.rs:21:15:21:23 | {:.prec$} | getParent: | gen_format.rs:21:14:21:28 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | yes | +| gen_format.rs:22:15:22:20 | {:.1$} | getParent: | gen_format.rs:22:14:22:31 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | yes | +| gen_format_args_arg.rs:5:26:5:27 | {} | getParent: | gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:6:19:6:20 | {} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:6:26:6:29 | {:?} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 3 | hasArgumentRef: | no | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:7:19:7:21 | {b} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:7:27:7:31 | {a:?} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 3 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:9:19:9:21 | {x} | getParent: | gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_args_expr.rs:9:24:9:26 | {y} | getParent: | gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | getIndex: | 3 | hasArgumentRef: | yes | hasWidthArgument: | no | hasPrecisionArgument: | no | +| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | getParent: | gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | yes | hasPrecisionArgument: | yes | +| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | getParent: | gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | getIndex: | 1 | hasArgumentRef: | yes | hasWidthArgument: | yes | hasPrecisionArgument: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.ql index 5a74e34cbaf3..5c7893ea65c5 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format.ql @@ -2,25 +2,16 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Format x, string getParent__label, FormatArgsExpr getParent, string getIndex__label, int getIndex -) { +from + Format x, FormatArgsExpr getParent, int getIndex, string hasArgumentRef, string hasWidthArgument, + string hasPrecisionArgument +where toBeTested(x) and not x.isUnknown() and - getParent__label = "getParent:" and getParent = x.getParent() and - getIndex__label = "getIndex:" and - getIndex = x.getIndex() -} - -query predicate getArgumentRef(Format x, FormatArgument getArgumentRef) { - toBeTested(x) and not x.isUnknown() and getArgumentRef = x.getArgumentRef() -} - -query predicate getWidthArgument(Format x, FormatArgument getWidthArgument) { - toBeTested(x) and not x.isUnknown() and getWidthArgument = x.getWidthArgument() -} - -query predicate getPrecisionArgument(Format x, FormatArgument getPrecisionArgument) { - toBeTested(x) and not x.isUnknown() and getPrecisionArgument = x.getPrecisionArgument() -} + getIndex = x.getIndex() and + (if x.hasArgumentRef() then hasArgumentRef = "yes" else hasArgumentRef = "no") and + (if x.hasWidthArgument() then hasWidthArgument = "yes" else hasWidthArgument = "no") and + if x.hasPrecisionArgument() then hasPrecisionArgument = "yes" else hasPrecisionArgument = "no" +select x, "getParent:", getParent, "getIndex:", getIndex, "hasArgumentRef:", hasArgumentRef, + "hasWidthArgument:", hasWidthArgument, "hasPrecisionArgument:", hasPrecisionArgument diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected index 32a73ae1c7c4..e1ce7c44998a 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.expected @@ -1,37 +1,16 @@ -instances -| gen_format.rs:5:26:5:32 | FormatArgsArg | -| gen_format.rs:12:35:12:38 | FormatArgsArg | -| gen_format.rs:16:27:16:28 | FormatArgsArg | -| gen_format.rs:17:23:17:24 | FormatArgsArg | -| gen_format.rs:17:27:17:31 | FormatArgsArg | -| gen_format.rs:21:27:21:28 | FormatArgsArg | -| gen_format.rs:22:24:22:25 | FormatArgsArg | -| gen_format.rs:22:28:22:31 | FormatArgsArg | -| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | -| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | -| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | -| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | -| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | -| gen_format_argument.rs:7:34:7:38 | FormatArgsArg | -| gen_format_argument.rs:7:41:7:45 | FormatArgsArg | -| gen_format_argument.rs:7:48:7:56 | FormatArgsArg | -getExpr -| gen_format.rs:5:26:5:32 | FormatArgsArg | gen_format.rs:5:26:5:32 | "world" | -| gen_format.rs:12:35:12:38 | FormatArgsArg | gen_format.rs:12:35:12:38 | name | -| gen_format.rs:16:27:16:28 | FormatArgsArg | gen_format.rs:16:27:16:28 | PI | -| gen_format.rs:17:23:17:24 | FormatArgsArg | gen_format.rs:17:23:17:24 | PI | -| gen_format.rs:17:27:17:31 | FormatArgsArg | gen_format.rs:17:27:17:31 | width | -| gen_format.rs:21:27:21:28 | FormatArgsArg | gen_format.rs:21:27:21:28 | PI | -| gen_format.rs:22:24:22:25 | FormatArgsArg | gen_format.rs:22:24:22:25 | PI | -| gen_format.rs:22:28:22:31 | FormatArgsArg | gen_format.rs:22:28:22:31 | prec | -| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | gen_format_args_arg.rs:5:32:5:38 | "world" | -| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | gen_format_args_expr.rs:6:33:6:33 | 1 | -| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | gen_format_args_expr.rs:6:36:6:36 | 2 | -| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:37:7:37 | 1 | -| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | gen_format_args_expr.rs:7:42:7:42 | 2 | -| gen_format_argument.rs:7:34:7:38 | FormatArgsArg | gen_format_argument.rs:7:34:7:38 | value | -| gen_format_argument.rs:7:41:7:45 | FormatArgsArg | gen_format_argument.rs:7:41:7:45 | width | -| gen_format_argument.rs:7:48:7:56 | FormatArgsArg | gen_format_argument.rs:7:48:7:56 | precision | -getName -| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:35:7:35 | a | -| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | gen_format_args_expr.rs:7:40:7:40 | b | +| gen_format.rs:5:26:5:32 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:12:35:12:38 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:16:27:16:28 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:17:23:17:24 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:17:27:17:31 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:21:27:21:28 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:22:24:22:25 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format.rs:22:28:22:31 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | hasExpr: | yes | hasName: | yes | +| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | hasExpr: | yes | hasName: | yes | +| gen_format_argument.rs:7:34:7:38 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_argument.rs:7:41:7:45 | FormatArgsArg | hasExpr: | yes | hasName: | no | +| gen_format_argument.rs:7:48:7:56 | FormatArgsArg | hasExpr: | yes | hasName: | no | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql index d3931f985113..428bd82909f5 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(FormatArgsArg x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExpr(FormatArgsArg x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getName(FormatArgsArg x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} +from FormatArgsArg x, string hasExpr, string hasName +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.hasName() then hasName = "yes" else hasName = "no" +select x, "hasExpr:", hasExpr, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected new file mode 100644 index 000000000000..326f5d0415e8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.expected @@ -0,0 +1,16 @@ +| gen_format.rs:5:26:5:32 | FormatArgsArg | gen_format.rs:5:26:5:32 | "world" | +| gen_format.rs:12:35:12:38 | FormatArgsArg | gen_format.rs:12:35:12:38 | name | +| gen_format.rs:16:27:16:28 | FormatArgsArg | gen_format.rs:16:27:16:28 | PI | +| gen_format.rs:17:23:17:24 | FormatArgsArg | gen_format.rs:17:23:17:24 | PI | +| gen_format.rs:17:27:17:31 | FormatArgsArg | gen_format.rs:17:27:17:31 | width | +| gen_format.rs:21:27:21:28 | FormatArgsArg | gen_format.rs:21:27:21:28 | PI | +| gen_format.rs:22:24:22:25 | FormatArgsArg | gen_format.rs:22:24:22:25 | PI | +| gen_format.rs:22:28:22:31 | FormatArgsArg | gen_format.rs:22:28:22:31 | prec | +| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | gen_format_args_arg.rs:5:32:5:38 | "world" | +| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | gen_format_args_expr.rs:6:33:6:33 | 1 | +| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | gen_format_args_expr.rs:6:36:6:36 | 2 | +| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:37:7:37 | 1 | +| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | gen_format_args_expr.rs:7:42:7:42 | 2 | +| gen_format_argument.rs:7:34:7:38 | FormatArgsArg | gen_format_argument.rs:7:34:7:38 | value | +| gen_format_argument.rs:7:41:7:45 | FormatArgsArg | gen_format_argument.rs:7:41:7:45 | width | +| gen_format_argument.rs:7:48:7:56 | FormatArgsArg | gen_format_argument.rs:7:48:7:56 | precision | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.ql new file mode 100644 index 000000000000..ee67794f93ac --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.expected new file mode 100644 index 000000000000..ad5d7ab4ab22 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.expected @@ -0,0 +1,2 @@ +| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:35:7:35 | a | +| gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | gen_format_args_expr.rs:7:40:7:40 | b | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.ql new file mode 100644 index 000000000000..8f4bdb2a0c84 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsArg_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected index 36afee17dacc..d3319ded2fb2 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.expected @@ -1,68 +1,15 @@ -instances -| gen_format.rs:5:14:5:32 | FormatArgsExpr | -| gen_format.rs:7:14:7:47 | FormatArgsExpr | -| gen_format.rs:11:14:11:35 | FormatArgsExpr | -| gen_format.rs:12:14:12:38 | FormatArgsExpr | -| gen_format.rs:16:14:16:28 | FormatArgsExpr | -| gen_format.rs:17:14:17:31 | FormatArgsExpr | -| gen_format.rs:21:14:21:28 | FormatArgsExpr | -| gen_format.rs:22:14:22:31 | FormatArgsExpr | -| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | -| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | -getArg -| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:26:5:32 | FormatArgsArg | -| gen_format.rs:12:14:12:38 | FormatArgsExpr | 0 | gen_format.rs:12:35:12:38 | FormatArgsArg | -| gen_format.rs:16:14:16:28 | FormatArgsExpr | 0 | gen_format.rs:16:27:16:28 | FormatArgsArg | -| gen_format.rs:17:14:17:31 | FormatArgsExpr | 0 | gen_format.rs:17:23:17:24 | FormatArgsArg | -| gen_format.rs:17:14:17:31 | FormatArgsExpr | 1 | gen_format.rs:17:27:17:31 | FormatArgsArg | -| gen_format.rs:21:14:21:28 | FormatArgsExpr | 0 | gen_format.rs:21:27:21:28 | FormatArgsArg | -| gen_format.rs:22:14:22:31 | FormatArgsExpr | 0 | gen_format.rs:22:24:22:25 | FormatArgsArg | -| gen_format.rs:22:14:22:31 | FormatArgsExpr | 1 | gen_format.rs:22:28:22:31 | FormatArgsArg | -| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 1 | gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 0 | gen_format_argument.rs:7:34:7:38 | FormatArgsArg | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 1 | gen_format_argument.rs:7:41:7:45 | FormatArgsArg | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 2 | gen_format_argument.rs:7:48:7:56 | FormatArgsArg | -getAttr -getTemplate -| gen_format.rs:5:14:5:32 | FormatArgsExpr | gen_format.rs:5:14:5:23 | "Hello {}\\n" | -| gen_format.rs:7:14:7:47 | FormatArgsExpr | gen_format.rs:7:14:7:47 | "Value {value:#width$.precisio... | -| gen_format.rs:11:14:11:35 | FormatArgsExpr | gen_format.rs:11:14:11:35 | "{name} in wonderland\\n" | -| gen_format.rs:12:14:12:38 | FormatArgsExpr | gen_format.rs:12:14:12:32 | "{0} in wonderland\\n" | -| gen_format.rs:16:14:16:28 | FormatArgsExpr | gen_format.rs:16:14:16:24 | "{:width$}\\n" | -| gen_format.rs:17:14:17:31 | FormatArgsExpr | gen_format.rs:17:14:17:20 | "{:1$}\\n" | -| gen_format.rs:21:14:21:28 | FormatArgsExpr | gen_format.rs:21:14:21:24 | "{:.prec$}\\n" | -| gen_format.rs:22:14:22:31 | FormatArgsExpr | gen_format.rs:22:14:22:21 | "{:.1$}\\n" | -| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | gen_format_args_arg.rs:5:18:5:29 | "Hello, {}!" | -| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | gen_format_args_expr.rs:5:18:5:26 | "no args" | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | gen_format_args_expr.rs:6:18:6:30 | "{} foo {:?}" | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | gen_format_args_expr.rs:7:18:7:32 | "{b} foo {a:?}" | -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | gen_format_args_expr.rs:9:18:9:27 | "{x}, {y}" | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | gen_format_argument.rs:5:14:5:47 | "Value {value:#width$.precisio... | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | gen_format_argument.rs:7:14:7:31 | "Value {0:#1$.2$}\\n" | -getFormat -| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:21:5:22 | {} | -| gen_format.rs:7:14:7:47 | FormatArgsExpr | 0 | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | -| gen_format.rs:11:14:11:35 | FormatArgsExpr | 0 | gen_format.rs:11:15:11:20 | {name} | -| gen_format.rs:12:14:12:38 | FormatArgsExpr | 0 | gen_format.rs:12:15:12:17 | {0} | -| gen_format.rs:16:14:16:28 | FormatArgsExpr | 0 | gen_format.rs:16:15:16:23 | {:width$} | -| gen_format.rs:17:14:17:31 | FormatArgsExpr | 0 | gen_format.rs:17:15:17:19 | {:1$} | -| gen_format.rs:21:14:21:28 | FormatArgsExpr | 0 | gen_format.rs:21:15:21:23 | {:.prec$} | -| gen_format.rs:22:14:22:31 | FormatArgsExpr | 0 | gen_format.rs:22:15:22:20 | {:.1$} | -| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:26:5:27 | {} | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:19:6:20 | {} | -| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:26:6:29 | {:?} | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:19:7:21 | {b} | -| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 1 | gen_format_args_expr.rs:7:27:7:31 | {a:?} | -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 0 | gen_format_args_expr.rs:9:19:9:21 | {x} | -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 1 | gen_format_args_expr.rs:9:24:9:26 | {y} | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | 0 | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | -| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 0 | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | +| gen_format.rs:5:14:5:32 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:11:14:11:35 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:12:14:12:38 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:16:14:16:28 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:17:14:17:31 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:21:14:21:28 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format.rs:22:14:22:31 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 0 | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 | +| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 | +| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | getNumberOfArgs: | 3 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql index 04e7a007e677..6a43bc1ea0a3 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr.ql @@ -2,20 +2,15 @@ import codeql.rust.elements import TestUtils -query predicate instances(FormatArgsExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getArg(FormatArgsExpr x, int index, FormatArgsArg getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} - -query predicate getAttr(FormatArgsExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTemplate(FormatArgsExpr x, Expr getTemplate) { - toBeTested(x) and not x.isUnknown() and getTemplate = x.getTemplate() -} - -query predicate getFormat(FormatArgsExpr x, int index, Format getFormat) { - toBeTested(x) and not x.isUnknown() and getFormat = x.getFormat(index) -} +from + FormatArgsExpr x, int getNumberOfArgs, int getNumberOfAttrs, string hasTemplate, + int getNumberOfFormats +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfArgs = x.getNumberOfArgs() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasTemplate() then hasTemplate = "yes" else hasTemplate = "no") and + getNumberOfFormats = x.getNumberOfFormats() +select x, "getNumberOfArgs:", getNumberOfArgs, "getNumberOfAttrs:", getNumberOfAttrs, + "hasTemplate:", hasTemplate, "getNumberOfFormats:", getNumberOfFormats diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected new file mode 100644 index 000000000000..8a6e0ba12273 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.expected @@ -0,0 +1,16 @@ +| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:26:5:32 | FormatArgsArg | +| gen_format.rs:12:14:12:38 | FormatArgsExpr | 0 | gen_format.rs:12:35:12:38 | FormatArgsArg | +| gen_format.rs:16:14:16:28 | FormatArgsExpr | 0 | gen_format.rs:16:27:16:28 | FormatArgsArg | +| gen_format.rs:17:14:17:31 | FormatArgsExpr | 0 | gen_format.rs:17:23:17:24 | FormatArgsArg | +| gen_format.rs:17:14:17:31 | FormatArgsExpr | 1 | gen_format.rs:17:27:17:31 | FormatArgsArg | +| gen_format.rs:21:14:21:28 | FormatArgsExpr | 0 | gen_format.rs:21:27:21:28 | FormatArgsArg | +| gen_format.rs:22:14:22:31 | FormatArgsExpr | 0 | gen_format.rs:22:24:22:25 | FormatArgsArg | +| gen_format.rs:22:14:22:31 | FormatArgsExpr | 1 | gen_format.rs:22:28:22:31 | FormatArgsArg | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 1 | gen_format_args_expr.rs:7:40:7:42 | FormatArgsArg | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 0 | gen_format_argument.rs:7:34:7:38 | FormatArgsArg | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 1 | gen_format_argument.rs:7:41:7:45 | FormatArgsArg | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 2 | gen_format_argument.rs:7:48:7:56 | FormatArgsArg | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql new file mode 100644 index 000000000000..1bf575a0f868 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql new file mode 100644 index 000000000000..bfaf15b6ff5a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected new file mode 100644 index 000000000000..3b6486bcfdbf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.expected @@ -0,0 +1,17 @@ +| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:21:5:22 | {} | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | 0 | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | +| gen_format.rs:11:14:11:35 | FormatArgsExpr | 0 | gen_format.rs:11:15:11:20 | {name} | +| gen_format.rs:12:14:12:38 | FormatArgsExpr | 0 | gen_format.rs:12:15:12:17 | {0} | +| gen_format.rs:16:14:16:28 | FormatArgsExpr | 0 | gen_format.rs:16:15:16:23 | {:width$} | +| gen_format.rs:17:14:17:31 | FormatArgsExpr | 0 | gen_format.rs:17:15:17:19 | {:1$} | +| gen_format.rs:21:14:21:28 | FormatArgsExpr | 0 | gen_format.rs:21:15:21:23 | {:.prec$} | +| gen_format.rs:22:14:22:31 | FormatArgsExpr | 0 | gen_format.rs:22:15:22:20 | {:.1$} | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:26:5:27 | {} | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:19:6:20 | {} | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:26:6:29 | {:?} | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:19:7:21 | {b} | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 1 | gen_format_args_expr.rs:7:27:7:31 | {a:?} | +| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 0 | gen_format_args_expr.rs:9:19:9:21 | {x} | +| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 1 | gen_format_args_expr.rs:9:24:9:26 | {y} | +| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | 0 | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | 0 | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql new file mode 100644 index 000000000000..ca61ca2bebd9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getFormat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getFormat(index) diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected new file mode 100644 index 000000000000..3ef17d6470a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.expected @@ -0,0 +1,15 @@ +| gen_format.rs:5:14:5:32 | FormatArgsExpr | gen_format.rs:5:14:5:23 | "Hello {}\\n" | +| gen_format.rs:7:14:7:47 | FormatArgsExpr | gen_format.rs:7:14:7:47 | "Value {value:#width$.precisio... | +| gen_format.rs:11:14:11:35 | FormatArgsExpr | gen_format.rs:11:14:11:35 | "{name} in wonderland\\n" | +| gen_format.rs:12:14:12:38 | FormatArgsExpr | gen_format.rs:12:14:12:32 | "{0} in wonderland\\n" | +| gen_format.rs:16:14:16:28 | FormatArgsExpr | gen_format.rs:16:14:16:24 | "{:width$}\\n" | +| gen_format.rs:17:14:17:31 | FormatArgsExpr | gen_format.rs:17:14:17:20 | "{:1$}\\n" | +| gen_format.rs:21:14:21:28 | FormatArgsExpr | gen_format.rs:21:14:21:24 | "{:.prec$}\\n" | +| gen_format.rs:22:14:22:31 | FormatArgsExpr | gen_format.rs:22:14:22:21 | "{:.1$}\\n" | +| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | gen_format_args_arg.rs:5:18:5:29 | "Hello, {}!" | +| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | gen_format_args_expr.rs:5:18:5:26 | "no args" | +| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | gen_format_args_expr.rs:6:18:6:30 | "{} foo {:?}" | +| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | gen_format_args_expr.rs:7:18:7:32 | "{b} foo {a:?}" | +| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | gen_format_args_expr.rs:9:18:9:27 | "{x}, {y}" | +| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | gen_format_argument.rs:5:14:5:47 | "Value {value:#width$.precisio... | +| gen_format_argument.rs:7:14:7:56 | FormatArgsExpr | gen_format_argument.rs:7:14:7:31 | "Value {0:#1$.2$}\\n" | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql new file mode 100644 index 000000000000..b43b24ed4f23 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getTemplate.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgsExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTemplate() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected index d51a409ea943..6da44e9d84b1 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.expected @@ -1,32 +1,19 @@ -instances -| gen_format.rs:7:22:7:26 | value | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | -| gen_format.rs:7:29:7:33 | width | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | -| gen_format.rs:7:36:7:44 | precision | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | -| gen_format.rs:11:16:11:19 | name | getParent: | gen_format.rs:11:15:11:20 | {name} | -| gen_format.rs:12:16:12:16 | 0 | getParent: | gen_format.rs:12:15:12:17 | {0} | -| gen_format.rs:16:17:16:21 | width | getParent: | gen_format.rs:16:15:16:23 | {:width$} | -| gen_format.rs:17:17:17:17 | 1 | getParent: | gen_format.rs:17:15:17:19 | {:1$} | -| gen_format.rs:21:18:21:21 | prec | getParent: | gen_format.rs:21:15:21:23 | {:.prec$} | -| gen_format.rs:22:18:22:18 | 1 | getParent: | gen_format.rs:22:15:22:20 | {:.1$} | -| gen_format_args_expr.rs:7:20:7:20 | b | getParent: | gen_format_args_expr.rs:7:19:7:21 | {b} | -| gen_format_args_expr.rs:7:28:7:28 | a | getParent: | gen_format_args_expr.rs:7:27:7:31 | {a:?} | -| gen_format_args_expr.rs:9:20:9:20 | x | getParent: | gen_format_args_expr.rs:9:19:9:21 | {x} | -| gen_format_args_expr.rs:9:25:9:25 | y | getParent: | gen_format_args_expr.rs:9:24:9:26 | {y} | -| gen_format_argument.rs:5:22:5:26 | value | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | -| gen_format_argument.rs:5:29:5:33 | width | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | -| gen_format_argument.rs:5:36:5:44 | precision | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | -| gen_format_argument.rs:7:22:7:22 | 0 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | -| gen_format_argument.rs:7:25:7:25 | 1 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | -| gen_format_argument.rs:7:28:7:28 | 2 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | -getVariable -| gen_format.rs:7:22:7:26 | value | gen_format.rs:7:22:7:26 | value | -| gen_format.rs:7:29:7:33 | width | gen_format.rs:7:29:7:33 | width | -| gen_format.rs:7:36:7:44 | precision | gen_format.rs:7:36:7:44 | precision | -| gen_format.rs:11:16:11:19 | name | gen_format.rs:11:16:11:19 | name | -| gen_format.rs:16:17:16:21 | width | gen_format.rs:16:17:16:21 | width | -| gen_format.rs:21:18:21:21 | prec | gen_format.rs:21:18:21:21 | prec | -| gen_format_args_expr.rs:9:20:9:20 | x | gen_format_args_expr.rs:9:20:9:20 | x | -| gen_format_args_expr.rs:9:25:9:25 | y | gen_format_args_expr.rs:9:25:9:25 | y | -| gen_format_argument.rs:5:22:5:26 | value | gen_format_argument.rs:5:22:5:26 | value | -| gen_format_argument.rs:5:29:5:33 | width | gen_format_argument.rs:5:29:5:33 | width | -| gen_format_argument.rs:5:36:5:44 | precision | gen_format_argument.rs:5:36:5:44 | precision | +| gen_format.rs:7:22:7:26 | value | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format.rs:7:29:7:33 | width | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format.rs:7:36:7:44 | precision | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format.rs:11:16:11:19 | name | getParent: | gen_format.rs:11:15:11:20 | {name} | hasVariable: | yes | +| gen_format.rs:12:16:12:16 | 0 | getParent: | gen_format.rs:12:15:12:17 | {0} | hasVariable: | no | +| gen_format.rs:16:17:16:21 | width | getParent: | gen_format.rs:16:15:16:23 | {:width$} | hasVariable: | yes | +| gen_format.rs:17:17:17:17 | 1 | getParent: | gen_format.rs:17:15:17:19 | {:1$} | hasVariable: | no | +| gen_format.rs:21:18:21:21 | prec | getParent: | gen_format.rs:21:15:21:23 | {:.prec$} | hasVariable: | yes | +| gen_format.rs:22:18:22:18 | 1 | getParent: | gen_format.rs:22:15:22:20 | {:.1$} | hasVariable: | no | +| gen_format_args_expr.rs:7:20:7:20 | b | getParent: | gen_format_args_expr.rs:7:19:7:21 | {b} | hasVariable: | no | +| gen_format_args_expr.rs:7:28:7:28 | a | getParent: | gen_format_args_expr.rs:7:27:7:31 | {a:?} | hasVariable: | no | +| gen_format_args_expr.rs:9:20:9:20 | x | getParent: | gen_format_args_expr.rs:9:19:9:21 | {x} | hasVariable: | yes | +| gen_format_args_expr.rs:9:25:9:25 | y | getParent: | gen_format_args_expr.rs:9:24:9:26 | {y} | hasVariable: | yes | +| gen_format_argument.rs:5:22:5:26 | value | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format_argument.rs:5:29:5:33 | width | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format_argument.rs:5:36:5:44 | precision | getParent: | gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | hasVariable: | yes | +| gen_format_argument.rs:7:22:7:22 | 0 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | hasVariable: | no | +| gen_format_argument.rs:7:25:7:25 | 1 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | hasVariable: | no | +| gen_format_argument.rs:7:28:7:28 | 2 | getParent: | gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | hasVariable: | no | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql index 0c8498fba86e..ed57154f7e82 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument.ql @@ -2,13 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(FormatArgument x, string getParent__label, Format getParent) { +from FormatArgument x, Format getParent, string hasVariable +where toBeTested(x) and not x.isUnknown() and - getParent__label = "getParent:" and - getParent = x.getParent() -} - -query predicate getVariable(FormatArgument x, FormatTemplateVariableAccess getVariable) { - toBeTested(x) and not x.isUnknown() and getVariable = x.getVariable() -} + getParent = x.getParent() and + if x.hasVariable() then hasVariable = "yes" else hasVariable = "no" +select x, "getParent:", getParent, "hasVariable:", hasVariable diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected new file mode 100644 index 000000000000..46b5e6255e12 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.expected @@ -0,0 +1,11 @@ +| gen_format.rs:7:22:7:26 | value | gen_format.rs:7:22:7:26 | value | +| gen_format.rs:7:29:7:33 | width | gen_format.rs:7:29:7:33 | width | +| gen_format.rs:7:36:7:44 | precision | gen_format.rs:7:36:7:44 | precision | +| gen_format.rs:11:16:11:19 | name | gen_format.rs:11:16:11:19 | name | +| gen_format.rs:16:17:16:21 | width | gen_format.rs:16:17:16:21 | width | +| gen_format.rs:21:18:21:21 | prec | gen_format.rs:21:18:21:21 | prec | +| gen_format_args_expr.rs:9:20:9:20 | x | gen_format_args_expr.rs:9:20:9:20 | x | +| gen_format_args_expr.rs:9:25:9:25 | y | gen_format_args_expr.rs:9:25:9:25 | y | +| gen_format_argument.rs:5:22:5:26 | value | gen_format_argument.rs:5:22:5:26 | value | +| gen_format_argument.rs:5:29:5:33 | width | gen_format_argument.rs:5:29:5:33 | width | +| gen_format_argument.rs:5:36:5:44 | precision | gen_format_argument.rs:5:36:5:44 | precision | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql new file mode 100644 index 000000000000..5d303bc4b6c6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgument_getVariable.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from FormatArgument x +where toBeTested(x) and not x.isUnknown() +select x, x.getVariable() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql index 8a75f9cdb543..4f43ca11870a 100644 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatTemplateVariableAccess.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(FormatTemplateVariableAccess x) { toBeTested(x) and not x.isUnknown() } +from FormatTemplateVariableAccess x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.expected new file mode 100644 index 000000000000..5df8716a659b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.expected @@ -0,0 +1,9 @@ +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:22:7:26 | value | +| gen_format.rs:11:15:11:20 | {name} | gen_format.rs:11:16:11:19 | name | +| gen_format.rs:12:15:12:17 | {0} | gen_format.rs:12:16:12:16 | 0 | +| gen_format_args_expr.rs:7:19:7:21 | {b} | gen_format_args_expr.rs:7:20:7:20 | b | +| gen_format_args_expr.rs:7:27:7:31 | {a:?} | gen_format_args_expr.rs:7:28:7:28 | a | +| gen_format_args_expr.rs:9:19:9:21 | {x} | gen_format_args_expr.rs:9:20:9:20 | x | +| gen_format_args_expr.rs:9:24:9:26 | {y} | gen_format_args_expr.rs:9:25:9:25 | y | +| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:22:5:26 | value | +| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:22:7:22 | 0 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql new file mode 100644 index 000000000000..e9958bcf0fa2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgumentRef.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Format x +where toBeTested(x) and not x.isUnknown() +select x, x.getArgumentRef() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.expected new file mode 100644 index 000000000000..21a246404d76 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.expected @@ -0,0 +1,5 @@ +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:36:7:44 | precision | +| gen_format.rs:21:15:21:23 | {:.prec$} | gen_format.rs:21:18:21:21 | prec | +| gen_format.rs:22:15:22:20 | {:.1$} | gen_format.rs:22:18:22:18 | 1 | +| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:36:5:44 | precision | +| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:28:7:28 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql new file mode 100644 index 000000000000..4b690bb0cc1e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getPrecisionArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Format x +where toBeTested(x) and not x.isUnknown() +select x, x.getPrecisionArgument() diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.expected new file mode 100644 index 000000000000..9e009ee4fd13 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.expected @@ -0,0 +1,5 @@ +| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:29:7:33 | width | +| gen_format.rs:16:15:16:23 | {:width$} | gen_format.rs:16:17:16:21 | width | +| gen_format.rs:17:15:17:19 | {:1$} | gen_format.rs:17:17:17:17 | 1 | +| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | gen_format_argument.rs:5:29:5:33 | width | +| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | gen_format_argument.rs:7:25:7:25 | 1 | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql new file mode 100644 index 000000000000..62fe11f48ebf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getWidthArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Format x +where toBeTested(x) and not x.isUnknown() +select x, x.getWidthArgument() diff --git a/rust/ql/test/extractor-tests/generated/Function/Cargo.lock b/rust/ql/test/extractor-tests/generated/Function/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Function/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.expected b/rust/ql/test/extractor-tests/generated/Function/Function.expected index db434cf918d6..967606c2542f 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.expected +++ b/rust/ql/test/extractor-tests/generated/Function/Function.expected @@ -1,27 +1,2 @@ -instances -| gen_function.rs:3:1:4:38 | fn foo | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasImplementation: | yes | -| gen_function.rs:7:5:7:13 | fn bar | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasImplementation: | no | -getExtendedCanonicalPath -| gen_function.rs:3:1:4:38 | fn foo | crate::gen_function::foo | -| gen_function.rs:7:5:7:13 | fn bar | crate::gen_function::Trait::bar | -getCrateOrigin -| gen_function.rs:3:1:4:38 | fn foo | repo::test | -| gen_function.rs:7:5:7:13 | fn bar | repo::test | -getAttributeMacroExpansion -getParamList -| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:7:4:14 | ParamList | -| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:11:7:12 | ParamList | -getAttr -getParam -| gen_function.rs:3:1:4:38 | fn foo | 0 | gen_function.rs:4:8:4:13 | ...: u32 | -getAbi -getBody -| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:23:4:38 | { ... } | -getGenericParamList -getName -| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:4:4:6 | foo | -| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:8:7:10 | bar | -getRetType -| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:16:4:21 | RetTypeRepr | -getVisibility -getWhereClause +| gen_function.rs:3:1:4:38 | fn foo | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 1 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | yes | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | yes | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | yes | +| gen_function.rs:7:5:7:13 | fn bar | hasParamList: | yes | getNumberOfAttrs: | 0 | getNumberOfParams: | 0 | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAbi: | no | hasBody: | no | hasGenericParamList: | no | isAsync: | no | isConst: | no | isDefault: | no | isGen: | no | isUnsafe: | no | hasName: | yes | hasRetType: | no | hasVisibility: | no | hasWhereClause: | no | hasImplementation: | no | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function.ql b/rust/ql/test/extractor-tests/generated/Function/Function.ql index 4f76623cb20c..5e50f7a4ac0b 100644 --- a/rust/ql/test/extractor-tests/generated/Function/Function.ql +++ b/rust/ql/test/extractor-tests/generated/Function/Function.ql @@ -2,77 +2,46 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Function x, string isAsync__label, string isAsync, string isConst__label, string isConst, - string isDefault__label, string isDefault, string isGen__label, string isGen, - string isUnsafe__label, string isUnsafe, string hasImplementation__label, string hasImplementation -) { +from + Function x, string hasParamList, int getNumberOfAttrs, int getNumberOfParams, + string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, + string hasAbi, string hasBody, string hasGenericParamList, string isAsync, string isConst, + string isDefault, string isGen, string isUnsafe, string hasName, string hasRetType, + string hasVisibility, string hasWhereClause, string hasImplementation +where toBeTested(x) and not x.isUnknown() and - isAsync__label = "isAsync:" and + (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfParams = x.getNumberOfParams() and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) 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 - isConst__label = "isConst:" and (if x.isConst() then isConst = "yes" else isConst = "no") and - isDefault__label = "isDefault:" and (if x.isDefault() then isDefault = "yes" else isDefault = "no") and - isGen__label = "isGen:" and (if x.isGen() then isGen = "yes" else isGen = "no") and - isUnsafe__label = "isUnsafe:" and (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and - hasImplementation__label = "hasImplementation:" and + (if x.hasName() then hasName = "yes" else hasName = "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") and if x.hasImplementation() then hasImplementation = "yes" else hasImplementation = "no" -} - -query predicate getExtendedCanonicalPath(Function x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Function x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Function x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getParamList(Function x, ParamList getParamList) { - toBeTested(x) and not x.isUnknown() and getParamList = x.getParamList() -} - -query predicate getAttr(Function x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getParam(Function x, int index, Param getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} - -query predicate getAbi(Function x, Abi getAbi) { - toBeTested(x) and not x.isUnknown() and getAbi = x.getAbi() -} - -query predicate getBody(Function x, BlockExpr getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getGenericParamList(Function x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Function x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getRetType(Function x, RetTypeRepr getRetType) { - toBeTested(x) and not x.isUnknown() and getRetType = x.getRetType() -} - -query predicate getVisibility(Function x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Function x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} +select x, "hasParamList:", hasParamList, "getNumberOfAttrs:", getNumberOfAttrs, + "getNumberOfParams:", getNumberOfParams, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, + "hasCrateOrigin:", hasCrateOrigin, "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, + "hasAbi:", hasAbi, "hasBody:", hasBody, "hasGenericParamList:", hasGenericParamList, "isAsync:", + isAsync, "isConst:", isConst, "isDefault:", isDefault, "isGen:", isGen, "isUnsafe:", isUnsafe, + "hasName:", hasName, "hasRetType:", hasRetType, "hasVisibility:", hasVisibility, + "hasWhereClause:", hasWhereClause, "hasImplementation:", hasImplementation diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAbi.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getAbi.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAbi.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getAbi.ql new file mode 100644 index 000000000000..a1317ed761f4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getAbi.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getAbi() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAttr.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAttr.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getAttr.ql new file mode 100644 index 000000000000..239c6da56c46 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..4bb6e2852cb9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected new file mode 100644 index 000000000000..894900b3eaa8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.expected @@ -0,0 +1 @@ +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:23:4:38 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getBody.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.ql new file mode 100644 index 000000000000..5b3191cac00b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected new file mode 100644 index 000000000000..eabc941bd5be --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.expected @@ -0,0 +1,2 @@ +| gen_function.rs:3:1:4:38 | fn foo | repo::test | +| gen_function.rs:7:5:7:13 | fn bar | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.ql new file mode 100644 index 000000000000..933e5867d841 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..2c0059ebc2a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.expected @@ -0,0 +1,2 @@ +| gen_function.rs:3:1:4:38 | fn foo | crate::gen_function::foo | +| gen_function.rs:7:5:7:13 | fn bar | crate::gen_function::Trait::bar | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..f2c413748de6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getGenericParamList.ql new file mode 100644 index 000000000000..410d28c3ef89 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected new file mode 100644 index 000000000000..7e889e82d284 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getName.expected @@ -0,0 +1,2 @@ +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:4:4:6 | foo | +| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:8:7:10 | bar | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getName.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getName.ql new file mode 100644 index 000000000000..8d1e2fbfe206 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected new file mode 100644 index 000000000000..6a7340509a7a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.expected @@ -0,0 +1 @@ +| gen_function.rs:3:1:4:38 | fn foo | 0 | gen_function.rs:4:8:4:13 | ...: u32 | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql new file mode 100644 index 000000000000..c936ea99da7d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected new file mode 100644 index 000000000000..df5810619191 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.expected @@ -0,0 +1,2 @@ +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:7:4:14 | ParamList | +| gen_function.rs:7:5:7:13 | fn bar | gen_function.rs:7:11:7:12 | ParamList | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.ql new file mode 100644 index 000000000000..6d9fed49b7b6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getParamList() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected new file mode 100644 index 000000000000..f9778c63c7ef --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.expected @@ -0,0 +1 @@ +| gen_function.rs:3:1:4:38 | fn foo | gen_function.rs:4:16:4:21 | RetTypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.ql new file mode 100644 index 000000000000..123640add8bf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getRetType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getRetType() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getVisibility.ql new file mode 100644 index 000000000000..1aa04da90e9b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Function/Function_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Function/Function_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Function/Function_getWhereClause.ql new file mode 100644 index 000000000000..b4f5bd562743 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Function/Function_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Function x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/Cargo.lock b/rust/ql/test/extractor-tests/generated/GenericArgList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/GenericArgList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected index 792822323862..d2a5b7bcd8f0 100644 --- a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.expected @@ -1,5 +1 @@ -instances -| gen_generic_arg_list.rs:5:10:5:21 | <...> | -getGenericArg -| gen_generic_arg_list.rs:5:10:5:21 | <...> | 0 | gen_generic_arg_list.rs:5:13:5:15 | TypeArg | -| gen_generic_arg_list.rs:5:10:5:21 | <...> | 1 | gen_generic_arg_list.rs:5:18:5:20 | TypeArg | +| gen_generic_arg_list.rs:5:10:5:21 | <...> | getNumberOfGenericArgs: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.ql b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.ql index 3ba930f204af..bd3e8bfb63f0 100644 --- a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.ql +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(GenericArgList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericArg(GenericArgList x, int index, GenericArg getGenericArg) { - toBeTested(x) and not x.isUnknown() and getGenericArg = x.getGenericArg(index) -} +from GenericArgList x, int getNumberOfGenericArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfGenericArgs = x.getNumberOfGenericArgs() +select x, "getNumberOfGenericArgs:", getNumberOfGenericArgs diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected new file mode 100644 index 000000000000..69e416a57ad7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.expected @@ -0,0 +1,2 @@ +| gen_generic_arg_list.rs:5:10:5:21 | <...> | 0 | gen_generic_arg_list.rs:5:13:5:15 | TypeArg | +| gen_generic_arg_list.rs:5:10:5:21 | <...> | 1 | gen_generic_arg_list.rs:5:18:5:20 | TypeArg | diff --git a/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql new file mode 100644 index 000000000000..cc13c85782a1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/GenericArgList/GenericArgList_getGenericArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from GenericArgList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericArg(index) diff --git a/rust/ql/test/extractor-tests/generated/GenericParamList/Cargo.lock b/rust/ql/test/extractor-tests/generated/GenericParamList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/GenericParamList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.expected b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.expected index be0b98eb2c5e..22f71c13aa6f 100644 --- a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.expected +++ b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.expected @@ -1,8 +1,2 @@ -instances -| gen_generic_param_list.rs:5:9:5:14 | <...> | -| gen_generic_param_list.rs:7:13:7:20 | <...> | -getGenericParam -| gen_generic_param_list.rs:5:9:5:14 | <...> | 0 | gen_generic_param_list.rs:5:10:5:10 | A | -| gen_generic_param_list.rs:5:9:5:14 | <...> | 1 | gen_generic_param_list.rs:5:13:5:13 | B | -| gen_generic_param_list.rs:7:13:7:20 | <...> | 0 | gen_generic_param_list.rs:7:14:7:15 | T1 | -| gen_generic_param_list.rs:7:13:7:20 | <...> | 1 | gen_generic_param_list.rs:7:18:7:19 | T2 | +| gen_generic_param_list.rs:5:9:5:14 | <...> | getNumberOfGenericParams: | 2 | +| gen_generic_param_list.rs:7:13:7:20 | <...> | getNumberOfGenericParams: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.ql b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.ql index c09637a5757c..b79afcf33f75 100644 --- a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.ql +++ b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(GenericParamList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericParam(GenericParamList x, int index, GenericParam getGenericParam) { - toBeTested(x) and not x.isUnknown() and getGenericParam = x.getGenericParam(index) -} +from GenericParamList x, int getNumberOfGenericParams +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfGenericParams = x.getNumberOfGenericParams() +select x, "getNumberOfGenericParams:", getNumberOfGenericParams diff --git a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.expected b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.expected new file mode 100644 index 000000000000..01af2d987e94 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.expected @@ -0,0 +1,4 @@ +| gen_generic_param_list.rs:5:9:5:14 | <...> | 0 | gen_generic_param_list.rs:5:10:5:10 | A | +| gen_generic_param_list.rs:5:9:5:14 | <...> | 1 | gen_generic_param_list.rs:5:13:5:13 | B | +| gen_generic_param_list.rs:7:13:7:20 | <...> | 0 | gen_generic_param_list.rs:7:14:7:15 | T1 | +| gen_generic_param_list.rs:7:13:7:20 | <...> | 1 | gen_generic_param_list.rs:7:18:7:19 | T2 | diff --git a/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql new file mode 100644 index 000000000000..323c11e3841e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/GenericParamList/GenericParamList_getGenericParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from GenericParamList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericParam(index) diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/IdentPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/IdentPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected index 931a1e9069a0..e00fd230ad1e 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.expected @@ -1,9 +1,2 @@ -instances -| gen_ident_pat.rs:6:22:6:22 | y | isMut: | no | isRef: | no | -| gen_ident_pat.rs:10:9:10:25 | y @ ... | isMut: | no | isRef: | no | -getAttr -getName -| gen_ident_pat.rs:6:22:6:22 | y | gen_ident_pat.rs:6:22:6:22 | y | -| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:9:10:9 | y | -getPat -| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) | +| 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/IdentPat/IdentPat.ql b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql index a70bc32ca79c..3587ccff9ae5 100644 --- a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat.ql @@ -2,25 +2,14 @@ import codeql.rust.elements import TestUtils -query predicate instances( - IdentPat x, string isMut__label, string isMut, string isRef__label, string isRef -) { +from IdentPat x, int getNumberOfAttrs, string isMut, string isRef, string hasName, string hasPat +where toBeTested(x) and not x.isUnknown() and - isMut__label = "isMut:" and + getNumberOfAttrs = x.getNumberOfAttrs() and (if x.isMut() then isMut = "yes" else isMut = "no") and - isRef__label = "isRef:" and - if x.isRef() then isRef = "yes" else isRef = "no" -} - -query predicate getAttr(IdentPat x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getName(IdentPat x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getPat(IdentPat x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} + (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, "isMut:", isMut, "isRef:", isRef, "hasName:", + hasName, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql new file mode 100644 index 000000000000..8dde5cce1ca4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IdentPat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.expected new file mode 100644 index 000000000000..c3009e862a44 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.expected @@ -0,0 +1,2 @@ +| gen_ident_pat.rs:6:22:6:22 | y | gen_ident_pat.rs:6:22:6:22 | y | +| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:9:10:9 | y | diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.ql b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.ql new file mode 100644 index 000000000000..e96736741f50 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IdentPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected new file mode 100644 index 000000000000..6ae1d9f978ad --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.expected @@ -0,0 +1 @@ +| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql new file mode 100644 index 000000000000..14d979626d4e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IdentPat/IdentPat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IdentPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/IfExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/IfExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected index 3051c69d10e4..d9a33ad74f79 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.expected @@ -1,12 +1,2 @@ -instances -| gen_if_expr.rs:5:5:7:5 | if ... {...} | -| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | -getAttr -getCondition -| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:8:5:14 | ... == ... | -| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:16:8:20 | ... > ... | -getElse -| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:10:12:12:5 | { ... } | -getThen -| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:16:7:5 | { ... } | -| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:22:10:5 | { ... } | +| gen_if_expr.rs:5:5:7:5 | if ... {...} | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | no | hasThen: | yes | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | getNumberOfAttrs: | 0 | hasCondition: | yes | hasElse: | yes | hasThen: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.ql b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.ql index c41248fa322e..e72816279572 100644 --- a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.ql +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(IfExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(IfExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getCondition(IfExpr x, Expr getCondition) { - toBeTested(x) and not x.isUnknown() and getCondition = x.getCondition() -} - -query predicate getElse(IfExpr x, Expr getElse) { - toBeTested(x) and not x.isUnknown() and getElse = x.getElse() -} - -query predicate getThen(IfExpr x, BlockExpr getThen) { - toBeTested(x) and not x.isUnknown() and getThen = x.getThen() -} +from IfExpr x, int getNumberOfAttrs, string hasCondition, string hasElse, string hasThen +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasCondition() then hasCondition = "yes" else hasCondition = "no") and + (if x.hasElse() then hasElse = "yes" else hasElse = "no") and + if x.hasThen() then hasThen = "yes" else hasThen = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasCondition:", hasCondition, "hasElse:", hasElse, + "hasThen:", hasThen diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql new file mode 100644 index 000000000000..46f5bde3e3bb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IfExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected new file mode 100644 index 000000000000..4990a47bc96e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.expected @@ -0,0 +1,2 @@ +| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:8:5:14 | ... == ... | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:16:8:20 | ... > ... | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql new file mode 100644 index 000000000000..459d6961e5a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getCondition.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IfExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getCondition() diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected new file mode 100644 index 000000000000..a03626f5e5dd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.expected @@ -0,0 +1 @@ +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:10:12:12:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql new file mode 100644 index 000000000000..187637aab212 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getElse.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IfExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getElse() diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected new file mode 100644 index 000000000000..6080b004f38f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.expected @@ -0,0 +1,2 @@ +| gen_if_expr.rs:5:5:7:5 | if ... {...} | gen_if_expr.rs:5:16:7:5 | { ... } | +| gen_if_expr.rs:8:13:12:5 | if ... {...} else {...} | gen_if_expr.rs:8:22:10:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql new file mode 100644 index 000000000000..35fa09196611 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IfExpr/IfExpr_getThen.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IfExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getThen() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Cargo.lock b/rust/ql/test/extractor-tests/generated/Impl/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Impl/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected index 2a47a4e20f68..5297703e7d86 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.expected +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.expected @@ -1,15 +1 @@ -instances -| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | isConst: | no | isDefault: | no | isUnsafe: | no | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAssocItemList -| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:29:9:5 | AssocItemList | -getAttr -getGenericParamList -getSelfTy -| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:22:7:27 | MyType | -getTrait -| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:10:7:16 | MyTrait | -getVisibility -getWhereClause +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isConst: | no | isDefault: | no | isUnsafe: | no | hasSelfTy: | yes | hasTrait: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql index c64bae752c3e..fa92053a2172 100644 --- a/rust/ql/test/extractor-tests/generated/Impl/Impl.ql +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl.ql @@ -2,58 +2,37 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Impl x, string isConst__label, string isConst, string isDefault__label, string isDefault, - string isUnsafe__label, string isUnsafe -) { +from + Impl x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, + 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 - isConst__label = "isConst:" and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) 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 - isDefault__label = "isDefault:" and (if x.isDefault() then isDefault = "yes" else isDefault = "no") and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getExtendedCanonicalPath(Impl x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Impl x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Impl x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAssocItemList(Impl x, AssocItemList getAssocItemList) { - toBeTested(x) and not x.isUnknown() and getAssocItemList = x.getAssocItemList() -} - -query predicate getAttr(Impl x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(Impl x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getSelfTy(Impl x, TypeRepr getSelfTy) { - toBeTested(x) and not x.isUnknown() and getSelfTy = x.getSelfTy() -} - -query predicate getTrait(Impl x, TypeRepr getTrait) { - toBeTested(x) and not x.isUnknown() and getTrait = x.getTrait() -} - -query predicate getVisibility(Impl x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Impl x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + (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, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAssocItemList:", hasAssocItemList, + "getNumberOfAttrs:", getNumberOfAttrs, "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/Impl/Impl_getAssocItemList.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected new file mode 100644 index 000000000000..ae3d1f4a97f2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:29:9:5 | AssocItemList | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql new file mode 100644 index 000000000000..8365b6b0dfe4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAssocItemList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAssocItemList() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttr.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttr.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttr.ql new file mode 100644 index 000000000000..d6c01005755b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..3496b9cebe79 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql new file mode 100644 index 000000000000..b9d428ce94aa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..140490fcaff3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql new file mode 100644 index 000000000000..2b24c7d73a99 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected new file mode 100644 index 000000000000..3d38010c592a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:22:7:27 | MyType | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.ql new file mode 100644 index 000000000000..283903e8d34b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getSelfTy.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getSelfTy() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected new file mode 100644 index 000000000000..9c0392972e1a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.expected @@ -0,0 +1 @@ +| gen_impl.rs:4:5:9:5 | impl MyTrait for MyType { ... } | gen_impl.rs:7:10:7:16 | MyTrait | diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.ql new file mode 100644 index 000000000000..7551a5e960ea --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getTrait.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getTrait() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getVisibility.ql new file mode 100644 index 000000000000..f50c36bc8343 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Impl/Impl_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Impl/Impl_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Impl/Impl_getWhereClause.ql new file mode 100644 index 000000000000..e2e87ef03c4e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Impl/Impl_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Impl x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected index aa04363dc445..27a8426d9c2c 100644 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.expected @@ -1,4 +1 @@ -instances -| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | -getTypeBoundList -| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | gen_impl_trait_type_repr.rs:7:22:7:41 | TypeBoundList | +| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql index e877ba909ff1..8ff70bd976db 100644 --- a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ImplTraitTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeBoundList(ImplTraitTypeRepr x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from ImplTraitTypeRepr x, string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected new file mode 100644 index 000000000000..fbab626faa29 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_impl_trait_type_repr.rs:7:17:7:41 | ImplTraitTypeRepr | gen_impl_trait_type_repr.rs:7:22:7:41 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.ql new file mode 100644 index 000000000000..32c100f19075 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ImplTraitTypeRepr/ImplTraitTypeRepr_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ImplTraitTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/IndexExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected index d951344b17e7..614afc3040f4 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.expected @@ -1,10 +1,2 @@ -instances -| gen_index_expr.rs:5:5:5:12 | list[42] | -| gen_index_expr.rs:6:5:6:12 | list[42] | -getAttr -getBase -| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:5:5:8 | list | -| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:5:6:8 | list | -getIndex -| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:10:5:11 | 42 | -| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:10:6:11 | 42 | +| gen_index_expr.rs:5:5:5:12 | list[42] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | +| gen_index_expr.rs:6:5:6:12 | list[42] | getNumberOfAttrs: | 0 | hasBase: | yes | hasIndex: | yes | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.ql b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.ql index a7a870b1423f..a4b7139c97e2 100644 --- a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.ql +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(IndexExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(IndexExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getBase(IndexExpr x, Expr getBase) { - toBeTested(x) and not x.isUnknown() and getBase = x.getBase() -} - -query predicate getIndex(IndexExpr x, Expr getIndex) { - toBeTested(x) and not x.isUnknown() and getIndex = x.getIndex() -} +from IndexExpr x, int getNumberOfAttrs, string hasBase, string hasIndex +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasBase() then hasBase = "yes" else hasBase = "no") and + if x.hasIndex() then hasIndex = "yes" else hasIndex = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasBase:", hasBase, "hasIndex:", hasIndex diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.ql new file mode 100644 index 000000000000..504f8e56cbe5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IndexExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected new file mode 100644 index 000000000000..13fb9a2c6a6d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.expected @@ -0,0 +1,2 @@ +| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:5:5:8 | list | +| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:5:6:8 | list | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.ql b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.ql new file mode 100644 index 000000000000..b4debab06d72 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getBase.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IndexExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getBase() diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected new file mode 100644 index 000000000000..dfca82040881 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.expected @@ -0,0 +1,2 @@ +| gen_index_expr.rs:5:5:5:12 | list[42] | gen_index_expr.rs:5:10:5:11 | 42 | +| gen_index_expr.rs:6:5:6:12 | list[42] | gen_index_expr.rs:6:10:6:11 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.ql b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.ql new file mode 100644 index 000000000000..f6d5b1e5998b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/IndexExpr/IndexExpr_getIndex.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from IndexExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getIndex() diff --git a/rust/ql/test/extractor-tests/generated/InferTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/InferTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/InferTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql b/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql index 5ee772eee5ca..97f91c3307ef 100644 --- a/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/InferTypeRepr/InferTypeRepr.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(InferTypeRepr x) { toBeTested(x) and not x.isUnknown() } +from InferTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/ItemList/Cargo.lock b/rust/ql/test/extractor-tests/generated/ItemList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ItemList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected index 2efc834b6228..482eff5695c1 100644 --- a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.expected @@ -1,6 +1 @@ -instances -| gen_item_list.rs:7:11:10:5 | ItemList | -getAttr -getItem -| gen_item_list.rs:7:11:10:5 | ItemList | 0 | gen_item_list.rs:8:9:8:19 | fn foo | -| gen_item_list.rs:7:11:10:5 | ItemList | 1 | gen_item_list.rs:9:9:9:17 | struct S | +| gen_item_list.rs:7:11:10:5 | ItemList | getNumberOfAttrs: | 0 | getNumberOfItems: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.ql b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.ql index 015b8f79125d..b656fd735009 100644 --- a/rust/ql/test/extractor-tests/generated/ItemList/ItemList.ql +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ItemList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ItemList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getItem(ItemList x, int index, Item getItem) { - toBeTested(x) and not x.isUnknown() and getItem = x.getItem(index) -} +from ItemList x, int getNumberOfAttrs, int getNumberOfItems +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfItems = x.getNumberOfItems() +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfItems:", getNumberOfItems diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getAttr.expected b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getAttr.ql b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getAttr.ql new file mode 100644 index 000000000000..b49e5c18d37d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ItemList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected new file mode 100644 index 000000000000..1ea2c7b8fc7f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.expected @@ -0,0 +1,2 @@ +| gen_item_list.rs:7:11:10:5 | ItemList | 0 | gen_item_list.rs:8:9:8:19 | fn foo | +| gen_item_list.rs:7:11:10:5 | ItemList | 1 | gen_item_list.rs:9:9:9:17 | struct S | diff --git a/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.ql b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.ql new file mode 100644 index 000000000000..f9e65903fe96 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ItemList/ItemList_getItem.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ItemList 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/Label/Cargo.lock b/rust/ql/test/extractor-tests/generated/Label/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Label/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Label/Label.expected b/rust/ql/test/extractor-tests/generated/Label/Label.expected index 1028afbe3f61..7525044aaa25 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label.expected +++ b/rust/ql/test/extractor-tests/generated/Label/Label.expected @@ -1,4 +1 @@ -instances -| gen_label.rs:5:5:5:11 | 'label | -getLifetime -| gen_label.rs:5:5:5:11 | 'label | gen_label.rs:5:5:5:10 | 'label | +| gen_label.rs:5:5:5:11 | 'label | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label.ql b/rust/ql/test/extractor-tests/generated/Label/Label.ql index e8cfb2a2b133..92f4d44230ee 100644 --- a/rust/ql/test/extractor-tests/generated/Label/Label.ql +++ b/rust/ql/test/extractor-tests/generated/Label/Label.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Label x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLifetime(Label x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} +from Label x, string hasLifetime +where + toBeTested(x) and + not x.isUnknown() and + if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no" +select x, "hasLifetime:", hasLifetime diff --git a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected new file mode 100644 index 000000000000..9bbe91519133 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.expected @@ -0,0 +1 @@ +| gen_label.rs:5:5:5:11 | 'label | gen_label.rs:5:5:5:10 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.ql b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.ql new file mode 100644 index 000000000000..ba555d1209c3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Label/Label_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Label x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/LetElse/Cargo.lock b/rust/ql/test/extractor-tests/generated/LetElse/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LetElse/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected index f0816731e30b..64b1e39e01d4 100644 --- a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.expected @@ -1,4 +1 @@ -instances -| gen_let_else.rs:7:23:9:5 | else {...} | -getBlockExpr -| gen_let_else.rs:7:23:9:5 | else {...} | gen_let_else.rs:7:28:9:5 | { ... } | +| gen_let_else.rs:7:23:9:5 | else {...} | hasBlockExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.ql b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.ql index 12302dcd6fa6..288e99d5a47c 100644 --- a/rust/ql/test/extractor-tests/generated/LetElse/LetElse.ql +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(LetElse x) { toBeTested(x) and not x.isUnknown() } - -query predicate getBlockExpr(LetElse x, BlockExpr getBlockExpr) { - toBeTested(x) and not x.isUnknown() and getBlockExpr = x.getBlockExpr() -} +from LetElse x, string hasBlockExpr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasBlockExpr() then hasBlockExpr = "yes" else hasBlockExpr = "no" +select x, "hasBlockExpr:", hasBlockExpr diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected new file mode 100644 index 000000000000..0083f6a3df57 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.expected @@ -0,0 +1 @@ +| gen_let_else.rs:7:23:9:5 | else {...} | gen_let_else.rs:7:28:9:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql new file mode 100644 index 000000000000..daebdb306132 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetElse/LetElse_getBlockExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetElse x +where toBeTested(x) and not x.isUnknown() +select x, x.getBlockExpr() diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/LetExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LetExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected index ad1544b9f971..115493214ea5 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.expected @@ -1,7 +1 @@ -instances -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | -getAttr -getScrutinee -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some | -getPat -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | Some(...) | +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | getNumberOfAttrs: | 0 | hasScrutinee: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.ql b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.ql index 2f8de7cd2d75..60aa8b90892c 100644 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.ql +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(LetExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(LetExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getScrutinee(LetExpr x, Expr getScrutinee) { - toBeTested(x) and not x.isUnknown() and getScrutinee = x.getScrutinee() -} - -query predicate getPat(LetExpr x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from LetExpr x, int getNumberOfAttrs, string hasScrutinee, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasScrutinee() then hasScrutinee = "yes" else hasScrutinee = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasScrutinee:", hasScrutinee, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql new file mode 100644 index 000000000000..24330c4b19b5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected new file mode 100644 index 000000000000..b935bd98013a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.expected @@ -0,0 +1 @@ +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:12:5:18 | Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql new file mode 100644 index 000000000000..bd358b49c046 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.expected new file mode 100644 index 000000000000..0080ab4ee6e5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.expected @@ -0,0 +1 @@ +| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql new file mode 100644 index 000000000000..2c144c2ac3c7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getScrutinee.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getScrutinee() diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/Cargo.lock b/rust/ql/test/extractor-tests/generated/LetStmt/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LetStmt/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected index 235eb5e04b54..8f01e57d3e95 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.expected @@ -1,25 +1,6 @@ -instances -| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | -| gen_let_stmt.rs:7:5:7:15 | let ... | -| gen_let_stmt.rs:8:5:8:10 | let ... | -| gen_let_stmt.rs:9:5:9:24 | let ... = ... | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | -getAttr -getInitializer -| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:13:5:14 | 42 | -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:18:6:19 | 42 | -| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:19:10:38 | ...::var(...) | -getLetElse -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:40:12:5 | else {...} | -getPat -| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:9:5:9 | x | -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:9:6:9 | x | -| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | -| gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | -| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | -| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | Some(...) | -getTypeRepr -| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | i32 | -| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | i32 | +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTypeRepr: | no | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTypeRepr: | yes | +| gen_let_stmt.rs:7:5:7:15 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTypeRepr: | yes | +| gen_let_stmt.rs:8:5:8:10 | let ... | getNumberOfAttrs: | 0 | hasInitializer: | no | hasLetElse: | no | hasPat: | yes | hasTypeRepr: | no | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | no | hasPat: | yes | hasTypeRepr: | no | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | getNumberOfAttrs: | 0 | hasInitializer: | yes | hasLetElse: | yes | hasPat: | yes | hasTypeRepr: | no | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.ql index 07feca933996..0501354dfa1e 100644 --- a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.ql +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt.ql @@ -2,24 +2,16 @@ import codeql.rust.elements import TestUtils -query predicate instances(LetStmt x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(LetStmt x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getInitializer(LetStmt x, Expr getInitializer) { - toBeTested(x) and not x.isUnknown() and getInitializer = x.getInitializer() -} - -query predicate getLetElse(LetStmt x, LetElse getLetElse) { - toBeTested(x) and not x.isUnknown() and getLetElse = x.getLetElse() -} - -query predicate getPat(LetStmt x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} - -query predicate getTypeRepr(LetStmt x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from + LetStmt x, int getNumberOfAttrs, string hasInitializer, string hasLetElse, string hasPat, + string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasInitializer() then hasInitializer = "yes" else hasInitializer = "no") and + (if x.hasLetElse() then hasLetElse = "yes" else hasLetElse = "no") and + (if x.hasPat() then hasPat = "yes" else hasPat = "no") and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasInitializer:", hasInitializer, "hasLetElse:", + hasLetElse, "hasPat:", hasPat, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql new file mode 100644 index 000000000000..82f563323519 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetStmt x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected new file mode 100644 index 000000000000..bd8368e351fb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.expected @@ -0,0 +1,4 @@ +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:13:5:14 | 42 | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:18:6:19 | 42 | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:18:9:23 | TupleExpr | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:19:10:38 | ...::var(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql new file mode 100644 index 000000000000..cac847aa7265 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getInitializer.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getInitializer() diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected new file mode 100644 index 000000000000..5e8090859af5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.expected @@ -0,0 +1 @@ +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:40:12:5 | else {...} | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.ql new file mode 100644 index 000000000000..f29257c0b289 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getLetElse.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getLetElse() diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected new file mode 100644 index 000000000000..cd4c3f8cc64b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.expected @@ -0,0 +1,6 @@ +| gen_let_stmt.rs:5:5:5:15 | let ... = 42 | gen_let_stmt.rs:5:9:5:9 | x | +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:9:6:9 | x | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:9:7:9 | x | +| gen_let_stmt.rs:8:5:8:10 | let ... | gen_let_stmt.rs:8:9:8:9 | x | +| gen_let_stmt.rs:9:5:9:24 | let ... = ... | gen_let_stmt.rs:9:9:9:14 | TuplePat | +| gen_let_stmt.rs:10:5:12:6 | let ... = ... else {...} | gen_let_stmt.rs:10:9:10:15 | Some(...) | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.ql new file mode 100644 index 000000000000..fd10317a2874 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.expected new file mode 100644 index 000000000000..489647f4793a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_let_stmt.rs:6:5:6:20 | let ... = 42 | gen_let_stmt.rs:6:12:6:14 | i32 | +| gen_let_stmt.rs:7:5:7:15 | let ... | gen_let_stmt.rs:7:12:7:14 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.ql new file mode 100644 index 000000000000..7c5a8872bc31 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LetStmt/LetStmt_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LetStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Cargo.lock b/rust/ql/test/extractor-tests/generated/Lifetime/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Lifetime/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected index e55b5553b5c3..bb57ab8de874 100644 --- a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.expected @@ -1,6 +1,2 @@ -instances -| gen_lifetime.rs:7:12:7:13 | 'a | -| gen_lifetime.rs:7:20:7:21 | 'a | -getText -| gen_lifetime.rs:7:12:7:13 | 'a | 'a | -| gen_lifetime.rs:7:20:7:21 | 'a | 'a | +| gen_lifetime.rs:7:12:7:13 | 'a | hasText: | yes | +| gen_lifetime.rs:7:20:7:21 | 'a | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.ql b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.ql index fa2a2e90910b..e07b53ec7a02 100644 --- a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.ql +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Lifetime x) { toBeTested(x) and not x.isUnknown() } - -query predicate getText(Lifetime x, string getText) { - toBeTested(x) and not x.isUnknown() and getText = x.getText() -} +from Lifetime x, string hasText +where + toBeTested(x) and + not x.isUnknown() and + if x.hasText() then hasText = "yes" else hasText = "no" +select x, "hasText:", hasText diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected new file mode 100644 index 000000000000..3570dcab91a0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.expected @@ -0,0 +1,2 @@ +| gen_lifetime.rs:7:12:7:13 | 'a | 'a | +| gen_lifetime.rs:7:20:7:21 | 'a | 'a | diff --git a/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.ql b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.ql new file mode 100644 index 000000000000..471b3a2405b3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Lifetime/Lifetime_getText.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Lifetime x +where toBeTested(x) and not x.isUnknown() +select x, x.getText() diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/Cargo.lock b/rust/ql/test/extractor-tests/generated/LifetimeArg/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected index 0e80f0af3196..07554eee9bcd 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.expected @@ -1,4 +1 @@ -instances -| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | -getLifetime -| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | gen_lifetime_arg.rs:7:20:7:21 | 'a | +| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | hasLifetime: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql index 9d0c48958d8d..83033e27af9d 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(LifetimeArg x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLifetime(LifetimeArg x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} +from LifetimeArg x, string hasLifetime +where + toBeTested(x) and + not x.isUnknown() and + if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no" +select x, "hasLifetime:", hasLifetime diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected new file mode 100644 index 000000000000..598bae0390f5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.expected @@ -0,0 +1 @@ +| gen_lifetime_arg.rs:7:20:7:21 | LifetimeArg | gen_lifetime_arg.rs:7:20:7:21 | 'a | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.ql b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.ql new file mode 100644 index 000000000000..0fe36ad85149 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeArg/LifetimeArg_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LifetimeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/Cargo.lock b/rust/ql/test/extractor-tests/generated/LifetimeParam/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected index 7e33b58d17f7..2055797b2fd6 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.expected @@ -1,6 +1 @@ -instances -| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | -getAttr -getLifetime -| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | gen_lifetime_param.rs:7:12:7:13 | 'a | -getTypeBoundList +| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | getNumberOfAttrs: | 0 | hasLifetime: | yes | hasTypeBoundList: | no | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql index bddc4418ba46..abe4635c285b 100644 --- a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(LifetimeParam x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(LifetimeParam x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getLifetime(LifetimeParam x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} - -query predicate getTypeBoundList(LifetimeParam x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from LifetimeParam x, int getNumberOfAttrs, string hasLifetime, string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasLifetime:", hasLifetime, "hasTypeBoundList:", + hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.ql b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.ql new file mode 100644 index 000000000000..6053ca9b5fea --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LifetimeParam x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected new file mode 100644 index 000000000000..1d1bc5bf0b02 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.expected @@ -0,0 +1 @@ +| gen_lifetime_param.rs:7:12:7:13 | LifetimeParam | gen_lifetime_param.rs:7:12:7:13 | 'a | diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.ql b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.ql new file mode 100644 index 000000000000..0cc315fabe0f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LifetimeParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.ql new file mode 100644 index 000000000000..673701670844 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LifetimeParam/LifetimeParam_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LifetimeParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/LiteralExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LiteralExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.expected b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.expected index 1cd7c4573ee6..afe42a48f8f0 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.expected @@ -1,19 +1,8 @@ -instances -| gen_literal_expr.rs:5:5:5:6 | 42 | -| gen_literal_expr.rs:6:5:6:8 | 42.0 | -| gen_literal_expr.rs:7:5:7:19 | "Hello, world!" | -| gen_literal_expr.rs:8:5:8:20 | b"Hello, world!" | -| gen_literal_expr.rs:9:5:9:7 | 'x' | -| gen_literal_expr.rs:10:5:10:8 | b'x' | -| gen_literal_expr.rs:11:5:11:20 | r"Hello, world!" | -| gen_literal_expr.rs:12:5:12:8 | true | -getAttr -getTextValue -| gen_literal_expr.rs:5:5:5:6 | 42 | 42 | -| gen_literal_expr.rs:6:5:6:8 | 42.0 | 42.0 | -| gen_literal_expr.rs:7:5:7:19 | "Hello, world!" | "Hello, world!" | -| gen_literal_expr.rs:8:5:8:20 | b"Hello, world!" | b"Hello, world!" | -| gen_literal_expr.rs:9:5:9:7 | 'x' | 'x' | -| gen_literal_expr.rs:10:5:10:8 | b'x' | b'x' | -| gen_literal_expr.rs:11:5:11:20 | r"Hello, world!" | r"Hello, world!" | -| gen_literal_expr.rs:12:5:12:8 | true | true | +| gen_literal_expr.rs:5:5:5:6 | 42 | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:6:5:6:8 | 42.0 | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:7:5:7:19 | "Hello, world!" | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:8:5:8:20 | b"Hello, world!" | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:9:5:9:7 | 'x' | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:10:5:10:8 | b'x' | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:11:5:11:20 | r"Hello, world!" | getNumberOfAttrs: | 0 | hasTextValue: | yes | +| gen_literal_expr.rs:12:5:12:8 | true | getNumberOfAttrs: | 0 | hasTextValue: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql index 0b49e28cff23..c33f15d8aff2 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql +++ b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(LiteralExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(LiteralExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTextValue(LiteralExpr x, string getTextValue) { - toBeTested(x) and not x.isUnknown() and getTextValue = x.getTextValue() -} +from LiteralExpr x, int getNumberOfAttrs, string hasTextValue +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + if x.hasTextValue() then hasTextValue = "yes" else hasTextValue = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTextValue:", hasTextValue diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql new file mode 100644 index 000000000000..a4362a3ea725 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LiteralExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.expected b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.expected new file mode 100644 index 000000000000..c41aeee97ec6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.expected @@ -0,0 +1,8 @@ +| gen_literal_expr.rs:5:5:5:6 | 42 | 42 | +| gen_literal_expr.rs:6:5:6:8 | 42.0 | 42.0 | +| gen_literal_expr.rs:7:5:7:19 | "Hello, world!" | "Hello, world!" | +| gen_literal_expr.rs:8:5:8:20 | b"Hello, world!" | b"Hello, world!" | +| gen_literal_expr.rs:9:5:9:7 | 'x' | 'x' | +| gen_literal_expr.rs:10:5:10:8 | b'x' | b'x' | +| gen_literal_expr.rs:11:5:11:20 | r"Hello, world!" | r"Hello, world!" | +| gen_literal_expr.rs:12:5:12:8 | true | true | diff --git a/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql new file mode 100644 index 000000000000..147110b9333d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LiteralExpr/LiteralExpr_getTextValue.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LiteralExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTextValue() diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/LiteralPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LiteralPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected index 104913be1a1a..d4734ef3dac3 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.expected @@ -1,4 +1 @@ -instances -| gen_literal_pat.rs:6:9:6:10 | 42 | -getLiteral -| gen_literal_pat.rs:6:9:6:10 | 42 | gen_literal_pat.rs:6:9:6:10 | 42 | +| gen_literal_pat.rs:6:9:6:10 | 42 | hasLiteral: | yes | diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.ql b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.ql index ede495337268..6052b07a005f 100644 --- a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.ql +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(LiteralPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLiteral(LiteralPat x, LiteralExpr getLiteral) { - toBeTested(x) and not x.isUnknown() and getLiteral = x.getLiteral() -} +from LiteralPat x, string hasLiteral +where + toBeTested(x) and + not x.isUnknown() and + if x.hasLiteral() then hasLiteral = "yes" else hasLiteral = "no" +select x, "hasLiteral:", hasLiteral diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected new file mode 100644 index 000000000000..487f239737bc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.expected @@ -0,0 +1 @@ +| gen_literal_pat.rs:6:9:6:10 | 42 | gen_literal_pat.rs:6:9:6:10 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql new file mode 100644 index 000000000000..ca6ff418b1ad --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LiteralPat/LiteralPat_getLiteral.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LiteralPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getLiteral() diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/LoopExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected index 970ebd6911b8..b0adbe40897f 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.expected @@ -1,11 +1,3 @@ -instances -| gen_loop_expr.rs:5:5:7:5 | loop { ... } | -| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | -| gen_loop_expr.rs:13:5:19:5 | loop { ... } | -getLabel -| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:5:8:11 | 'label | -getLoopBody -| gen_loop_expr.rs:5:5:7:5 | loop { ... } | gen_loop_expr.rs:5:10:7:5 | { ... } | -| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:18:11:5 | { ... } | -| gen_loop_expr.rs:13:5:19:5 | loop { ... } | gen_loop_expr.rs:13:10:19:5 | { ... } | -getAttr +| gen_loop_expr.rs:5:5:7:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | hasLabel: | yes | hasLoopBody: | yes | getNumberOfAttrs: | 0 | +| gen_loop_expr.rs:13:5:19:5 | loop { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql index c266b1c064e2..92248ab5ec07 100644 --- a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(LoopExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLabel(LoopExpr x, Label getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getLoopBody(LoopExpr x, BlockExpr getLoopBody) { - toBeTested(x) and not x.isUnknown() and getLoopBody = x.getLoopBody() -} - -query predicate getAttr(LoopExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from LoopExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql new file mode 100644 index 000000000000..6367edb64216 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LoopExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected new file mode 100644 index 000000000000..e2dc2fdf8950 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.expected @@ -0,0 +1 @@ +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:5:8:11 | 'label | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql new file mode 100644 index 000000000000..9617abd7f346 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LoopExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected new file mode 100644 index 000000000000..9cf0c64dd0b8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.expected @@ -0,0 +1,3 @@ +| gen_loop_expr.rs:5:5:7:5 | loop { ... } | gen_loop_expr.rs:5:10:7:5 | { ... } | +| gen_loop_expr.rs:8:5:11:5 | 'label: loop { ... } | gen_loop_expr.rs:8:18:11:5 | { ... } | +| gen_loop_expr.rs:13:5:19:5 | loop { ... } | gen_loop_expr.rs:13:10:19:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql new file mode 100644 index 000000000000..bd44b0ac7333 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/LoopExpr/LoopExpr_getLoopBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from LoopExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLoopBody() diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.expected b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.expected index 67d330d937e1..4bf0740b930f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.expected @@ -1,5 +1 @@ -instances -| gen_macro_block_expr.rs:5:14:5:28 | MacroBlockExpr | -getTailExpr -| gen_macro_block_expr.rs:5:14:5:28 | MacroBlockExpr | gen_macro_block_expr.rs:5:14:5:28 | { ... } | -getStatement +| gen_macro_block_expr.rs:5:14:5:28 | MacroBlockExpr | hasTailExpr: | yes | getNumberOfStatements: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql index 82502ad4ec0d..c003ca232f1e 100644 --- a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroBlockExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTailExpr(MacroBlockExpr x, Expr getTailExpr) { - toBeTested(x) and not x.isUnknown() and getTailExpr = x.getTailExpr() -} - -query predicate getStatement(MacroBlockExpr x, int index, Stmt getStatement) { - toBeTested(x) and not x.isUnknown() and getStatement = x.getStatement(index) -} +from MacroBlockExpr x, string hasTailExpr, int getNumberOfStatements +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasTailExpr() then hasTailExpr = "yes" else hasTailExpr = "no") and + getNumberOfStatements = x.getNumberOfStatements() +select x, "hasTailExpr:", hasTailExpr, "getNumberOfStatements:", getNumberOfStatements diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.expected b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql new file mode 100644 index 000000000000..a5d58c0e32d1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getStatement.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroBlockExpr 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/MacroBlockExpr/MacroBlockExpr_getTailExpr.expected b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.expected new file mode 100644 index 000000000000..ed7fbf364cf0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.expected @@ -0,0 +1 @@ +| gen_macro_block_expr.rs:5:14:5:28 | MacroBlockExpr | gen_macro_block_expr.rs:5:14:5:28 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.ql b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.ql new file mode 100644 index 000000000000..4fdb10bc3513 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroBlockExpr/MacroBlockExpr_getTailExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroBlockExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTailExpr() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroCall/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroCall/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected index 0fae1d5e49da..1192db0ba7ea 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.expected @@ -1,16 +1,2 @@ -instances -| gen_macro_call.rs:7:5:7:29 | println!... | -| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getPath -| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:5:7:11 | println | -| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:5:7:29 | ...::format_args_nl | -getTokenTree -| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:13:7:29 | TokenTree | -| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | TokenTree | -getMacroCallExpansion -| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:14:7:28 | MacroBlockExpr | -| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | FormatArgsExpr | +| gen_macro_call.rs:7:5:7:29 | println!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasPath: | yes | hasTokenTree: | yes | hasMacroCallExpansion: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql index 48fddccf341e..b9461abfcf18 100644 --- a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall.ql @@ -2,34 +2,29 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroCall x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(MacroCall x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(MacroCall x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(MacroCall x, MacroItems getAttributeMacroExpansion) { +from + MacroCall x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasPath, string hasTokenTree, + string hasMacroCallExpansion +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(MacroCall x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getPath(MacroCall x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getTokenTree(MacroCall x, TokenTree getTokenTree) { - toBeTested(x) and not x.isUnknown() and getTokenTree = x.getTokenTree() -} - -query predicate getMacroCallExpansion(MacroCall x, AstNode getMacroCallExpansion) { - toBeTested(x) and not x.isUnknown() and getMacroCallExpansion = x.getMacroCallExpansion() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and + if x.hasMacroCallExpansion() then hasMacroCallExpansion = "yes" else hasMacroCallExpansion = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasPath:", hasPath, "hasTokenTree:", hasTokenTree, "hasMacroCallExpansion:", + hasMacroCallExpansion diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql new file mode 100644 index 000000000000..ef6a94400f02 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroCall x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..7931273e757e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getAttributeMacroExpansion.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.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.ql new file mode 100644 index 000000000000..60e32669e7fc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getCrateOrigin.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.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..0fffb4f4384e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getExtendedCanonicalPath.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.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected new file mode 100644 index 000000000000..e93d36c8ac27 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.expected @@ -0,0 +1,2 @@ +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:14:7:28 | MacroBlockExpr | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | FormatArgsExpr | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.ql new file mode 100644 index 000000000000..6ce5fd6e7c88 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getMacroCallExpansion.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.getMacroCallExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected new file mode 100644 index 000000000000..0f17b0ddd121 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.expected @@ -0,0 +1,2 @@ +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:5:7:11 | println | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:5:7:29 | ...::format_args_nl | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.ql new file mode 100644 index 000000000000..729ce15fb3f6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getPath.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.getPath() diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected new file mode 100644 index 000000000000..833429dd94fe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.expected @@ -0,0 +1,2 @@ +| gen_macro_call.rs:7:5:7:29 | println!... | gen_macro_call.rs:7:13:7:29 | TokenTree | +| gen_macro_call.rs:7:14:7:28 | ...::format_args_nl!... | gen_macro_call.rs:7:14:7:28 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.ql new file mode 100644 index 000000000000..3186e5c62974 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroCall/MacroCall_getTokenTree.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.getTokenTree() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroDef/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroDef/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected index b9b6ddc10cd1..2aa118cbfbc4 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.expected @@ -1,14 +1 @@ -instances -| gen_macro_def.rs:4:5:9:5 | MacroDef | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getArgs -| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:25:7:39 | TokenTree | -getAttr -getBody -| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:41:9:5 | TokenTree | -getName -| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:15:7:24 | vec_of_two | -getVisibility -| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:5:7:7 | Visibility | +| gen_macro_def.rs:4:5:9:5 | MacroDef | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | hasArgs: | yes | getNumberOfAttrs: | 0 | hasBody: | yes | hasName: | yes | hasVisibility: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql index e85173597cb6..3ec25748abd4 100644 --- a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef.ql @@ -2,38 +2,30 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroDef x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(MacroDef x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(MacroDef x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(MacroDef x, MacroItems getAttributeMacroExpansion) { +from + MacroDef x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, string hasArgs, int getNumberOfAttrs, string hasBody, + string hasName, string hasVisibility +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getArgs(MacroDef x, TokenTree getArgs) { - toBeTested(x) and not x.isUnknown() and getArgs = x.getArgs() -} - -query predicate getAttr(MacroDef x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getBody(MacroDef x, TokenTree getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getName(MacroDef x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getVisibility(MacroDef x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + (if x.hasArgs() then hasArgs = "yes" else hasArgs = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasBody() then hasBody = "yes" else hasBody = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasArgs:", hasArgs, + "getNumberOfAttrs:", getNumberOfAttrs, "hasBody:", hasBody, "hasName:", hasName, "hasVisibility:", + hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected new file mode 100644 index 000000000000..fecd14ff2baa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:25:7:39 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql new file mode 100644 index 000000000000..304f6f8d5e33 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getArgs.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getArgs() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql new file mode 100644 index 000000000000..28e5f418c01c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..be2992839166 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected new file mode 100644 index 000000000000..776a64f484a0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:41:9:5 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql new file mode 100644 index 000000000000..0c2f4e329fdb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql new file mode 100644 index 000000000000..81aa4aa3fadc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..c30de43e669c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected new file mode 100644 index 000000000000..7b7e532ab2e4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:15:7:24 | vec_of_two | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.ql new file mode 100644 index 000000000000..49cba18e277b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected new file mode 100644 index 000000000000..74234db763b6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.expected @@ -0,0 +1 @@ +| gen_macro_def.rs:4:5:9:5 | MacroDef | gen_macro_def.rs:7:5:7:7 | Visibility | diff --git a/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql new file mode 100644 index 000000000000..11323b3a581e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroDef/MacroDef_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroDef x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected index 32cb0efaaef9..819ac71ef403 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.expected @@ -1,4 +1 @@ -instances -| gen_macro_expr.rs:7:13:7:25 | MacroExpr | -getMacroCall -| gen_macro_expr.rs:7:13:7:25 | MacroExpr | gen_macro_expr.rs:7:13:7:25 | vec!... | +| gen_macro_expr.rs:7:13:7:25 | MacroExpr | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.ql b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.ql index 0787ed7392c2..a2c2d4315125 100644 --- a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getMacroCall(MacroExpr x, MacroCall getMacroCall) { - toBeTested(x) and not x.isUnknown() and getMacroCall = x.getMacroCall() -} +from MacroExpr x, string hasMacroCall +where + toBeTested(x) and + not x.isUnknown() and + if x.hasMacroCall() then hasMacroCall = "yes" else hasMacroCall = "no" +select x, "hasMacroCall:", hasMacroCall diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected new file mode 100644 index 000000000000..493f2f882918 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.expected @@ -0,0 +1 @@ +| gen_macro_expr.rs:7:13:7:25 | MacroExpr | gen_macro_expr.rs:7:13:7:25 | vec!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql new file mode 100644 index 000000000000..7c1d6c44c26a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroExpr/MacroExpr_getMacroCall.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMacroCall() diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroItems/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroItems/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected index 90daafd58170..00f51a7b82bf 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.expected @@ -1,7 +1,2 @@ -instances -| gen_macro_items.rs:5:5:5:38 | MacroItems | -| gen_macro_items.rs:13:12:13:14 | MacroItems | -getItem -| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | gen_macro_items.rs:5:5:5:38 | use ...::Path | -| gen_macro_items.rs:5:5:5:38 | MacroItems | 1 | gen_macro_items.rs:5:5:5:38 | fn get_parent | -| gen_macro_items.rs:13:12:13:14 | MacroItems | 0 | gen_macro_items.rs:13:12:13:14 | impl ...::Debug for Bar::<...> { ... } | +| gen_macro_items.rs:5:5:5:38 | MacroItems | getNumberOfItems: | 2 | +| gen_macro_items.rs:13:12:13:14 | MacroItems | getNumberOfItems: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql index 3a9cd1c84998..cd72b24c18d9 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroItems x) { toBeTested(x) and not x.isUnknown() } - -query predicate getItem(MacroItems x, int index, Item getItem) { - toBeTested(x) and not x.isUnknown() and getItem = x.getItem(index) -} +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..803bf159c945 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected @@ -0,0 +1,3 @@ +| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | gen_macro_items.rs:5:5:5:38 | use ...::Path | +| gen_macro_items.rs:5:5:5:38 | MacroItems | 1 | gen_macro_items.rs:5:5:5:38 | fn get_parent | +| gen_macro_items.rs:13:12:13:14 | MacroItems | 0 | gen_macro_items.rs:13:12:13:14 | impl ...::Debug for Bar::<...> { ... } | 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/MacroPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected index 029b75549879..b56789484ffd 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.expected @@ -1,4 +1 @@ -instances -| gen_macro_pat.rs:13:9:13:19 | MacroPat | -getMacroCall -| gen_macro_pat.rs:13:9:13:19 | MacroPat | gen_macro_pat.rs:13:9:13:19 | my_macro!... | +| gen_macro_pat.rs:13:9:13:19 | MacroPat | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.ql b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.ql index 6d9d7ba17fd3..d54889e043b4 100644 --- a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.ql +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getMacroCall(MacroPat x, MacroCall getMacroCall) { - toBeTested(x) and not x.isUnknown() and getMacroCall = x.getMacroCall() -} +from MacroPat x, string hasMacroCall +where + toBeTested(x) and + not x.isUnknown() and + if x.hasMacroCall() then hasMacroCall = "yes" else hasMacroCall = "no" +select x, "hasMacroCall:", hasMacroCall diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected new file mode 100644 index 000000000000..faa6c1d7e6d4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.expected @@ -0,0 +1 @@ +| gen_macro_pat.rs:13:9:13:19 | MacroPat | gen_macro_pat.rs:13:9:13:19 | my_macro!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql new file mode 100644 index 000000000000..9c8f0846ede4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroPat/MacroPat_getMacroCall.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getMacroCall() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroRules/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroRules/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected index 4bfb98220f23..db582f99f87f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.expected @@ -1,11 +1 @@ -instances -| gen_macro_rules.rs:4:5:9:5 | MacroRules | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getName -| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:18:5:25 | my_macro | -getTokenTree -| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:27:9:5 | TokenTree | -getVisibility +| gen_macro_rules.rs:4:5:9:5 | MacroRules | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasName: | yes | hasTokenTree: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql index ef051f77c9ee..5e1ebacd573f 100644 --- a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules.ql @@ -2,34 +2,28 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroRules x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(MacroRules x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(MacroRules x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(MacroRules x, MacroItems getAttributeMacroExpansion) { +from + MacroRules x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasName, string hasTokenTree, + string hasVisibility +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(MacroRules x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getName(MacroRules x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTokenTree(MacroRules x, TokenTree getTokenTree) { - toBeTested(x) and not x.isUnknown() and getTokenTree = x.getTokenTree() -} - -query predicate getVisibility(MacroRules x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasTokenTree() then hasTokenTree = "yes" else hasTokenTree = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasName:", hasName, "hasTokenTree:", hasTokenTree, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql new file mode 100644 index 000000000000..4fa5d762c629 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..b7b01f36fe70 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql new file mode 100644 index 000000000000..987a91f57068 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..b2fa0cc9f7e9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected new file mode 100644 index 000000000000..08044386ded5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.expected @@ -0,0 +1 @@ +| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:18:5:25 | my_macro | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.ql new file mode 100644 index 000000000000..7a1fd49401aa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected new file mode 100644 index 000000000000..9aafcc373892 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.expected @@ -0,0 +1 @@ +| gen_macro_rules.rs:4:5:9:5 | MacroRules | gen_macro_rules.rs:5:27:9:5 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql new file mode 100644 index 000000000000..7fae79438fcb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getTokenTree.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getTokenTree() diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.expected b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql new file mode 100644 index 000000000000..bd50e49e339c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroRules/MacroRules_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroRules x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected index 4047903cc5e1..2f91b7f8d007 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.expected @@ -1,4 +1 @@ -instances -| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | -getMacroCall -| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | gen_macro_type_repr.rs:10:14:10:26 | macro_type!... | +| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | hasMacroCall: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.ql b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.ql index d946ec6d05d3..466d4cf04054 100644 --- a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(MacroTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getMacroCall(MacroTypeRepr x, MacroCall getMacroCall) { - toBeTested(x) and not x.isUnknown() and getMacroCall = x.getMacroCall() -} +from MacroTypeRepr x, string hasMacroCall +where + toBeTested(x) and + not x.isUnknown() and + if x.hasMacroCall() then hasMacroCall = "yes" else hasMacroCall = "no" +select x, "hasMacroCall:", hasMacroCall diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected new file mode 100644 index 000000000000..896e3e199b2c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.expected @@ -0,0 +1 @@ +| gen_macro_type_repr.rs:10:14:10:26 | MacroTypeRepr | gen_macro_type_repr.rs:10:14:10:26 | macro_type!... | diff --git a/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.ql b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.ql new file mode 100644 index 000000000000..22aa72d039bb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroTypeRepr/MacroTypeRepr_getMacroCall.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MacroTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMacroCall() diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/Cargo.lock b/rust/ql/test/extractor-tests/generated/MatchArm/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MatchArm/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected index 964af263cd79..b3eb4c178b26 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.expected @@ -1,18 +1,4 @@ -instances -| gen_match_arm.rs:6:9:6:29 | ... => y | -| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | -| gen_match_arm.rs:11:9:11:15 | _ => 0 | -getAttr -getExpr -| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:28:6:28 | y | -| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:25:7:25 | 0 | -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:30:10:34 | ... / ... | -| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:14:11:14 | 0 | -getGuard -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:17:10:25 | MatchGuard | -getPat -| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | ...::Some(...) | -| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:9:7:20 | ...::None | -| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | Some(...) | -| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | +| gen_match_arm.rs:6:9:6:29 | ... => y | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | yes | hasPat: | yes | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasGuard: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.ql b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.ql index 11450061ab03..9161cdadf73d 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.ql +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(MatchArm x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(MatchArm x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(MatchArm x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getGuard(MatchArm x, MatchGuard getGuard) { - toBeTested(x) and not x.isUnknown() and getGuard = x.getGuard() -} - -query predicate getPat(MatchArm x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from MatchArm x, int getNumberOfAttrs, string hasExpr, string hasGuard, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + (if x.hasGuard() then hasGuard = "yes" else hasGuard = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasGuard:", hasGuard, + "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.ql b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.ql new file mode 100644 index 000000000000..d86de1bb46dc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArm x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected new file mode 100644 index 000000000000..95d4a7fc2f22 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.expected @@ -0,0 +1,4 @@ +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:28:6:28 | y | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:25:7:25 | 0 | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:30:10:34 | ... / ... | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:14:11:14 | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.ql b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.ql new file mode 100644 index 000000000000..b488c8cd7ada --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArm x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected new file mode 100644 index 000000000000..002917455476 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.expected @@ -0,0 +1 @@ +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:17:10:25 | MatchGuard | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.ql b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.ql new file mode 100644 index 000000000000..508c72779ed7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getGuard.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArm x +where toBeTested(x) and not x.isUnknown() +select x, x.getGuard() diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected new file mode 100644 index 000000000000..d4adba7f838b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.expected @@ -0,0 +1,4 @@ +| gen_match_arm.rs:6:9:6:29 | ... => y | gen_match_arm.rs:6:9:6:23 | ...::Some(...) | +| gen_match_arm.rs:7:9:7:26 | ...::None => 0 | gen_match_arm.rs:7:9:7:20 | ...::None | +| gen_match_arm.rs:10:9:10:35 | ... if ... => ... | gen_match_arm.rs:10:9:10:15 | Some(...) | +| gen_match_arm.rs:11:9:11:15 | _ => 0 | gen_match_arm.rs:11:9:11:9 | _ | diff --git a/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.ql b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.ql new file mode 100644 index 000000000000..ff83947901a0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArm/MatchArm_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArm x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/Cargo.lock b/rust/ql/test/extractor-tests/generated/MatchArmList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected index fec09a4f9baa..8a796ef9a55b 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.expected @@ -1,7 +1 @@ -instances -| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | -getArm -| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 0 | gen_match_arm_list.rs:8:9:8:19 | 1 => "one" | -| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 1 | gen_match_arm_list.rs:9:9:9:19 | 2 => "two" | -| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 2 | gen_match_arm_list.rs:10:9:10:21 | _ => "other" | -getAttr +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | getNumberOfArms: | 3 | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.ql b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.ql index 5565aeafc7d2..be4583a9501c 100644 --- a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.ql +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(MatchArmList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getArm(MatchArmList x, int index, MatchArm getArm) { - toBeTested(x) and not x.isUnknown() and getArm = x.getArm(index) -} - -query predicate getAttr(MatchArmList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from MatchArmList x, int getNumberOfArms, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfArms = x.getNumberOfArms() and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "getNumberOfArms:", getNumberOfArms, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected new file mode 100644 index 000000000000..5a53f429e983 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.expected @@ -0,0 +1,3 @@ +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 0 | gen_match_arm_list.rs:8:9:8:19 | 1 => "one" | +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 1 | gen_match_arm_list.rs:9:9:9:19 | 2 => "two" | +| gen_match_arm_list.rs:7:13:11:5 | MatchArmList | 2 | gen_match_arm_list.rs:10:9:10:21 | _ => "other" | diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.ql b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.ql new file mode 100644 index 000000000000..3d29c5731586 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getArm.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArmList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArm(index) diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.expected b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.ql b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.ql new file mode 100644 index 000000000000..0992c49ba305 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchArmList/MatchArmList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchArmList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/MatchExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected index 9648a7aa6c7e..8c5b0a32a8fa 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.expected @@ -1,10 +1,2 @@ -instances -| gen_match_expr.rs:5:5:8:5 | match x { ... } | -| gen_match_expr.rs:9:5:12:5 | match x { ... } | -getAttr -getScrutinee -| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:11:5:11 | x | -| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:11:9:11 | x | -getMatchArmList -| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:13:8:5 | MatchArmList | -| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:13:12:5 | MatchArmList | +| gen_match_expr.rs:5:5:8:5 | match x { ... } | getNumberOfAttrs: | 0 | hasScrutinee: | yes | hasMatchArmList: | yes | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | getNumberOfAttrs: | 0 | hasScrutinee: | yes | hasMatchArmList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.ql b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.ql index c8cc9448d5e2..0847933e937c 100644 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(MatchExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(MatchExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getScrutinee(MatchExpr x, Expr getScrutinee) { - toBeTested(x) and not x.isUnknown() and getScrutinee = x.getScrutinee() -} - -query predicate getMatchArmList(MatchExpr x, MatchArmList getMatchArmList) { - toBeTested(x) and not x.isUnknown() and getMatchArmList = x.getMatchArmList() -} +from MatchExpr x, int getNumberOfAttrs, string hasScrutinee, string hasMatchArmList +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasScrutinee() then hasScrutinee = "yes" else hasScrutinee = "no") and + if x.hasMatchArmList() then hasMatchArmList = "yes" else hasMatchArmList = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasScrutinee:", hasScrutinee, "hasMatchArmList:", + hasMatchArmList diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.ql new file mode 100644 index 000000000000..51c49a770739 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected new file mode 100644 index 000000000000..f5e25db5b39d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.expected @@ -0,0 +1,2 @@ +| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:13:8:5 | MatchArmList | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:13:12:5 | MatchArmList | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql new file mode 100644 index 000000000000..d6dc36bfc919 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getMatchArmList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMatchArmList() diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.expected new file mode 100644 index 000000000000..427af7c6ed0c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.expected @@ -0,0 +1,2 @@ +| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:11:5:11 | x | +| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:11:9:11 | x | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.ql b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.ql new file mode 100644 index 000000000000..4d29f21fbfba --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getScrutinee.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getScrutinee() diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/Cargo.lock b/rust/ql/test/extractor-tests/generated/MatchGuard/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected index bcddfde4c267..2005c2a1c3df 100644 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.expected @@ -1,4 +1 @@ -instances -| gen_match_guard.rs:8:11:8:18 | MatchGuard | -getCondition -| gen_match_guard.rs:8:11:8:18 | MatchGuard | gen_match_guard.rs:8:14:8:18 | ... > ... | +| gen_match_guard.rs:8:11:8:18 | MatchGuard | hasCondition: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.ql b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.ql index b7051db22d6d..d31138b1d957 100644 --- a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.ql +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(MatchGuard x) { toBeTested(x) and not x.isUnknown() } - -query predicate getCondition(MatchGuard x, Expr getCondition) { - toBeTested(x) and not x.isUnknown() and getCondition = x.getCondition() -} +from MatchGuard x, string hasCondition +where + toBeTested(x) and + not x.isUnknown() and + if x.hasCondition() then hasCondition = "yes" else hasCondition = "no" +select x, "hasCondition:", hasCondition diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected new file mode 100644 index 000000000000..e6d76089e714 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.expected @@ -0,0 +1 @@ +| gen_match_guard.rs:8:11:8:18 | MatchGuard | gen_match_guard.rs:8:14:8:18 | ... > ... | diff --git a/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql new file mode 100644 index 000000000000..1334666a960e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MatchGuard/MatchGuard_getCondition.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MatchGuard x +where toBeTested(x) and not x.isUnknown() +select x, x.getCondition() diff --git a/rust/ql/test/extractor-tests/generated/Meta/Cargo.lock b/rust/ql/test/extractor-tests/generated/Meta/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Meta/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta.expected index 92385fa4da98..0aa36a59d61a 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta.expected +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta.expected @@ -1,10 +1,2 @@ -instances -| gen_meta.rs:7:7:7:46 | Meta | isUnsafe: | yes | -| gen_meta.rs:9:7:9:72 | Meta | isUnsafe: | no | -getExpr -| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:27:7:45 | "reason_for_bypass" | -getPath -| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:14:7:23 | ...::name | -| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:7:9:16 | deprecated | -getTokenTree -| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:17:9:72 | TokenTree | +| gen_meta.rs:7:7:7:46 | Meta | hasExpr: | yes | isUnsafe: | yes | hasPath: | yes | hasTokenTree: | no | +| gen_meta.rs:9:7:9:72 | Meta | hasExpr: | no | isUnsafe: | no | hasPath: | yes | hasTokenTree: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta.ql b/rust/ql/test/extractor-tests/generated/Meta/Meta.ql index dd054ea7e993..72a0426d8098 100644 --- a/rust/ql/test/extractor-tests/generated/Meta/Meta.ql +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta.ql @@ -2,21 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(Meta x, string isUnsafe__label, string isUnsafe) { +from Meta x, string hasExpr, string isUnsafe, string hasPath, string hasTokenTree +where toBeTested(x) and not x.isUnknown() and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getExpr(Meta x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getPath(Meta x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getTokenTree(Meta x, TokenTree getTokenTree) { - toBeTested(x) and not x.isUnknown() and getTokenTree = x.getTokenTree() -} + (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, "isUnsafe:", isUnsafe, "hasPath:", hasPath, "hasTokenTree:", + hasTokenTree diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected new file mode 100644 index 000000000000..b4c0ec937342 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.expected @@ -0,0 +1 @@ +| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:27:7:45 | "reason_for_bypass" | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.ql b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.ql new file mode 100644 index 000000000000..a93132dd15a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Meta x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected new file mode 100644 index 000000000000..ad4a23a5e2a7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.expected @@ -0,0 +1,2 @@ +| gen_meta.rs:7:7:7:46 | Meta | gen_meta.rs:7:14:7:23 | ...::name | +| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:7:9:16 | deprecated | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.ql b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.ql new file mode 100644 index 000000000000..759c013a975e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Meta x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected new file mode 100644 index 000000000000..ffeca33dd3a3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.expected @@ -0,0 +1 @@ +| gen_meta.rs:9:7:9:72 | Meta | gen_meta.rs:9:17:9:72 | TokenTree | diff --git a/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.ql b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.ql new file mode 100644 index 000000000000..b0425a57bd37 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Meta/Meta_getTokenTree.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Meta x +where toBeTested(x) and not x.isUnknown() +select x, x.getTokenTree() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/MethodCallExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected index 61054a3841ad..516e47d8b398 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected @@ -1,20 +1,2 @@ -instances -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | -getArgList -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:10:5:13 | ArgList | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:22:6:25 | ArgList | -getAttr -getArg -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | 0 | gen_method_call_expr.rs:5:11:5:12 | 42 | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | 0 | gen_method_call_expr.rs:6:23:6:24 | 42 | -getResolvedPath -getResolvedCrateOrigin -getGenericArgList -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:10:6:21 | <...> | -getIdentifier -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:7:5:9 | foo | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:7:6:9 | foo | -getReceiver -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:5:5:5 | x | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:5:6:5 | x | +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasReceiver: | yes | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | getNumberOfArgs: | 1 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | yes | hasIdentifier: | yes | hasReceiver: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql index 73ddf8e7d2e8..518d3dee36ef 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql @@ -2,36 +2,26 @@ import codeql.rust.elements import TestUtils -query predicate instances(MethodCallExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getArgList(MethodCallExpr x, ArgList getArgList) { - toBeTested(x) and not x.isUnknown() and getArgList = x.getArgList() -} - -query predicate getAttr(MethodCallExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getArg(MethodCallExpr x, int index, Expr getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} - -query predicate getResolvedPath(MethodCallExpr x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(MethodCallExpr x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getGenericArgList(MethodCallExpr x, GenericArgList getGenericArgList) { - toBeTested(x) and not x.isUnknown() and getGenericArgList = x.getGenericArgList() -} - -query predicate getIdentifier(MethodCallExpr x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} - -query predicate getReceiver(MethodCallExpr x, Expr getReceiver) { - toBeTested(x) and not x.isUnknown() and getReceiver = x.getReceiver() -} +from + MethodCallExpr x, string hasArgList, int getNumberOfAttrs, int getNumberOfArgs, + string hasResolvedPath, string hasResolvedCrateOrigin, string hasGenericArgList, + string hasIdentifier, string hasReceiver +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasArgList() then hasArgList = "yes" else hasArgList = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfArgs = x.getNumberOfArgs() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and + if x.hasReceiver() then hasReceiver = "yes" else hasReceiver = "no" +select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfArgs:", + getNumberOfArgs, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", + hasResolvedCrateOrigin, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", hasIdentifier, + "hasReceiver:", hasReceiver diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected new file mode 100644 index 000000000000..36af4e22c504 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | 0 | gen_method_call_expr.rs:5:11:5:12 | 42 | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | 0 | gen_method_call_expr.rs:6:23:6:24 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql new file mode 100644 index 000000000000..58529cebfe5e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.expected new file mode 100644 index 000000000000..c9d10231cd98 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:10:5:13 | ArgList | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:22:6:25 | ArgList | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql new file mode 100644 index 000000000000..3e6eb43ba1fe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getArgList() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql new file mode 100644 index 000000000000..5cffc6cd43bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected new file mode 100644 index 000000000000..51e1108ebb21 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.expected @@ -0,0 +1 @@ +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:10:6:21 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql new file mode 100644 index 000000000000..d68ec9fa0ca1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericArgList() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected new file mode 100644 index 000000000000..9f20d2b07dd5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:7:5:9 | foo | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:7:6:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql new file mode 100644 index 000000000000..f14399765d87 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.expected new file mode 100644 index 000000000000..b909a0f7793b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:5:5:5 | x | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:5:6:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql new file mode 100644 index 000000000000..853315863fbc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getReceiver() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..dfb292181331 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql new file mode 100644 index 000000000000..df94686cbf68 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from MethodCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Module/Cargo.lock b/rust/ql/test/extractor-tests/generated/Module/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Module/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.expected b/rust/ql/test/extractor-tests/generated/Module/Module.expected index a742b7145d30..9383e08f2815 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.expected +++ b/rust/ql/test/extractor-tests/generated/Module/Module.expected @@ -1,21 +1,3 @@ -instances -| gen_module.rs:3:1:4:8 | mod foo | -| gen_module.rs:5:1:7:1 | mod bar | -| lib.rs:1:1:1:15 | mod gen_module | -getExtendedCanonicalPath -| gen_module.rs:3:1:4:8 | mod foo | crate::gen_module::foo | -| gen_module.rs:5:1:7:1 | mod bar | crate::gen_module::bar | -| lib.rs:1:1:1:15 | mod gen_module | crate::gen_module | -getCrateOrigin -| gen_module.rs:3:1:4:8 | mod foo | repo::test | -| gen_module.rs:5:1:7:1 | mod bar | repo::test | -| lib.rs:1:1:1:15 | mod gen_module | repo::test | -getAttributeMacroExpansion -getAttr -getItemList -| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:9:7:1 | ItemList | -getName -| gen_module.rs:3:1:4:8 | mod foo | gen_module.rs:4:5:4:7 | foo | -| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:5:5:7 | bar | -| lib.rs:1:1:1:15 | mod gen_module | lib.rs:1:5:1:14 | gen_module | -getVisibility +| gen_module.rs:3:1:4:8 | mod foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | +| gen_module.rs:5:1:7:1 | mod bar | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | yes | hasName: | yes | hasVisibility: | no | +| lib.rs:1:1:1:15 | mod gen_module | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasItemList: | no | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module.ql b/rust/ql/test/extractor-tests/generated/Module/Module.ql index 48a141bbc1fe..bd668e40b66a 100644 --- a/rust/ql/test/extractor-tests/generated/Module/Module.ql +++ b/rust/ql/test/extractor-tests/generated/Module/Module.ql @@ -2,34 +2,28 @@ import codeql.rust.elements import TestUtils -query predicate instances(Module x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Module x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Module x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Module x, MacroItems getAttributeMacroExpansion) { +from + Module x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasItemList, string hasName, + string hasVisibility +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(Module x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getItemList(Module x, ItemList getItemList) { - toBeTested(x) and not x.isUnknown() and getItemList = x.getItemList() -} - -query predicate getName(Module x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getVisibility(Module x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasItemList() then hasItemList = "yes" else hasItemList = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasItemList:", hasItemList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getAttr.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getAttr.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getAttr.ql new file mode 100644 index 000000000000..1efd9a937c3b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..1a7c70f63b67 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected new file mode 100644 index 000000000000..0164fbb8e29b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.expected @@ -0,0 +1,3 @@ +| gen_module.rs:3:1:4:8 | mod foo | repo::test | +| gen_module.rs:5:1:7:1 | mod bar | repo::test | +| lib.rs:1:1:1:15 | mod gen_module | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.ql new file mode 100644 index 000000000000..7a95cdcc772a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..c573ef164ebe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.expected @@ -0,0 +1,3 @@ +| gen_module.rs:3:1:4:8 | mod foo | crate::gen_module::foo | +| gen_module.rs:5:1:7:1 | mod bar | crate::gen_module::bar | +| lib.rs:1:1:1:15 | mod gen_module | crate::gen_module | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..9c810fe65c67 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected new file mode 100644 index 000000000000..8edc36efa738 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.expected @@ -0,0 +1 @@ +| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:9:7:1 | ItemList | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.ql new file mode 100644 index 000000000000..0654df37918a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getItemList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getItemList() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected new file mode 100644 index 000000000000..1874862befe5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getName.expected @@ -0,0 +1,3 @@ +| gen_module.rs:3:1:4:8 | mod foo | gen_module.rs:4:5:4:7 | foo | +| gen_module.rs:5:1:7:1 | mod bar | gen_module.rs:5:5:5:7 | bar | +| lib.rs:1:1:1:15 | mod gen_module | lib.rs:1:5:1:14 | gen_module | diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getName.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getName.ql new file mode 100644 index 000000000000..dbda0724b1ed --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Module/Module_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Module/Module_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Module/Module_getVisibility.ql new file mode 100644 index 000000000000..064f520d6a78 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Module/Module_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Module x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Name/Cargo.lock b/rust/ql/test/extractor-tests/generated/Name/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Name/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Name/Name.expected b/rust/ql/test/extractor-tests/generated/Name/Name.expected index 2bcd496ef2ee..28a23a6d392e 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name.expected +++ b/rust/ql/test/extractor-tests/generated/Name/Name.expected @@ -1,8 +1,3 @@ -instances -| gen_name.rs:3:4:3:12 | test_name | -| gen_name.rs:7:9:7:11 | foo | -| lib.rs:1:5:1:12 | gen_name | -getText -| gen_name.rs:3:4:3:12 | test_name | test_name | -| gen_name.rs:7:9:7:11 | foo | foo | -| lib.rs:1:5:1:12 | gen_name | gen_name | +| gen_name.rs:3:4:3:12 | test_name | hasText: | yes | +| gen_name.rs:7:9:7:11 | foo | hasText: | yes | +| lib.rs:1:5:1:12 | gen_name | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name.ql b/rust/ql/test/extractor-tests/generated/Name/Name.ql index 141042ac6a86..6685f4f9b7ae 100644 --- a/rust/ql/test/extractor-tests/generated/Name/Name.ql +++ b/rust/ql/test/extractor-tests/generated/Name/Name.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Name x) { toBeTested(x) and not x.isUnknown() } - -query predicate getText(Name x, string getText) { - toBeTested(x) and not x.isUnknown() and getText = x.getText() -} +from Name x, string hasText +where + toBeTested(x) and + not x.isUnknown() and + if x.hasText() then hasText = "yes" else hasText = "no" +select x, "hasText:", hasText diff --git a/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected new file mode 100644 index 000000000000..3098a78003bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Name/Name_getText.expected @@ -0,0 +1,3 @@ +| gen_name.rs:3:4:3:12 | test_name | test_name | +| gen_name.rs:7:9:7:11 | foo | foo | +| lib.rs:1:5:1:12 | gen_name | gen_name | diff --git a/rust/ql/test/extractor-tests/generated/Name/Name_getText.ql b/rust/ql/test/extractor-tests/generated/Name/Name_getText.ql new file mode 100644 index 000000000000..90ff2d3e04bf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Name/Name_getText.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Name x +where toBeTested(x) and not x.isUnknown() +select x, x.getText() diff --git a/rust/ql/test/extractor-tests/generated/NameRef/Cargo.lock b/rust/ql/test/extractor-tests/generated/NameRef/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/NameRef/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected index a77dc575a773..a73f8a029455 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.expected @@ -1,4 +1 @@ -instances -| gen_name_ref.rs:7:7:7:9 | foo | -getText -| gen_name_ref.rs:7:7:7:9 | foo | foo | +| gen_name_ref.rs:7:7:7:9 | foo | hasText: | yes | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.ql b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.ql index 00af6f1dbcf5..cb5ab8652f8a 100644 --- a/rust/ql/test/extractor-tests/generated/NameRef/NameRef.ql +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(NameRef x) { toBeTested(x) and not x.isUnknown() } - -query predicate getText(NameRef x, string getText) { - toBeTested(x) and not x.isUnknown() and getText = x.getText() -} +from NameRef x, string hasText +where + toBeTested(x) and + not x.isUnknown() and + if x.hasText() then hasText = "yes" else hasText = "no" +select x, "hasText:", hasText diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected new file mode 100644 index 000000000000..1b98842e5ec8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.expected @@ -0,0 +1 @@ +| gen_name_ref.rs:7:7:7:9 | foo | foo | diff --git a/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.ql b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.ql new file mode 100644 index 000000000000..daa44134dca8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/NameRef/NameRef_getText.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from NameRef x +where toBeTested(x) and not x.isUnknown() +select x, x.getText() diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql index 0cdfe366eed4..71ab05928dff 100644 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(NeverTypeRepr x) { toBeTested(x) and not x.isUnknown() } +from NeverTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.expected index eb8b19babfe3..4f8705ab0da4 100644 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.expected +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.expected @@ -1,7 +1 @@ -instances -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | -getAttr -getField -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | 0 | gen_offset_of_expr.rs:5:33:5:37 | field | -getTypeRepr -| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | Struct | +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | getNumberOfAttrs: | 0 | getNumberOfFields: | 1 | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql index 64208e34bbf0..afcd0de84df1 100644 --- a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(OffsetOfExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(OffsetOfExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getField(OffsetOfExpr x, int index, NameRef getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} - -query predicate getTypeRepr(OffsetOfExpr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from OffsetOfExpr x, int getNumberOfAttrs, int getNumberOfFields, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfFields = x.getNumberOfFields() and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfFields:", getNumberOfFields, + "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.ql new file mode 100644 index 000000000000..c038e83f2f5f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from OffsetOfExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.expected new file mode 100644 index 000000000000..bec224d18cee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.expected @@ -0,0 +1 @@ +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | 0 | gen_offset_of_expr.rs:5:33:5:37 | field | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql new file mode 100644 index 000000000000..c5b41700f641 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from OffsetOfExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.expected new file mode 100644 index 000000000000..e2e11abb6a0f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_offset_of_expr.rs:5:5:5:38 | OffsetOfExpr | gen_offset_of_expr.rs:5:25:5:30 | Struct | diff --git a/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.ql new file mode 100644 index 000000000000..5f2a647d8077 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OffsetOfExpr/OffsetOfExpr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from OffsetOfExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/OrPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/OrPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/OrPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected index 8dcc1baa8d50..1d67a8509b91 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.expected @@ -1,5 +1 @@ -instances -| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | -getPat -| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | ...::Some(...) | -| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 1 | gen_or_pat.rs:6:27:6:38 | ...::None | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | getNumberOfPats: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.ql b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.ql index 0c60f19278fe..11b3bb7394c3 100644 --- a/rust/ql/test/extractor-tests/generated/OrPat/OrPat.ql +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(OrPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPat(OrPat x, int index, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat(index) -} +from OrPat x, int getNumberOfPats +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfPats = x.getNumberOfPats() +select x, "getNumberOfPats:", getNumberOfPats diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected new file mode 100644 index 000000000000..9e50c27e035c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.expected @@ -0,0 +1,2 @@ +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 0 | gen_or_pat.rs:6:9:6:23 | ...::Some(...) | +| gen_or_pat.rs:6:9:6:38 | ... \| ...::None | 1 | gen_or_pat.rs:6:27:6:38 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.ql b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.ql new file mode 100644 index 000000000000..468619511dd8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/OrPat/OrPat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from OrPat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getPat(index) diff --git a/rust/ql/test/extractor-tests/generated/Param/Cargo.lock b/rust/ql/test/extractor-tests/generated/Param/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Param/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Param/Param.expected b/rust/ql/test/extractor-tests/generated/Param/Param.expected index 929e72c51fbf..c8218bdaec5e 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param.expected +++ b/rust/ql/test/extractor-tests/generated/Param/Param.expected @@ -1,7 +1 @@ -instances -| gen_param.rs:5:12:5:15 | ...: T | -getAttr -getTypeRepr -| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:15:5:15 | T | -getPat -| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:12:5:12 | x | +| gen_param.rs:5:12:5:15 | ...: T | getNumberOfAttrs: | 0 | hasTypeRepr: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Param/Param.ql b/rust/ql/test/extractor-tests/generated/Param/Param.ql index ff1a261ef04d..c471f2aeb393 100644 --- a/rust/ql/test/extractor-tests/generated/Param/Param.ql +++ b/rust/ql/test/extractor-tests/generated/Param/Param.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(Param x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(Param x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTypeRepr(Param x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getPat(Param x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from Param x, int getNumberOfAttrs, string hasTypeRepr, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTypeRepr:", hasTypeRepr, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getAttr.expected b/rust/ql/test/extractor-tests/generated/Param/Param_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getAttr.ql b/rust/ql/test/extractor-tests/generated/Param/Param_getAttr.ql new file mode 100644 index 000000000000..72c788635317 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Param x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected new file mode 100644 index 000000000000..c42d7ce0b9f2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.expected @@ -0,0 +1 @@ +| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:12:5:12 | x | diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getPat.ql b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.ql new file mode 100644 index 000000000000..5e8e11356c79 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Param x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.expected new file mode 100644 index 000000000000..10bf906af5da --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_param.rs:5:12:5:15 | ...: T | gen_param.rs:5:15:5:15 | T | diff --git a/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.ql new file mode 100644 index 000000000000..0e03e4b51185 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Param/Param_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Param x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ParamList/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParamList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParamList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected index 5b95cf48ca83..bb999506a0c6 100644 --- a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.expected @@ -1,7 +1,2 @@ -instances -| gen_param_list.rs:3:19:3:20 | ParamList | -| gen_param_list.rs:7:11:7:26 | ParamList | -getParam -| gen_param_list.rs:7:11:7:26 | ParamList | 0 | gen_param_list.rs:7:12:7:17 | ...: i32 | -| gen_param_list.rs:7:11:7:26 | ParamList | 1 | gen_param_list.rs:7:20:7:25 | ...: i32 | -getSelfParam +| gen_param_list.rs:3:19:3:20 | ParamList | getNumberOfParams: | 0 | hasSelfParam: | no | +| gen_param_list.rs:7:11:7:26 | ParamList | getNumberOfParams: | 2 | hasSelfParam: | no | diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.ql b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.ql index 36af8b9eafaf..9e65fbf7f7f7 100644 --- a/rust/ql/test/extractor-tests/generated/ParamList/ParamList.ql +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ParamList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getParam(ParamList x, int index, Param getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} - -query predicate getSelfParam(ParamList x, SelfParam getSelfParam) { - toBeTested(x) and not x.isUnknown() and getSelfParam = x.getSelfParam() -} +from ParamList x, int getNumberOfParams, string hasSelfParam +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfParams = x.getNumberOfParams() and + if x.hasSelfParam() then hasSelfParam = "yes" else hasSelfParam = "no" +select x, "getNumberOfParams:", getNumberOfParams, "hasSelfParam:", hasSelfParam diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected new file mode 100644 index 000000000000..9006caf6916a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.expected @@ -0,0 +1,2 @@ +| gen_param_list.rs:7:11:7:26 | ParamList | 0 | gen_param_list.rs:7:12:7:17 | ...: i32 | +| gen_param_list.rs:7:11:7:26 | ParamList | 1 | gen_param_list.rs:7:20:7:25 | ...: i32 | diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.ql b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.ql new file mode 100644 index 000000000000..d0a24b094092 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParamList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.expected b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.ql b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.ql new file mode 100644 index 000000000000..bdd98b434d71 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParamList/ParamList_getSelfParam.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParamList x +where toBeTested(x) and not x.isUnknown() +select x, x.getSelfParam() diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParenExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected index 57a89a35cdef..efe22fdb6253 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.expected @@ -1,5 +1 @@ -instances -| gen_paren_expr.rs:7:5:7:11 | (...) | -getAttr -getExpr -| gen_paren_expr.rs:7:5:7:11 | (...) | gen_paren_expr.rs:7:6:7:10 | ... + ... | +| gen_paren_expr.rs:7:5:7:11 | (...) | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql index 1074fc3cd009..114bf888239b 100644 --- a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ParenExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ParenExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(ParenExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from ParenExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.ql new file mode 100644 index 000000000000..c2352453b9a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected new file mode 100644 index 000000000000..c20c0ec66fa1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_paren_expr.rs:7:5:7:11 | (...) | gen_paren_expr.rs:7:6:7:10 | ... + ... | diff --git a/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.ql new file mode 100644 index 000000000000..c8a007478c38 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenExpr/ParenExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected index 2e26da6da78c..7b9b66a886dc 100644 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.expected @@ -1,4 +1 @@ -instances -| gen_paren_pat.rs:7:9:7:11 | (...) | -getPat -| gen_paren_pat.rs:7:9:7:11 | (...) | gen_paren_pat.rs:7:10:7:10 | x | +| gen_paren_pat.rs:7:9:7:11 | (...) | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql index 18b7c74b94b8..bf9724edde3a 100644 --- a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ParenPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPat(ParenPat x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from ParenPat x, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected new file mode 100644 index 000000000000..832d823866fd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.expected @@ -0,0 +1 @@ +| gen_paren_pat.rs:7:9:7:11 | (...) | gen_paren_pat.rs:7:10:7:10 | x | diff --git a/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql new file mode 100644 index 000000000000..648fbfd9df08 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected index 1e77f93912f8..fd5d8310d170 100644 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.expected @@ -1,4 +1 @@ -instances -| gen_paren_type_repr.rs:7:12:7:16 | (i32) | -getTypeRepr -| gen_paren_type_repr.rs:7:12:7:16 | (i32) | gen_paren_type_repr.rs:7:13:7:15 | i32 | +| gen_paren_type_repr.rs:7:12:7:16 | (i32) | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql index 8df81166aa50..83a4f846add1 100644 --- a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ParenTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeRepr(ParenTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from ParenTypeRepr x, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..b4167e4201a5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_paren_type_repr.rs:7:12:7:16 | (i32) | gen_paren_type_repr.rs:7:13:7:15 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..2b3a274fc089 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/Cargo.lock b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected index b787bde1ae2e..317d43de72d8 100644 --- a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.expected @@ -1,5 +1 @@ -instances -| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | -getTypeArg -| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 0 | gen_parenthesized_arg_list.rs:9:15:9:17 | TypeArg | -| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 1 | gen_parenthesized_arg_list.rs:9:20:9:25 | TypeArg | +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | getNumberOfTypeArgs: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql index b35858d3ad09..73080b26f2d9 100644 --- a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(ParenthesizedArgList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeArg(ParenthesizedArgList x, int index, TypeArg getTypeArg) { - toBeTested(x) and not x.isUnknown() and getTypeArg = x.getTypeArg(index) -} +from ParenthesizedArgList x, int getNumberOfTypeArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfTypeArgs = x.getNumberOfTypeArgs() +select x, "getNumberOfTypeArgs:", getNumberOfTypeArgs diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected new file mode 100644 index 000000000000..8ae7aa526d3e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.expected @@ -0,0 +1,2 @@ +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 0 | gen_parenthesized_arg_list.rs:9:15:9:17 | TypeArg | +| gen_parenthesized_arg_list.rs:9:14:9:26 | ParenthesizedArgList | 1 | gen_parenthesized_arg_list.rs:9:20:9:25 | TypeArg | diff --git a/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql new file mode 100644 index 000000000000..04247f8ff647 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ParenthesizedArgList/ParenthesizedArgList_getTypeArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ParenthesizedArgList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getTypeArg(index) diff --git a/rust/ql/test/extractor-tests/generated/Path/Cargo.lock b/rust/ql/test/extractor-tests/generated/Path/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Path/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.expected b/rust/ql/test/extractor-tests/generated/Path/Path.expected index e188cc32fecd..7cf8362293e3 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path.expected @@ -1,63 +1,25 @@ -instances -| gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:9:5:31 | ...::some_module | -| gen_path.rs:5:9:5:42 | ...::some_item | -| gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:5:6:12 | ...::bar | -| gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:13:6:20 | ...::bar | -| gen_path_expr.rs:7:13:7:15 | <...> | -| gen_path_expr.rs:7:13:7:20 | ...::foo | -| gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:13:8:31 | <...> | -| gen_path_expr.rs:8:13:8:36 | ...::foo | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:14:5:29 | ...::collections | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | -getQualifier -| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:9:5:31 | ...::some_module | -| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:7 | foo | -| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:15 | <...> | -| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:13:8:31 | <...> | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:14:5:29 | ...::collections | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:14:6:14 | X | -getSegment -| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:21:5:31 | some_module | -| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:34:5:42 | some_item | -| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:10:6:12 | bar | -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:18:6:20 | bar | -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:13:7:15 | <...> | -| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:18:7:20 | foo | -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:13:8:31 | <...> | -| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:34:8:36 | foo | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:19:5:29 | collections | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:17:6:20 | Item | +| gen_path.rs:5:9:5:18 | some_crate | hasQualifier: | no | hasSegment: | yes | +| gen_path.rs:5:9:5:31 | ...::some_module | hasQualifier: | yes | hasSegment: | yes | +| gen_path.rs:5:9:5:42 | ...::some_item | hasQualifier: | yes | hasSegment: | yes | +| gen_path.rs:6:5:6:7 | foo | hasQualifier: | no | hasSegment: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:6:13:6:15 | foo | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:7:13:7:15 | <...> | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:13:8:31 | <...> | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:13:8:36 | ...::foo | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:26:8:30 | Trait | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:5:11:5:11 | x | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:6:9:6:11 | Foo | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:16 | std | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:29 | ...::collections | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:40:5:42 | i32 | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:5:45:5:47 | i32 | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:6:14:6:14 | X | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | hasQualifier: | yes | hasSegment: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.ql b/rust/ql/test/extractor-tests/generated/Path/Path.ql index 183fcbb24a6b..2f32fa34147e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.ql +++ b/rust/ql/test/extractor-tests/generated/Path/Path.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(Path x) { toBeTested(x) and not x.isUnknown() } - -query predicate getQualifier(Path x, Path getQualifier) { - toBeTested(x) and not x.isUnknown() and getQualifier = x.getQualifier() -} - -query predicate getSegment(Path x, PathSegment getSegment) { - toBeTested(x) and not x.isUnknown() and getSegment = x.getSegment() -} +from Path x, string hasQualifier, string hasSegment +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasQualifier() then hasQualifier = "yes" else hasQualifier = "no") and + if x.hasSegment() then hasSegment = "yes" else hasSegment = "no" +select x, "hasQualifier:", hasQualifier, "hasSegment:", hasSegment diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected index 5a2df7ee29f9..25bc95ed055b 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.expected @@ -1,17 +1,6 @@ -instances -| gen_path.rs:6:5:6:12 | ...::bar | -| gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:20 | ...::bar | -| gen_path_expr.rs:7:13:7:20 | ...::foo | -| gen_path_expr.rs:8:13:8:36 | ...::foo | -| gen_path_pat.rs:5:11:5:11 | x | -getResolvedPath -getResolvedCrateOrigin -getPath -| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:12 | ...::bar | -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:20 | ...::bar | -| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:20 | ...::foo | -| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:13:8:36 | ...::foo | -| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -getAttr +| gen_path.rs:6:5:6:12 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:5:13:5:20 | variable | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_expr.rs:8:13:8:36 | ...::foo | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | +| gen_path_pat.rs:5:11:5:11 | x | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql index 70bff600ace0..41b7414d24c7 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr.ql @@ -2,20 +2,19 @@ import codeql.rust.elements import TestUtils -query predicate instances(PathExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getResolvedPath(PathExpr x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(PathExpr x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getPath(PathExpr x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getAttr(PathExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from + PathExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.ql new file mode 100644 index 000000000000..0c0ed2aa7e45 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected new file mode 100644 index 000000000000..e9680024dc1c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.expected @@ -0,0 +1,6 @@ +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:12 | ...::bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:20 | ...::bar | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:20 | ...::foo | +| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:13:8:36 | ...::foo | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.ql new file mode 100644 index 000000000000..a776443137e5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..24e079184844 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql new file mode 100644 index 000000000000..10e6ceb2a0b9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathExpr_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected index 9bcce9035582..cf90175a84c0 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.expected @@ -1,6 +1 @@ -instances -| gen_path_pat.rs:6:9:6:16 | ...::Bar | -getResolvedPath -getResolvedCrateOrigin -getPath -| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:16 | ...::Bar | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql index 9c5a874cabf5..a105c20c39ed 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathPat.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat.ql @@ -2,16 +2,16 @@ import codeql.rust.elements import TestUtils -query predicate instances(PathPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getResolvedPath(PathPat x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(PathPat x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getPath(PathPat x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} +from PathPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + if x.hasPath() then hasPath = "yes" else hasPath = "no" +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected new file mode 100644 index 000000000000..3a601023f3f9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.expected @@ -0,0 +1 @@ +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:16 | ...::Bar | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.ql new file mode 100644 index 000000000000..820b1028de21 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..7ed41155d77e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql new file mode 100644 index 000000000000..cbe1932925a8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected index cf9e4501366d..a37dd8cbd96d 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected @@ -1,60 +1,25 @@ -instances -| gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:21:5:31 | some_module | -| gen_path.rs:5:34:5:42 | some_item | -| gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:10:6:12 | bar | -| gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:18:6:20 | bar | -| gen_path_expr.rs:7:13:7:15 | <...> | -| gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:7:18:7:20 | foo | -| gen_path_expr.rs:8:13:8:31 | <...> | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_expr.rs:8:34:8:36 | foo | -| gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:19:5:29 | collections | -| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:17:6:20 | Item | -getGenericArgList -| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:39:5:48 | <...> | -getIdentifier -| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:21:5:31 | some_module | gen_path.rs:5:21:5:31 | some_module | -| gen_path.rs:5:34:5:42 | some_item | gen_path.rs:5:34:5:42 | some_item | -| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:10:6:12 | bar | gen_path.rs:6:10:6:12 | bar | -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:18:6:20 | bar | gen_path_expr.rs:6:18:6:20 | bar | -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:7:18:7:20 | foo | gen_path_expr.rs:7:18:7:20 | foo | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_expr.rs:8:34:8:36 | foo | gen_path_expr.rs:8:34:8:36 | foo | -| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:19:5:29 | collections | gen_path_type_repr.rs:5:19:5:29 | collections | -| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:32:5:38 | HashMap | -| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:17:6:20 | Item | gen_path_type_repr.rs:6:17:6:20 | Item | -getParenthesizedArgList -getRetType -getReturnTypeSyntax -getTypeRepr -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:14:8:21 | TypeRepr | -getTraitTypeRepr -| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path.rs:5:9:5:18 | some_crate | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:5:21:5:31 | some_module | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:5:34:5:42 | some_item | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:6:5:6:7 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:6:10:6:12 | bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:5:13:5:20 | variable | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:6:13:6:15 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:6:18:6:20 | bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:13:7:15 | <...> | hasGenericArgList: | no | hasIdentifier: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:14:7:14 | T | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:18:7:20 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:13:8:31 | <...> | hasGenericArgList: | no | hasIdentifier: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | yes | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:26:8:30 | Trait | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:34:8:36 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:5:11:5:11 | x | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:6:9:6:11 | Foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:6:14:6:16 | Bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:14:5:16 | std | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:19:5:29 | collections | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | hasGenericArgList: | yes | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:40:5:42 | i32 | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:45:5:47 | i32 | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:6:14:6:14 | X | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:6:17:6:20 | Item | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql index 2e0800706f09..5bfa26039b18 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql @@ -2,32 +2,24 @@ import codeql.rust.elements import TestUtils -query predicate instances(PathSegment x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericArgList(PathSegment x, GenericArgList getGenericArgList) { - toBeTested(x) and not x.isUnknown() and getGenericArgList = x.getGenericArgList() -} - -query predicate getIdentifier(PathSegment x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} - -query predicate getParenthesizedArgList(PathSegment x, ParenthesizedArgList getParenthesizedArgList) { - toBeTested(x) and not x.isUnknown() and getParenthesizedArgList = x.getParenthesizedArgList() -} - -query predicate getRetType(PathSegment x, RetTypeRepr getRetType) { - toBeTested(x) and not x.isUnknown() and getRetType = x.getRetType() -} - -query predicate getReturnTypeSyntax(PathSegment x, ReturnTypeSyntax getReturnTypeSyntax) { - toBeTested(x) and not x.isUnknown() and getReturnTypeSyntax = x.getReturnTypeSyntax() -} - -query predicate getTypeRepr(PathSegment x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getTraitTypeRepr(PathSegment x, PathTypeRepr getTraitTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTraitTypeRepr = x.getTraitTypeRepr() -} +from + PathSegment x, string hasGenericArgList, string hasIdentifier, string hasParenthesizedArgList, + string hasRetType, string hasReturnTypeSyntax, string hasTypeRepr, string hasTraitTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and + ( + if x.hasParenthesizedArgList() + then hasParenthesizedArgList = "yes" + else hasParenthesizedArgList = "no" + ) and + (if x.hasRetType() then hasRetType = "yes" else hasRetType = "no") and + (if x.hasReturnTypeSyntax() then hasReturnTypeSyntax = "yes" else hasReturnTypeSyntax = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasTraitTypeRepr() then hasTraitTypeRepr = "yes" else hasTraitTypeRepr = "no" +select x, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", hasIdentifier, + "hasParenthesizedArgList:", hasParenthesizedArgList, "hasRetType:", hasRetType, + "hasReturnTypeSyntax:", hasReturnTypeSyntax, "hasTypeRepr:", hasTypeRepr, "hasTraitTypeRepr:", + hasTraitTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected new file mode 100644 index 000000000000..ff0110440aef --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.expected @@ -0,0 +1 @@ +| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:39:5:48 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql new file mode 100644 index 000000000000..a93675780034 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericArgList() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected new file mode 100644 index 000000000000..dfa33cf96119 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected @@ -0,0 +1,23 @@ +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:21:5:31 | some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:34:5:42 | some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:10:6:12 | bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:18:6:20 | bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:18:7:20 | foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | +| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path_expr.rs:8:34:8:36 | foo | gen_path_expr.rs:8:34:8:36 | foo | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | +| gen_path_type_repr.rs:5:19:5:29 | collections | gen_path_type_repr.rs:5:19:5:29 | collections | +| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:32:5:38 | HashMap | +| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | +| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | +| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | +| gen_path_type_repr.rs:6:17:6:20 | Item | gen_path_type_repr.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql new file mode 100644 index 000000000000..23c06cef5064 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql new file mode 100644 index 000000000000..917567c100fa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getParenthesizedArgList() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.ql new file mode 100644 index 000000000000..311642a5f859 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getRetType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getRetType() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql new file mode 100644 index 000000000000..f978f70c8a6c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getReturnTypeSyntax() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.expected new file mode 100644 index 000000000000..bb178b909702 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.expected @@ -0,0 +1 @@ +| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:26:8:30 | Trait | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql new file mode 100644 index 000000000000..11675883d6ae --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getTraitTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.expected new file mode 100644 index 000000000000..99ac97381b3c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:14:8:21 | TypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql new file mode 100644 index 000000000000..98303f7f0fb1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathSegment x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.expected index 841a1e6eb770..37988d0dfd70 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.expected @@ -1,16 +1,7 @@ -instances -| gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | -getPath -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:14:6:20 | ...::Item | +| gen_path_expr.rs:7:14:7:14 | T | hasPath: | yes | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasPath: | yes | +| gen_path_expr.rs:8:26:8:30 | Trait | hasPath: | yes | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | hasPath: | yes | +| gen_path_type_repr.rs:5:40:5:42 | i32 | hasPath: | yes | +| gen_path_type_repr.rs:5:45:5:47 | i32 | hasPath: | yes | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.ql index 5ec18fd220a2..0be55070a1b0 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(PathTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPath(PathTypeRepr x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} +from PathTypeRepr x, string hasPath +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPath() then hasPath = "yes" else hasPath = "no" +select x, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.expected new file mode 100644 index 000000000000..57b46ef2813a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.expected @@ -0,0 +1,7 @@ +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | +| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | +| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | +| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:14:6:20 | ...::Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql new file mode 100644 index 000000000000..b90c858b4cf9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PathTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected new file mode 100644 index 000000000000..de116eaca6a8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.expected @@ -0,0 +1,10 @@ +| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:9:5:31 | ...::some_module | +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:5:6:7 | foo | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:13:7:15 | <...> | +| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:13:8:31 | <...> | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:14:5:16 | std | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:14:5:29 | ...::collections | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:14:6:14 | X | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.ql b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.ql new file mode 100644 index 000000000000..7678cffcecad --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getQualifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Path x +where toBeTested(x) and not x.isUnknown() +select x, x.getQualifier() diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected new file mode 100644 index 000000000000..54cad7249d6e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected @@ -0,0 +1,25 @@ +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:13:7:15 | <...> | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:13:8:31 | <...> | +| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:34:8:36 | foo | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | +| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | +| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:19:5:29 | collections | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | +| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | +| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | +| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql new file mode 100644 index 000000000000..7ccbefb4149b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Path x +where toBeTested(x) and not x.isUnknown() +select x, x.getSegment() diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/PrefixExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/PrefixExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.expected b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.expected index 056a1a6dd5dd..01ebd0f099ca 100644 --- a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.expected +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.expected @@ -1,13 +1,3 @@ -instances -| gen_prefix_expr.rs:5:13:5:15 | - ... | -| gen_prefix_expr.rs:6:13:6:17 | ! ... | -| gen_prefix_expr.rs:7:13:7:16 | * ... | -getAttr -getExpr -| gen_prefix_expr.rs:5:13:5:15 | - ... | gen_prefix_expr.rs:5:14:5:15 | 42 | -| gen_prefix_expr.rs:6:13:6:17 | ! ... | gen_prefix_expr.rs:6:14:6:17 | true | -| gen_prefix_expr.rs:7:13:7:16 | * ... | gen_prefix_expr.rs:7:14:7:16 | ptr | -getOperatorName -| gen_prefix_expr.rs:5:13:5:15 | - ... | - | -| gen_prefix_expr.rs:6:13:6:17 | ! ... | ! | -| gen_prefix_expr.rs:7:13:7:16 | * ... | * | +| gen_prefix_expr.rs:5:13:5:15 | - ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes | +| gen_prefix_expr.rs:6:13:6:17 | ! ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes | +| gen_prefix_expr.rs:7:13:7:16 | * ... | getNumberOfAttrs: | 0 | hasExpr: | yes | hasOperatorName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql index 0765d6e07d98..67d69c5363bb 100644 --- a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(PrefixExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(PrefixExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(PrefixExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getOperatorName(PrefixExpr x, string getOperatorName) { - toBeTested(x) and not x.isUnknown() and getOperatorName = x.getOperatorName() -} +from PrefixExpr x, int getNumberOfAttrs, string hasExpr, string hasOperatorName +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.hasOperatorName() then hasOperatorName = "yes" else hasOperatorName = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasOperatorName:", + hasOperatorName diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql new file mode 100644 index 000000000000..813cb53ae4fb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PrefixExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.expected new file mode 100644 index 000000000000..6c9edcba00d2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.expected @@ -0,0 +1,3 @@ +| gen_prefix_expr.rs:5:13:5:15 | - ... | gen_prefix_expr.rs:5:14:5:15 | 42 | +| gen_prefix_expr.rs:6:13:6:17 | ! ... | gen_prefix_expr.rs:6:14:6:17 | true | +| gen_prefix_expr.rs:7:13:7:16 | * ... | gen_prefix_expr.rs:7:14:7:16 | ptr | diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql new file mode 100644 index 000000000000..d3e054d5eb8d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PrefixExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.expected new file mode 100644 index 000000000000..0cee9c31bc3f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.expected @@ -0,0 +1,3 @@ +| gen_prefix_expr.rs:5:13:5:15 | - ... | - | +| gen_prefix_expr.rs:6:13:6:17 | ! ... | ! | +| gen_prefix_expr.rs:7:13:7:16 | * ... | * | diff --git a/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql new file mode 100644 index 000000000000..0246ef2465cc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PrefixExpr/PrefixExpr_getOperatorName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PrefixExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getOperatorName() diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected index 6414c8ce04a5..b975dde09ff2 100644 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.expected @@ -1,6 +1,2 @@ -instances -| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | isConst: | yes | isMut: | no | -| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | isConst: | no | isMut: | yes | -getTypeRepr -| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | gen_ptr_type_repr.rs:7:19:7:21 | i32 | -| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | gen_ptr_type_repr.rs:8:17:8:19 | i32 | +| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | isConst: | yes | isMut: | no | hasTypeRepr: | yes | +| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | isConst: | no | isMut: | yes | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql index d2a41eb9e591..4cbda847f324 100644 --- a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr.ql @@ -2,17 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances( - PtrTypeRepr x, string isConst__label, string isConst, string isMut__label, string isMut -) { +from PtrTypeRepr x, string isConst, string isMut, string hasTypeRepr +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and (if x.isConst() then isConst = "yes" else isConst = "no") and - isMut__label = "isMut:" and - if x.isMut() then isMut = "yes" else isMut = "no" -} - -query predicate getTypeRepr(PtrTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} + (if x.isMut() then isMut = "yes" else isMut = "no") and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "isConst:", isConst, "isMut:", isMut, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..8006e33f1d6b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ptr_type_repr.rs:7:12:7:21 | PtrTypeRepr | gen_ptr_type_repr.rs:7:19:7:21 | i32 | +| gen_ptr_type_repr.rs:8:12:8:19 | PtrTypeRepr | gen_ptr_type_repr.rs:8:17:8:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..8200677c2b57 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/PtrTypeRepr/PtrTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from PtrTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/RangeExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected index a79ce67401ad..7d8aeff6dfa9 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.expected @@ -1,24 +1,6 @@ -instances -| gen_range_expr.rs:5:13:5:18 | 1..=10 | -| gen_range_expr.rs:6:13:6:17 | 1..10 | -| gen_range_expr.rs:7:13:7:16 | 10.. | -| gen_range_expr.rs:8:13:8:16 | ..10 | -| gen_range_expr.rs:9:13:9:17 | ..=10 | -| gen_range_expr.rs:10:13:10:14 | .. | -getAttr -getEnd -| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:17:5:18 | 10 | -| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:16:6:17 | 10 | -| gen_range_expr.rs:8:13:8:16 | ..10 | gen_range_expr.rs:8:15:8:16 | 10 | -| gen_range_expr.rs:9:13:9:17 | ..=10 | gen_range_expr.rs:9:16:9:17 | 10 | -getOperatorName -| gen_range_expr.rs:5:13:5:18 | 1..=10 | ..= | -| gen_range_expr.rs:6:13:6:17 | 1..10 | .. | -| gen_range_expr.rs:7:13:7:16 | 10.. | .. | -| gen_range_expr.rs:8:13:8:16 | ..10 | .. | -| gen_range_expr.rs:9:13:9:17 | ..=10 | ..= | -| gen_range_expr.rs:10:13:10:14 | .. | .. | -getStart -| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:13:5:13 | 1 | -| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:13:6:13 | 1 | -| gen_range_expr.rs:7:13:7:16 | 10.. | gen_range_expr.rs:7:13:7:14 | 10 | +| gen_range_expr.rs:5:13:5:18 | 1..=10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:6:13:6:17 | 1..10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:7:13:7:16 | 10.. | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | +| gen_range_expr.rs:8:13:8:16 | ..10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:9:13:9:17 | ..=10 | getNumberOfAttrs: | 0 | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_expr.rs:10:13:10:14 | .. | getNumberOfAttrs: | 0 | hasEnd: | no | hasOperatorName: | yes | hasStart: | no | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.ql b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.ql index 69a699f14be5..c664f1d747e5 100644 --- a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.ql +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(RangeExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(RangeExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getEnd(RangeExpr x, Expr getEnd) { - toBeTested(x) and not x.isUnknown() and getEnd = x.getEnd() -} - -query predicate getOperatorName(RangeExpr x, string getOperatorName) { - toBeTested(x) and not x.isUnknown() and getOperatorName = x.getOperatorName() -} - -query predicate getStart(RangeExpr x, Expr getStart) { - toBeTested(x) and not x.isUnknown() and getStart = x.getStart() -} +from RangeExpr x, int getNumberOfAttrs, string hasEnd, string hasOperatorName, string hasStart +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasEnd() then hasEnd = "yes" else hasEnd = "no") and + (if x.hasOperatorName() then hasOperatorName = "yes" else hasOperatorName = "no") and + if x.hasStart() then hasStart = "yes" else hasStart = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasEnd:", hasEnd, "hasOperatorName:", + hasOperatorName, "hasStart:", hasStart diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql new file mode 100644 index 000000000000..1c538e88c29e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangeExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected new file mode 100644 index 000000000000..46f5dba778c5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.expected @@ -0,0 +1,4 @@ +| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:17:5:18 | 10 | +| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:16:6:17 | 10 | +| gen_range_expr.rs:8:13:8:16 | ..10 | gen_range_expr.rs:8:15:8:16 | 10 | +| gen_range_expr.rs:9:13:9:17 | ..=10 | gen_range_expr.rs:9:16:9:17 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.ql b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.ql new file mode 100644 index 000000000000..c39a039099d3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getEnd.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangeExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getEnd() diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected new file mode 100644 index 000000000000..ee9172ac1ced --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.expected @@ -0,0 +1,6 @@ +| gen_range_expr.rs:5:13:5:18 | 1..=10 | ..= | +| gen_range_expr.rs:6:13:6:17 | 1..10 | .. | +| gen_range_expr.rs:7:13:7:16 | 10.. | .. | +| gen_range_expr.rs:8:13:8:16 | ..10 | .. | +| gen_range_expr.rs:9:13:9:17 | ..=10 | ..= | +| gen_range_expr.rs:10:13:10:14 | .. | .. | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.ql b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.ql new file mode 100644 index 000000000000..f554a9ecf747 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getOperatorName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangeExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getOperatorName() diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected new file mode 100644 index 000000000000..7f58ee5299fb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.expected @@ -0,0 +1,3 @@ +| gen_range_expr.rs:5:13:5:18 | 1..=10 | gen_range_expr.rs:5:13:5:13 | 1 | +| gen_range_expr.rs:6:13:6:17 | 1..10 | gen_range_expr.rs:6:13:6:13 | 1 | +| gen_range_expr.rs:7:13:7:16 | 10.. | gen_range_expr.rs:7:13:7:14 | 10 | diff --git a/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.ql b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.ql new file mode 100644 index 000000000000..d47b9e81b861 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangeExpr/RangeExpr_getStart.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangeExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getStart() diff --git a/rust/ql/test/extractor-tests/generated/RangePat/Cargo.lock b/rust/ql/test/extractor-tests/generated/RangePat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RangePat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat.expected index 969ccf754df7..ec32f2a5a1c4 100644 --- a/rust/ql/test/extractor-tests/generated/RangePat/RangePat.expected +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat.expected @@ -1,14 +1,3 @@ -instances -| gen_range_pat.rs:6:9:6:12 | RangePat | -| gen_range_pat.rs:7:9:7:15 | RangePat | -| gen_range_pat.rs:8:9:8:12 | RangePat | -getEnd -| gen_range_pat.rs:6:9:6:12 | RangePat | gen_range_pat.rs:6:11:6:12 | 15 | -| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:14:7:15 | 25 | -getOperatorName -| gen_range_pat.rs:6:9:6:12 | RangePat | .. | -| gen_range_pat.rs:7:9:7:15 | RangePat | ..= | -| gen_range_pat.rs:8:9:8:12 | RangePat | .. | -getStart -| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:9:7:10 | 16 | -| gen_range_pat.rs:8:9:8:12 | RangePat | gen_range_pat.rs:8:9:8:10 | 26 | +| gen_range_pat.rs:6:9:6:12 | RangePat | hasEnd: | yes | hasOperatorName: | yes | hasStart: | no | +| gen_range_pat.rs:7:9:7:15 | RangePat | hasEnd: | yes | hasOperatorName: | yes | hasStart: | yes | +| gen_range_pat.rs:8:9:8:12 | RangePat | hasEnd: | no | hasOperatorName: | yes | hasStart: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat.ql b/rust/ql/test/extractor-tests/generated/RangePat/RangePat.ql index 19070c77f263..d9b4bb413488 100644 --- a/rust/ql/test/extractor-tests/generated/RangePat/RangePat.ql +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(RangePat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getEnd(RangePat x, Pat getEnd) { - toBeTested(x) and not x.isUnknown() and getEnd = x.getEnd() -} - -query predicate getOperatorName(RangePat x, string getOperatorName) { - toBeTested(x) and not x.isUnknown() and getOperatorName = x.getOperatorName() -} - -query predicate getStart(RangePat x, Pat getStart) { - toBeTested(x) and not x.isUnknown() and getStart = x.getStart() -} +from RangePat x, string hasEnd, string hasOperatorName, string hasStart +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasEnd() then hasEnd = "yes" else hasEnd = "no") and + (if x.hasOperatorName() then hasOperatorName = "yes" else hasOperatorName = "no") and + if x.hasStart() then hasStart = "yes" else hasStart = "no" +select x, "hasEnd:", hasEnd, "hasOperatorName:", hasOperatorName, "hasStart:", hasStart diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected new file mode 100644 index 000000000000..38ded3fb940d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.expected @@ -0,0 +1,2 @@ +| gen_range_pat.rs:6:9:6:12 | RangePat | gen_range_pat.rs:6:11:6:12 | 15 | +| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:14:7:15 | 25 | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.ql b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.ql new file mode 100644 index 000000000000..61a27c775438 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getEnd.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangePat x +where toBeTested(x) and not x.isUnknown() +select x, x.getEnd() diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.expected new file mode 100644 index 000000000000..537608104c7b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.expected @@ -0,0 +1,3 @@ +| gen_range_pat.rs:6:9:6:12 | RangePat | .. | +| gen_range_pat.rs:7:9:7:15 | RangePat | ..= | +| gen_range_pat.rs:8:9:8:12 | RangePat | .. | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql new file mode 100644 index 000000000000..f2f3052eae35 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangePat x +where toBeTested(x) and not x.isUnknown() +select x, x.getOperatorName() diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected new file mode 100644 index 000000000000..ac6eadaf08c0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.expected @@ -0,0 +1,2 @@ +| gen_range_pat.rs:7:9:7:15 | RangePat | gen_range_pat.rs:7:9:7:10 | 16 | +| gen_range_pat.rs:8:9:8:12 | RangePat | gen_range_pat.rs:8:9:8:10 | 26 | diff --git a/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.ql b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.ql new file mode 100644 index 000000000000..29bbeda81cf1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RangePat/RangePat_getStart.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RangePat x +where toBeTested(x) and not x.isUnknown() +select x, x.getStart() diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/RefExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RefExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected index 031daf888884..412f82142060 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.expected @@ -1,11 +1,4 @@ -instances -| gen_ref_expr.rs:5:25:5:28 | &foo | isConst: | no | isMut: | no | isRaw: | no | -| gen_ref_expr.rs:6:23:6:30 | &mut foo | isConst: | no | isMut: | yes | isRaw: | no | -| gen_ref_expr.rs:7:35:7:48 | &raw const foo | isConst: | yes | isMut: | no | isRaw: | yes | -| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | isConst: | no | isMut: | yes | isRaw: | yes | -getAttr -getExpr -| gen_ref_expr.rs:5:25:5:28 | &foo | gen_ref_expr.rs:5:26:5:28 | foo | -| gen_ref_expr.rs:6:23:6:30 | &mut foo | gen_ref_expr.rs:6:28:6:30 | foo | -| gen_ref_expr.rs:7:35:7:48 | &raw const foo | gen_ref_expr.rs:7:46:7:48 | foo | -| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | gen_ref_expr.rs:8:42:8:44 | foo | +| gen_ref_expr.rs:5:25:5:28 | &foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | no | isRaw: | no | +| gen_ref_expr.rs:6:23:6:30 | &mut foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | no | +| gen_ref_expr.rs:7:35:7:48 | &raw const foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | yes | isMut: | no | isRaw: | yes | +| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | getNumberOfAttrs: | 0 | hasExpr: | yes | isConst: | no | isMut: | yes | isRaw: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql index a9ae1f9ae8d4..a2567b81ed75 100644 --- a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr.ql @@ -2,24 +2,14 @@ import codeql.rust.elements import TestUtils -query predicate instances( - RefExpr x, string isConst__label, string isConst, string isMut__label, string isMut, - string isRaw__label, string isRaw -) { +from RefExpr x, int getNumberOfAttrs, string hasExpr, string isConst, string isMut, string isRaw +where toBeTested(x) and not x.isUnknown() and - isConst__label = "isConst:" and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and (if x.isConst() then isConst = "yes" else isConst = "no") and - isMut__label = "isMut:" and (if x.isMut() then isMut = "yes" else isMut = "no") and - isRaw__label = "isRaw:" and if x.isRaw() then isRaw = "yes" else isRaw = "no" -} - -query predicate getAttr(RefExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(RefExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "isConst:", isConst, "isMut:", + isMut, "isRaw:", isRaw diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql new file mode 100644 index 000000000000..7ef6d44228e4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RefExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected new file mode 100644 index 000000000000..7709668f6fd8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.expected @@ -0,0 +1,4 @@ +| gen_ref_expr.rs:5:25:5:28 | &foo | gen_ref_expr.rs:5:26:5:28 | foo | +| gen_ref_expr.rs:6:23:6:30 | &mut foo | gen_ref_expr.rs:6:28:6:30 | foo | +| gen_ref_expr.rs:7:35:7:48 | &raw const foo | gen_ref_expr.rs:7:46:7:48 | foo | +| gen_ref_expr.rs:8:33:8:44 | &raw mut foo | gen_ref_expr.rs:8:42:8:44 | foo | diff --git a/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql new file mode 100644 index 000000000000..b1404db9783a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RefExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/RefPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/RefPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RefPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected index 0babab322d30..a9dfaf874561 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.expected @@ -1,6 +1,2 @@ -instances -| gen_ref_pat.rs:6:9:6:28 | &mut ... | isMut: | yes | -| gen_ref_pat.rs:7:9:7:21 | &...::None | isMut: | no | -getPat -| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | ...::Some(...) | -| gen_ref_pat.rs:7:9:7:21 | &...::None | gen_ref_pat.rs:7:10:7:21 | ...::None | +| gen_ref_pat.rs:6:9:6:28 | &mut ... | isMut: | yes | hasPat: | yes | +| gen_ref_pat.rs:7:9:7:21 | &...::None | isMut: | no | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql index 3e8ec464569d..4ae72433dad4 100644 --- a/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat.ql @@ -2,13 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(RefPat x, string isMut__label, string isMut) { +from RefPat x, string isMut, string hasPat +where toBeTested(x) and not x.isUnknown() and - isMut__label = "isMut:" and - if x.isMut() then isMut = "yes" else isMut = "no" -} - -query predicate getPat(RefPat x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} + (if x.isMut() then isMut = "yes" else isMut = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "isMut:", isMut, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected new file mode 100644 index 000000000000..029fd9fa1722 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.expected @@ -0,0 +1,2 @@ +| gen_ref_pat.rs:6:9:6:28 | &mut ... | gen_ref_pat.rs:6:14:6:28 | ...::Some(...) | +| gen_ref_pat.rs:7:9:7:21 | &...::None | gen_ref_pat.rs:7:10:7:21 | ...::None | diff --git a/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.ql b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.ql new file mode 100644 index 000000000000..758e4e7895ed --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefPat/RefPat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RefPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/RefTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected index d48b8b7b9980..da74246c0db4 100644 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.expected @@ -1,7 +1,2 @@ -instances -| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | isMut: | no | -| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | isMut: | yes | -getLifetime -getTypeRepr -| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | gen_ref_type_repr.rs:7:13:7:15 | i32 | -| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | gen_ref_type_repr.rs:8:17:8:19 | i32 | +| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | isMut: | no | hasLifetime: | no | hasTypeRepr: | yes | +| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | isMut: | yes | hasLifetime: | no | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql index a414e9a3e664..e60d7faa8ed2 100644 --- a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr.ql @@ -2,17 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(RefTypeRepr x, string isMut__label, string isMut) { +from RefTypeRepr x, string isMut, string hasLifetime, string hasTypeRepr +where toBeTested(x) and not x.isUnknown() and - isMut__label = "isMut:" and - if x.isMut() then isMut = "yes" else isMut = "no" -} - -query predicate getLifetime(RefTypeRepr x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} - -query predicate getTypeRepr(RefTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} + (if x.isMut() then isMut = "yes" else isMut = "no") and + (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "isMut:", isMut, "hasLifetime:", hasLifetime, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.expected b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.ql b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.ql new file mode 100644 index 000000000000..9d857300ea47 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RefTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..59518bf37431 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ref_type_repr.rs:7:12:7:15 | RefTypeRepr | gen_ref_type_repr.rs:7:13:7:15 | i32 | +| gen_ref_type_repr.rs:8:12:8:19 | RefTypeRepr | gen_ref_type_repr.rs:8:17:8:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..1e04fa75ab3a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RefTypeRepr/RefTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RefTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Rename/Cargo.lock b/rust/ql/test/extractor-tests/generated/Rename/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Rename/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename.expected b/rust/ql/test/extractor-tests/generated/Rename/Rename.expected index 73137c57c987..3568d798d288 100644 --- a/rust/ql/test/extractor-tests/generated/Rename/Rename.expected +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename.expected @@ -1,4 +1 @@ -instances -| gen_rename.rs:7:13:7:18 | Rename | -getName -| gen_rename.rs:7:13:7:18 | Rename | gen_rename.rs:7:16:7:18 | bar | +| gen_rename.rs:7:13:7:18 | Rename | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename.ql b/rust/ql/test/extractor-tests/generated/Rename/Rename.ql index 170b5e8bd7bf..91e748797f2c 100644 --- a/rust/ql/test/extractor-tests/generated/Rename/Rename.ql +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Rename x) { toBeTested(x) and not x.isUnknown() } - -query predicate getName(Rename x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} +from Rename x, string hasName +where + toBeTested(x) and + not x.isUnknown() and + if x.hasName() then hasName = "yes" else hasName = "no" +select x, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected new file mode 100644 index 000000000000..323982f910df --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.expected @@ -0,0 +1 @@ +| gen_rename.rs:7:13:7:18 | Rename | gen_rename.rs:7:16:7:18 | bar | diff --git a/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.ql b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.ql new file mode 100644 index 000000000000..59df9dcf5cae --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Rename/Rename_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Rename x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/RestPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/RestPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RestPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected index 6fd34b7cf234..c5d19cda38db 100644 --- a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected +++ b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.expected @@ -1,3 +1 @@ -instances -| gen_rest_pat.rs:7:13:7:14 | .. | -getAttr +| gen_rest_pat.rs:7:13:7:14 | .. | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.ql b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.ql index 3754d7fd2f23..c3cb2a24f832 100644 --- a/rust/ql/test/extractor-tests/generated/RestPat/RestPat.ql +++ b/rust/ql/test/extractor-tests/generated/RestPat/RestPat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(RestPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(RestPat x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from RestPat x, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/RestPat/RestPat_getAttr.expected b/rust/ql/test/extractor-tests/generated/RestPat/RestPat_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/RestPat/RestPat_getAttr.ql b/rust/ql/test/extractor-tests/generated/RestPat/RestPat_getAttr.ql new file mode 100644 index 000000000000..e85a7975b6be --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RestPat/RestPat_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RestPat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/RetTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected index 5b6612981945..18726b694bf4 100644 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.expected @@ -1,6 +1,2 @@ -instances -| gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | -| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | -getTypeRepr -| gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | gen_ret_type_repr.rs:3:28:3:29 | TupleTypeRepr | -| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | gen_ret_type_repr.rs:7:17:7:19 | i32 | +| gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | hasTypeRepr: | yes | +| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql index b92b05897e83..d03f9d4f1b6d 100644 --- a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(RetTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeRepr(RetTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from RetTypeRepr x, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..c150253243ef --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_ret_type_repr.rs:3:25:3:29 | RetTypeRepr | gen_ret_type_repr.rs:3:28:3:29 | TupleTypeRepr | +| gen_ret_type_repr.rs:7:14:7:19 | RetTypeRepr | gen_ret_type_repr.rs:7:17:7:19 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..b2a7bf73d763 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/RetTypeRepr/RetTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from RetTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/ReturnExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected index e978eca2e7ca..83220773989e 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.expected @@ -1,6 +1,2 @@ -instances -| gen_return_expr.rs:5:5:5:13 | return 42 | -| gen_return_expr.rs:8:5:8:10 | return | -getAttr -getExpr -| gen_return_expr.rs:5:5:5:13 | return 42 | gen_return_expr.rs:5:12:5:13 | 42 | +| gen_return_expr.rs:5:5:5:13 | return 42 | getNumberOfAttrs: | 0 | hasExpr: | yes | +| gen_return_expr.rs:8:5:8:10 | return | getNumberOfAttrs: | 0 | hasExpr: | no | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql index 11eeed2222cb..aa8c4d886a7b 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(ReturnExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(ReturnExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(ReturnExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from ReturnExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql new file mode 100644 index 000000000000..23366928f39f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ReturnExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected new file mode 100644 index 000000000000..c75ecd0b23c5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_return_expr.rs:5:5:5:13 | return 42 | gen_return_expr.rs:5:12:5:13 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql new file mode 100644 index 000000000000..8f682d7a5b1e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/ReturnExpr/ReturnExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from ReturnExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/Cargo.lock b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql index 0b84f93a9b23..e29f818af433 100644 --- a/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql +++ b/rust/ql/test/extractor-tests/generated/ReturnTypeSyntax/ReturnTypeSyntax.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(ReturnTypeSyntax x) { toBeTested(x) and not x.isUnknown() } +from ReturnTypeSyntax x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/Cargo.lock b/rust/ql/test/extractor-tests/generated/SelfParam/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/SelfParam/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected index faa10f8e9121..ba8ab1e624d6 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.expected @@ -1,16 +1,5 @@ -instances -| gen_self_param.rs:6:10:6:14 | SelfParam | isRef: | yes | isMut: | no | -| gen_self_param.rs:7:10:7:18 | SelfParam | isRef: | yes | isMut: | yes | -| gen_self_param.rs:8:12:8:15 | SelfParam | isRef: | no | isMut: | no | -| gen_self_param.rs:9:11:9:18 | SelfParam | isRef: | no | isMut: | yes | -| gen_self_param.rs:10:15:10:22 | SelfParam | isRef: | yes | isMut: | no | -getAttr -getTypeRepr -getLifetime -| gen_self_param.rs:10:15:10:22 | SelfParam | gen_self_param.rs:10:16:10:17 | 'a | -getName -| gen_self_param.rs:6:10:6:14 | SelfParam | gen_self_param.rs:6:11:6:14 | self | -| gen_self_param.rs:7:10:7:18 | SelfParam | gen_self_param.rs:7:15:7:18 | self | -| gen_self_param.rs:8:12:8:15 | SelfParam | gen_self_param.rs:8:12:8:15 | self | -| gen_self_param.rs:9:11:9:18 | SelfParam | gen_self_param.rs:9:15:9:18 | self | -| gen_self_param.rs:10:15:10:22 | SelfParam | gen_self_param.rs:10:19:10:22 | self | +| gen_self_param.rs:6:10:6:14 | SelfParam | getNumberOfAttrs: | 0 | hasTypeRepr: | no | isRef: | yes | isMut: | no | hasLifetime: | no | hasName: | yes | +| gen_self_param.rs:7:10:7:18 | SelfParam | getNumberOfAttrs: | 0 | hasTypeRepr: | no | isRef: | yes | isMut: | yes | hasLifetime: | no | hasName: | yes | +| gen_self_param.rs:8:12:8:15 | SelfParam | getNumberOfAttrs: | 0 | hasTypeRepr: | no | isRef: | no | isMut: | no | hasLifetime: | no | hasName: | yes | +| gen_self_param.rs:9:11:9:18 | SelfParam | getNumberOfAttrs: | 0 | hasTypeRepr: | no | isRef: | no | isMut: | yes | hasLifetime: | no | hasName: | yes | +| gen_self_param.rs:10:15:10:22 | SelfParam | getNumberOfAttrs: | 0 | hasTypeRepr: | no | isRef: | yes | isMut: | no | hasLifetime: | yes | hasName: | yes | diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql index 07dd03a406f1..3f09c3ece20b 100644 --- a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam.ql @@ -2,29 +2,17 @@ import codeql.rust.elements import TestUtils -query predicate instances( - SelfParam x, string isRef__label, string isRef, string isMut__label, string isMut -) { +from + SelfParam x, int getNumberOfAttrs, string hasTypeRepr, string isRef, string isMut, + string hasLifetime, string hasName +where toBeTested(x) and not x.isUnknown() and - isRef__label = "isRef:" and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and (if x.isRef() then isRef = "yes" else isRef = "no") and - isMut__label = "isMut:" and - if x.isMut() then isMut = "yes" else isMut = "no" -} - -query predicate getAttr(SelfParam x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTypeRepr(SelfParam x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getLifetime(SelfParam x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} - -query predicate getName(SelfParam x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} + (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" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTypeRepr:", hasTypeRepr, "isRef:", isRef, + "isMut:", isMut, "hasLifetime:", hasLifetime, "hasName:", hasName diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql new file mode 100644 index 000000000000..682c1a9374a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SelfParam x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.expected new file mode 100644 index 000000000000..cfe91c68c858 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.expected @@ -0,0 +1 @@ +| gen_self_param.rs:10:15:10:22 | SelfParam | gen_self_param.rs:10:16:10:17 | 'a | diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql new file mode 100644 index 000000000000..a64eb368a711 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SelfParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected new file mode 100644 index 000000000000..6b57cfe1570a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.expected @@ -0,0 +1,5 @@ +| gen_self_param.rs:6:10:6:14 | SelfParam | gen_self_param.rs:6:11:6:14 | self | +| gen_self_param.rs:7:10:7:18 | SelfParam | gen_self_param.rs:7:15:7:18 | self | +| gen_self_param.rs:8:12:8:15 | SelfParam | gen_self_param.rs:8:12:8:15 | self | +| gen_self_param.rs:9:11:9:18 | SelfParam | gen_self_param.rs:9:15:9:18 | self | +| gen_self_param.rs:10:15:10:22 | SelfParam | gen_self_param.rs:10:19:10:22 | self | diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.ql new file mode 100644 index 000000000000..7a99270bfa5f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SelfParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.ql new file mode 100644 index 000000000000..0be0ec9902d9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SelfParam/SelfParam_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SelfParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/Cargo.lock b/rust/ql/test/extractor-tests/generated/SlicePat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/SlicePat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.expected b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.expected index 0594cf27e557..0821ea233238 100644 --- a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.expected +++ b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.expected @@ -1,18 +1,3 @@ -instances -| gen_slice_pat.rs:6:9:6:23 | SlicePat | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | -getPat -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 0 | gen_slice_pat.rs:6:10:6:10 | 1 | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 1 | gen_slice_pat.rs:6:13:6:13 | 2 | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 2 | gen_slice_pat.rs:6:16:6:16 | 3 | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 3 | gen_slice_pat.rs:6:19:6:19 | 4 | -| gen_slice_pat.rs:6:9:6:23 | SlicePat | 4 | gen_slice_pat.rs:6:22:6:22 | 5 | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 0 | gen_slice_pat.rs:7:10:7:10 | 1 | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 1 | gen_slice_pat.rs:7:13:7:13 | 2 | -| gen_slice_pat.rs:7:9:7:18 | SlicePat | 2 | gen_slice_pat.rs:7:16:7:17 | .. | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 0 | gen_slice_pat.rs:8:10:8:10 | x | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 1 | gen_slice_pat.rs:8:13:8:13 | y | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 2 | gen_slice_pat.rs:8:16:8:17 | .. | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 3 | gen_slice_pat.rs:8:20:8:20 | z | -| gen_slice_pat.rs:8:9:8:24 | SlicePat | 4 | gen_slice_pat.rs:8:23:8:23 | 7 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | getNumberOfPats: | 5 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | getNumberOfPats: | 3 | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | getNumberOfPats: | 5 | diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.ql b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.ql index b4b0e9430363..2b6c51f9da6a 100644 --- a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.ql +++ b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(SlicePat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPat(SlicePat x, int index, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat(index) -} +from SlicePat x, int getNumberOfPats +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfPats = x.getNumberOfPats() +select x, "getNumberOfPats:", getNumberOfPats diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected new file mode 100644 index 000000000000..0725988f37fd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.expected @@ -0,0 +1,13 @@ +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 0 | gen_slice_pat.rs:6:10:6:10 | 1 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 1 | gen_slice_pat.rs:6:13:6:13 | 2 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 2 | gen_slice_pat.rs:6:16:6:16 | 3 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 3 | gen_slice_pat.rs:6:19:6:19 | 4 | +| gen_slice_pat.rs:6:9:6:23 | SlicePat | 4 | gen_slice_pat.rs:6:22:6:22 | 5 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 0 | gen_slice_pat.rs:7:10:7:10 | 1 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 1 | gen_slice_pat.rs:7:13:7:13 | 2 | +| gen_slice_pat.rs:7:9:7:18 | SlicePat | 2 | gen_slice_pat.rs:7:16:7:17 | .. | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 0 | gen_slice_pat.rs:8:10:8:10 | x | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 1 | gen_slice_pat.rs:8:13:8:13 | y | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 2 | gen_slice_pat.rs:8:16:8:17 | .. | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 3 | gen_slice_pat.rs:8:20:8:20 | z | +| gen_slice_pat.rs:8:9:8:24 | SlicePat | 4 | gen_slice_pat.rs:8:23:8:23 | 7 | diff --git a/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.ql b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.ql new file mode 100644 index 000000000000..37194fd2f1d2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SlicePat/SlicePat_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SlicePat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getPat(index) diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected index 20b1883e4d36..dfcfb754437f 100644 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.expected @@ -1,4 +1 @@ -instances -| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | -getTypeRepr -| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | gen_slice_type_repr.rs:7:14:7:16 | i32 | +| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql index b32b4edf6d3c..4f60ce58624c 100644 --- a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(SliceTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeRepr(SliceTypeRepr x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from SliceTypeRepr x, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected new file mode 100644 index 000000000000..7c0b5e94e2f3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_slice_type_repr.rs:7:13:7:17 | SliceTypeRepr | gen_slice_type_repr.rs:7:14:7:16 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql new file mode 100644 index 000000000000..80d2c59ba290 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SliceTypeRepr/SliceTypeRepr_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SliceTypeRepr x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/Cargo.lock b/rust/ql/test/extractor-tests/generated/SourceFile/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/SourceFile/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected index e308c26daa80..e354381a9216 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.expected @@ -1,7 +1,2 @@ -instances -| gen_source_file.rs:1:1:9:2 | SourceFile | -| lib.rs:1:1:1:20 | SourceFile | -getAttr -getItem -| gen_source_file.rs:1:1:9:2 | SourceFile | 0 | gen_source_file.rs:3:1:9:1 | fn test_source_file | -| lib.rs:1:1:1:20 | SourceFile | 0 | lib.rs:1:1:1:20 | mod gen_source_file | +| gen_source_file.rs:1:1:9:2 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | +| lib.rs:1:1:1:20 | SourceFile | getNumberOfAttrs: | 0 | getNumberOfItems: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.ql b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.ql index 257752e706e6..b904bf731a88 100644 --- a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.ql +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(SourceFile x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(SourceFile x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getItem(SourceFile x, int index, Item getItem) { - toBeTested(x) and not x.isUnknown() and getItem = x.getItem(index) -} +from SourceFile x, int getNumberOfAttrs, int getNumberOfItems +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfItems = x.getNumberOfItems() +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfItems:", getNumberOfItems diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql new file mode 100644 index 000000000000..d1842052239c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SourceFile x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected new file mode 100644 index 000000000000..236a2a0755b8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.expected @@ -0,0 +1,2 @@ +| gen_source_file.rs:1:1:9:2 | SourceFile | 0 | gen_source_file.rs:3:1:9:1 | fn test_source_file | +| lib.rs:1:1:1:20 | SourceFile | 0 | lib.rs:1:1:1:20 | mod gen_source_file | diff --git a/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql new file mode 100644 index 000000000000..339ea18c216b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/SourceFile/SourceFile_getItem.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from SourceFile 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/Static/Cargo.lock b/rust/ql/test/extractor-tests/generated/Static/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Static/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.expected b/rust/ql/test/extractor-tests/generated/Static/Static.expected index ee87d07a2c18..076578efe684 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.expected +++ b/rust/ql/test/extractor-tests/generated/Static/Static.expected @@ -1,13 +1 @@ -instances -| gen_static.rs:4:5:7:23 | Static | isMut: | no | isStatic: | yes | isUnsafe: | no | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getBody -| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:21:7:22 | 42 | -getName -| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:12:7:12 | X | -getTypeRepr -| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:15:7:17 | i32 | -getVisibility +| gen_static.rs:4:5:7:23 | Static | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasBody: | yes | isMut: | no | isStatic: | yes | isUnsafe: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static.ql b/rust/ql/test/extractor-tests/generated/Static/Static.ql index 58ade5f044fc..96a1fbd9814f 100644 --- a/rust/ql/test/extractor-tests/generated/Static/Static.ql +++ b/rust/ql/test/extractor-tests/generated/Static/Static.ql @@ -2,50 +2,33 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Static x, string isMut__label, string isMut, string isStatic__label, string isStatic, - string isUnsafe__label, string isUnsafe -) { +from + Static x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasBody, string isMut, + string isStatic, string isUnsafe, string hasName, string hasTypeRepr, string hasVisibility +where toBeTested(x) and not x.isUnknown() and - isMut__label = "isMut:" and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) 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 - isStatic__label = "isStatic:" and (if x.isStatic() then isStatic = "yes" else isStatic = "no") and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getExtendedCanonicalPath(Static x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Static x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Static x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(Static x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getBody(Static x, Expr getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getName(Static x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeRepr(Static x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getVisibility(Static x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasBody:", hasBody, "isMut:", isMut, "isStatic:", isStatic, "isUnsafe:", isUnsafe, "hasName:", + hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getAttr.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getAttr.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getAttr.ql new file mode 100644 index 000000000000..df76d9642d26 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..500484b60b34 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected new file mode 100644 index 000000000000..1c7305c4991d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:21:7:22 | 42 | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getBody.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.ql new file mode 100644 index 000000000000..3983685f7fab --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getCrateOrigin.ql new file mode 100644 index 000000000000..373b6bd45f42 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..32b3a0c127e1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected new file mode 100644 index 000000000000..96c219c64db6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getName.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:12:7:12 | X | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getName.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getName.ql new file mode 100644 index 000000000000..714d58c38922 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected new file mode 100644 index 000000000000..556c54674849 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_static.rs:4:5:7:23 | Static | gen_static.rs:7:15:7:17 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.ql new file mode 100644 index 000000000000..6aa9e4108e92 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Static/Static_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Static/Static_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Static/Static_getVisibility.ql new file mode 100644 index 000000000000..7ba134e17bcf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Static/Static_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Static x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/StmtList/Cargo.lock b/rust/ql/test/extractor-tests/generated/StmtList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StmtList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected index 02f322734ca6..46bdea2a71cb 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.expected @@ -1,9 +1,2 @@ -instances -| gen_stmt_list.rs:3:27:12:1 | StmtList | -| gen_stmt_list.rs:7:5:10:5 | StmtList | -getAttr -getStatement -| gen_stmt_list.rs:7:5:10:5 | StmtList | 0 | gen_stmt_list.rs:8:9:8:18 | let ... = 1 | -| gen_stmt_list.rs:7:5:10:5 | StmtList | 1 | gen_stmt_list.rs:9:9:9:18 | let ... = 2 | -getTailExpr -| gen_stmt_list.rs:3:27:12:1 | StmtList | gen_stmt_list.rs:7:5:10:5 | { ... } | +| gen_stmt_list.rs:3:27:12:1 | StmtList | getNumberOfAttrs: | 0 | getNumberOfStatements: | 0 | hasTailExpr: | yes | +| gen_stmt_list.rs:7:5:10:5 | StmtList | getNumberOfAttrs: | 0 | getNumberOfStatements: | 2 | hasTailExpr: | no | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.ql b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.ql index 1dcc1ce6db1e..e24be9ebffe4 100644 --- a/rust/ql/test/extractor-tests/generated/StmtList/StmtList.ql +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(StmtList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(StmtList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getStatement(StmtList x, int index, Stmt getStatement) { - toBeTested(x) and not x.isUnknown() and getStatement = x.getStatement(index) -} - -query predicate getTailExpr(StmtList x, Expr getTailExpr) { - toBeTested(x) and not x.isUnknown() and getTailExpr = x.getTailExpr() -} +from StmtList x, int getNumberOfAttrs, int getNumberOfStatements, string hasTailExpr +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfStatements = x.getNumberOfStatements() and + if x.hasTailExpr() then hasTailExpr = "yes" else hasTailExpr = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfStatements:", getNumberOfStatements, + "hasTailExpr:", hasTailExpr diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getAttr.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getAttr.ql b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getAttr.ql new file mode 100644 index 000000000000..a1a2079e938e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StmtList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected new file mode 100644 index 000000000000..46bda795699f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.expected @@ -0,0 +1,2 @@ +| gen_stmt_list.rs:7:5:10:5 | StmtList | 0 | gen_stmt_list.rs:8:9:8:18 | let ... = 1 | +| gen_stmt_list.rs:7:5:10:5 | StmtList | 1 | gen_stmt_list.rs:9:9:9:18 | let ... = 2 | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.ql b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.ql new file mode 100644 index 000000000000..f895ca9fa016 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getStatement.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StmtList 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/StmtList/StmtList_getTailExpr.expected b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected new file mode 100644 index 000000000000..998a40aea79c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.expected @@ -0,0 +1 @@ +| gen_stmt_list.rs:3:27:12:1 | StmtList | gen_stmt_list.rs:7:5:10:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql new file mode 100644 index 000000000000..592c60854510 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StmtList/StmtList_getTailExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StmtList x +where toBeTested(x) and not x.isUnknown() +select x, x.getTailExpr() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected index ad34c13babe6..971e141a2024 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.expected +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.expected @@ -1,14 +1 @@ -instances -| gen_struct.rs:4:5:8:5 | struct Point | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getDeriveMacroExpansion -getAttr -getFieldList -| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:18:8:5 | StructFieldList | -getGenericParamList -getName -| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:12:5:16 | Point | -getVisibility -getWhereClause +| gen_struct.rs:4:5:8:5 | struct Point | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfDeriveMacroExpansions: | 0 | getNumberOfAttrs: | 0 | hasFieldList: | yes | hasGenericParamList: | no | hasName: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql index 185c1125f5c5..f5f0439f1758 100644 --- a/rust/ql/test/extractor-tests/generated/Struct/Struct.ql +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct.ql @@ -2,46 +2,34 @@ import codeql.rust.elements import TestUtils -query predicate instances(Struct x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Struct x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Struct x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Struct x, MacroItems getAttributeMacroExpansion) { +from + Struct x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfDeriveMacroExpansions, int getNumberOfAttrs, + string hasFieldList, string hasGenericParamList, string hasName, string hasVisibility, + string hasWhereClause +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getDeriveMacroExpansion(Struct x, int index, MacroItems getDeriveMacroExpansion) { - toBeTested(x) and not x.isUnknown() and getDeriveMacroExpansion = x.getDeriveMacroExpansion(index) -} - -query predicate getAttr(Struct x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getFieldList(Struct x, FieldList getFieldList) { - toBeTested(x) and not x.isUnknown() and getFieldList = x.getFieldList() -} - -query predicate getGenericParamList(Struct x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Struct x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getVisibility(Struct x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Struct x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfDeriveMacroExpansions = x.getNumberOfDeriveMacroExpansions() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and + if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfDeriveMacroExpansions:", + getNumberOfDeriveMacroExpansions, "getNumberOfAttrs:", getNumberOfAttrs, "hasFieldList:", + hasFieldList, "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttr.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttr.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttr.ql new file mode 100644 index 000000000000..11789c109f0f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..7673f2d669eb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql new file mode 100644 index 000000000000..cafe120d4dec --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.ql new file mode 100644 index 000000000000..3009a782a88f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getDeriveMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getDeriveMacroExpansion(index) diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..f502a347b3e7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected new file mode 100644 index 000000000000..b2233206f649 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.expected @@ -0,0 +1 @@ +| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:18:8:5 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.ql new file mode 100644 index 000000000000..cdbdf6a37be4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getFieldList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getFieldList() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql new file mode 100644 index 000000000000..31a30a865f77 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected new file mode 100644 index 000000000000..6912576e6fb4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.expected @@ -0,0 +1 @@ +| gen_struct.rs:4:5:8:5 | struct Point | gen_struct.rs:5:12:5:16 | Point | diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.ql new file mode 100644 index 000000000000..40a167b3f2ee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getVisibility.ql new file mode 100644 index 000000000000..a86863cb1c77 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Struct/Struct_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Struct/Struct_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Struct/Struct_getWhereClause.ql new file mode 100644 index 000000000000..b1df6874c1d0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Struct/Struct_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Struct x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected index 477aa732ece0..b9d3562413c9 100644 --- a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.expected @@ -1,17 +1,4 @@ -instances -| gen_struct_expr.rs:5:17:5:34 | Foo {...} | -| gen_struct_expr.rs:6:18:6:38 | Foo {...} | -| gen_struct_expr.rs:7:5:7:22 | Foo {...} | -| gen_struct_expr.rs:8:5:8:14 | Foo {...} | -getResolvedPath -getResolvedCrateOrigin -getPath -| gen_struct_expr.rs:5:17:5:34 | Foo {...} | gen_struct_expr.rs:5:17:5:19 | Foo | -| gen_struct_expr.rs:6:18:6:38 | Foo {...} | gen_struct_expr.rs:6:18:6:20 | Foo | -| gen_struct_expr.rs:7:5:7:22 | Foo {...} | gen_struct_expr.rs:7:5:7:7 | Foo | -| gen_struct_expr.rs:8:5:8:14 | Foo {...} | gen_struct_expr.rs:8:5:8:7 | Foo | -getStructExprFieldList -| gen_struct_expr.rs:5:17:5:34 | Foo {...} | gen_struct_expr.rs:5:21:5:34 | StructExprFieldList | -| gen_struct_expr.rs:6:18:6:38 | Foo {...} | gen_struct_expr.rs:6:22:6:38 | StructExprFieldList | -| gen_struct_expr.rs:7:5:7:22 | Foo {...} | gen_struct_expr.rs:7:9:7:22 | StructExprFieldList | -| gen_struct_expr.rs:8:5:8:14 | Foo {...} | gen_struct_expr.rs:8:9:8:14 | StructExprFieldList | +| gen_struct_expr.rs:5:17:5:34 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructExprFieldList: | yes | +| gen_struct_expr.rs:6:18:6:38 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructExprFieldList: | yes | +| gen_struct_expr.rs:7:5:7:22 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructExprFieldList: | yes | +| gen_struct_expr.rs:8:5:8:14 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructExprFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql index 4a71efa31ee6..6b4189951a5d 100644 --- a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr.ql @@ -2,20 +2,21 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getResolvedPath(StructExpr x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(StructExpr x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getPath(StructExpr x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getStructExprFieldList(StructExpr x, StructExprFieldList getStructExprFieldList) { - toBeTested(x) and not x.isUnknown() and getStructExprFieldList = x.getStructExprFieldList() -} +from + StructExpr x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + string hasStructExprFieldList +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + if x.hasStructExprFieldList() + then hasStructExprFieldList = "yes" + else hasStructExprFieldList = "no" +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "hasStructExprFieldList:", hasStructExprFieldList diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.expected new file mode 100644 index 000000000000..ca22511d4c13 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.expected @@ -0,0 +1,4 @@ +| gen_struct_expr.rs:5:17:5:34 | Foo {...} | gen_struct_expr.rs:5:17:5:19 | Foo | +| gen_struct_expr.rs:6:18:6:38 | Foo {...} | gen_struct_expr.rs:6:18:6:20 | Foo | +| gen_struct_expr.rs:7:5:7:22 | Foo {...} | gen_struct_expr.rs:7:5:7:7 | Foo | +| gen_struct_expr.rs:8:5:8:14 | Foo {...} | gen_struct_expr.rs:8:5:8:7 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql new file mode 100644 index 000000000000..dd6682ca28b2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..10d7894e2e15 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql new file mode 100644 index 000000000000..49876f1872a3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.expected b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.expected new file mode 100644 index 000000000000..cf201f27ca23 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.expected @@ -0,0 +1,4 @@ +| gen_struct_expr.rs:5:17:5:34 | Foo {...} | gen_struct_expr.rs:5:21:5:34 | StructExprFieldList | +| gen_struct_expr.rs:6:18:6:38 | Foo {...} | gen_struct_expr.rs:6:22:6:38 | StructExprFieldList | +| gen_struct_expr.rs:7:5:7:22 | Foo {...} | gen_struct_expr.rs:7:9:7:22 | StructExprFieldList | +| gen_struct_expr.rs:8:5:8:14 | Foo {...} | gen_struct_expr.rs:8:9:8:14 | StructExprFieldList | diff --git a/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql new file mode 100644 index 000000000000..4e8e74dca364 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getStructExprFieldList() diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructExprField/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructExprField/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected index 3e275eb6a241..952656c39aaf 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected @@ -1,10 +1,2 @@ -instances -| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | -| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | -getAttr -getExpr -| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:14:5:14 | 1 | -| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:20:5:20 | 2 | -getIdentifier -| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:11:5:11 | a | -| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:17:5:17 | b | +| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasIdentifier: | yes | +| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql index 4b4703c88287..3d383af10dc8 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructExprField x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(StructExprField x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(StructExprField x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} - -query predicate getIdentifier(StructExprField x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} +from StructExprField x, int getNumberOfAttrs, string hasExpr, string hasIdentifier +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasIdentifier:", + hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql new file mode 100644 index 000000000000..2742907ba87e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprField x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.expected new file mode 100644 index 000000000000..ee1f3e2a9fed --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.expected @@ -0,0 +1,2 @@ +| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:14:5:14 | 1 | +| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:20:5:20 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql new file mode 100644 index 000000000000..f301995d0b9f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprField x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected new file mode 100644 index 000000000000..feb2debc66e9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:11:5:11 | a | +| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql new file mode 100644 index 000000000000..6d6b06cf3d5d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprField x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructExprFieldList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected index 188a3690d83d..16e48f1e4f91 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.expected @@ -1,7 +1 @@ -instances -| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | -getAttr -getField -| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 0 | gen_struct_expr_field_list.rs:7:11:7:14 | a: 1 | -| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 1 | gen_struct_expr_field_list.rs:7:17:7:20 | b: 2 | -getSpread +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | getNumberOfAttrs: | 0 | getNumberOfFields: | 2 | hasSpread: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql index dfa2ea4c324a..75690e39e194 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructExprFieldList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(StructExprFieldList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getField(StructExprFieldList x, int index, StructExprField getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} - -query predicate getSpread(StructExprFieldList x, Expr getSpread) { - toBeTested(x) and not x.isUnknown() and getSpread = x.getSpread() -} +from StructExprFieldList x, int getNumberOfAttrs, int getNumberOfFields, string hasSpread +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfFields = x.getNumberOfFields() and + if x.hasSpread() then hasSpread = "yes" else hasSpread = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfFields:", getNumberOfFields, + "hasSpread:", hasSpread diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql new file mode 100644 index 000000000000..2285cd246d62 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprFieldList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected new file mode 100644 index 000000000000..a9e8edc6aae1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 0 | gen_struct_expr_field_list.rs:7:11:7:14 | a: 1 | +| gen_struct_expr_field_list.rs:7:9:7:22 | StructExprFieldList | 1 | gen_struct_expr_field_list.rs:7:17:7:20 | b: 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql new file mode 100644 index 000000000000..3872d178afc4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprFieldList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.expected b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql new file mode 100644 index 000000000000..d3a504725920 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructExprFieldList x +where toBeTested(x) and not x.isUnknown() +select x, x.getSpread() diff --git a/rust/ql/test/extractor-tests/generated/StructField/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructField/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructField/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected index 3b5d0d7b71ca..52a70f01feb8 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField.expected +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField.expected @@ -1,9 +1 @@ -instances -| gen_struct_field.rs:7:16:7:21 | StructField | isUnsafe: | no | -getAttr -getDefault -getName -| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:16:7:16 | x | -getTypeRepr -| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:19:7:21 | i32 | -getVisibility +| gen_struct_field.rs:7:16:7:21 | StructField | getNumberOfAttrs: | 0 | hasDefault: | no | isUnsafe: | no | hasName: | yes | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField.ql index 773f282e36b3..cf7b3d995e13 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField.ql +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField.ql @@ -2,29 +2,17 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructField x, string isUnsafe__label, string isUnsafe) { +from + StructField x, int getNumberOfAttrs, string hasDefault, string isUnsafe, string hasName, + string hasTypeRepr, string hasVisibility +where toBeTested(x) and not x.isUnknown() and - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getAttr(StructField x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getDefault(StructField x, Expr getDefault) { - toBeTested(x) and not x.isUnknown() and getDefault = x.getDefault() -} - -query predicate getName(StructField x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeRepr(StructField x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getVisibility(StructField x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasDefault() then hasDefault = "yes" else hasDefault = "no") and + (if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefault:", hasDefault, "isUnsafe:", isUnsafe, + "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getAttr.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getAttr.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getAttr.ql new file mode 100644 index 000000000000..61661be44900 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructField x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql new file mode 100644 index 000000000000..dbdd22c00e04 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructField x +where toBeTested(x) and not x.isUnknown() +select x, x.getDefault() diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected new file mode 100644 index 000000000000..1b66b3a883b9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.expected @@ -0,0 +1 @@ +| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:16:7:16 | x | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.ql new file mode 100644 index 000000000000..a8078e8a34e7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructField x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected new file mode 100644 index 000000000000..ad77aac46016 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_struct_field.rs:7:16:7:21 | StructField | gen_struct_field.rs:7:19:7:21 | i32 | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql new file mode 100644 index 000000000000..27cd539c0bee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructField x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getVisibility.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getVisibility.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getVisibility.ql new file mode 100644 index 000000000000..43ebca776569 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructField x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructFieldList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected index 847bfd3c9371..f07a535897fe 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected @@ -1,5 +1 @@ -instances -| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | -getField -| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 0 | gen_struct_field_list.rs:7:16:7:21 | StructField | -| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 1 | gen_struct_field_list.rs:7:24:7:29 | StructField | +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql index f8afe271d812..62725f6189b2 100644 --- a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructFieldList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getField(StructFieldList x, int index, StructField getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from StructFieldList x, int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfFields = x.getNumberOfFields() +select x, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected new file mode 100644 index 000000000000..cd2ac33b4c95 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 0 | gen_struct_field_list.rs:7:16:7:21 | StructField | +| gen_struct_field_list.rs:7:14:7:31 | StructFieldList | 1 | gen_struct_field_list.rs:7:24:7:29 | StructField | diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql new file mode 100644 index 000000000000..f1c7d0b58dc6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructFieldList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/StructPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected index 894e52fb1965..976f45ab4cdc 100644 --- a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.expected @@ -1,11 +1,2 @@ -instances -| gen_struct_pat.rs:6:9:6:26 | Foo {...} | -| gen_struct_pat.rs:7:9:7:18 | Foo {...} | -getResolvedPath -getResolvedCrateOrigin -getPath -| gen_struct_pat.rs:6:9:6:26 | Foo {...} | gen_struct_pat.rs:6:9:6:11 | Foo | -| gen_struct_pat.rs:7:9:7:18 | Foo {...} | gen_struct_pat.rs:7:9:7:11 | Foo | -getStructPatFieldList -| gen_struct_pat.rs:6:9:6:26 | Foo {...} | gen_struct_pat.rs:6:13:6:26 | StructPatFieldList | -| gen_struct_pat.rs:7:9:7:18 | Foo {...} | gen_struct_pat.rs:7:13:7:18 | StructPatFieldList | +| gen_struct_pat.rs:6:9:6:26 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructPatFieldList: | yes | +| gen_struct_pat.rs:7:9:7:18 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasStructPatFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql index 4aad29aede9c..9df81390d42f 100644 --- a/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat.ql @@ -2,20 +2,19 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getResolvedPath(StructPat x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(StructPat x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getPath(StructPat x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getStructPatFieldList(StructPat x, StructPatFieldList getStructPatFieldList) { - toBeTested(x) and not x.isUnknown() and getStructPatFieldList = x.getStructPatFieldList() -} +from + StructPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + string hasStructPatFieldList +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + if x.hasStructPatFieldList() then hasStructPatFieldList = "yes" else hasStructPatFieldList = "no" +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "hasStructPatFieldList:", hasStructPatFieldList diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.expected new file mode 100644 index 000000000000..1430d89402af --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.expected @@ -0,0 +1,2 @@ +| gen_struct_pat.rs:6:9:6:26 | Foo {...} | gen_struct_pat.rs:6:9:6:11 | Foo | +| gen_struct_pat.rs:7:9:7:18 | Foo {...} | gen_struct_pat.rs:7:9:7:11 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.ql new file mode 100644 index 000000000000..078813c2700a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..1fdff67b7350 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql new file mode 100644 index 000000000000..f7a60efc20ee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.expected b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.expected new file mode 100644 index 000000000000..33464196b165 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.expected @@ -0,0 +1,2 @@ +| gen_struct_pat.rs:6:9:6:26 | Foo {...} | gen_struct_pat.rs:6:13:6:26 | StructPatFieldList | +| gen_struct_pat.rs:7:9:7:18 | Foo {...} | gen_struct_pat.rs:7:13:7:18 | StructPatFieldList | diff --git a/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql new file mode 100644 index 000000000000..1304a8e16f34 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getStructPatFieldList() diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructPatField/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructPatField/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected index c2efa2bda821..bb492dabd126 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected @@ -1,10 +1,2 @@ -instances -| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | -| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | -getAttr -getIdentifier -| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:15:5:15 | a | -| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:21:5:21 | b | -getPat -| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:18:5:18 | 1 | -| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:24:5:24 | 2 | +| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasPat: | yes | +| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql index 4b3c605590d5..a68d2b52614d 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql @@ -2,16 +2,11 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructPatField x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(StructPatField x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getIdentifier(StructPatField x, NameRef getIdentifier) { - toBeTested(x) and not x.isUnknown() and getIdentifier = x.getIdentifier() -} - -query predicate getPat(StructPatField x, Pat getPat) { - toBeTested(x) and not x.isUnknown() and getPat = x.getPat() -} +from StructPatField x, int getNumberOfAttrs, string hasIdentifier, string hasPat +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and + if x.hasPat() then hasPat = "yes" else hasPat = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", hasIdentifier, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql new file mode 100644 index 000000000000..4dd2a726473f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPatField x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected new file mode 100644 index 000000000000..b2f9c4967475 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:15:5:15 | a | +| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:21:5:21 | b | diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql new file mode 100644 index 000000000000..e03a98229b3d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPatField x +where toBeTested(x) and not x.isUnknown() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.expected new file mode 100644 index 000000000000..28e7c4313b09 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.expected @@ -0,0 +1,2 @@ +| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:18:5:18 | 1 | +| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:24:5:24 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql new file mode 100644 index 000000000000..4a8cbbd794bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPatField x +where toBeTested(x) and not x.isUnknown() +select x, x.getPat() diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/Cargo.lock b/rust/ql/test/extractor-tests/generated/StructPatFieldList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected index a40c54bd30a2..a52d73ab6c8b 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.expected @@ -1,6 +1 @@ -instances -| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | -getField -| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 0 | gen_struct_pat_field_list.rs:7:15:7:15 | ... | -| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 1 | gen_struct_pat_field_list.rs:7:18:7:18 | ... | -getRestPat +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | getNumberOfFields: | 2 | hasRestPat: | no | diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql index 2d9433fdb809..051b28b07182 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(StructPatFieldList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getField(StructPatFieldList x, int index, StructPatField getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} - -query predicate getRestPat(StructPatFieldList x, RestPat getRestPat) { - toBeTested(x) and not x.isUnknown() and getRestPat = x.getRestPat() -} +from StructPatFieldList x, int getNumberOfFields, string hasRestPat +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfFields = x.getNumberOfFields() and + if x.hasRestPat() then hasRestPat = "yes" else hasRestPat = "no" +select x, "getNumberOfFields:", getNumberOfFields, "hasRestPat:", hasRestPat diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected new file mode 100644 index 000000000000..c2d445a5a3f0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 0 | gen_struct_pat_field_list.rs:7:15:7:15 | ... | +| gen_struct_pat_field_list.rs:7:13:7:20 | StructPatFieldList | 1 | gen_struct_pat_field_list.rs:7:18:7:18 | ... | diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql new file mode 100644 index 000000000000..65e6d34b0f8f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPatFieldList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.expected b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.ql b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.ql new file mode 100644 index 000000000000..6ba00441e92d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getRestPat.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from StructPatFieldList x +where toBeTested(x) and not x.isUnknown() +select x, x.getRestPat() diff --git a/rust/ql/test/extractor-tests/generated/TokenTree/Cargo.lock b/rust/ql/test/extractor-tests/generated/TokenTree/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TokenTree/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.ql b/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.ql index 9e4496fc7182..299c1e48b6bc 100644 --- a/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.ql +++ b/rust/ql/test/extractor-tests/generated/TokenTree/TokenTree.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(TokenTree x) { toBeTested(x) and not x.isUnknown() } +from TokenTree x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.expected b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.expected index 526d4057b3cb..123a2da6653f 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.expected @@ -1,8 +1,2 @@ -instances -| gen_trait.rs:4:20:8:1 | AssocItemList | -| gen_trait.rs:10:56:10:57 | AssocItemList | -getAssocItem -| gen_trait.rs:4:20:8:1 | AssocItemList | 0 | gen_trait.rs:5:3:5:18 | type Frobinator | -| gen_trait.rs:4:20:8:1 | AssocItemList | 1 | gen_trait.rs:6:3:6:20 | type Result | -| gen_trait.rs:4:20:8:1 | AssocItemList | 2 | gen_trait.rs:7:3:7:72 | fn frobinize_with | -getAttr +| gen_trait.rs:4:20:8:1 | AssocItemList | getNumberOfAssocItems: | 3 | getNumberOfAttrs: | 0 | +| gen_trait.rs:10:56:10:57 | AssocItemList | getNumberOfAssocItems: | 0 | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.ql b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.ql index bbef174971fe..eebd261c6bd8 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(AssocItemList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAssocItem(AssocItemList x, int index, AssocItem getAssocItem) { - toBeTested(x) and not x.isUnknown() and getAssocItem = x.getAssocItem(index) -} - -query predicate getAttr(AssocItemList x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from AssocItemList x, int getNumberOfAssocItems, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAssocItems = x.getNumberOfAssocItems() and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "getNumberOfAssocItems:", getNumberOfAssocItems, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected new file mode 100644 index 000000000000..a8b21eb84661 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.expected @@ -0,0 +1,3 @@ +| gen_trait.rs:4:20:8:1 | AssocItemList | 0 | gen_trait.rs:5:3:5:18 | type Frobinator | +| gen_trait.rs:4:20:8:1 | AssocItemList | 1 | gen_trait.rs:6:3:6:20 | type Result | +| gen_trait.rs:4:20:8:1 | AssocItemList | 2 | gen_trait.rs:7:3:7:72 | fn frobinize_with | diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql new file mode 100644 index 000000000000..01d36f7cc54a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAssocItem.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocItemList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAssocItem(index) diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAttr.expected b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql new file mode 100644 index 000000000000..72b5f3667371 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/AssocItemList_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from AssocItemList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Trait/Cargo.lock b/rust/ql/test/extractor-tests/generated/Trait/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Trait/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected index ff60871f40b3..de921f246b43 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.expected +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.expected @@ -1,24 +1,2 @@ -instances -| gen_trait.rs:3:1:8:1 | trait Frobinizable | isAuto: | no | isUnsafe: | no | -| gen_trait.rs:10:1:10:57 | trait Foo | isAuto: | no | isUnsafe: | no | -getExtendedCanonicalPath -| gen_trait.rs:3:1:8:1 | trait Frobinizable | crate::gen_trait::Frobinizable | -| gen_trait.rs:10:1:10:57 | trait Foo | crate::gen_trait::Foo | -getCrateOrigin -| gen_trait.rs:3:1:8:1 | trait Frobinizable | repo::test | -| gen_trait.rs:10:1:10:57 | trait Foo | repo::test | -getAttributeMacroExpansion -getAssocItemList -| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:20:8:1 | AssocItemList | -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:56:10:57 | AssocItemList | -getAttr -getGenericParamList -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:14:10:30 | <...> | -getName -| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:7:4:18 | Frobinizable | -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:11:10:13 | Foo | -getTypeBoundList -getVisibility -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:1:10:3 | Visibility | -getWhereClause -| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:32:10:54 | WhereClause | +| gen_trait.rs:3:1:8:1 | trait Frobinizable | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_trait.rs:10:1:10:57 | trait Foo | hasExtendedCanonicalPath: | yes | hasCrateOrigin: | yes | hasAttributeMacroExpansion: | no | hasAssocItemList: | yes | getNumberOfAttrs: | 0 | hasGenericParamList: | yes | isAuto: | no | isUnsafe: | no | hasName: | yes | hasTypeBoundList: | no | hasVisibility: | yes | hasWhereClause: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql index 35725fcd5261..2e8173a21aff 100644 --- a/rust/ql/test/extractor-tests/generated/Trait/Trait.ql +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait.ql @@ -2,55 +2,36 @@ import codeql.rust.elements import TestUtils -query predicate instances( - Trait x, string isAuto__label, string isAuto, string isUnsafe__label, string isUnsafe -) { +from + Trait x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, 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 - isAuto__label = "isAuto:" and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) 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 - isUnsafe__label = "isUnsafe:" and - if x.isUnsafe() then isUnsafe = "yes" else isUnsafe = "no" -} - -query predicate getExtendedCanonicalPath(Trait x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Trait x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Trait x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAssocItemList(Trait x, AssocItemList getAssocItemList) { - toBeTested(x) and not x.isUnknown() and getAssocItemList = x.getAssocItemList() -} - -query predicate getAttr(Trait x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(Trait x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Trait x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeBoundList(Trait x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} - -query predicate getVisibility(Trait x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Trait x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + (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, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "hasAssocItemList:", hasAssocItemList, + "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", hasGenericParamList, "isAuto:", + isAuto, "isUnsafe:", isUnsafe, "hasName:", hasName, "hasTypeBoundList:", hasTypeBoundList, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected new file mode 100644 index 000000000000..b60c89c8d3fe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.expected @@ -0,0 +1,2 @@ +| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:20:8:1 | AssocItemList | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:56:10:57 | AssocItemList | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql new file mode 100644 index 000000000000..94a59605021a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAssocItemList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getAssocItemList() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttr.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttr.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttr.ql new file mode 100644 index 000000000000..219303af515b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..9499d03e9ccc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected new file mode 100644 index 000000000000..1e42bb437317 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.expected @@ -0,0 +1,2 @@ +| gen_trait.rs:3:1:8:1 | trait Frobinizable | repo::test | +| gen_trait.rs:10:1:10:57 | trait Foo | repo::test | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql new file mode 100644 index 000000000000..8c2c71a918e4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..6a5e82036739 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.expected @@ -0,0 +1,2 @@ +| gen_trait.rs:3:1:8:1 | trait Frobinizable | crate::gen_trait::Frobinizable | +| gen_trait.rs:10:1:10:57 | trait Foo | crate::gen_trait::Foo | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..5281a18656bd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected new file mode 100644 index 000000000000..ba9e996565f4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.expected @@ -0,0 +1 @@ +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:14:10:30 | <...> | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql new file mode 100644 index 000000000000..db979636892f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected new file mode 100644 index 000000000000..1c087cdea895 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.expected @@ -0,0 +1,2 @@ +| gen_trait.rs:3:1:8:1 | trait Frobinizable | gen_trait.rs:4:7:4:18 | Frobinizable | +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:11:10:13 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.ql new file mode 100644 index 000000000000..eeb7b6f48023 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql new file mode 100644 index 000000000000..f5544da39d35 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected new file mode 100644 index 000000000000..56576624e47f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.expected @@ -0,0 +1 @@ +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:1:10:3 | Visibility | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.ql new file mode 100644 index 000000000000..1405d15127ed --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected new file mode 100644 index 000000000000..d46ac2d04cd9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.expected @@ -0,0 +1 @@ +| gen_trait.rs:10:1:10:57 | trait Foo | gen_trait.rs:10:32:10:54 | WhereClause | diff --git a/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.ql new file mode 100644 index 000000000000..fb7448f81966 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Trait/Trait_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Trait x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/Cargo.lock b/rust/ql/test/extractor-tests/generated/TraitAlias/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected index f8fc16280369..0a5b69dcd5e2 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.expected @@ -1,13 +1 @@ -instances -| gen_trait_alias.rs:7:5:7:26 | TraitAlias | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getGenericParamList -getName -| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:11:7:13 | Foo | -getTypeBoundList -| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:17:7:25 | TypeBoundList | -getVisibility -getWhereClause +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasTypeBoundList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql index 2d65541f50ce..319f65e3730e 100644 --- a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias.ql @@ -2,42 +2,31 @@ import codeql.rust.elements import TestUtils -query predicate instances(TraitAlias x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(TraitAlias x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(TraitAlias x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(TraitAlias x, MacroItems getAttributeMacroExpansion) { +from + TraitAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, + string hasName, string hasTypeBoundList, string hasVisibility, string hasWhereClause +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(TraitAlias x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(TraitAlias x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(TraitAlias x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeBoundList(TraitAlias x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} - -query predicate getVisibility(TraitAlias x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(TraitAlias x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "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, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "hasName:", hasName, "hasTypeBoundList:", + hasTypeBoundList, "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql new file mode 100644 index 000000000000..3ca992de122a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..6a0c43cfc87a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql new file mode 100644 index 000000000000..6f9ccf89262d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..6326e730c331 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql new file mode 100644 index 000000000000..3372d78e89e8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected new file mode 100644 index 000000000000..e0aae353801d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.expected @@ -0,0 +1 @@ +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:11:7:13 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql new file mode 100644 index 000000000000..2b64f27e19d2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected new file mode 100644 index 000000000000..797921bf4ddc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.expected @@ -0,0 +1 @@ +| gen_trait_alias.rs:7:5:7:26 | TraitAlias | gen_trait_alias.rs:7:17:7:25 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.ql new file mode 100644 index 000000000000..28f7588ec9f6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.ql new file mode 100644 index 000000000000..1dde55e9663f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.ql new file mode 100644 index 000000000000..91e39d5e6464 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TraitAlias/TraitAlias_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TraitAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/TryExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TryExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected index 7bfee39ff2ae..214ca5597ec6 100644 --- a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.expected @@ -1,5 +1 @@ -instances -| gen_try_expr.rs:7:13:7:18 | TryExpr | -getAttr -getExpr -| gen_try_expr.rs:7:13:7:18 | TryExpr | gen_try_expr.rs:7:13:7:17 | foo(...) | +| gen_try_expr.rs:7:13:7:18 | TryExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.ql b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.ql index fc42bca14a93..be3c70a933ce 100644 --- a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.ql +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(TryExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(TryExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(TryExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from TryExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.ql new file mode 100644 index 000000000000..1073bec18600 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TryExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected new file mode 100644 index 000000000000..fb0c80429696 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_try_expr.rs:7:13:7:18 | TryExpr | gen_try_expr.rs:7:13:7:17 | foo(...) | diff --git a/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.ql new file mode 100644 index 000000000000..477a2bb5811e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TryExpr/TryExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TryExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/TupleExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TupleExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.expected b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.expected index 3a35afd6630d..2bd4e57c30ed 100644 --- a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.expected +++ b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.expected @@ -1,9 +1,2 @@ -instances -| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | -| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | -getAttr -getField -| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | 0 | gen_tuple_expr.rs:5:6:5:6 | 1 | -| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | 1 | gen_tuple_expr.rs:5:9:5:13 | "one" | -| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | 0 | gen_tuple_expr.rs:6:6:6:6 | 2 | -| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | 1 | gen_tuple_expr.rs:6:9:6:13 | "two" | +| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | getNumberOfAttrs: | 0 | getNumberOfFields: | 2 | +| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | getNumberOfAttrs: | 0 | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.ql b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.ql index 0b49fca4cee8..573d7936d6c7 100644 --- a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.ql +++ b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(TupleExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(TupleExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getField(TupleExpr x, int index, Expr getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from TupleExpr x, int getNumberOfAttrs, int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + getNumberOfFields = x.getNumberOfFields() +select x, "getNumberOfAttrs:", getNumberOfAttrs, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.ql new file mode 100644 index 000000000000..6736dada82b8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.expected b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.expected new file mode 100644 index 000000000000..11cd1614ccd1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.expected @@ -0,0 +1,4 @@ +| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | 0 | gen_tuple_expr.rs:5:6:5:6 | 1 | +| gen_tuple_expr.rs:5:5:5:14 | TupleExpr | 1 | gen_tuple_expr.rs:5:9:5:13 | "one" | +| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | 0 | gen_tuple_expr.rs:6:6:6:6 | 2 | +| gen_tuple_expr.rs:6:5:6:14 | TupleExpr | 1 | gen_tuple_expr.rs:6:9:6:13 | "two" | diff --git a/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.ql b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.ql new file mode 100644 index 000000000000..79c25f047d05 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleExpr/TupleExpr_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/TupleField/Cargo.lock b/rust/ql/test/extractor-tests/generated/TupleField/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TupleField/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected index 6c653a9c37f4..4c658836ad93 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.expected @@ -1,8 +1,2 @@ -instances -| gen_tuple_field.rs:7:14:7:16 | TupleField | -| gen_tuple_field.rs:7:19:7:24 | TupleField | -getAttr -getTypeRepr -| gen_tuple_field.rs:7:14:7:16 | TupleField | gen_tuple_field.rs:7:14:7:16 | i32 | -| gen_tuple_field.rs:7:19:7:24 | TupleField | gen_tuple_field.rs:7:19:7:24 | String | -getVisibility +| gen_tuple_field.rs:7:14:7:16 | TupleField | getNumberOfAttrs: | 0 | hasTypeRepr: | yes | hasVisibility: | no | +| gen_tuple_field.rs:7:19:7:24 | TupleField | getNumberOfAttrs: | 0 | hasTypeRepr: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.ql b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.ql index 01c15ace3ddf..15401629a602 100644 --- a/rust/ql/test/extractor-tests/generated/TupleField/TupleField.ql +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField.ql @@ -2,16 +2,12 @@ import codeql.rust.elements import TestUtils -query predicate instances(TupleField x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(TupleField x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getTypeRepr(TupleField x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getVisibility(TupleField x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} +from TupleField x, int getNumberOfAttrs, string hasTypeRepr, string hasVisibility +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", + hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getAttr.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getAttr.ql b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getAttr.ql new file mode 100644 index 000000000000..23481ed001ad --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleField x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected new file mode 100644 index 000000000000..31c4849e7a31 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_tuple_field.rs:7:14:7:16 | TupleField | gen_tuple_field.rs:7:14:7:16 | i32 | +| gen_tuple_field.rs:7:19:7:24 | TupleField | gen_tuple_field.rs:7:19:7:24 | String | diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.ql new file mode 100644 index 000000000000..b68e736cec3d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleField x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getVisibility.expected b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getVisibility.ql b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getVisibility.ql new file mode 100644 index 000000000000..457bbd1a57bf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleField/TupleField_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleField x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/Cargo.lock b/rust/ql/test/extractor-tests/generated/TupleFieldList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected index 48940b31c345..5101ab7bf197 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.expected @@ -1,5 +1 @@ -instances -| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | -getField -| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 0 | gen_tuple_field_list.rs:7:14:7:16 | TupleField | -| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 1 | gen_tuple_field_list.rs:7:19:7:24 | TupleField | +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql index 90b61236db33..fd25929804e6 100644 --- a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(TupleFieldList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getField(TupleFieldList x, int index, TupleField getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from TupleFieldList x, int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfFields = x.getNumberOfFields() +select x, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected new file mode 100644 index 000000000000..77b15f1aa42f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.expected @@ -0,0 +1,2 @@ +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 0 | gen_tuple_field_list.rs:7:14:7:16 | TupleField | +| gen_tuple_field_list.rs:7:13:7:25 | TupleFieldList | 1 | gen_tuple_field_list.rs:7:19:7:24 | TupleField | diff --git a/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql new file mode 100644 index 000000000000..8483c03f1d77 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleFieldList/TupleFieldList_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleFieldList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/Cargo.lock b/rust/ql/test/extractor-tests/generated/TuplePat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TuplePat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.expected b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.expected index 8e769296d5fb..d6522bb7bf11 100644 --- a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.expected +++ b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.expected @@ -1,10 +1,2 @@ -instances -| gen_tuple_pat.rs:5:9:5:14 | TuplePat | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | -getField -| gen_tuple_pat.rs:5:9:5:14 | TuplePat | 0 | gen_tuple_pat.rs:5:10:5:10 | x | -| gen_tuple_pat.rs:5:9:5:14 | TuplePat | 1 | gen_tuple_pat.rs:5:13:5:13 | y | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 0 | gen_tuple_pat.rs:6:10:6:10 | a | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 1 | gen_tuple_pat.rs:6:13:6:13 | b | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 2 | gen_tuple_pat.rs:6:16:6:17 | .. | -| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 3 | gen_tuple_pat.rs:6:21:6:21 | z | +| gen_tuple_pat.rs:5:9:5:14 | TuplePat | getNumberOfFields: | 2 | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | getNumberOfFields: | 4 | diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.ql b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.ql index 1692fe6758c9..6e65f167985f 100644 --- a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.ql +++ b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(TuplePat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getField(TuplePat x, int index, Pat getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from TuplePat x, int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfFields = x.getNumberOfFields() +select x, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected new file mode 100644 index 000000000000..78e00f39c92b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.expected @@ -0,0 +1,6 @@ +| gen_tuple_pat.rs:5:9:5:14 | TuplePat | 0 | gen_tuple_pat.rs:5:10:5:10 | x | +| gen_tuple_pat.rs:5:9:5:14 | TuplePat | 1 | gen_tuple_pat.rs:5:13:5:13 | y | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 0 | gen_tuple_pat.rs:6:10:6:10 | a | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 1 | gen_tuple_pat.rs:6:13:6:13 | b | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 2 | gen_tuple_pat.rs:6:16:6:17 | .. | +| gen_tuple_pat.rs:6:9:6:22 | TuplePat | 3 | gen_tuple_pat.rs:6:21:6:21 | z | diff --git a/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.ql b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.ql new file mode 100644 index 000000000000..5366bc445f1f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TuplePat/TuplePat_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TuplePat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/TupleStructPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected index c5ce2e2640a0..9e9de534b1e8 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.expected @@ -1,18 +1,3 @@ -instances -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | -getResolvedPath -getResolvedCrateOrigin -getPath -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | -getField -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | -| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | -| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | -| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 4 | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 2 | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | getNumberOfFields: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql index 408c892ea3cd..af59101fe752 100644 --- a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat.ql @@ -2,20 +2,19 @@ import codeql.rust.elements import TestUtils -query predicate instances(TupleStructPat x) { toBeTested(x) and not x.isUnknown() } - -query predicate getResolvedPath(TupleStructPat x, string getResolvedPath) { - toBeTested(x) and not x.isUnknown() and getResolvedPath = x.getResolvedPath() -} - -query predicate getResolvedCrateOrigin(TupleStructPat x, string getResolvedCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getResolvedCrateOrigin = x.getResolvedCrateOrigin() -} - -query predicate getPath(TupleStructPat x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getField(TupleStructPat x, int index, Pat getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from + TupleStructPat x, string hasResolvedPath, string hasResolvedCrateOrigin, string hasPath, + int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasResolvedPath() then hasResolvedPath = "yes" else hasResolvedPath = "no") and + ( + if x.hasResolvedCrateOrigin() + then hasResolvedCrateOrigin = "yes" + else hasResolvedCrateOrigin = "no" + ) and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + getNumberOfFields = x.getNumberOfFields() +select x, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, + "hasPath:", hasPath, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected new file mode 100644 index 000000000000..21e1a7019633 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.expected @@ -0,0 +1,7 @@ +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:6:15:6:17 | "a" | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:6:20:6:20 | 1 | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 2 | gen_tuple_struct_pat.rs:6:23:6:23 | 2 | +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | 3 | gen_tuple_struct_pat.rs:6:26:6:26 | 3 | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:7:15:7:16 | .. | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | 1 | gen_tuple_struct_pat.rs:7:19:7:19 | 3 | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | 0 | gen_tuple_struct_pat.rs:8:15:8:16 | .. | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql new file mode 100644 index 000000000000..b3919608ce87 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected new file mode 100644 index 000000000000..34f30ed8ae14 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.expected @@ -0,0 +1,3 @@ +| gen_tuple_struct_pat.rs:6:9:6:27 | Tuple(...) | gen_tuple_struct_pat.rs:6:9:6:13 | Tuple | +| gen_tuple_struct_pat.rs:7:9:7:20 | Tuple(...) | gen_tuple_struct_pat.rs:7:9:7:13 | Tuple | +| gen_tuple_struct_pat.rs:8:9:8:17 | Tuple(...) | gen_tuple_struct_pat.rs:8:9:8:13 | Tuple | diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql new file mode 100644 index 000000000000..bc5318bc1036 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql new file mode 100644 index 000000000000..144302946a94 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql new file mode 100644 index 000000000000..561c303d9682 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleStructPat/TupleStructPat_getResolvedPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleStructPat x +where toBeTested(x) and not x.isUnknown() +select x, x.getResolvedPath() diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/Cargo.lock b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected index 1682ee89d08a..f3dcaadb7a2b 100644 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.expected @@ -1,6 +1,2 @@ -instances -| gen_tuple_type_repr.rs:3:30:3:31 | TupleTypeRepr | -| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | -getField -| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 0 | gen_tuple_type_repr.rs:7:13:7:15 | i32 | -| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 1 | gen_tuple_type_repr.rs:7:18:7:23 | String | +| gen_tuple_type_repr.rs:3:30:3:31 | TupleTypeRepr | getNumberOfFields: | 0 | +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | getNumberOfFields: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql index 6e0cbbe65fe4..79bf87b93a6c 100644 --- a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(TupleTypeRepr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getField(TupleTypeRepr x, int index, TypeRepr getField) { - toBeTested(x) and not x.isUnknown() and getField = x.getField(index) -} +from TupleTypeRepr x, int getNumberOfFields +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfFields = x.getNumberOfFields() +select x, "getNumberOfFields:", getNumberOfFields diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected new file mode 100644 index 000000000000..c4d5db977c54 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.expected @@ -0,0 +1,2 @@ +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 0 | gen_tuple_type_repr.rs:7:13:7:15 | i32 | +| gen_tuple_type_repr.rs:7:12:7:24 | TupleTypeRepr | 1 | gen_tuple_type_repr.rs:7:18:7:23 | String | diff --git a/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql new file mode 100644 index 000000000000..3f11b1aa4152 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TupleTypeRepr/TupleTypeRepr_getField.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TupleTypeRepr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/Cargo.lock b/rust/ql/test/extractor-tests/generated/TypeAlias/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected index b9b584857525..8fbbae07cc3e 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.expected @@ -1,16 +1,2 @@ -instances -| gen_type_alias.rs:4:5:5:26 | type Point | isDefault: | no | -| gen_type_alias.rs:8:9:8:20 | type Output | isDefault: | no | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getGenericParamList -getName -| gen_type_alias.rs:4:5:5:26 | type Point | gen_type_alias.rs:5:10:5:14 | Point | -| gen_type_alias.rs:8:9:8:20 | type Output | gen_type_alias.rs:8:14:8:19 | Output | -getTypeRepr -| gen_type_alias.rs:4:5:5:26 | type Point | gen_type_alias.rs:5:18:5:25 | TupleTypeRepr | -getTypeBoundList -getVisibility -getWhereClause +| gen_type_alias.rs:4:5:5:26 | type Point | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | yes | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | +| gen_type_alias.rs:8:9:8:20 | type Output | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasGenericParamList: | no | isDefault: | no | hasName: | yes | hasTypeRepr: | no | hasTypeBoundList: | no | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql index 014bd119d331..dd8183b6d410 100644 --- a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias.ql @@ -2,51 +2,35 @@ import codeql.rust.elements import TestUtils -query predicate instances(TypeAlias x, string isDefault__label, string isDefault) { +from + TypeAlias x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfAttrs, string hasGenericParamList, + string isDefault, string hasName, string hasTypeRepr, string hasTypeBoundList, + string hasVisibility, string hasWhereClause +where toBeTested(x) and not x.isUnknown() and - isDefault__label = "isDefault:" and - if x.isDefault() then isDefault = "yes" else isDefault = "no" -} - -query predicate getExtendedCanonicalPath(TypeAlias x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(TypeAlias x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(TypeAlias x, MacroItems getAttributeMacroExpansion) { - toBeTested(x) and - not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(TypeAlias x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(TypeAlias x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(TypeAlias x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeRepr(TypeAlias x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getTypeBoundList(TypeAlias x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} - -query predicate getVisibility(TypeAlias x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(TypeAlias x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) 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.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "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, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasGenericParamList:", hasGenericParamList, "isDefault:", isDefault, "hasName:", hasName, + "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList, "hasVisibility:", + hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql new file mode 100644 index 000000000000..2eabe53ca6d8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..62be0d7b8291 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql new file mode 100644 index 000000000000..9a4de0cd9b85 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..1f99c7595567 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql new file mode 100644 index 000000000000..9742b1a9bb7f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.expected new file mode 100644 index 000000000000..57aefa9327d3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.expected @@ -0,0 +1,2 @@ +| gen_type_alias.rs:4:5:5:26 | type Point | gen_type_alias.rs:5:10:5:14 | Point | +| gen_type_alias.rs:8:9:8:20 | type Output | gen_type_alias.rs:8:14:8:19 | Output | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql new file mode 100644 index 000000000000..95b90c69e391 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.ql new file mode 100644 index 000000000000..6988a3baf7d4 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.expected new file mode 100644 index 000000000000..a15078cc57d8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_type_alias.rs:4:5:5:26 | type Point | gen_type_alias.rs:5:18:5:25 | TupleTypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.ql new file mode 100644 index 000000000000..82be0a670ec0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql new file mode 100644 index 000000000000..78bb19e876a1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql new file mode 100644 index 000000000000..becbdac30165 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeAlias/TypeAlias_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeAlias x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/Cargo.lock b/rust/ql/test/extractor-tests/generated/TypeArg/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TypeArg/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected index e628c7daee7f..d81b48448fa4 100644 --- a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.expected @@ -1,4 +1 @@ -instances -| gen_type_arg.rs:7:11:7:13 | TypeArg | -getTypeRepr -| gen_type_arg.rs:7:11:7:13 | TypeArg | gen_type_arg.rs:7:11:7:13 | u32 | +| gen_type_arg.rs:7:11:7:13 | TypeArg | hasTypeRepr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.ql b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.ql index 57178cd8502c..03464c382182 100644 --- a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.ql +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(TypeArg x) { toBeTested(x) and not x.isUnknown() } - -query predicate getTypeRepr(TypeArg x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} +from TypeArg x, string hasTypeRepr +where + toBeTested(x) and + not x.isUnknown() and + if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no" +select x, "hasTypeRepr:", hasTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected new file mode 100644 index 000000000000..f1bb3e460e18 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_type_arg.rs:7:11:7:13 | TypeArg | gen_type_arg.rs:7:11:7:13 | u32 | diff --git a/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.ql new file mode 100644 index 000000000000..d1a4956f460f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeArg/TypeArg_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeArg x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/Cargo.lock b/rust/ql/test/extractor-tests/generated/TypeBound/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TypeBound/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected index e0ed9fcdd6ca..40e38f919ceb 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.expected @@ -1,6 +1 @@ -instances -| gen_type_bound.rs:7:15:7:19 | TypeBound | isAsync: | no | isConst: | no | -getLifetime -getTypeRepr -| gen_type_bound.rs:7:15:7:19 | TypeBound | gen_type_bound.rs:7:15:7:19 | Debug | -getUseBoundGenericArgs +| gen_type_bound.rs:7:15:7:19 | TypeBound | isAsync: | no | isConst: | no | hasLifetime: | no | hasTypeRepr: | yes | hasUseBoundGenericArgs: | no | diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql index e4b2b6127dc3..efd099905db9 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound.ql @@ -2,25 +2,18 @@ import codeql.rust.elements import TestUtils -query predicate instances( - TypeBound x, string isAsync__label, string isAsync, string isConst__label, string isConst -) { +from + TypeBound x, string isAsync, string isConst, string hasLifetime, string hasTypeRepr, + string hasUseBoundGenericArgs +where toBeTested(x) and not x.isUnknown() and - isAsync__label = "isAsync:" and (if x.isAsync() then isAsync = "yes" else isAsync = "no") and - isConst__label = "isConst:" and - if x.isConst() then isConst = "yes" else isConst = "no" -} - -query predicate getLifetime(TypeBound x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} - -query predicate getTypeRepr(TypeBound x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getUseBoundGenericArgs(TypeBound x, UseBoundGenericArgs getUseBoundGenericArgs) { - toBeTested(x) and not x.isUnknown() and getUseBoundGenericArgs = x.getUseBoundGenericArgs() -} + (if x.isConst() then isConst = "yes" else isConst = "no") and + (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasUseBoundGenericArgs() + then hasUseBoundGenericArgs = "yes" + else hasUseBoundGenericArgs = "no" +select x, "isAsync:", isAsync, "isConst:", isConst, "hasLifetime:", hasLifetime, "hasTypeRepr:", + hasTypeRepr, "hasUseBoundGenericArgs:", hasUseBoundGenericArgs diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql new file mode 100644 index 000000000000..267ed0dd7ae8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeBound x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected new file mode 100644 index 000000000000..7d9cf96f2ad2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.expected @@ -0,0 +1 @@ +| gen_type_bound.rs:7:15:7:19 | TypeBound | gen_type_bound.rs:7:15:7:19 | Debug | diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.ql new file mode 100644 index 000000000000..d8ed0d052568 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeBound x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.ql b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.ql new file mode 100644 index 000000000000..a265464633ee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getUseBoundGenericArgs.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeBound x +where toBeTested(x) and not x.isUnknown() +select x, x.getUseBoundGenericArgs() diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/Cargo.lock b/rust/ql/test/extractor-tests/generated/TypeBoundList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected index e195424d0979..3044718de476 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.expected @@ -1,5 +1 @@ -instances -| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | -getBound -| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 0 | gen_type_bound_list.rs:7:15:7:19 | TypeBound | -| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 1 | gen_type_bound_list.rs:7:23:7:27 | TypeBound | +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | getNumberOfBounds: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql index 8af2507e772b..c5da29061531 100644 --- a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(TypeBoundList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getBound(TypeBoundList x, int index, TypeBound getBound) { - toBeTested(x) and not x.isUnknown() and getBound = x.getBound(index) -} +from TypeBoundList x, int getNumberOfBounds +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfBounds = x.getNumberOfBounds() +select x, "getNumberOfBounds:", getNumberOfBounds diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected new file mode 100644 index 000000000000..7106e5ae6649 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.expected @@ -0,0 +1,2 @@ +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 0 | gen_type_bound_list.rs:7:15:7:19 | TypeBound | +| gen_type_bound_list.rs:7:15:7:27 | TypeBoundList | 1 | gen_type_bound_list.rs:7:23:7:27 | TypeBound | diff --git a/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.ql b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.ql new file mode 100644 index 000000000000..d06ceb53fae9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeBoundList/TypeBoundList_getBound.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeBoundList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getBound(index) diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/Cargo.lock b/rust/ql/test/extractor-tests/generated/TypeParam/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/TypeParam/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected index c856ca9c69e2..1ba76dc60d35 100644 --- a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.expected @@ -1,7 +1 @@ -instances -| gen_type_param.rs:7:12:7:12 | T | -getAttr -getDefaultType -getName -| gen_type_param.rs:7:12:7:12 | T | gen_type_param.rs:7:12:7:12 | T | -getTypeBoundList +| gen_type_param.rs:7:12:7:12 | T | getNumberOfAttrs: | 0 | hasDefaultType: | no | hasName: | yes | hasTypeBoundList: | no | diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.ql b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.ql index 61f38aab8352..d81ec72681cd 100644 --- a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.ql +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam.ql @@ -2,20 +2,14 @@ import codeql.rust.elements import TestUtils -query predicate instances(TypeParam x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(TypeParam x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getDefaultType(TypeParam x, TypeRepr getDefaultType) { - toBeTested(x) and not x.isUnknown() and getDefaultType = x.getDefaultType() -} - -query predicate getName(TypeParam x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getTypeBoundList(TypeParam x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from + TypeParam x, int getNumberOfAttrs, string hasDefaultType, string hasName, string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasDefaultType() then hasDefaultType = "yes" else hasDefaultType = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefaultType:", hasDefaultType, "hasName:", + hasName, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.ql b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.ql new file mode 100644 index 000000000000..fdbefc1b5bdb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeParam x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.ql b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.ql new file mode 100644 index 000000000000..8afef31826af --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getDefaultType.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getDefaultType() diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected new file mode 100644 index 000000000000..a51942c95c28 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.expected @@ -0,0 +1 @@ +| gen_type_param.rs:7:12:7:12 | T | gen_type_param.rs:7:12:7:12 | T | diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.ql b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.ql new file mode 100644 index 000000000000..37b18a8b39c5 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql new file mode 100644 index 000000000000..b496a7793a6d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/TypeParam/TypeParam_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from TypeParam x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected index b4ff46aa5d08..ea89e8b29b4e 100644 --- a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected +++ b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.expected @@ -1,3 +1 @@ -instances -| gen_underscore_expr.rs:5:5:5:5 | _ | -getAttr +| gen_underscore_expr.rs:5:5:5:5 | _ | getNumberOfAttrs: | 0 | diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql index 13324f21bf24..1dc793e9d6e8 100644 --- a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql +++ b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(UnderscoreExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(UnderscoreExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} +from UnderscoreExpr x, int getNumberOfAttrs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfAttrs = x.getNumberOfAttrs() +select x, "getNumberOfAttrs:", getNumberOfAttrs diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql new file mode 100644 index 000000000000..8b2b16e2904f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UnderscoreExpr/UnderscoreExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UnderscoreExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.expected b/rust/ql/test/extractor-tests/generated/Union/Union.expected index 110643aeac99..22d383104ea6 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.expected +++ b/rust/ql/test/extractor-tests/generated/Union/Union.expected @@ -1,14 +1 @@ -instances -| gen_union.rs:4:5:7:32 | union U | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getDeriveMacroExpansion -getAttr -getGenericParamList -getName -| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:11:7:11 | U | -getStructFieldList -| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:13:7:32 | StructFieldList | -getVisibility -getWhereClause +| gen_union.rs:4:5:7:32 | union U | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfDeriveMacroExpansions: | 0 | getNumberOfAttrs: | 0 | hasGenericParamList: | no | hasName: | yes | hasStructFieldList: | yes | hasVisibility: | no | hasWhereClause: | no | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union.ql b/rust/ql/test/extractor-tests/generated/Union/Union.ql index 147a8fca09e8..a67dee68ec19 100644 --- a/rust/ql/test/extractor-tests/generated/Union/Union.ql +++ b/rust/ql/test/extractor-tests/generated/Union/Union.ql @@ -2,46 +2,34 @@ import codeql.rust.elements import TestUtils -query predicate instances(Union x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Union x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Union x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Union x, MacroItems getAttributeMacroExpansion) { +from + Union x, string hasExtendedCanonicalPath, string hasCrateOrigin, + string hasAttributeMacroExpansion, int getNumberOfDeriveMacroExpansions, int getNumberOfAttrs, + string hasGenericParamList, string hasName, string hasStructFieldList, string hasVisibility, + string hasWhereClause +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getDeriveMacroExpansion(Union x, int index, MacroItems getDeriveMacroExpansion) { - toBeTested(x) and not x.isUnknown() and getDeriveMacroExpansion = x.getDeriveMacroExpansion(index) -} - -query predicate getAttr(Union x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getGenericParamList(Union x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getName(Union x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getStructFieldList(Union x, StructFieldList getStructFieldList) { - toBeTested(x) and not x.isUnknown() and getStructFieldList = x.getStructFieldList() -} - -query predicate getVisibility(Union x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} - -query predicate getWhereClause(Union x, WhereClause getWhereClause) { - toBeTested(x) and not x.isUnknown() and getWhereClause = x.getWhereClause() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfDeriveMacroExpansions = x.getNumberOfDeriveMacroExpansions() and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasStructFieldList() then hasStructFieldList = "yes" else hasStructFieldList = "no") and + (if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no") and + if x.hasWhereClause() then hasWhereClause = "yes" else hasWhereClause = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfDeriveMacroExpansions:", + getNumberOfDeriveMacroExpansions, "getNumberOfAttrs:", getNumberOfAttrs, "hasGenericParamList:", + hasGenericParamList, "hasName:", hasName, "hasStructFieldList:", hasStructFieldList, + "hasVisibility:", hasVisibility, "hasWhereClause:", hasWhereClause diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getAttr.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getAttr.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getAttr.ql new file mode 100644 index 000000000000..a4ae6761d233 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..3edc4b71aa39 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getCrateOrigin.ql new file mode 100644 index 000000000000..fdbd56d9e88f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.ql new file mode 100644 index 000000000000..1851791caefe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getDeriveMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getDeriveMacroExpansion(index) diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..fb20efa8f29e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getGenericParamList.ql new file mode 100644 index 000000000000..e9ba2bbeef6d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected new file mode 100644 index 000000000000..02b0d8ebc8cb --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getName.expected @@ -0,0 +1 @@ +| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:11:7:11 | U | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getName.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getName.ql new file mode 100644 index 000000000000..e452a2ff63e1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected new file mode 100644 index 000000000000..3613a0fcb381 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.expected @@ -0,0 +1 @@ +| gen_union.rs:4:5:7:32 | union U | gen_union.rs:7:13:7:32 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.ql new file mode 100644 index 000000000000..2afeaa6c3f17 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getStructFieldList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getStructFieldList() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getVisibility.ql new file mode 100644 index 000000000000..5b1688250a51 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getWhereClause.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getWhereClause.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getWhereClause.ql b/rust/ql/test/extractor-tests/generated/Union/Union_getWhereClause.ql new file mode 100644 index 000000000000..083aea2ba017 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Union/Union_getWhereClause.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Union x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhereClause() diff --git a/rust/ql/test/extractor-tests/generated/Use/Cargo.lock b/rust/ql/test/extractor-tests/generated/Use/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Use/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.expected b/rust/ql/test/extractor-tests/generated/Use/Use.expected index 23057c691dcb..e016b067371d 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.expected +++ b/rust/ql/test/extractor-tests/generated/Use/Use.expected @@ -1,9 +1 @@ -instances -| gen_use.rs:4:5:5:34 | use ...::HashMap | -getExtendedCanonicalPath -getCrateOrigin -getAttributeMacroExpansion -getAttr -getUseTree -| gen_use.rs:4:5:5:34 | use ...::HashMap | gen_use.rs:5:9:5:33 | ...::HashMap | -getVisibility +| gen_use.rs:4:5:5:34 | use ...::HashMap | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | hasAttributeMacroExpansion: | no | getNumberOfAttrs: | 0 | hasUseTree: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Use/Use.ql b/rust/ql/test/extractor-tests/generated/Use/Use.ql index bfce3bcc89c4..9dbf23d628a4 100644 --- a/rust/ql/test/extractor-tests/generated/Use/Use.ql +++ b/rust/ql/test/extractor-tests/generated/Use/Use.ql @@ -2,30 +2,26 @@ import codeql.rust.elements import TestUtils -query predicate instances(Use x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Use x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Use x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttributeMacroExpansion(Use x, MacroItems getAttributeMacroExpansion) { +from + Use x, string hasExtendedCanonicalPath, string hasCrateOrigin, string hasAttributeMacroExpansion, + int getNumberOfAttrs, string hasUseTree, string hasVisibility +where toBeTested(x) and not x.isUnknown() and - getAttributeMacroExpansion = x.getAttributeMacroExpansion() -} - -query predicate getAttr(Use x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getUseTree(Use x, UseTree getUseTree) { - toBeTested(x) and not x.isUnknown() and getUseTree = x.getUseTree() -} - -query predicate getVisibility(Use x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + ( + if x.hasAttributeMacroExpansion() + then hasAttributeMacroExpansion = "yes" + else hasAttributeMacroExpansion = "no" + ) and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasUseTree() then hasUseTree = "yes" else hasUseTree = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "hasAttributeMacroExpansion:", hasAttributeMacroExpansion, "getNumberOfAttrs:", getNumberOfAttrs, + "hasUseTree:", hasUseTree, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getAttr.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getAttr.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getAttr.ql new file mode 100644 index 000000000000..35b975fa0e64 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql new file mode 100644 index 000000000000..1b83be279867 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getAttributeMacroExpansion.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttributeMacroExpansion() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getCrateOrigin.ql new file mode 100644 index 000000000000..8e90afcc335d --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..64c633c6c7d1 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected new file mode 100644 index 000000000000..81b2c2c8ad35 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.expected @@ -0,0 +1 @@ +| gen_use.rs:4:5:5:34 | use ...::HashMap | gen_use.rs:5:9:5:33 | ...::HashMap | diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.ql new file mode 100644 index 000000000000..863d1617d409 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getUseTree.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getUseTree() diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Use/Use_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Use/Use_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Use/Use_getVisibility.ql new file mode 100644 index 000000000000..122499de5818 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Use/Use_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Use x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/Cargo.lock b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected index 6bd467ca708c..3ea69e78251e 100644 --- a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.expected @@ -1,6 +1 @@ -instances -| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | -getUseBoundGenericArg -| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 0 | gen_use_bound_generic_args.rs:7:63:7:64 | 'a | -| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 1 | gen_use_bound_generic_args.rs:7:67:7:67 | T | -| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 2 | gen_use_bound_generic_args.rs:7:70:7:70 | N | +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | getNumberOfUseBoundGenericArgs: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql index 7147be569b98..5100891c77a7 100644 --- a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs.ql @@ -2,10 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(UseBoundGenericArgs x) { toBeTested(x) and not x.isUnknown() } - -query predicate getUseBoundGenericArg( - UseBoundGenericArgs x, int index, UseBoundGenericArg getUseBoundGenericArg -) { - toBeTested(x) and not x.isUnknown() and getUseBoundGenericArg = x.getUseBoundGenericArg(index) -} +from UseBoundGenericArgs x, int getNumberOfUseBoundGenericArgs +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfUseBoundGenericArgs = x.getNumberOfUseBoundGenericArgs() +select x, "getNumberOfUseBoundGenericArgs:", getNumberOfUseBoundGenericArgs diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected new file mode 100644 index 000000000000..9cae2694f993 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.expected @@ -0,0 +1,3 @@ +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 0 | gen_use_bound_generic_args.rs:7:63:7:64 | 'a | +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 1 | gen_use_bound_generic_args.rs:7:67:7:67 | T | +| gen_use_bound_generic_args.rs:7:62:7:71 | UseBoundGenericArgs | 2 | gen_use_bound_generic_args.rs:7:70:7:70 | N | diff --git a/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql new file mode 100644 index 000000000000..794bf615b049 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseBoundGenericArgs/UseBoundGenericArgs_getUseBoundGenericArg.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseBoundGenericArgs x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getUseBoundGenericArg(index) diff --git a/rust/ql/test/extractor-tests/generated/UseTree/Cargo.lock b/rust/ql/test/extractor-tests/generated/UseTree/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/UseTree/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected index 5e59c0c9f834..ac5d1b772957 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected @@ -1,20 +1,7 @@ -instances -| gen_use_tree.rs:5:9:5:33 | ...::HashMap | isGlob: | no | -| gen_use_tree.rs:6:9:6:27 | ...::collections::* | isGlob: | yes | -| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | isGlob: | no | -| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | isGlob: | no | -| gen_use_tree.rs:8:28:8:31 | self | isGlob: | no | -| gen_use_tree.rs:8:34:8:40 | HashMap | isGlob: | no | -| gen_use_tree.rs:8:43:8:49 | HashSet | isGlob: | no | -getPath -| gen_use_tree.rs:5:9:5:33 | ...::HashMap | gen_use_tree.rs:5:9:5:33 | ...::HashMap | -| gen_use_tree.rs:6:9:6:27 | ...::collections::* | gen_use_tree.rs:6:9:6:24 | ...::collections | -| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:9:7:33 | ...::HashMap | -| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:9:8:24 | ...::collections | -| gen_use_tree.rs:8:28:8:31 | self | gen_use_tree.rs:8:28:8:31 | self | -| gen_use_tree.rs:8:34:8:40 | HashMap | gen_use_tree.rs:8:34:8:40 | HashMap | -| gen_use_tree.rs:8:43:8:49 | HashSet | gen_use_tree.rs:8:43:8:49 | HashSet | -getRename -| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:35:7:46 | Rename | -getUseTreeList -| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:27:8:50 | UseTreeList | +| gen_use_tree.rs:5:9:5:33 | ...::HashMap | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:6:9:6:27 | ...::collections::* | isGlob: | yes | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | isGlob: | no | hasPath: | yes | hasRename: | yes | hasUseTreeList: | no | +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | yes | +| gen_use_tree.rs:8:28:8:31 | self | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:8:34:8:40 | HashMap | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:8:43:8:49 | HashSet | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.ql b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.ql index 5f4c010c7e44..f42948770432 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.ql +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.ql @@ -2,21 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(UseTree x, string isGlob__label, string isGlob) { +from UseTree x, string isGlob, string hasPath, string hasRename, string hasUseTreeList +where toBeTested(x) and not x.isUnknown() and - isGlob__label = "isGlob:" and - if x.isGlob() then isGlob = "yes" else isGlob = "no" -} - -query predicate getPath(UseTree x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} - -query predicate getRename(UseTree x, Rename getRename) { - toBeTested(x) and not x.isUnknown() and getRename = x.getRename() -} - -query predicate getUseTreeList(UseTree x, UseTreeList getUseTreeList) { - toBeTested(x) and not x.isUnknown() and getUseTreeList = x.getUseTreeList() -} + (if x.isGlob() then isGlob = "yes" else isGlob = "no") and + (if x.hasPath() then hasPath = "yes" else hasPath = "no") and + (if x.hasRename() then hasRename = "yes" else hasRename = "no") and + if x.hasUseTreeList() then hasUseTreeList = "yes" else hasUseTreeList = "no" +select x, "isGlob:", isGlob, "hasPath:", hasPath, "hasRename:", hasRename, "hasUseTreeList:", + hasUseTreeList diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected new file mode 100644 index 000000000000..b6164b653422 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected @@ -0,0 +1,7 @@ +| gen_use_tree.rs:5:9:5:33 | ...::HashMap | gen_use_tree.rs:5:9:5:33 | ...::HashMap | +| gen_use_tree.rs:6:9:6:27 | ...::collections::* | gen_use_tree.rs:6:9:6:24 | ...::collections | +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:9:7:33 | ...::HashMap | +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:9:8:24 | ...::collections | +| gen_use_tree.rs:8:28:8:31 | self | gen_use_tree.rs:8:28:8:31 | self | +| gen_use_tree.rs:8:34:8:40 | HashMap | gen_use_tree.rs:8:34:8:40 | HashMap | +| gen_use_tree.rs:8:43:8:49 | HashSet | gen_use_tree.rs:8:43:8:49 | HashSet | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.ql b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.ql new file mode 100644 index 000000000000..74f892d46f88 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseTree x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected new file mode 100644 index 000000000000..77c4b31a86a9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected @@ -0,0 +1 @@ +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:35:7:46 | Rename | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.ql b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.ql new file mode 100644 index 000000000000..754d167eefdf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseTree x +where toBeTested(x) and not x.isUnknown() +select x, x.getRename() diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected new file mode 100644 index 000000000000..547fb0bd37b9 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected @@ -0,0 +1 @@ +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:27:8:50 | UseTreeList | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql new file mode 100644 index 000000000000..5e57b7a6b695 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseTree x +where toBeTested(x) and not x.isUnknown() +select x, x.getUseTreeList() diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/Cargo.lock b/rust/ql/test/extractor-tests/generated/UseTreeList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected index 451bd9daf4a7..1d1bbfd4e14d 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.expected @@ -1,5 +1 @@ -instances -| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | -getUseTree -| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 0 | gen_use_tree_list.rs:7:15:7:16 | fs | -| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 1 | gen_use_tree_list.rs:7:19:7:20 | io | +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | getNumberOfUseTrees: | 2 | diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.ql b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.ql index 5e0058df86d4..ebcfc59a58f8 100644 --- a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.ql +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(UseTreeList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getUseTree(UseTreeList x, int index, UseTree getUseTree) { - toBeTested(x) and not x.isUnknown() and getUseTree = x.getUseTree(index) -} +from UseTreeList x, int getNumberOfUseTrees +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfUseTrees = x.getNumberOfUseTrees() +select x, "getNumberOfUseTrees:", getNumberOfUseTrees diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected new file mode 100644 index 000000000000..1bfef2daee16 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.expected @@ -0,0 +1,2 @@ +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 0 | gen_use_tree_list.rs:7:15:7:16 | fs | +| gen_use_tree_list.rs:7:14:7:21 | UseTreeList | 1 | gen_use_tree_list.rs:7:19:7:20 | io | diff --git a/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql new file mode 100644 index 000000000000..dc7262d7ab5f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from UseTreeList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getUseTree(index) diff --git a/rust/ql/test/extractor-tests/generated/Variant/Cargo.lock b/rust/ql/test/extractor-tests/generated/Variant/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Variant/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected index ad970afe530d..cca0757d4586 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.expected +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.expected @@ -1,16 +1,3 @@ -instances -| gen_variant.rs:7:14:7:14 | A | -| gen_variant.rs:7:17:7:22 | B | -| gen_variant.rs:7:25:7:36 | C | -getExtendedCanonicalPath -getCrateOrigin -getAttr -getDiscriminant -getFieldList -| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:18:7:22 | TupleFieldList | -| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:27:7:36 | StructFieldList | -getName -| gen_variant.rs:7:14:7:14 | A | gen_variant.rs:7:14:7:14 | A | -| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:17:7:17 | B | -| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:25:7:25 | C | -getVisibility +| gen_variant.rs:7:14:7:14 | A | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | no | hasName: | yes | hasVisibility: | no | +| gen_variant.rs:7:17:7:22 | B | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | yes | hasName: | yes | hasVisibility: | no | +| gen_variant.rs:7:25:7:36 | C | hasExtendedCanonicalPath: | no | hasCrateOrigin: | no | getNumberOfAttrs: | 0 | hasDiscriminant: | no | hasFieldList: | yes | hasName: | yes | hasVisibility: | no | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 088f610637a9..a21c0509978c 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -2,32 +2,23 @@ import codeql.rust.elements import TestUtils -query predicate instances(Variant x) { toBeTested(x) and not x.isUnknown() } - -query predicate getExtendedCanonicalPath(Variant x, string getExtendedCanonicalPath) { - toBeTested(x) and not x.isUnknown() and getExtendedCanonicalPath = x.getExtendedCanonicalPath() -} - -query predicate getCrateOrigin(Variant x, string getCrateOrigin) { - toBeTested(x) and not x.isUnknown() and getCrateOrigin = x.getCrateOrigin() -} - -query predicate getAttr(Variant x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getDiscriminant(Variant x, Expr getDiscriminant) { - toBeTested(x) and not x.isUnknown() and getDiscriminant = x.getDiscriminant() -} - -query predicate getFieldList(Variant x, FieldList getFieldList) { - toBeTested(x) and not x.isUnknown() and getFieldList = x.getFieldList() -} - -query predicate getName(Variant x, Name getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getVisibility(Variant x, Visibility getVisibility) { - toBeTested(x) and not x.isUnknown() and getVisibility = x.getVisibility() -} +from + Variant x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, + string hasDiscriminant, string hasFieldList, string hasName, string hasVisibility +where + toBeTested(x) and + not x.isUnknown() and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + (if x.hasDiscriminant() then hasDiscriminant = "yes" else hasDiscriminant = "no") and + (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and + (if x.hasName() then hasName = "yes" else hasName = "no") and + if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "getNumberOfAttrs:", getNumberOfAttrs, "hasDiscriminant:", hasDiscriminant, "hasFieldList:", + hasFieldList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getAttr.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getAttr.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getAttr.ql new file mode 100644 index 000000000000..99972ef847dc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql new file mode 100644 index 000000000000..0acfd9827fee --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql new file mode 100644 index 000000000000..cde11c30887f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getDiscriminant() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql new file mode 100644 index 000000000000..ad8aaf86a5cf --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected new file mode 100644 index 000000000000..9461de62cc6a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.expected @@ -0,0 +1,2 @@ +| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:18:7:22 | TupleFieldList | +| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:27:7:36 | StructFieldList | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.ql new file mode 100644 index 000000000000..e1bae7650bac --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getFieldList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getFieldList() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected new file mode 100644 index 000000000000..87faede2aada --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.expected @@ -0,0 +1,3 @@ +| gen_variant.rs:7:14:7:14 | A | gen_variant.rs:7:14:7:14 | A | +| gen_variant.rs:7:17:7:22 | B | gen_variant.rs:7:17:7:17 | B | +| gen_variant.rs:7:25:7:36 | C | gen_variant.rs:7:25:7:25 | C | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.ql new file mode 100644 index 000000000000..73f4ff33e403 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getVisibility.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getVisibility.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getVisibility.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getVisibility.ql new file mode 100644 index 000000000000..7edb649fbdaa --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getVisibility.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getVisibility() diff --git a/rust/ql/test/extractor-tests/generated/VariantList/Cargo.lock b/rust/ql/test/extractor-tests/generated/VariantList/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/VariantList/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected index 9642b1fe3087..b7b25116f580 100644 --- a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.expected @@ -1,6 +1 @@ -instances -| gen_variant_list.rs:7:12:7:22 | VariantList | -getVariant -| gen_variant_list.rs:7:12:7:22 | VariantList | 0 | gen_variant_list.rs:7:14:7:14 | A | -| gen_variant_list.rs:7:12:7:22 | VariantList | 1 | gen_variant_list.rs:7:17:7:17 | B | -| gen_variant_list.rs:7:12:7:22 | VariantList | 2 | gen_variant_list.rs:7:20:7:20 | C | +| gen_variant_list.rs:7:12:7:22 | VariantList | getNumberOfVariants: | 3 | diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.ql b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.ql index 85ecb0fe4092..213e4d447dc4 100644 --- a/rust/ql/test/extractor-tests/generated/VariantList/VariantList.ql +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(VariantList x) { toBeTested(x) and not x.isUnknown() } - -query predicate getVariant(VariantList x, int index, Variant getVariant) { - toBeTested(x) and not x.isUnknown() and getVariant = x.getVariant(index) -} +from VariantList x, int getNumberOfVariants +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfVariants = x.getNumberOfVariants() +select x, "getNumberOfVariants:", getNumberOfVariants diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected new file mode 100644 index 000000000000..c62dfe004724 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.expected @@ -0,0 +1,3 @@ +| gen_variant_list.rs:7:12:7:22 | VariantList | 0 | gen_variant_list.rs:7:14:7:14 | A | +| gen_variant_list.rs:7:12:7:22 | VariantList | 1 | gen_variant_list.rs:7:17:7:17 | B | +| gen_variant_list.rs:7:12:7:22 | VariantList | 2 | gen_variant_list.rs:7:20:7:20 | C | diff --git a/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.ql b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.ql new file mode 100644 index 000000000000..fe1800104a3f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/VariantList/VariantList_getVariant.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from VariantList x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getVariant(index) diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Cargo.lock b/rust/ql/test/extractor-tests/generated/Visibility/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/Visibility/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected index daae8776ad79..7be919b547e7 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.expected @@ -1,3 +1 @@ -instances -| gen_visibility.rs:7:7:7:9 | Visibility | -getPath +| gen_visibility.rs:7:7:7:9 | Visibility | hasPath: | no | diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.ql b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.ql index 651d0aecb2f3..adf0833c12c6 100644 --- a/rust/ql/test/extractor-tests/generated/Visibility/Visibility.ql +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(Visibility x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPath(Visibility x, Path getPath) { - toBeTested(x) and not x.isUnknown() and getPath = x.getPath() -} +from Visibility x, string hasPath +where + toBeTested(x) and + not x.isUnknown() and + if x.hasPath() then hasPath = "yes" else hasPath = "no" +select x, "hasPath:", hasPath diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility_getPath.expected b/rust/ql/test/extractor-tests/generated/Visibility/Visibility_getPath.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/Visibility/Visibility_getPath.ql b/rust/ql/test/extractor-tests/generated/Visibility/Visibility_getPath.ql new file mode 100644 index 000000000000..0f0b641d2129 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Visibility/Visibility_getPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Visibility x +where toBeTested(x) and not x.isUnknown() +select x, x.getPath() diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/Cargo.lock b/rust/ql/test/extractor-tests/generated/WhereClause/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/WhereClause/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected index 8dbec29fd905..4610fc7dea16 100644 --- a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.expected @@ -1,4 +1 @@ -instances -| gen_where_clause.rs:7:21:7:34 | WhereClause | -getPredicate -| gen_where_clause.rs:7:21:7:34 | WhereClause | 0 | gen_where_clause.rs:7:27:7:34 | WherePred | +| gen_where_clause.rs:7:21:7:34 | WhereClause | getNumberOfPredicates: | 1 | diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.ql b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.ql index 8890de0efaf6..891b8d55fc22 100644 --- a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.ql +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause.ql @@ -2,8 +2,9 @@ import codeql.rust.elements import TestUtils -query predicate instances(WhereClause x) { toBeTested(x) and not x.isUnknown() } - -query predicate getPredicate(WhereClause x, int index, WherePred getPredicate) { - toBeTested(x) and not x.isUnknown() and getPredicate = x.getPredicate(index) -} +from WhereClause x, int getNumberOfPredicates +where + toBeTested(x) and + not x.isUnknown() and + getNumberOfPredicates = x.getNumberOfPredicates() +select x, "getNumberOfPredicates:", getNumberOfPredicates diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected new file mode 100644 index 000000000000..b8fcba86a6a6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.expected @@ -0,0 +1 @@ +| gen_where_clause.rs:7:21:7:34 | WhereClause | 0 | gen_where_clause.rs:7:27:7:34 | WherePred | diff --git a/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.ql b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.ql new file mode 100644 index 000000000000..4b0c8ab7b7dc --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhereClause/WhereClause_getPredicate.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WhereClause x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getPredicate(index) diff --git a/rust/ql/test/extractor-tests/generated/WherePred/Cargo.lock b/rust/ql/test/extractor-tests/generated/WherePred/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/WherePred/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected index 4980b912b860..d2988eb245d1 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.expected @@ -1,11 +1,2 @@ -instances -| gen_where_pred.rs:7:36:7:43 | WherePred | -| gen_where_pred.rs:7:46:7:53 | WherePred | -getGenericParamList -getLifetime -getTypeRepr -| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:36:7:36 | T | -| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:46:7:46 | U | -getTypeBoundList -| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:39:7:43 | TypeBoundList | -| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:49:7:53 | TypeBoundList | +| gen_where_pred.rs:7:36:7:43 | WherePred | hasGenericParamList: | no | hasLifetime: | no | hasTypeRepr: | yes | hasTypeBoundList: | yes | +| gen_where_pred.rs:7:46:7:53 | WherePred | hasGenericParamList: | no | hasLifetime: | no | hasTypeRepr: | yes | hasTypeBoundList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.ql b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.ql index 3d1ecb7339db..a4471e43ef6a 100644 --- a/rust/ql/test/extractor-tests/generated/WherePred/WherePred.ql +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred.ql @@ -2,20 +2,15 @@ import codeql.rust.elements import TestUtils -query predicate instances(WherePred x) { toBeTested(x) and not x.isUnknown() } - -query predicate getGenericParamList(WherePred x, GenericParamList getGenericParamList) { - toBeTested(x) and not x.isUnknown() and getGenericParamList = x.getGenericParamList() -} - -query predicate getLifetime(WherePred x, Lifetime getLifetime) { - toBeTested(x) and not x.isUnknown() and getLifetime = x.getLifetime() -} - -query predicate getTypeRepr(WherePred x, TypeRepr getTypeRepr) { - toBeTested(x) and not x.isUnknown() and getTypeRepr = x.getTypeRepr() -} - -query predicate getTypeBoundList(WherePred x, TypeBoundList getTypeBoundList) { - toBeTested(x) and not x.isUnknown() and getTypeBoundList = x.getTypeBoundList() -} +from + WherePred x, string hasGenericParamList, string hasLifetime, string hasTypeRepr, + string hasTypeBoundList +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasGenericParamList() then hasGenericParamList = "yes" else hasGenericParamList = "no") and + (if x.hasLifetime() then hasLifetime = "yes" else hasLifetime = "no") and + (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and + if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" +select x, "hasGenericParamList:", hasGenericParamList, "hasLifetime:", hasLifetime, "hasTypeRepr:", + hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql new file mode 100644 index 000000000000..ef15cd7f4f8e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getGenericParamList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WherePred x +where toBeTested(x) and not x.isUnknown() +select x, x.getGenericParamList() diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getLifetime.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getLifetime.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql new file mode 100644 index 000000000000..a0bd226ca4fe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getLifetime.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WherePred x +where toBeTested(x) and not x.isUnknown() +select x, x.getLifetime() diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected new file mode 100644 index 000000000000..2b3b7d1172ab --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.expected @@ -0,0 +1,2 @@ +| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:39:7:43 | TypeBoundList | +| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:49:7:53 | TypeBoundList | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql new file mode 100644 index 000000000000..0f269fa91406 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeBoundList.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WherePred x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeBoundList() diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected new file mode 100644 index 000000000000..92c8489eda04 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.expected @@ -0,0 +1,2 @@ +| gen_where_pred.rs:7:36:7:43 | WherePred | gen_where_pred.rs:7:36:7:36 | T | +| gen_where_pred.rs:7:46:7:53 | WherePred | gen_where_pred.rs:7:46:7:46 | U | diff --git a/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.ql b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.ql new file mode 100644 index 000000000000..e1992ba278ec --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WherePred/WherePred_getTypeRepr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WherePred x +where toBeTested(x) and not x.isUnknown() +select x, x.getTypeRepr() diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/WhileExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected index 8ff736a0af0a..547e3e0ad2e6 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.expected @@ -1,8 +1 @@ -instances -| gen_while_expr.rs:7:5:9:5 | while ... { ... } | -getLabel -getLoopBody -| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:18:9:5 | { ... } | -getAttr -getCondition -| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:11:7:16 | ... < ... | +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | hasLabel: | no | hasLoopBody: | yes | getNumberOfAttrs: | 0 | hasCondition: | yes | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql index 67a0dc562ad2..8544014e571a 100644 --- a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr.ql @@ -2,20 +2,13 @@ import codeql.rust.elements import TestUtils -query predicate instances(WhileExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getLabel(WhileExpr x, Label getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getLoopBody(WhileExpr x, BlockExpr getLoopBody) { - toBeTested(x) and not x.isUnknown() and getLoopBody = x.getLoopBody() -} - -query predicate getAttr(WhileExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getCondition(WhileExpr x, Expr getCondition) { - toBeTested(x) and not x.isUnknown() and getCondition = x.getCondition() -} +from WhileExpr x, string hasLabel, string hasLoopBody, int getNumberOfAttrs, string hasCondition +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + (if x.hasLoopBody() then hasLoopBody = "yes" else hasLoopBody = "no") and + getNumberOfAttrs = x.getNumberOfAttrs() and + if x.hasCondition() then hasCondition = "yes" else hasCondition = "no" +select x, "hasLabel:", hasLabel, "hasLoopBody:", hasLoopBody, "getNumberOfAttrs:", getNumberOfAttrs, + "hasCondition:", hasCondition diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql new file mode 100644 index 000000000000..eeb05dcc0b0b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WhileExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected new file mode 100644 index 000000000000..1b6f53eeea0e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.expected @@ -0,0 +1 @@ +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:11:7:16 | ... < ... | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql new file mode 100644 index 000000000000..184dc6f8a7c6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getCondition.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WhileExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getCondition() diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql new file mode 100644 index 000000000000..59865e97014f --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WhileExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected new file mode 100644 index 000000000000..54fd5ed51520 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.expected @@ -0,0 +1 @@ +| gen_while_expr.rs:7:5:9:5 | while ... { ... } | gen_while_expr.rs:7:18:9:5 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.ql b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.ql new file mode 100644 index 000000000000..3d19f2e73412 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/WhileExpr/WhileExpr_getLoopBody.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from WhileExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getLoopBody() diff --git a/rust/ql/test/extractor-tests/generated/WildcardPat/Cargo.lock b/rust/ql/test/extractor-tests/generated/WildcardPat/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/WildcardPat/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.ql b/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.ql index e64d55357a36..cac335f3b7fc 100644 --- a/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.ql +++ b/rust/ql/test/extractor-tests/generated/WildcardPat/WildcardPat.ql @@ -2,4 +2,6 @@ import codeql.rust.elements import TestUtils -query predicate instances(WildcardPat x) { toBeTested(x) and not x.isUnknown() } +from WildcardPat x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/YeetExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/YeetExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.expected b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.expected index a77777c99fd1..3bce2660fe35 100644 --- a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.expected +++ b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.expected @@ -1,5 +1 @@ -instances -| gen_yeet_expr.rs:6:8:6:36 | YeetExpr | -getAttr -getExpr -| gen_yeet_expr.rs:6:8:6:36 | YeetExpr | gen_yeet_expr.rs:6:16:6:36 | "index out of bounds" | +| gen_yeet_expr.rs:6:8:6:36 | YeetExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.ql b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.ql index 88d4e570a1e8..165bd667d3c8 100644 --- a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.ql +++ b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(YeetExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(YeetExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(YeetExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from YeetExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.ql new file mode 100644 index 000000000000..a246607b7794 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from YeetExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.expected new file mode 100644 index 000000000000..e1d96684eec0 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_yeet_expr.rs:6:8:6:36 | YeetExpr | gen_yeet_expr.rs:6:16:6:36 | "index out of bounds" | diff --git a/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.ql new file mode 100644 index 000000000000..edb0e0676a7a --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YeetExpr/YeetExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from YeetExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/Cargo.lock b/rust/ql/test/extractor-tests/generated/YieldExpr/Cargo.lock deleted file mode 100644 index b9856cfaf77d..000000000000 --- a/rust/ql/test/extractor-tests/generated/YieldExpr/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "test" -version = "0.0.1" diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.expected b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.expected index da73c1be6711..5045b11d25d2 100644 --- a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.expected +++ b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.expected @@ -1,5 +1 @@ -instances -| gen_yield_expr.rs:7:13:7:19 | YieldExpr | -getAttr -getExpr -| gen_yield_expr.rs:7:13:7:19 | YieldExpr | gen_yield_expr.rs:7:19:7:19 | 1 | +| gen_yield_expr.rs:7:13:7:19 | YieldExpr | getNumberOfAttrs: | 0 | hasExpr: | yes | diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.ql b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.ql index 68281d39d9e9..47f32503bfc1 100644 --- a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.ql +++ b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr.ql @@ -2,12 +2,10 @@ import codeql.rust.elements import TestUtils -query predicate instances(YieldExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getAttr(YieldExpr x, int index, Attr getAttr) { - toBeTested(x) and not x.isUnknown() and getAttr = x.getAttr(index) -} - -query predicate getExpr(YieldExpr x, Expr getExpr) { - toBeTested(x) and not x.isUnknown() and getExpr = x.getExpr() -} +from YieldExpr x, int getNumberOfAttrs, string hasExpr +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 diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.expected b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.ql b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.ql new file mode 100644 index 000000000000..9c6b01bc228b --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getAttr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from YieldExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAttr(index) diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.expected new file mode 100644 index 000000000000..96884087f9d7 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.expected @@ -0,0 +1 @@ +| gen_yield_expr.rs:7:13:7:19 | YieldExpr | gen_yield_expr.rs:7:19:7:19 | 1 | diff --git a/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.ql new file mode 100644 index 000000000000..bdaa4755e6d3 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/YieldExpr/YieldExpr_getExpr.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from YieldExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getExpr() diff --git a/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected index 85ca3c35e7cd..9ba640cff8dc 100644 --- a/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/global/CONSISTENCY/PathResolutionConsistency.expected @@ -1,2 +1,2 @@ multipleCallTargets -| main.rs:272:14:272:29 | ...::deref(...) | +| main.rs:225:14:225:29 | ...::deref(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index da5840528f5c..451d5996de57 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -48,125 +48,85 @@ edges | main.rs:86:13:86:27 | pass_through(...) | main.rs:86:9:86:9 | b | provenance | | | main.rs:86:26:86:26 | a | main.rs:82:21:82:26 | ...: i64 | provenance | | | main.rs:86:26:86:26 | a | main.rs:86:13:86:27 | pass_through(...) | provenance | | -| main.rs:104:22:104:27 | ...: i64 | main.rs:105:14:105:14 | n | provenance | | -| main.rs:108:30:110:5 | { ... } | main.rs:138:13:138:25 | mn.get_data() | provenance | | -| main.rs:109:35:109:43 | source(...) | main.rs:108:30:110:5 | { ... } | provenance | | -| main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | provenance | | -| main.rs:118:28:118:33 | ...: i64 | main.rs:119:14:119:14 | n | provenance | | -| main.rs:122:36:124:5 | { ... } | main.rs:132:13:132:30 | x.get_data_trait() | provenance | | -| main.rs:122:36:124:5 | { ... } | main.rs:142:13:142:31 | mn.get_data_trait() | provenance | | -| main.rs:123:35:123:44 | source(...) | main.rs:122:36:124:5 | { ... } | provenance | | -| main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | provenance | | -| main.rs:132:9:132:9 | a | main.rs:133:10:133:10 | a | provenance | | -| main.rs:132:13:132:30 | x.get_data_trait() | main.rs:132:9:132:9 | a | provenance | | -| main.rs:138:9:138:9 | a | main.rs:139:10:139:10 | a | provenance | | -| main.rs:138:13:138:25 | mn.get_data() | main.rs:138:9:138:9 | a | provenance | | -| main.rs:142:9:142:9 | a | main.rs:143:10:143:10 | a | provenance | | -| main.rs:142:13:142:31 | mn.get_data_trait() | main.rs:142:9:142:9 | a | provenance | | -| main.rs:149:9:149:9 | a | main.rs:150:21:150:21 | a | provenance | | -| main.rs:149:13:149:22 | source(...) | main.rs:149:9:149:9 | a | provenance | | -| main.rs:150:21:150:21 | a | main.rs:118:28:118:33 | ...: i64 | provenance | | -| main.rs:155:9:155:9 | a | main.rs:156:16:156:16 | a | provenance | | -| main.rs:155:13:155:21 | source(...) | main.rs:155:9:155:9 | a | provenance | | -| main.rs:156:16:156:16 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | -| main.rs:159:9:159:9 | a | main.rs:160:22:160:22 | a | provenance | | -| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | a | provenance | | -| main.rs:160:22:160:22 | a | main.rs:118:28:118:33 | ...: i64 | provenance | | -| main.rs:166:9:166:9 | a | main.rs:167:34:167:34 | a | provenance | | -| main.rs:166:13:166:22 | source(...) | main.rs:166:9:166:9 | a | provenance | | -| main.rs:167:9:167:9 | b | main.rs:168:10:168:10 | b | provenance | | -| main.rs:167:13:167:35 | x.data_through_trait(...) | main.rs:167:9:167:9 | b | provenance | | -| main.rs:167:34:167:34 | a | main.rs:126:33:126:38 | ...: i64 | provenance | | -| main.rs:167:34:167:34 | a | main.rs:167:13:167:35 | x.data_through_trait(...) | provenance | | -| main.rs:173:9:173:9 | a | main.rs:174:29:174:29 | a | provenance | | -| main.rs:173:13:173:21 | source(...) | main.rs:173:9:173:9 | a | provenance | | -| main.rs:174:9:174:9 | b | main.rs:175:10:175:10 | b | provenance | | -| main.rs:174:13:174:30 | mn.data_through(...) | main.rs:174:9:174:9 | b | provenance | | -| main.rs:174:29:174:29 | a | main.rs:112:27:112:32 | ...: i64 | provenance | | -| main.rs:174:29:174:29 | a | main.rs:174:13:174:30 | mn.data_through(...) | provenance | | -| main.rs:178:9:178:9 | a | main.rs:179:35:179:35 | a | provenance | | -| main.rs:178:13:178:22 | source(...) | main.rs:178:9:178:9 | a | provenance | | -| main.rs:179:9:179:9 | b | main.rs:180:10:180:10 | b | provenance | | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | main.rs:179:9:179:9 | b | provenance | | -| main.rs:179:35:179:35 | a | main.rs:126:33:126:38 | ...: i64 | provenance | | -| main.rs:179:35:179:35 | a | main.rs:179:13:179:36 | mn.data_through_trait(...) | provenance | | -| main.rs:187:9:187:9 | a | main.rs:188:25:188:25 | a | provenance | | -| main.rs:187:13:187:21 | source(...) | main.rs:187:9:187:9 | a | provenance | | -| main.rs:188:25:188:25 | a | main.rs:104:22:104:27 | ...: i64 | provenance | | -| main.rs:193:9:193:9 | a | main.rs:194:38:194:38 | a | provenance | | -| main.rs:193:13:193:22 | source(...) | main.rs:193:9:193:9 | a | provenance | | -| main.rs:194:9:194:9 | b | main.rs:195:10:195:10 | b | provenance | | -| main.rs:194:13:194:39 | ...::data_through(...) | main.rs:194:9:194:9 | b | provenance | | -| main.rs:194:38:194:38 | a | main.rs:112:27:112:32 | ...: i64 | provenance | | -| main.rs:194:38:194:38 | a | main.rs:194:13:194:39 | ...::data_through(...) | provenance | | -| main.rs:206:12:206:17 | ...: i64 | main.rs:207:24:207:24 | n | provenance | | -| main.rs:207:9:207:26 | MyInt {...} [MyInt] | main.rs:206:28:208:5 | { ... } [MyInt] | provenance | | -| main.rs:207:24:207:24 | n | main.rs:207:9:207:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:212:9:212:9 | n [MyInt] | main.rs:213:9:213:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:212:13:212:34 | ...::new(...) [MyInt] | main.rs:212:9:212:9 | n [MyInt] | provenance | | -| main.rs:212:24:212:33 | source(...) | main.rs:206:12:206:17 | ...: i64 | provenance | | -| main.rs:212:24:212:33 | source(...) | main.rs:212:13:212:34 | ...::new(...) [MyInt] | provenance | | -| main.rs:213:9:213:26 | MyInt {...} [MyInt] | main.rs:213:24:213:24 | m | provenance | | -| main.rs:213:24:213:24 | m | main.rs:214:10:214:10 | m | provenance | | -| main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:222:24:222:27 | self [MyInt] | provenance | | -| main.rs:222:9:222:35 | MyInt {...} [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | provenance | | -| main.rs:222:24:222:27 | self [MyInt] | main.rs:222:24:222:33 | self.value | provenance | | -| main.rs:222:24:222:33 | self.value | main.rs:222:9:222:35 | MyInt {...} [MyInt] | provenance | | -| main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:228:25:228:27 | rhs [MyInt] | provenance | | -| main.rs:228:10:228:14 | [post] * ... [MyInt] | main.rs:228:11:228:14 | [post] self [&ref, MyInt] | provenance | | -| main.rs:228:11:228:14 | [post] self [&ref, MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | provenance | | -| main.rs:228:25:228:27 | rhs [MyInt] | main.rs:228:25:228:33 | rhs.value | provenance | | -| main.rs:228:25:228:33 | rhs.value | main.rs:228:10:228:14 | [post] * ... [MyInt] | provenance | | -| main.rs:242:9:242:9 | a [MyInt] | main.rs:244:13:244:13 | a [MyInt] | provenance | | -| main.rs:242:13:242:38 | MyInt {...} [MyInt] | main.rs:242:9:242:9 | a [MyInt] | provenance | | -| main.rs:242:28:242:36 | source(...) | main.rs:242:13:242:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:244:9:244:9 | c [MyInt] | main.rs:245:10:245:10 | c [MyInt] | provenance | | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | provenance | | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:244:13:244:17 | ... + ... [MyInt] | provenance | | -| main.rs:244:13:244:17 | ... + ... [MyInt] | main.rs:244:9:244:9 | c [MyInt] | provenance | | -| main.rs:245:10:245:10 | c [MyInt] | main.rs:245:10:245:16 | c.value | provenance | | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | provenance | | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] | provenance | | +| main.rs:98:22:98:27 | ...: i64 | main.rs:99:14:99:14 | n | provenance | | +| main.rs:102:30:108:5 | { ... } | main.rs:121:13:121:25 | mn.get_data() | provenance | | +| main.rs:106:13:106:21 | source(...) | main.rs:102:30:108:5 | { ... } | provenance | | +| main.rs:110:27:110:32 | ...: i64 | main.rs:110:42:116:5 | { ... } | provenance | | +| main.rs:121:9:121:9 | a | main.rs:122:10:122:10 | a | provenance | | +| main.rs:121:13:121:25 | mn.get_data() | main.rs:121:9:121:9 | a | provenance | | +| main.rs:127:9:127:9 | a | main.rs:128:16:128:16 | a | provenance | | +| main.rs:127:13:127:21 | source(...) | main.rs:127:9:127:9 | a | provenance | | +| main.rs:128:16:128:16 | a | main.rs:98:22:98:27 | ...: i64 | provenance | | +| main.rs:133:9:133:9 | a | main.rs:134:29:134:29 | a | provenance | | +| main.rs:133:13:133:21 | source(...) | main.rs:133:9:133:9 | a | provenance | | +| main.rs:134:9:134:9 | b | main.rs:135:10:135:10 | b | provenance | | +| main.rs:134:13:134:30 | mn.data_through(...) | main.rs:134:9:134:9 | b | provenance | | +| main.rs:134:29:134:29 | a | main.rs:110:27:110:32 | ...: i64 | provenance | | +| main.rs:134:29:134:29 | a | main.rs:134:13:134:30 | mn.data_through(...) | provenance | | +| main.rs:140:9:140:9 | a | main.rs:141:25:141:25 | a | provenance | | +| main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | a | provenance | | +| main.rs:141:25:141:25 | a | main.rs:98:22:98:27 | ...: i64 | provenance | | +| main.rs:146:9:146:9 | a | main.rs:147:38:147:38 | a | provenance | | +| main.rs:146:13:146:22 | source(...) | main.rs:146:9:146:9 | a | provenance | | +| main.rs:147:9:147:9 | b | main.rs:148:10:148:10 | b | provenance | | +| main.rs:147:13:147:39 | ...::data_through(...) | main.rs:147:9:147:9 | b | provenance | | +| main.rs:147:38:147:38 | a | main.rs:110:27:110:32 | ...: i64 | provenance | | +| main.rs:147:38:147:38 | a | main.rs:147:13:147:39 | ...::data_through(...) | provenance | | +| main.rs:159:12:159:17 | ...: i64 | main.rs:160:24:160:24 | n | provenance | | +| main.rs:160:9:160:26 | MyInt {...} [MyInt] | main.rs:159:28:161:5 | { ... } [MyInt] | provenance | | +| main.rs:160:24:160:24 | n | main.rs:160:9:160:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:165:9:165:9 | n [MyInt] | main.rs:166:9:166:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:165:13:165:34 | ...::new(...) [MyInt] | main.rs:165:9:165:9 | n [MyInt] | provenance | | +| main.rs:165:24:165:33 | source(...) | main.rs:159:12:159:17 | ...: i64 | provenance | | +| main.rs:165:24:165:33 | source(...) | main.rs:165:13:165:34 | ...::new(...) [MyInt] | provenance | | +| main.rs:166:9:166:26 | MyInt {...} [MyInt] | main.rs:166:24:166:24 | m | provenance | | +| main.rs:166:24:166:24 | m | main.rs:167:10:167:10 | m | provenance | | +| main.rs:173:12:173:15 | SelfParam [MyInt] | main.rs:175:24:175:27 | self [MyInt] | provenance | | +| main.rs:175:9:175:35 | MyInt {...} [MyInt] | main.rs:173:42:176:5 | { ... } [MyInt] | provenance | | +| main.rs:175:24:175:27 | self [MyInt] | main.rs:175:24:175:33 | self.value | provenance | | +| main.rs:175:24:175:33 | self.value | main.rs:175:9:175:35 | MyInt {...} [MyInt] | provenance | | +| main.rs:195:9:195:9 | a [MyInt] | main.rs:197:13:197:13 | a [MyInt] | provenance | | +| main.rs:195:13:195:38 | MyInt {...} [MyInt] | main.rs:195:9:195:9 | a [MyInt] | provenance | | +| main.rs:195:28:195:36 | source(...) | main.rs:195:13:195:38 | MyInt {...} [MyInt] | provenance | | +| main.rs:197:9:197:9 | c [MyInt] | main.rs:198:10:198:10 | c [MyInt] | provenance | | +| main.rs:197:13:197:13 | a [MyInt] | main.rs:173:12:173:15 | SelfParam [MyInt] | provenance | | +| main.rs:197:13:197:13 | a [MyInt] | main.rs:197:13:197:17 | ... + ... [MyInt] | provenance | | +| main.rs:197:13:197:17 | ... + ... [MyInt] | main.rs:197:9:197:9 | c [MyInt] | provenance | | +| main.rs:198:10:198:10 | c [MyInt] | main.rs:198:10:198:16 | c.value | provenance | | +| main.rs:205:9:205:9 | a [MyInt] | main.rs:173:12:173:15 | SelfParam [MyInt] | provenance | | +| main.rs:205:9:205:9 | a [MyInt] | main.rs:207:13:207:20 | a.add(...) [MyInt] | provenance | | +| main.rs:205:13:205:38 | MyInt {...} [MyInt] | main.rs:205:9:205:9 | a [MyInt] | provenance | | +| main.rs:205:28:205:36 | source(...) | main.rs:205:13:205:38 | MyInt {...} [MyInt] | provenance | | +| main.rs:207:9:207:9 | d [MyInt] | main.rs:208:10:208:10 | d [MyInt] | provenance | | +| main.rs:207:13:207:20 | a.add(...) [MyInt] | main.rs:207:9:207:9 | d [MyInt] | provenance | | +| main.rs:208:10:208:10 | d [MyInt] | main.rs:208:10:208:16 | d.value | provenance | | +| main.rs:242:18:242:21 | SelfParam [MyInt] | main.rs:242:48:244:5 | { ... } [MyInt] | provenance | | +| main.rs:246:26:246:37 | ...: MyInt [MyInt] | main.rs:246:49:248:5 | { ... } [MyInt] | provenance | | +| main.rs:252:9:252:9 | a [MyInt] | main.rs:254:49:254:49 | a [MyInt] | provenance | | | main.rs:252:13:252:38 | MyInt {...} [MyInt] | main.rs:252:9:252:9 | a [MyInt] | provenance | | | main.rs:252:28:252:36 | source(...) | main.rs:252:13:252:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:254:9:254:9 | d [MyInt] | main.rs:255:10:255:10 | d [MyInt] | provenance | | -| main.rs:254:13:254:20 | a.add(...) [MyInt] | main.rs:254:9:254:9 | d [MyInt] | provenance | | -| main.rs:255:10:255:10 | d [MyInt] | main.rs:255:10:255:16 | d.value | provenance | | -| main.rs:259:9:259:9 | b [MyInt] | main.rs:261:35:261:35 | b [MyInt] | provenance | | -| main.rs:259:13:259:39 | MyInt {...} [MyInt] | main.rs:259:9:259:9 | b [MyInt] | provenance | | -| main.rs:259:28:259:37 | source(...) | main.rs:259:13:259:39 | MyInt {...} [MyInt] | provenance | | -| main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | main.rs:261:32:261:32 | [post] a [MyInt] | provenance | | -| main.rs:261:32:261:32 | [post] a [MyInt] | main.rs:262:10:262:10 | a [MyInt] | provenance | | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | provenance | | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | provenance | | -| main.rs:262:10:262:10 | a [MyInt] | main.rs:262:10:262:16 | a.value | provenance | | -| main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | provenance | | -| main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | provenance | | -| main.rs:299:9:299:9 | a [MyInt] | main.rs:301:50:301:50 | a [MyInt] | provenance | | -| main.rs:299:13:299:38 | MyInt {...} [MyInt] | main.rs:299:9:299:9 | a [MyInt] | provenance | | -| main.rs:299:28:299:36 | source(...) | main.rs:299:13:299:38 | MyInt {...} [MyInt] | provenance | | -| main.rs:301:9:301:26 | MyInt {...} [MyInt] | main.rs:301:24:301:24 | c | provenance | | -| main.rs:301:24:301:24 | c | main.rs:302:10:302:10 | c | provenance | | -| main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | main.rs:301:9:301:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | provenance | | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | provenance | | -| main.rs:305:9:305:9 | b [MyInt] | main.rs:306:55:306:55 | b [MyInt] | provenance | | -| main.rs:305:13:305:39 | MyInt {...} [MyInt] | main.rs:305:9:305:9 | b [MyInt] | provenance | | -| main.rs:305:28:305:37 | source(...) | main.rs:305:13:305:39 | MyInt {...} [MyInt] | provenance | | -| main.rs:306:9:306:26 | MyInt {...} [MyInt] | main.rs:306:24:306:24 | c | provenance | | -| main.rs:306:24:306:24 | c | main.rs:307:10:307:10 | c | provenance | | -| main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | main.rs:306:9:306:26 | MyInt {...} [MyInt] | provenance | | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | provenance | | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | provenance | | -| main.rs:315:32:319:1 | { ... } | main.rs:334:41:334:54 | async_source(...) | provenance | | -| main.rs:316:9:316:9 | a | main.rs:315:32:319:1 | { ... } | provenance | | -| main.rs:316:9:316:9 | a | main.rs:317:10:317:10 | a | provenance | | -| main.rs:316:13:316:21 | source(...) | main.rs:316:9:316:9 | a | provenance | | -| main.rs:326:13:326:13 | c | main.rs:327:14:327:14 | c | provenance | | -| main.rs:326:17:326:25 | source(...) | main.rs:326:13:326:13 | c | provenance | | -| main.rs:334:9:334:9 | a | main.rs:335:10:335:10 | a | provenance | | -| main.rs:334:13:334:55 | ...::block_on(...) | main.rs:334:9:334:9 | a | provenance | | -| main.rs:334:41:334:54 | async_source(...) | main.rs:334:13:334:55 | ...::block_on(...) | provenance | MaD:1 | +| main.rs:254:9:254:26 | MyInt {...} [MyInt] | main.rs:254:24:254:24 | c | provenance | | +| main.rs:254:24:254:24 | c | main.rs:255:10:255:10 | c | provenance | | +| main.rs:254:30:254:53 | ...::take_self(...) [MyInt] | main.rs:254:9:254:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:254:49:254:49 | a [MyInt] | main.rs:242:18:242:21 | SelfParam [MyInt] | provenance | | +| main.rs:254:49:254:49 | a [MyInt] | main.rs:254:30:254:53 | ...::take_self(...) [MyInt] | provenance | | +| main.rs:258:9:258:9 | b [MyInt] | main.rs:259:54:259:54 | b [MyInt] | provenance | | +| main.rs:258:13:258:39 | MyInt {...} [MyInt] | main.rs:258:9:258:9 | b [MyInt] | provenance | | +| main.rs:258:28:258:37 | source(...) | main.rs:258:13:258:39 | MyInt {...} [MyInt] | provenance | | +| main.rs:259:9:259:26 | MyInt {...} [MyInt] | main.rs:259:24:259:24 | c | provenance | | +| main.rs:259:24:259:24 | c | main.rs:260:10:260:10 | c | provenance | | +| main.rs:259:30:259:55 | ...::take_second(...) [MyInt] | main.rs:259:9:259:26 | MyInt {...} [MyInt] | provenance | | +| main.rs:259:54:259:54 | b [MyInt] | main.rs:246:26:246:37 | ...: MyInt [MyInt] | provenance | | +| main.rs:259:54:259:54 | b [MyInt] | main.rs:259:30:259:55 | ...::take_second(...) [MyInt] | provenance | | +| main.rs:268:32:272:1 | { ... } | main.rs:287:41:287:54 | async_source(...) | provenance | | +| main.rs:269:9:269:9 | a | main.rs:268:32:272:1 | { ... } | provenance | | +| main.rs:269:9:269:9 | a | main.rs:270:10:270:10 | a | provenance | | +| main.rs:269:13:269:21 | source(...) | main.rs:269:9:269:9 | a | provenance | | +| main.rs:279:13:279:13 | c | main.rs:280:14:280:14 | c | provenance | | +| main.rs:279:17:279:25 | source(...) | main.rs:279:13:279:13 | c | provenance | | +| main.rs:287:9:287:9 | a | main.rs:288:10:288:10 | a | provenance | | +| main.rs:287:13:287:55 | ...::block_on(...) | main.rs:287:9:287:9 | a | provenance | | +| main.rs:287:41:287:54 | async_source(...) | main.rs:287:13:287:55 | ...::block_on(...) | provenance | MaD:1 | nodes | main.rs:12:28:14:1 | { ... } | semmle.label | { ... } | | main.rs:13:5:13:13 | source(...) | semmle.label | source(...) | @@ -219,138 +179,94 @@ nodes | main.rs:86:13:86:27 | pass_through(...) | semmle.label | pass_through(...) | | main.rs:86:26:86:26 | a | semmle.label | a | | main.rs:87:10:87:10 | b | semmle.label | b | -| main.rs:104:22:104:27 | ...: i64 | semmle.label | ...: i64 | -| main.rs:105:14:105:14 | n | semmle.label | n | -| main.rs:108:30:110:5 | { ... } | semmle.label | { ... } | -| main.rs:109:35:109:43 | source(...) | semmle.label | source(...) | -| main.rs:112:27:112:32 | ...: i64 | semmle.label | ...: i64 | -| main.rs:112:42:114:5 | { ... } | semmle.label | { ... } | -| main.rs:118:28:118:33 | ...: i64 | semmle.label | ...: i64 | -| main.rs:119:14:119:14 | n | semmle.label | n | -| main.rs:122:36:124:5 | { ... } | semmle.label | { ... } | -| main.rs:123:35:123:44 | source(...) | semmle.label | source(...) | -| main.rs:126:33:126:38 | ...: i64 | semmle.label | ...: i64 | -| main.rs:126:48:128:5 | { ... } | semmle.label | { ... } | -| main.rs:132:9:132:9 | a | semmle.label | a | -| main.rs:132:13:132:30 | x.get_data_trait() | semmle.label | x.get_data_trait() | -| main.rs:133:10:133:10 | a | semmle.label | a | -| main.rs:138:9:138:9 | a | semmle.label | a | -| main.rs:138:13:138:25 | mn.get_data() | semmle.label | mn.get_data() | -| main.rs:139:10:139:10 | a | semmle.label | a | -| main.rs:142:9:142:9 | a | semmle.label | a | -| main.rs:142:13:142:31 | mn.get_data_trait() | semmle.label | mn.get_data_trait() | -| main.rs:143:10:143:10 | a | semmle.label | a | -| main.rs:149:9:149:9 | a | semmle.label | a | -| main.rs:149:13:149:22 | source(...) | semmle.label | source(...) | -| main.rs:150:21:150:21 | a | semmle.label | a | -| main.rs:155:9:155:9 | a | semmle.label | a | -| main.rs:155:13:155:21 | source(...) | semmle.label | source(...) | -| main.rs:156:16:156:16 | a | semmle.label | a | -| main.rs:159:9:159:9 | a | semmle.label | a | -| main.rs:159:13:159:22 | source(...) | semmle.label | source(...) | -| main.rs:160:22:160:22 | a | semmle.label | a | -| main.rs:166:9:166:9 | a | semmle.label | a | -| main.rs:166:13:166:22 | source(...) | semmle.label | source(...) | -| main.rs:167:9:167:9 | b | semmle.label | b | -| main.rs:167:13:167:35 | x.data_through_trait(...) | semmle.label | x.data_through_trait(...) | -| main.rs:167:34:167:34 | a | semmle.label | a | -| main.rs:168:10:168:10 | b | semmle.label | b | -| main.rs:173:9:173:9 | a | semmle.label | a | -| main.rs:173:13:173:21 | source(...) | semmle.label | source(...) | -| main.rs:174:9:174:9 | b | semmle.label | b | -| main.rs:174:13:174:30 | mn.data_through(...) | semmle.label | mn.data_through(...) | -| main.rs:174:29:174:29 | a | semmle.label | a | -| main.rs:175:10:175:10 | b | semmle.label | b | -| main.rs:178:9:178:9 | a | semmle.label | a | -| main.rs:178:13:178:22 | source(...) | semmle.label | source(...) | -| main.rs:179:9:179:9 | b | semmle.label | b | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | semmle.label | mn.data_through_trait(...) | -| main.rs:179:35:179:35 | a | semmle.label | a | -| main.rs:180:10:180:10 | b | semmle.label | b | -| main.rs:187:9:187:9 | a | semmle.label | a | -| main.rs:187:13:187:21 | source(...) | semmle.label | source(...) | -| main.rs:188:25:188:25 | a | semmle.label | a | -| main.rs:193:9:193:9 | a | semmle.label | a | -| main.rs:193:13:193:22 | source(...) | semmle.label | source(...) | -| main.rs:194:9:194:9 | b | semmle.label | b | -| main.rs:194:13:194:39 | ...::data_through(...) | semmle.label | ...::data_through(...) | -| main.rs:194:38:194:38 | a | semmle.label | a | -| main.rs:195:10:195:10 | b | semmle.label | b | -| main.rs:206:12:206:17 | ...: i64 | semmle.label | ...: i64 | -| main.rs:206:28:208:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:207:9:207:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:207:24:207:24 | n | semmle.label | n | -| main.rs:212:9:212:9 | n [MyInt] | semmle.label | n [MyInt] | -| main.rs:212:13:212:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] | -| main.rs:212:24:212:33 | source(...) | semmle.label | source(...) | -| main.rs:213:9:213:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:213:24:213:24 | m | semmle.label | m | -| main.rs:214:10:214:10 | m | semmle.label | m | -| main.rs:220:12:220:15 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | -| main.rs:220:42:223:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:222:9:222:35 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:222:24:222:27 | self [MyInt] | semmle.label | self [MyInt] | -| main.rs:222:24:222:33 | self.value | semmle.label | self.value | -| main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | semmle.label | SelfParam [Return] [&ref, MyInt] | -| main.rs:227:30:227:39 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | -| main.rs:228:10:228:14 | [post] * ... [MyInt] | semmle.label | [post] * ... [MyInt] | -| main.rs:228:11:228:14 | [post] self [&ref, MyInt] | semmle.label | [post] self [&ref, MyInt] | -| main.rs:228:25:228:27 | rhs [MyInt] | semmle.label | rhs [MyInt] | -| main.rs:228:25:228:33 | rhs.value | semmle.label | rhs.value | -| main.rs:242:9:242:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:242:13:242:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:242:28:242:36 | source(...) | semmle.label | source(...) | -| main.rs:244:9:244:9 | c [MyInt] | semmle.label | c [MyInt] | -| main.rs:244:13:244:13 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:244:13:244:17 | ... + ... [MyInt] | semmle.label | ... + ... [MyInt] | -| main.rs:245:10:245:10 | c [MyInt] | semmle.label | c [MyInt] | -| main.rs:245:10:245:16 | c.value | semmle.label | c.value | +| main.rs:98:22:98:27 | ...: i64 | semmle.label | ...: i64 | +| main.rs:99:14:99:14 | n | semmle.label | n | +| main.rs:102:30:108:5 | { ... } | semmle.label | { ... } | +| main.rs:106:13:106:21 | source(...) | semmle.label | source(...) | +| main.rs:110:27:110:32 | ...: i64 | semmle.label | ...: i64 | +| main.rs:110:42:116:5 | { ... } | semmle.label | { ... } | +| main.rs:121:9:121:9 | a | semmle.label | a | +| main.rs:121:13:121:25 | mn.get_data() | semmle.label | mn.get_data() | +| main.rs:122:10:122:10 | a | semmle.label | a | +| main.rs:127:9:127:9 | a | semmle.label | a | +| main.rs:127:13:127:21 | source(...) | semmle.label | source(...) | +| main.rs:128:16:128:16 | a | semmle.label | a | +| main.rs:133:9:133:9 | a | semmle.label | a | +| main.rs:133:13:133:21 | source(...) | semmle.label | source(...) | +| main.rs:134:9:134:9 | b | semmle.label | b | +| main.rs:134:13:134:30 | mn.data_through(...) | semmle.label | mn.data_through(...) | +| main.rs:134:29:134:29 | a | semmle.label | a | +| main.rs:135:10:135:10 | b | semmle.label | b | +| main.rs:140:9:140:9 | a | semmle.label | a | +| main.rs:140:13:140:21 | source(...) | semmle.label | source(...) | +| main.rs:141:25:141:25 | a | semmle.label | a | +| main.rs:146:9:146:9 | a | semmle.label | a | +| main.rs:146:13:146:22 | source(...) | semmle.label | source(...) | +| main.rs:147:9:147:9 | b | semmle.label | b | +| main.rs:147:13:147:39 | ...::data_through(...) | semmle.label | ...::data_through(...) | +| main.rs:147:38:147:38 | a | semmle.label | a | +| main.rs:148:10:148:10 | b | semmle.label | b | +| main.rs:159:12:159:17 | ...: i64 | semmle.label | ...: i64 | +| main.rs:159:28:161:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:160:9:160:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:160:24:160:24 | n | semmle.label | n | +| main.rs:165:9:165:9 | n [MyInt] | semmle.label | n [MyInt] | +| main.rs:165:13:165:34 | ...::new(...) [MyInt] | semmle.label | ...::new(...) [MyInt] | +| main.rs:165:24:165:33 | source(...) | semmle.label | source(...) | +| main.rs:166:9:166:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:166:24:166:24 | m | semmle.label | m | +| main.rs:167:10:167:10 | m | semmle.label | m | +| main.rs:173:12:173:15 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | +| main.rs:173:42:176:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:175:9:175:35 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:175:24:175:27 | self [MyInt] | semmle.label | self [MyInt] | +| main.rs:175:24:175:33 | self.value | semmle.label | self.value | +| main.rs:195:9:195:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:195:13:195:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:195:28:195:36 | source(...) | semmle.label | source(...) | +| main.rs:197:9:197:9 | c [MyInt] | semmle.label | c [MyInt] | +| main.rs:197:13:197:13 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:197:13:197:17 | ... + ... [MyInt] | semmle.label | ... + ... [MyInt] | +| main.rs:198:10:198:10 | c [MyInt] | semmle.label | c [MyInt] | +| main.rs:198:10:198:16 | c.value | semmle.label | c.value | +| main.rs:205:9:205:9 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:205:13:205:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:205:28:205:36 | source(...) | semmle.label | source(...) | +| main.rs:207:9:207:9 | d [MyInt] | semmle.label | d [MyInt] | +| main.rs:207:13:207:20 | a.add(...) [MyInt] | semmle.label | a.add(...) [MyInt] | +| main.rs:208:10:208:10 | d [MyInt] | semmle.label | d [MyInt] | +| main.rs:208:10:208:16 | d.value | semmle.label | d.value | +| main.rs:242:18:242:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | +| main.rs:242:48:244:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | +| main.rs:246:26:246:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | +| main.rs:246:49:248:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | | main.rs:252:9:252:9 | a [MyInt] | semmle.label | a [MyInt] | | main.rs:252:13:252:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | | main.rs:252:28:252:36 | source(...) | semmle.label | source(...) | -| main.rs:254:9:254:9 | d [MyInt] | semmle.label | d [MyInt] | -| main.rs:254:13:254:20 | a.add(...) [MyInt] | semmle.label | a.add(...) [MyInt] | -| main.rs:255:10:255:10 | d [MyInt] | semmle.label | d [MyInt] | -| main.rs:255:10:255:16 | d.value | semmle.label | d.value | -| main.rs:259:9:259:9 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:259:13:259:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:259:28:259:37 | source(...) | semmle.label | source(...) | -| main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | semmle.label | [post] &mut a [&ref, MyInt] | -| main.rs:261:32:261:32 | [post] a [MyInt] | semmle.label | [post] a [MyInt] | -| main.rs:261:35:261:35 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:262:10:262:10 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:262:10:262:16 | a.value | semmle.label | a.value | -| main.rs:289:18:289:21 | SelfParam [MyInt] | semmle.label | SelfParam [MyInt] | -| main.rs:289:48:291:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:293:26:293:37 | ...: MyInt [MyInt] | semmle.label | ...: MyInt [MyInt] | -| main.rs:293:49:295:5 | { ... } [MyInt] | semmle.label | { ... } [MyInt] | -| main.rs:299:9:299:9 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:299:13:299:38 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:299:28:299:36 | source(...) | semmle.label | source(...) | -| main.rs:301:9:301:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:301:24:301:24 | c | semmle.label | c | -| main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] | -| main.rs:301:50:301:50 | a [MyInt] | semmle.label | a [MyInt] | -| main.rs:302:10:302:10 | c | semmle.label | c | -| main.rs:305:9:305:9 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:305:13:305:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:305:28:305:37 | source(...) | semmle.label | source(...) | -| main.rs:306:9:306:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | -| main.rs:306:24:306:24 | c | semmle.label | c | -| main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] | -| main.rs:306:55:306:55 | b [MyInt] | semmle.label | b [MyInt] | -| main.rs:307:10:307:10 | c | semmle.label | c | -| main.rs:315:32:319:1 | { ... } | semmle.label | { ... } | -| main.rs:316:9:316:9 | a | semmle.label | a | -| main.rs:316:13:316:21 | source(...) | semmle.label | source(...) | -| main.rs:317:10:317:10 | a | semmle.label | a | -| main.rs:326:13:326:13 | c | semmle.label | c | -| main.rs:326:17:326:25 | source(...) | semmle.label | source(...) | -| main.rs:327:14:327:14 | c | semmle.label | c | -| main.rs:334:9:334:9 | a | semmle.label | a | -| main.rs:334:13:334:55 | ...::block_on(...) | semmle.label | ...::block_on(...) | -| main.rs:334:41:334:54 | async_source(...) | semmle.label | async_source(...) | -| main.rs:335:10:335:10 | a | semmle.label | a | +| main.rs:254:9:254:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:254:24:254:24 | c | semmle.label | c | +| main.rs:254:30:254:53 | ...::take_self(...) [MyInt] | semmle.label | ...::take_self(...) [MyInt] | +| main.rs:254:49:254:49 | a [MyInt] | semmle.label | a [MyInt] | +| main.rs:255:10:255:10 | c | semmle.label | c | +| main.rs:258:9:258:9 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:258:13:258:39 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:258:28:258:37 | source(...) | semmle.label | source(...) | +| main.rs:259:9:259:26 | MyInt {...} [MyInt] | semmle.label | MyInt {...} [MyInt] | +| main.rs:259:24:259:24 | c | semmle.label | c | +| main.rs:259:30:259:55 | ...::take_second(...) [MyInt] | semmle.label | ...::take_second(...) [MyInt] | +| main.rs:259:54:259:54 | b [MyInt] | semmle.label | b [MyInt] | +| main.rs:260:10:260:10 | c | semmle.label | c | +| main.rs:268:32:272:1 | { ... } | semmle.label | { ... } | +| main.rs:269:9:269:9 | a | semmle.label | a | +| main.rs:269:13:269:21 | source(...) | semmle.label | source(...) | +| main.rs:270:10:270:10 | a | semmle.label | a | +| main.rs:279:13:279:13 | c | semmle.label | c | +| main.rs:279:17:279:25 | source(...) | semmle.label | source(...) | +| main.rs:280:14:280:14 | c | semmle.label | c | +| main.rs:287:9:287:9 | a | semmle.label | a | +| main.rs:287:13:287:55 | ...::block_on(...) | semmle.label | ...::block_on(...) | +| main.rs:287:41:287:54 | async_source(...) | semmle.label | async_source(...) | +| main.rs:288:10:288:10 | a | semmle.label | a | subpaths | main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() | @@ -359,16 +275,13 @@ subpaths | main.rs:67:26:67:26 | a | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:67:13:67:27 | pass_through(...) | | main.rs:72:26:75:5 | { ... } | main.rs:61:17:61:22 | ...: i64 | main.rs:61:32:63:1 | { ... } | main.rs:72:13:75:6 | pass_through(...) | | main.rs:86:26:86:26 | a | main.rs:82:21:82:26 | ...: i64 | main.rs:82:36:84:5 | { ... } | main.rs:86:13:86:27 | pass_through(...) | -| main.rs:167:34:167:34 | a | main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | main.rs:167:13:167:35 | x.data_through_trait(...) | -| main.rs:174:29:174:29 | a | main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | main.rs:174:13:174:30 | mn.data_through(...) | -| main.rs:179:35:179:35 | a | main.rs:126:33:126:38 | ...: i64 | main.rs:126:48:128:5 | { ... } | main.rs:179:13:179:36 | mn.data_through_trait(...) | -| main.rs:194:38:194:38 | a | main.rs:112:27:112:32 | ...: i64 | main.rs:112:42:114:5 | { ... } | main.rs:194:13:194:39 | ...::data_through(...) | -| main.rs:212:24:212:33 | source(...) | main.rs:206:12:206:17 | ...: i64 | main.rs:206:28:208:5 | { ... } [MyInt] | main.rs:212:13:212:34 | ...::new(...) [MyInt] | -| main.rs:244:13:244:13 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:244:13:244:17 | ... + ... [MyInt] | -| main.rs:252:9:252:9 | a [MyInt] | main.rs:220:12:220:15 | SelfParam [MyInt] | main.rs:220:42:223:5 | { ... } [MyInt] | main.rs:254:13:254:20 | a.add(...) [MyInt] | -| main.rs:261:35:261:35 | b [MyInt] | main.rs:227:30:227:39 | ...: MyInt [MyInt] | main.rs:227:19:227:27 | SelfParam [Return] [&ref, MyInt] | main.rs:261:27:261:32 | [post] &mut a [&ref, MyInt] | -| main.rs:301:50:301:50 | a [MyInt] | main.rs:289:18:289:21 | SelfParam [MyInt] | main.rs:289:48:291:5 | { ... } [MyInt] | main.rs:301:30:301:54 | ...::take_self(...) [MyInt] | -| main.rs:306:55:306:55 | b [MyInt] | main.rs:293:26:293:37 | ...: MyInt [MyInt] | main.rs:293:49:295:5 | { ... } [MyInt] | main.rs:306:30:306:56 | ...::take_second(...) [MyInt] | +| main.rs:134:29:134:29 | a | main.rs:110:27:110:32 | ...: i64 | main.rs:110:42:116:5 | { ... } | main.rs:134:13:134:30 | mn.data_through(...) | +| main.rs:147:38:147:38 | a | main.rs:110:27:110:32 | ...: i64 | main.rs:110:42:116:5 | { ... } | main.rs:147:13:147:39 | ...::data_through(...) | +| main.rs:165:24:165:33 | source(...) | main.rs:159:12:159:17 | ...: i64 | main.rs:159:28:161:5 | { ... } [MyInt] | main.rs:165:13:165:34 | ...::new(...) [MyInt] | +| main.rs:197:13:197:13 | a [MyInt] | main.rs:173:12:173:15 | SelfParam [MyInt] | main.rs:173:42:176:5 | { ... } [MyInt] | main.rs:197:13:197:17 | ... + ... [MyInt] | +| main.rs:205:9:205:9 | a [MyInt] | main.rs:173:12:173:15 | SelfParam [MyInt] | main.rs:173:42:176:5 | { ... } [MyInt] | main.rs:207:13:207:20 | a.add(...) [MyInt] | +| main.rs:254:49:254:49 | a [MyInt] | main.rs:242:18:242:21 | SelfParam [MyInt] | main.rs:242:48:244:5 | { ... } [MyInt] | main.rs:254:30:254:53 | ...::take_self(...) [MyInt] | +| main.rs:259:54:259:54 | b [MyInt] | main.rs:246:26:246:37 | ...: MyInt [MyInt] | main.rs:246:49:248:5 | { ... } [MyInt] | main.rs:259:30:259:55 | ...::take_second(...) [MyInt] | testFailures #select | main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) | @@ -378,23 +291,16 @@ testFailures | main.rs:68:10:68:10 | b | main.rs:66:13:66:21 | source(...) | main.rs:68:10:68:10 | b | $@ | main.rs:66:13:66:21 | source(...) | source(...) | | main.rs:76:10:76:10 | a | main.rs:74:9:74:18 | source(...) | main.rs:76:10:76:10 | a | $@ | main.rs:74:9:74:18 | source(...) | source(...) | | main.rs:87:10:87:10 | b | main.rs:80:13:80:22 | source(...) | main.rs:87:10:87:10 | b | $@ | main.rs:80:13:80:22 | source(...) | source(...) | -| main.rs:105:14:105:14 | n | main.rs:155:13:155:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:155:13:155:21 | source(...) | source(...) | -| main.rs:105:14:105:14 | n | main.rs:187:13:187:21 | source(...) | main.rs:105:14:105:14 | n | $@ | main.rs:187:13:187:21 | source(...) | source(...) | -| main.rs:119:14:119:14 | n | main.rs:149:13:149:22 | source(...) | main.rs:119:14:119:14 | n | $@ | main.rs:149:13:149:22 | source(...) | source(...) | -| main.rs:119:14:119:14 | n | main.rs:159:13:159:22 | source(...) | main.rs:119:14:119:14 | n | $@ | main.rs:159:13:159:22 | source(...) | source(...) | -| main.rs:133:10:133:10 | a | main.rs:123:35:123:44 | source(...) | main.rs:133:10:133:10 | a | $@ | main.rs:123:35:123:44 | source(...) | source(...) | -| main.rs:139:10:139:10 | a | main.rs:109:35:109:43 | source(...) | main.rs:139:10:139:10 | a | $@ | main.rs:109:35:109:43 | source(...) | source(...) | -| main.rs:143:10:143:10 | a | main.rs:123:35:123:44 | source(...) | main.rs:143:10:143:10 | a | $@ | main.rs:123:35:123:44 | source(...) | source(...) | -| main.rs:168:10:168:10 | b | main.rs:166:13:166:22 | source(...) | main.rs:168:10:168:10 | b | $@ | main.rs:166:13:166:22 | source(...) | source(...) | -| main.rs:175:10:175:10 | b | main.rs:173:13:173:21 | source(...) | main.rs:175:10:175:10 | b | $@ | main.rs:173:13:173:21 | source(...) | source(...) | -| main.rs:180:10:180:10 | b | main.rs:178:13:178:22 | source(...) | main.rs:180:10:180:10 | b | $@ | main.rs:178:13:178:22 | source(...) | source(...) | -| main.rs:195:10:195:10 | b | main.rs:193:13:193:22 | source(...) | main.rs:195:10:195:10 | b | $@ | main.rs:193:13:193:22 | source(...) | source(...) | -| main.rs:214:10:214:10 | m | main.rs:212:24:212:33 | source(...) | main.rs:214:10:214:10 | m | $@ | main.rs:212:24:212:33 | source(...) | source(...) | -| main.rs:245:10:245:16 | c.value | main.rs:242:28:242:36 | source(...) | main.rs:245:10:245:16 | c.value | $@ | main.rs:242:28:242:36 | source(...) | source(...) | -| main.rs:255:10:255:16 | d.value | main.rs:252:28:252:36 | source(...) | main.rs:255:10:255:16 | d.value | $@ | main.rs:252:28:252:36 | source(...) | source(...) | -| main.rs:262:10:262:16 | a.value | main.rs:259:28:259:37 | source(...) | main.rs:262:10:262:16 | a.value | $@ | main.rs:259:28:259:37 | source(...) | source(...) | -| main.rs:302:10:302:10 | c | main.rs:299:28:299:36 | source(...) | main.rs:302:10:302:10 | c | $@ | main.rs:299:28:299:36 | source(...) | source(...) | -| main.rs:307:10:307:10 | c | main.rs:305:28:305:37 | source(...) | main.rs:307:10:307:10 | c | $@ | main.rs:305:28:305:37 | source(...) | source(...) | -| main.rs:317:10:317:10 | a | main.rs:316:13:316:21 | source(...) | main.rs:317:10:317:10 | a | $@ | main.rs:316:13:316:21 | source(...) | source(...) | -| main.rs:327:14:327:14 | c | main.rs:326:17:326:25 | source(...) | main.rs:327:14:327:14 | c | $@ | main.rs:326:17:326:25 | source(...) | source(...) | -| main.rs:335:10:335:10 | a | main.rs:316:13:316:21 | source(...) | main.rs:335:10:335:10 | a | $@ | main.rs:316:13:316:21 | source(...) | source(...) | +| main.rs:99:14:99:14 | n | main.rs:127:13:127:21 | source(...) | main.rs:99:14:99:14 | n | $@ | main.rs:127:13:127:21 | source(...) | source(...) | +| main.rs:99:14:99:14 | n | main.rs:140:13:140:21 | source(...) | main.rs:99:14:99:14 | n | $@ | main.rs:140:13:140:21 | source(...) | source(...) | +| main.rs:122:10:122:10 | a | main.rs:106:13:106:21 | source(...) | main.rs:122:10:122:10 | a | $@ | main.rs:106:13:106:21 | source(...) | source(...) | +| main.rs:135:10:135:10 | b | main.rs:133:13:133:21 | source(...) | main.rs:135:10:135:10 | b | $@ | main.rs:133:13:133:21 | source(...) | source(...) | +| main.rs:148:10:148:10 | b | main.rs:146:13:146:22 | source(...) | main.rs:148:10:148:10 | b | $@ | main.rs:146:13:146:22 | source(...) | source(...) | +| main.rs:167:10:167:10 | m | main.rs:165:24:165:33 | source(...) | main.rs:167:10:167:10 | m | $@ | main.rs:165:24:165:33 | source(...) | source(...) | +| main.rs:198:10:198:16 | c.value | main.rs:195:28:195:36 | source(...) | main.rs:198:10:198:16 | c.value | $@ | main.rs:195:28:195:36 | source(...) | source(...) | +| main.rs:208:10:208:16 | d.value | main.rs:205:28:205:36 | source(...) | main.rs:208:10:208:16 | d.value | $@ | main.rs:205:28:205:36 | source(...) | source(...) | +| main.rs:255:10:255:10 | c | main.rs:252:28:252:36 | source(...) | main.rs:255:10:255:10 | c | $@ | main.rs:252:28:252:36 | source(...) | source(...) | +| main.rs:260:10:260:10 | c | main.rs:258:28:258:37 | source(...) | main.rs:260:10:260:10 | c | $@ | main.rs:258:28:258:37 | source(...) | source(...) | +| main.rs:270:10:270:10 | a | main.rs:269:13:269:21 | source(...) | main.rs:270:10:270:10 | a | $@ | main.rs:269:13:269:21 | source(...) | source(...) | +| main.rs:280:14:280:14 | c | main.rs:279:17:279:25 | source(...) | main.rs:280:14:280:14 | c | $@ | main.rs:279:17:279:25 | source(...) | source(...) | +| main.rs:288:10:288:10 | a | main.rs:269:13:269:21 | source(...) | main.rs:288:10:288:10 | a | $@ | main.rs:269:13:269:21 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/main.rs b/rust/ql/test/library-tests/dataflow/global/main.rs index b66ef27726bb..fb5acfb7c606 100644 --- a/rust/ql/test/library-tests/dataflow/global/main.rs +++ b/rust/ql/test/library-tests/dataflow/global/main.rs @@ -94,78 +94,38 @@ struct MyFlag { flag: bool, } -trait MyTrait { - fn data_in_trait(self, n: i64); - fn get_data_trait(self) -> i64; - fn data_through_trait(self, n: i64) -> i64; -} - impl MyFlag { fn data_in(self, n: i64) { sink(n); // $ hasValueFlow=1 hasValueFlow=8 } fn get_data(self) -> i64 { - if self.flag { 0 } else { source(2) } + if self.flag { + 0 + } else { + source(2) + } } fn data_through(self, n: i64) -> i64 { - if self.flag { 0 } else { n } + if self.flag { + 0 + } else { + n + } } } -impl MyTrait for MyFlag { - fn data_in_trait(self, n: i64) { - sink(n); // $ hasValueFlow=22 $ hasValueFlow=31 - } - - fn get_data_trait(self) -> i64 { - if self.flag { 0 } else { source(21) } - } - - fn data_through_trait(self, n: i64) -> i64 { - if self.flag { 0 } else { n } - } -} - -fn data_out_of_method_trait_dispatch(x: T) { - let a = x.get_data_trait(); - sink(a); // $ hasValueFlow=21 -} - fn data_out_of_method() { let mn = MyFlag { flag: true }; let a = mn.get_data(); sink(a); // $ hasValueFlow=2 - - let mn = MyFlag { flag: true }; - let a = mn.get_data_trait(); - sink(a); // $ hasValueFlow=21 - - data_out_of_method_trait_dispatch(MyFlag { flag: true }); -} - -fn data_in_to_method_call_trait_dispatch(x: T) { - let a = source(31); - x.data_in_trait(a); } fn data_in_to_method_call() { let mn = MyFlag { flag: true }; let a = source(1); - mn.data_in(a); - - let mn = MyFlag { flag: true }; - let a = source(22); - mn.data_in_trait(a); - - data_in_to_method_call_trait_dispatch(MyFlag { flag: true }); -} - -fn data_through_method_trait_dispatch(x: T) { - let a = source(34); - let b = x.data_through_trait(a); - sink(b); // $ hasValueFlow=34 + mn.data_in(a) } fn data_through_method() { @@ -173,13 +133,6 @@ fn data_through_method() { let a = source(4); let b = mn.data_through(a); sink(b); // $ hasValueFlow=4 - - let mn = MyFlag { flag: true }; - let a = source(24); - let b = mn.data_through_trait(a); - sink(b); // $ hasValueFlow=24 - - data_through_method_trait_dispatch(MyFlag { flag: true }); } fn data_in_to_method_called_as_function() { @@ -259,7 +212,7 @@ fn test_operator_overloading() { let b = MyInt { value: source(34) }; // The line below is what `*=` desugars to. MulAssign::mul_assign(&mut a, b); - sink(a.value); // $ hasValueFlow=34 + sink(a.value); // $ MISSING: hasValueFlow=34 let mut a = MyInt { value: 0 }; let b = MyInt { value: source(35) }; @@ -277,13 +230,13 @@ fn test_operator_overloading() { sink(c); // $ hasTaintFlow=28 MISSING: hasValueFlow=28 } -trait MyTrait2 { +trait MyTrait { type Output; fn take_self(self, _other: Self::Output) -> Self::Output; fn take_second(self, other: Self::Output) -> Self::Output; } -impl MyTrait2 for MyInt { +impl MyTrait for MyInt { type Output = MyInt; fn take_self(self, _other: MyInt) -> MyInt { @@ -298,17 +251,17 @@ impl MyTrait2 for MyInt { fn data_through_trait_method_called_as_function() { let a = MyInt { value: source(8) }; let b = MyInt { value: 2 }; - let MyInt { value: c } = MyTrait2::take_self(a, b); + let MyInt { value: c } = MyTrait::take_self(a, b); sink(c); // $ hasValueFlow=8 let a = MyInt { value: 0 }; let b = MyInt { value: source(37) }; - let MyInt { value: c } = MyTrait2::take_second(a, b); + let MyInt { value: c } = MyTrait::take_second(a, b); sink(c); // $ hasValueFlow=37 let a = MyInt { value: 0 }; let b = MyInt { value: source(38) }; - let MyInt { value: c } = MyTrait2::take_self(a, b); + let MyInt { value: c } = MyTrait::take_self(a, b); sink(c); } diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index 9c7a9e191416..6fdac9700b6c 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -23,93 +23,73 @@ | main.rs:80:13:80:22 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:86:13:86:27 | pass_through(...) | main.rs:82:5:84:5 | fn pass_through | | main.rs:87:5:87:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:105:9:105:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:109:35:109:43 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:119:9:119:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:123:35:123:44 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:132:13:132:30 | x.get_data_trait() | main.rs:122:5:124:5 | fn get_data_trait | -| main.rs:133:5:133:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:138:13:138:25 | mn.get_data() | main.rs:108:5:110:5 | fn get_data | -| main.rs:139:5:139:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:142:13:142:31 | mn.get_data_trait() | main.rs:122:5:124:5 | fn get_data_trait | -| main.rs:143:5:143:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:145:5:145:60 | data_out_of_method_trait_dispatch(...) | main.rs:131:1:134:1 | fn data_out_of_method_trait_dispatch | -| main.rs:149:13:149:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:150:5:150:22 | x.data_in_trait(...) | main.rs:118:5:120:5 | fn data_in_trait | -| main.rs:155:13:155:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:156:5:156:17 | mn.data_in(...) | main.rs:104:5:106:5 | fn data_in | -| main.rs:159:13:159:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:160:5:160:23 | mn.data_in_trait(...) | main.rs:118:5:120:5 | fn data_in_trait | -| main.rs:162:5:162:64 | data_in_to_method_call_trait_dispatch(...) | main.rs:148:1:151:1 | fn data_in_to_method_call_trait_dispatch | -| main.rs:166:13:166:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:167:13:167:35 | x.data_through_trait(...) | main.rs:126:5:128:5 | fn data_through_trait | -| main.rs:168:5:168:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:173:13:173:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:174:13:174:30 | mn.data_through(...) | main.rs:112:5:114:5 | fn data_through | -| main.rs:175:5:175:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:178:13:178:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:179:13:179:36 | mn.data_through_trait(...) | main.rs:126:5:128:5 | fn data_through_trait | -| main.rs:180:5:180:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:182:5:182:61 | data_through_method_trait_dispatch(...) | main.rs:165:1:169:1 | fn data_through_method_trait_dispatch | -| main.rs:187:13:187:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:188:5:188:26 | ...::data_in(...) | main.rs:104:5:106:5 | fn data_in | -| main.rs:193:13:193:22 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:194:13:194:39 | ...::data_through(...) | main.rs:112:5:114:5 | fn data_through | -| main.rs:195:5:195:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:212:13:212:34 | ...::new(...) | main.rs:205:5:208:5 | fn new | -| main.rs:212:24:212:33 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:214:5:214:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:228:10:228:14 | * ... | main.rs:235:5:237:5 | fn deref | -| main.rs:236:11:236:15 | * ... | main.rs:235:5:237:5 | fn deref | -| main.rs:242:28:242:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:244:13:244:17 | ... + ... | main.rs:220:5:223:5 | fn add | -| main.rs:245:5:245:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:248:28:248:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:249:13:249:17 | ... + ... | main.rs:220:5:223:5 | fn add | -| main.rs:250:5:250:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:99:9:99:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:106:13:106:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:121:13:121:25 | mn.get_data() | main.rs:102:5:108:5 | fn get_data | +| main.rs:122:5:122:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:127:13:127:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:128:5:128:17 | mn.data_in(...) | main.rs:98:5:100:5 | fn data_in | +| main.rs:133:13:133:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:134:13:134:30 | mn.data_through(...) | main.rs:110:5:116:5 | fn data_through | +| main.rs:135:5:135:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:140:13:140:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:141:5:141:26 | ...::data_in(...) | main.rs:98:5:100:5 | fn data_in | +| main.rs:146:13:146:22 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:147:13:147:39 | ...::data_through(...) | main.rs:110:5:116:5 | fn data_through | +| main.rs:148:5:148:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:165:13:165:34 | ...::new(...) | main.rs:158:5:161:5 | fn new | +| main.rs:165:24:165:33 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:167:5:167:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:181:10:181:14 | * ... | main.rs:188:5:190:5 | fn deref | +| main.rs:189:11:189:15 | * ... | main.rs:188:5:190:5 | fn deref | +| main.rs:195:28:195:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:197:13:197:17 | ... + ... | main.rs:173:5:176:5 | fn add | +| main.rs:198:5:198:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:201:28:201:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:202:13:202:17 | ... + ... | main.rs:173:5:176:5 | fn add | +| main.rs:203:5:203:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:205:28:205:36 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:207:13:207:20 | a.add(...) | main.rs:173:5:176:5 | fn add | +| main.rs:208:5:208:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:212:28:212:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:215:5:215:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:218:28:218:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:219:5:219:10 | ... *= ... | main.rs:180:5:182:5 | fn mul_assign | +| main.rs:220:5:220:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:223:28:223:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:226:5:226:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:228:28:228:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:229:13:229:14 | * ... | main.rs:188:5:190:5 | fn deref | +| main.rs:230:5:230:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:252:28:252:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:254:13:254:20 | a.add(...) | main.rs:220:5:223:5 | fn add | -| main.rs:255:5:255:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:259:28:259:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:261:5:261:36 | ...::mul_assign(...) | main.rs:227:5:229:5 | fn mul_assign | -| main.rs:262:5:262:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:265:28:265:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:266:5:266:10 | ... *= ... | main.rs:227:5:229:5 | fn mul_assign | -| main.rs:267:5:267:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:270:28:270:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:273:5:273:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:275:28:275:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:276:13:276:14 | * ... | main.rs:235:5:237:5 | fn deref | -| main.rs:277:5:277:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:299:28:299:36 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:301:30:301:54 | ...::take_self(...) | main.rs:289:5:291:5 | fn take_self | -| main.rs:302:5:302:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:305:28:305:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:306:30:306:56 | ...::take_second(...) | main.rs:293:5:295:5 | fn take_second | -| main.rs:307:5:307:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:310:28:310:37 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:311:30:311:54 | ...::take_self(...) | main.rs:289:5:291:5 | fn take_self | -| main.rs:312:5:312:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:316:13:316:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:317:5:317:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:322:13:322:26 | async_source(...) | main.rs:315:1:319:1 | fn async_source | -| main.rs:323:5:323:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:326:17:326:25 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:327:9:327:15 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:330:5:330:17 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:334:13:334:55 | ...::block_on(...) | file://:0:0:0:0 | fn block_on | -| main.rs:334:41:334:54 | async_source(...) | main.rs:315:1:319:1 | fn async_source | -| main.rs:335:5:335:11 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:337:5:337:62 | ...::block_on(...) | file://:0:0:0:0 | fn block_on | -| main.rs:337:33:337:61 | test_async_await_async_part(...) | main.rs:321:1:331:1 | fn test_async_await_async_part | -| main.rs:341:5:341:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | -| main.rs:342:5:342:35 | data_out_of_call_side_effect1(...) | main.rs:35:1:40:1 | fn data_out_of_call_side_effect1 | -| main.rs:343:5:343:35 | data_out_of_call_side_effect2(...) | main.rs:42:1:50:1 | fn data_out_of_call_side_effect2 | -| main.rs:344:5:344:21 | data_in_to_call(...) | main.rs:56:1:59:1 | fn data_in_to_call | -| main.rs:345:5:345:23 | data_through_call(...) | main.rs:65:1:69:1 | fn data_through_call | -| main.rs:346:5:346:34 | data_through_nested_function(...) | main.rs:79:1:88:1 | fn data_through_nested_function | -| main.rs:348:5:348:24 | data_out_of_method(...) | main.rs:136:1:146:1 | fn data_out_of_method | -| main.rs:349:5:349:28 | data_in_to_method_call(...) | main.rs:153:1:163:1 | fn data_in_to_method_call | -| main.rs:350:5:350:25 | data_through_method(...) | main.rs:171:1:183:1 | fn data_through_method | -| main.rs:352:5:352:31 | test_operator_overloading(...) | main.rs:240:1:278:1 | fn test_operator_overloading | -| main.rs:353:5:353:22 | test_async_await(...) | main.rs:333:1:338:1 | fn test_async_await | +| main.rs:254:30:254:53 | ...::take_self(...) | main.rs:242:5:244:5 | fn take_self | +| main.rs:255:5:255:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:258:28:258:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:259:30:259:55 | ...::take_second(...) | main.rs:246:5:248:5 | fn take_second | +| main.rs:260:5:260:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:263:28:263:37 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:264:30:264:53 | ...::take_self(...) | main.rs:242:5:244:5 | fn take_self | +| main.rs:265:5:265:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:269:13:269:21 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:270:5:270:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:275:13:275:26 | async_source(...) | main.rs:268:1:272:1 | fn async_source | +| main.rs:276:5:276:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:279:17:279:25 | source(...) | main.rs:1:1:3:1 | fn source | +| main.rs:280:9:280:15 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:283:5:283:17 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:287:13:287:55 | ...::block_on(...) | file://:0:0:0:0 | fn block_on | +| main.rs:287:41:287:54 | async_source(...) | main.rs:268:1:272:1 | fn async_source | +| main.rs:288:5:288:11 | sink(...) | main.rs:5:1:7:1 | fn sink | +| main.rs:290:5:290:62 | ...::block_on(...) | file://:0:0:0:0 | fn block_on | +| main.rs:290:33:290:61 | test_async_await_async_part(...) | main.rs:274:1:284:1 | fn test_async_await_async_part | +| main.rs:294:5:294:22 | data_out_of_call(...) | main.rs:16:1:19:1 | fn data_out_of_call | +| main.rs:295:5:295:35 | data_out_of_call_side_effect1(...) | main.rs:35:1:40:1 | fn data_out_of_call_side_effect1 | +| main.rs:296:5:296:35 | data_out_of_call_side_effect2(...) | main.rs:42:1:50:1 | fn data_out_of_call_side_effect2 | +| main.rs:297:5:297:21 | data_in_to_call(...) | main.rs:56:1:59:1 | fn data_in_to_call | +| main.rs:298:5:298:23 | data_through_call(...) | main.rs:65:1:69:1 | fn data_through_call | +| main.rs:299:5:299:34 | data_through_nested_function(...) | main.rs:79:1:88:1 | fn data_through_nested_function | +| main.rs:301:5:301:24 | data_out_of_method(...) | main.rs:119:1:123:1 | fn data_out_of_method | +| main.rs:302:5:302:28 | data_in_to_method_call(...) | main.rs:125:1:129:1 | fn data_in_to_method_call | +| main.rs:303:5:303:25 | data_through_method(...) | main.rs:131:1:136:1 | fn data_through_method | +| main.rs:305:5:305:31 | test_operator_overloading(...) | main.rs:193:1:231:1 | fn test_operator_overloading | +| main.rs:306:5:306:22 | test_async_await(...) | main.rs:286:1:291:1 | fn test_async_await | diff --git a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected deleted file mode 100644 index ebe4e66e6e2a..000000000000 --- a/rust/ql/test/library-tests/dataflow/models/CONSISTENCY/PathResolutionConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -multipleCallTargets -| main.rs:362:14:362:30 | ... .lt(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 0430b6f8dff1..54337a1f0214 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -2,8 +2,8 @@ fn source(i: i64) -> i64 { 1000 + i } -fn sink(s: T) { - println!("{:?}", s); +fn sink(s: i64) { + println!("{}", s); } // has a flow model @@ -176,10 +176,7 @@ fn test_set_tuple_element() { } // has a flow model -pub fn apply(n: i64, f: F) -> i64 -where - F: FnOnce(i64) -> i64, -{ +pub fn apply(n: i64, f: F) -> i64 where F : FnOnce(i64) -> i64 { 0 } @@ -291,81 +288,6 @@ fn test_arg_source() { sink(i) // $ hasValueFlow=i } -struct MyStruct2(i64); - -impl PartialEq for MyStruct { - fn eq(&self, other: &Self) -> bool { - true - } -} - -impl PartialEq for MyStruct2 { - fn eq(&self, other: &Self) -> bool { - self.0 == other.0 - } -} - -impl Eq for MyStruct {} - -impl Eq for MyStruct2 {} - -use std::cmp::Ordering; - -impl PartialOrd for MyStruct { - fn partial_cmp(&self, other: &Self) -> Option { - Some(Ordering::Equal) - } -} - -impl PartialOrd for MyStruct2 { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.0.cmp(&other.0)) - } -} - -impl Ord for MyStruct { - fn cmp(&self, other: &Self) -> Ordering { - Ordering::Equal - } -} - -impl Ord for MyStruct2 { - fn cmp(&self, other: &Self) -> Ordering { - self.0.cmp(&other.0) - } - - fn max(self, other: Self) -> Self { - other - } -} - -fn test_trait_model(x: T) { - let x1 = source(20).max(0); - sink(x1); // $ hasValueFlow=20 - - let x2 = (MyStruct { - field1: source(23), - field2: 0, - }) - .max(MyStruct { - field1: 0, - field2: 0, - }); - sink(x2.field1); // $ hasValueFlow=23 - - let x3 = MyStruct2(source(24)).max(MyStruct2(0)); - sink(x3.0); // no flow, because the model does not apply when the target is in source code - - let x4 = source(25).max(1); - sink(x4); // $ hasValueFlow=25 - - let x5 = source(26).lt(&1); - sink(x5); // $ hasTaintFlow=26 - - let x6 = source(27) < 1; - sink(x6); // $ hasTaintFlow=27 -} - #[tokio::main] async fn main() { test_identify(); diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index db7489809b85..9016ebae47e9 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -6,22 +6,20 @@ models | 5 | Source: main::arg_source; Argument[0]; test-source | | 6 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | | 7 | Source: main::simple_source; ReturnValue; test-source | -| 8 | Summary: <_ as core::cmp::Ord>::max; Argument[self]; ReturnValue; value | -| 9 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 10 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 11 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 12 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 13 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 14 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 15 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 16 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 17 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 18 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 19 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 20 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 21 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 22 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 23 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 8 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 9 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 10 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 11 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 12 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 13 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 14 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 15 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 16 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 17 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 18 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 19 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 20 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 21 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -31,7 +29,7 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:12 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:10 | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:9:40:9 | s | main.rs:41:27:41:27 | s | provenance | | | main.rs:40:13:40:21 | source(...) | main.rs:40:9:40:9 | s | provenance | | @@ -42,8 +40,8 @@ edges | main.rs:41:14:41:28 | ...::A(...) [A] | main.rs:41:9:41:10 | e1 [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | | main.rs:41:27:41:27 | s | main.rs:41:14:41:28 | ...::A(...) [A] | provenance | | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:18 | -| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:18 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:16 | +| main.rs:42:22:42:23 | e1 [A] | main.rs:42:10:42:24 | get_var_pos(...) | provenance | MaD:16 | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:9:53:9 | s | main.rs:54:26:54:26 | s | provenance | | | main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | s | provenance | | @@ -52,8 +50,8 @@ edges | main.rs:54:9:54:10 | e1 [B] | main.rs:55:11:55:12 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | | main.rs:54:14:54:27 | set_var_pos(...) [B] | main.rs:54:9:54:10 | e1 [B] | provenance | | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:23 | -| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:23 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:21 | +| main.rs:54:26:54:26 | s | main.rs:54:14:54:27 | set_var_pos(...) [B] | provenance | MaD:21 | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:55:11:55:12 | e1 [B] | main.rs:57:9:57:23 | ...::B(...) [B] | provenance | | | main.rs:57:9:57:23 | ...::B(...) [B] | main.rs:57:22:57:22 | i | provenance | | @@ -70,8 +68,8 @@ edges | main.rs:73:14:73:42 | ...::C {...} [C] | main.rs:73:9:73:10 | e1 [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | | main.rs:73:40:73:40 | s | main.rs:73:14:73:42 | ...::C {...} [C] | provenance | | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:17 | -| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:17 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:15 | +| main.rs:74:24:74:25 | e1 [C] | main.rs:74:10:74:26 | get_var_field(...) | provenance | MaD:15 | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:9:85:9 | s | main.rs:86:28:86:28 | s | provenance | | | main.rs:85:13:85:21 | source(...) | main.rs:85:9:85:9 | s | provenance | | @@ -80,8 +78,8 @@ edges | main.rs:86:9:86:10 | e1 [D] | main.rs:87:11:87:12 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | | main.rs:86:14:86:29 | set_var_field(...) [D] | main.rs:86:9:86:10 | e1 [D] | provenance | | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:22 | -| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:22 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:20 | +| main.rs:86:28:86:28 | s | main.rs:86:14:86:29 | set_var_field(...) [D] | provenance | MaD:20 | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:87:11:87:12 | e1 [D] | main.rs:89:9:89:37 | ...::D {...} [D] | provenance | | | main.rs:89:9:89:37 | ...::D {...} [D] | main.rs:89:35:89:35 | i | provenance | | @@ -98,8 +96,8 @@ edges | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | main.rs:105:9:105:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:106:17:106:17 | s | main.rs:105:21:108:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:15 | -| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:15 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:13 | +| main.rs:109:27:109:35 | my_struct [MyStruct.field1] | main.rs:109:10:109:36 | get_struct_field(...) | provenance | MaD:13 | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:9:126:9 | s | main.rs:127:38:127:38 | s | provenance | | | main.rs:126:13:126:21 | source(...) | main.rs:126:9:126:9 | s | provenance | | @@ -108,16 +106,16 @@ edges | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | main.rs:127:9:127:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:20 | -| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:20 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:18 | +| main.rs:127:38:127:38 | s | main.rs:127:21:127:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:18 | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:129:10:129:18 | my_struct [MyStruct.field2] | main.rs:129:10:129:25 | my_struct.field2 | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | | main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:13 | -| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:13 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:11 | +| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:11 | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | | | main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | | @@ -128,8 +126,8 @@ edges | main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | | main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:19 | -| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:19 | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:17 | +| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:17 | | main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | | main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | | | main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | | @@ -142,8 +140,8 @@ edges | main.rs:160:13:160:18 | TupleExpr [tuple.0] | main.rs:160:9:160:9 | t [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | | main.rs:160:14:160:14 | s | main.rs:160:13:160:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:16 | -| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:16 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:14 | +| main.rs:161:28:161:28 | t [tuple.0] | main.rs:161:10:161:29 | get_tuple_element(...) | provenance | MaD:14 | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:9:172:9 | s | main.rs:173:31:173:31 | s | provenance | | | main.rs:172:13:172:22 | source(...) | main.rs:172:9:172:9 | s | provenance | | @@ -152,148 +150,120 @@ edges | main.rs:173:9:173:9 | t [tuple.1] | main.rs:175:10:175:10 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | main.rs:173:9:173:9 | t [tuple.1] | provenance | | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:21 | -| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:21 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:19 | +| main.rs:173:31:173:31 | s | main.rs:173:13:173:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:19 | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | | main.rs:175:10:175:10 | t [tuple.1] | main.rs:175:10:175:12 | t.1 | provenance | | -| main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | -| main.rs:187:9:187:9 | s | main.rs:192:11:192:11 | s | provenance | | -| main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | -| main.rs:187:13:187:22 | source(...) | main.rs:187:9:187:9 | s | provenance | | -| main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:188:14:188:14 | ... | main.rs:189:14:189:14 | n | provenance | | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:10 | -| main.rs:192:11:192:11 | s | main.rs:188:14:188:14 | ... | provenance | MaD:10 | -| main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | -| main.rs:196:13:196:22 | source(...) | main.rs:198:23:198:23 | f [captured s] | provenance | | -| main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | -| main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | provenance | | -| main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | -| main.rs:198:9:198:9 | t | main.rs:199:10:199:10 | t | provenance | | -| main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:13:198:24 | apply(...) | main.rs:198:9:198:9 | t | provenance | | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:10 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | -| main.rs:198:23:198:23 | f [captured s] | main.rs:198:13:198:24 | apply(...) | provenance | MaD:11 | -| main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | -| main.rs:203:9:203:9 | s | main.rs:205:19:205:19 | s | provenance | | -| main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | -| main.rs:203:13:203:22 | source(...) | main.rs:203:9:203:9 | s | provenance | | -| main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | provenance | | -| main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | provenance | | -| main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | -| main.rs:205:9:205:9 | t | main.rs:206:10:206:10 | t | provenance | | -| main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:13:205:23 | apply(...) | main.rs:205:9:205:9 | t | provenance | | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:10 | -| main.rs:205:19:205:19 | s | main.rs:205:13:205:23 | apply(...) | provenance | MaD:10 | -| main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | -| main.rs:215:9:215:9 | s | main.rs:216:30:216:30 | s | provenance | | -| main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | -| main.rs:215:13:215:22 | source(...) | main.rs:215:9:215:9 | s | provenance | | -| main.rs:216:9:216:9 | t | main.rs:217:10:217:10 | t | provenance | | -| main.rs:216:9:216:9 | t | main.rs:217:10:217:10 | t | provenance | | -| main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | -| main.rs:216:13:216:31 | get_async_number(...) [future] | main.rs:216:13:216:37 | await ... | provenance | | -| main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:13:216:37 | await ... | main.rs:216:9:216:9 | t | provenance | | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:14 | -| main.rs:216:30:216:30 | s | main.rs:216:13:216:31 | get_async_number(...) [future] | provenance | MaD:14 | -| main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | -| main.rs:236:9:236:9 | s [D] | main.rs:237:11:237:11 | s [D] | provenance | | -| main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | -| main.rs:236:13:236:23 | enum_source | main.rs:236:13:236:27 | enum_source(...) [D] | provenance | Src:MaD:6 | -| main.rs:236:13:236:27 | enum_source(...) [D] | main.rs:236:9:236:9 | s [D] | provenance | | -| main.rs:236:13:236:27 | enum_source(...) [D] | main.rs:236:9:236:9 | s [D] | provenance | | -| main.rs:237:11:237:11 | s [D] | main.rs:239:9:239:37 | ...::D {...} [D] | provenance | | -| main.rs:237:11:237:11 | s [D] | main.rs:239:9:239:37 | ...::D {...} [D] | provenance | | -| main.rs:239:9:239:37 | ...::D {...} [D] | main.rs:239:35:239:35 | i | provenance | | -| main.rs:239:9:239:37 | ...::D {...} [D] | main.rs:239:35:239:35 | i | provenance | | -| main.rs:239:35:239:35 | i | main.rs:239:47:239:47 | i | provenance | | -| main.rs:239:35:239:35 | i | main.rs:239:47:239:47 | i | provenance | | -| main.rs:245:9:245:9 | s [C] | main.rs:246:11:246:11 | s [C] | provenance | | -| main.rs:245:9:245:9 | s [C] | main.rs:246:11:246:11 | s [C] | provenance | | -| main.rs:245:13:245:24 | e.source(...) [C] | main.rs:245:9:245:9 | s [C] | provenance | | -| main.rs:245:13:245:24 | e.source(...) [C] | main.rs:245:9:245:9 | s [C] | provenance | | -| main.rs:245:15:245:20 | source | main.rs:245:13:245:24 | e.source(...) [C] | provenance | Src:MaD:4 | -| main.rs:245:15:245:20 | source | main.rs:245:13:245:24 | e.source(...) [C] | provenance | Src:MaD:4 | -| main.rs:246:11:246:11 | s [C] | main.rs:247:9:247:37 | ...::C {...} [C] | provenance | | -| main.rs:246:11:246:11 | s [C] | main.rs:247:9:247:37 | ...::C {...} [C] | provenance | | -| main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | -| main.rs:247:9:247:37 | ...::C {...} [C] | main.rs:247:35:247:35 | i | provenance | | -| main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | -| main.rs:247:35:247:35 | i | main.rs:247:47:247:47 | i | provenance | | -| main.rs:256:9:256:9 | s | main.rs:257:41:257:41 | s | provenance | | -| main.rs:256:9:256:9 | s | main.rs:257:41:257:41 | s | provenance | | -| main.rs:256:13:256:22 | source(...) | main.rs:256:9:256:9 | s | provenance | | -| main.rs:256:13:256:22 | source(...) | main.rs:256:9:256:9 | s | provenance | | -| main.rs:257:15:257:43 | ...::C {...} [C] | main.rs:257:5:257:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:257:15:257:43 | ...::C {...} [C] | main.rs:257:5:257:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | -| main.rs:257:41:257:41 | s | main.rs:257:15:257:43 | ...::C {...} [C] | provenance | | -| main.rs:257:41:257:41 | s | main.rs:257:15:257:43 | ...::C {...} [C] | provenance | | -| main.rs:262:9:262:9 | s | main.rs:263:39:263:39 | s | provenance | | -| main.rs:262:9:262:9 | s | main.rs:263:39:263:39 | s | provenance | | -| main.rs:262:13:262:22 | source(...) | main.rs:262:9:262:9 | s | provenance | | -| main.rs:262:13:262:22 | source(...) | main.rs:262:9:262:9 | s | provenance | | -| main.rs:263:9:263:9 | e [D] | main.rs:264:5:264:5 | e [D] | provenance | | -| main.rs:263:9:263:9 | e [D] | main.rs:264:5:264:5 | e [D] | provenance | | -| main.rs:263:13:263:41 | ...::D {...} [D] | main.rs:263:9:263:9 | e [D] | provenance | | -| main.rs:263:13:263:41 | ...::D {...} [D] | main.rs:263:9:263:9 | e [D] | provenance | | -| main.rs:263:39:263:39 | s | main.rs:263:13:263:41 | ...::D {...} [D] | provenance | | -| main.rs:263:39:263:39 | s | main.rs:263:13:263:41 | ...::D {...} [D] | provenance | | -| main.rs:264:5:264:5 | e [D] | main.rs:264:7:264:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:264:5:264:5 | e [D] | main.rs:264:7:264:10 | sink | provenance | MaD:1 Sink:MaD:1 | -| main.rs:273:9:273:9 | s | main.rs:274:10:274:10 | s | provenance | | -| main.rs:273:9:273:9 | s | main.rs:274:10:274:10 | s | provenance | | -| main.rs:273:13:273:25 | simple_source | main.rs:273:13:273:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:273:13:273:25 | simple_source | main.rs:273:13:273:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:273:13:273:29 | simple_source(...) | main.rs:273:9:273:9 | s | provenance | | -| main.rs:273:13:273:29 | simple_source(...) | main.rs:273:9:273:9 | s | provenance | | -| main.rs:281:9:281:9 | s | main.rs:282:17:282:17 | s | provenance | | -| main.rs:281:9:281:9 | s | main.rs:282:17:282:17 | s | provenance | | -| main.rs:281:13:281:22 | source(...) | main.rs:281:9:281:9 | s | provenance | | -| main.rs:281:13:281:22 | source(...) | main.rs:281:9:281:9 | s | provenance | | -| main.rs:282:17:282:17 | s | main.rs:282:5:282:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:282:17:282:17 | s | main.rs:282:5:282:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:290:5:290:14 | arg_source | main.rs:290:16:290:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:290:5:290:14 | arg_source | main.rs:290:16:290:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:290:16:290:16 | [post] i | main.rs:291:10:291:10 | i | provenance | | -| main.rs:290:16:290:16 | [post] i | main.rs:291:10:291:10 | i | provenance | | -| main.rs:343:9:343:10 | x1 | main.rs:344:10:344:11 | x1 | provenance | | -| main.rs:343:9:343:10 | x1 | main.rs:344:10:344:11 | x1 | provenance | | -| main.rs:343:14:343:23 | source(...) | main.rs:343:14:343:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:343:14:343:23 | source(...) | main.rs:343:14:343:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:343:14:343:30 | ... .max(...) | main.rs:343:9:343:10 | x1 | provenance | | -| main.rs:343:14:343:30 | ... .max(...) | main.rs:343:9:343:10 | x1 | provenance | | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | main.rs:354:10:354:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | main.rs:354:10:354:11 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | main.rs:346:9:346:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | main.rs:346:9:346:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:8 | -| main.rs:347:17:347:26 | source(...) | main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:347:17:347:26 | source(...) | main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | main.rs:354:10:354:18 | x2.field1 | provenance | | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | main.rs:354:10:354:18 | x2.field1 | provenance | | -| main.rs:359:9:359:10 | x4 | main.rs:360:10:360:11 | x4 | provenance | | -| main.rs:359:9:359:10 | x4 | main.rs:360:10:360:11 | x4 | provenance | | -| main.rs:359:14:359:23 | source(...) | main.rs:359:14:359:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:359:14:359:23 | source(...) | main.rs:359:14:359:30 | ... .max(...) | provenance | MaD:8 | -| main.rs:359:14:359:30 | ... .max(...) | main.rs:359:9:359:10 | x4 | provenance | | -| main.rs:359:14:359:30 | ... .max(...) | main.rs:359:9:359:10 | x4 | provenance | | -| main.rs:362:9:362:10 | x5 | main.rs:363:10:363:11 | x5 | provenance | | -| main.rs:362:14:362:23 | source(...) | main.rs:362:14:362:30 | ... .lt(...) | provenance | MaD:9 | -| main.rs:362:14:362:30 | ... .lt(...) | main.rs:362:9:362:10 | x5 | provenance | | -| main.rs:365:9:365:10 | x6 | main.rs:366:10:366:11 | x6 | provenance | | -| main.rs:365:14:365:23 | source(...) | main.rs:365:14:365:27 | ... < ... | provenance | MaD:9 | -| main.rs:365:14:365:27 | ... < ... | main.rs:365:9:365:10 | x6 | provenance | | +| main.rs:184:9:184:9 | s | main.rs:189:11:189:11 | s | provenance | | +| main.rs:184:9:184:9 | s | main.rs:189:11:189:11 | s | provenance | | +| main.rs:184:13:184:22 | source(...) | main.rs:184:9:184:9 | s | provenance | | +| main.rs:184:13:184:22 | source(...) | main.rs:184:9:184:9 | s | provenance | | +| main.rs:185:14:185:14 | ... | main.rs:186:14:186:14 | n | provenance | | +| main.rs:185:14:185:14 | ... | main.rs:186:14:186:14 | n | provenance | | +| main.rs:189:11:189:11 | s | main.rs:185:14:185:14 | ... | provenance | MaD:8 | +| main.rs:189:11:189:11 | s | main.rs:185:14:185:14 | ... | provenance | MaD:8 | +| main.rs:193:13:193:22 | source(...) | main.rs:195:23:195:23 | f [captured s] | provenance | | +| main.rs:193:13:193:22 | source(...) | main.rs:195:23:195:23 | f [captured s] | provenance | | +| main.rs:194:40:194:40 | s | main.rs:194:17:194:42 | if ... {...} else {...} | provenance | | +| main.rs:194:40:194:40 | s | main.rs:194:17:194:42 | if ... {...} else {...} | provenance | | +| main.rs:195:9:195:9 | t | main.rs:196:10:196:10 | t | provenance | | +| main.rs:195:9:195:9 | t | main.rs:196:10:196:10 | t | provenance | | +| main.rs:195:13:195:24 | apply(...) | main.rs:195:9:195:9 | t | provenance | | +| main.rs:195:13:195:24 | apply(...) | main.rs:195:9:195:9 | t | provenance | | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | provenance | MaD:8 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | provenance | MaD:8 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | provenance | MaD:9 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | provenance | MaD:9 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:195:13:195:24 | apply(...) | provenance | MaD:8 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:195:13:195:24 | apply(...) | provenance | MaD:8 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:195:13:195:24 | apply(...) | provenance | MaD:9 | +| main.rs:195:23:195:23 | f [captured s] | main.rs:195:13:195:24 | apply(...) | provenance | MaD:9 | +| main.rs:200:9:200:9 | s | main.rs:202:19:202:19 | s | provenance | | +| main.rs:200:9:200:9 | s | main.rs:202:19:202:19 | s | provenance | | +| main.rs:200:13:200:22 | source(...) | main.rs:200:9:200:9 | s | provenance | | +| main.rs:200:13:200:22 | source(...) | main.rs:200:9:200:9 | s | provenance | | +| main.rs:201:14:201:14 | ... | main.rs:201:17:201:42 | if ... {...} else {...} | provenance | | +| main.rs:201:14:201:14 | ... | main.rs:201:17:201:42 | if ... {...} else {...} | provenance | | +| main.rs:202:9:202:9 | t | main.rs:203:10:203:10 | t | provenance | | +| main.rs:202:9:202:9 | t | main.rs:203:10:203:10 | t | provenance | | +| main.rs:202:13:202:23 | apply(...) | main.rs:202:9:202:9 | t | provenance | | +| main.rs:202:13:202:23 | apply(...) | main.rs:202:9:202:9 | t | provenance | | +| main.rs:202:19:202:19 | s | main.rs:201:14:201:14 | ... | provenance | MaD:8 | +| main.rs:202:19:202:19 | s | main.rs:201:14:201:14 | ... | provenance | MaD:8 | +| main.rs:202:19:202:19 | s | main.rs:202:13:202:23 | apply(...) | provenance | MaD:8 | +| main.rs:202:19:202:19 | s | main.rs:202:13:202:23 | apply(...) | provenance | MaD:8 | +| main.rs:212:9:212:9 | s | main.rs:213:30:213:30 | s | provenance | | +| main.rs:212:9:212:9 | s | main.rs:213:30:213:30 | s | provenance | | +| main.rs:212:13:212:22 | source(...) | main.rs:212:9:212:9 | s | provenance | | +| main.rs:212:13:212:22 | source(...) | main.rs:212:9:212:9 | s | provenance | | +| main.rs:213:9:213:9 | t | main.rs:214:10:214:10 | t | provenance | | +| main.rs:213:9:213:9 | t | main.rs:214:10:214:10 | t | provenance | | +| main.rs:213:13:213:31 | get_async_number(...) [future] | main.rs:213:13:213:37 | await ... | provenance | | +| main.rs:213:13:213:31 | get_async_number(...) [future] | main.rs:213:13:213:37 | await ... | provenance | | +| main.rs:213:13:213:37 | await ... | main.rs:213:9:213:9 | t | provenance | | +| main.rs:213:13:213:37 | await ... | main.rs:213:9:213:9 | t | provenance | | +| main.rs:213:30:213:30 | s | main.rs:213:13:213:31 | get_async_number(...) [future] | provenance | MaD:12 | +| main.rs:213:30:213:30 | s | main.rs:213:13:213:31 | get_async_number(...) [future] | provenance | MaD:12 | +| main.rs:233:9:233:9 | s [D] | main.rs:234:11:234:11 | s [D] | provenance | | +| main.rs:233:9:233:9 | s [D] | main.rs:234:11:234:11 | s [D] | provenance | | +| main.rs:233:13:233:23 | enum_source | main.rs:233:13:233:27 | enum_source(...) [D] | provenance | Src:MaD:6 | +| main.rs:233:13:233:23 | enum_source | main.rs:233:13:233:27 | enum_source(...) [D] | provenance | Src:MaD:6 | +| main.rs:233:13:233:27 | enum_source(...) [D] | main.rs:233:9:233:9 | s [D] | provenance | | +| main.rs:233:13:233:27 | enum_source(...) [D] | main.rs:233:9:233:9 | s [D] | provenance | | +| main.rs:234:11:234:11 | s [D] | main.rs:236:9:236:37 | ...::D {...} [D] | provenance | | +| main.rs:234:11:234:11 | s [D] | main.rs:236:9:236:37 | ...::D {...} [D] | provenance | | +| main.rs:236:9:236:37 | ...::D {...} [D] | main.rs:236:35:236:35 | i | provenance | | +| main.rs:236:9:236:37 | ...::D {...} [D] | main.rs:236:35:236:35 | i | provenance | | +| main.rs:236:35:236:35 | i | main.rs:236:47:236:47 | i | provenance | | +| main.rs:236:35:236:35 | i | main.rs:236:47:236:47 | i | provenance | | +| main.rs:242:9:242:9 | s [C] | main.rs:243:11:243:11 | s [C] | provenance | | +| main.rs:242:9:242:9 | s [C] | main.rs:243:11:243:11 | s [C] | provenance | | +| main.rs:242:13:242:24 | e.source(...) [C] | main.rs:242:9:242:9 | s [C] | provenance | | +| main.rs:242:13:242:24 | e.source(...) [C] | main.rs:242:9:242:9 | s [C] | provenance | | +| main.rs:242:15:242:20 | source | main.rs:242:13:242:24 | e.source(...) [C] | provenance | Src:MaD:4 | +| main.rs:242:15:242:20 | source | main.rs:242:13:242:24 | e.source(...) [C] | provenance | Src:MaD:4 | +| main.rs:243:11:243:11 | s [C] | main.rs:244:9:244:37 | ...::C {...} [C] | provenance | | +| main.rs:243:11:243:11 | s [C] | main.rs:244:9:244:37 | ...::C {...} [C] | provenance | | +| main.rs:244:9:244:37 | ...::C {...} [C] | main.rs:244:35:244:35 | i | provenance | | +| main.rs:244:9:244:37 | ...::C {...} [C] | main.rs:244:35:244:35 | i | provenance | | +| main.rs:244:35:244:35 | i | main.rs:244:47:244:47 | i | provenance | | +| main.rs:244:35:244:35 | i | main.rs:244:47:244:47 | i | provenance | | +| main.rs:253:9:253:9 | s | main.rs:254:41:254:41 | s | provenance | | +| main.rs:253:9:253:9 | s | main.rs:254:41:254:41 | s | provenance | | +| main.rs:253:13:253:22 | source(...) | main.rs:253:9:253:9 | s | provenance | | +| main.rs:253:13:253:22 | source(...) | main.rs:253:9:253:9 | s | provenance | | +| main.rs:254:15:254:43 | ...::C {...} [C] | main.rs:254:5:254:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:254:15:254:43 | ...::C {...} [C] | main.rs:254:5:254:13 | enum_sink | provenance | MaD:2 Sink:MaD:2 | +| main.rs:254:41:254:41 | s | main.rs:254:15:254:43 | ...::C {...} [C] | provenance | | +| main.rs:254:41:254:41 | s | main.rs:254:15:254:43 | ...::C {...} [C] | provenance | | +| main.rs:259:9:259:9 | s | main.rs:260:39:260:39 | s | provenance | | +| main.rs:259:9:259:9 | s | main.rs:260:39:260:39 | s | provenance | | +| main.rs:259:13:259:22 | source(...) | main.rs:259:9:259:9 | s | provenance | | +| main.rs:259:13:259:22 | source(...) | main.rs:259:9:259:9 | s | provenance | | +| main.rs:260:9:260:9 | e [D] | main.rs:261:5:261:5 | e [D] | provenance | | +| main.rs:260:9:260:9 | e [D] | main.rs:261:5:261:5 | e [D] | provenance | | +| main.rs:260:13:260:41 | ...::D {...} [D] | main.rs:260:9:260:9 | e [D] | provenance | | +| main.rs:260:13:260:41 | ...::D {...} [D] | main.rs:260:9:260:9 | e [D] | provenance | | +| main.rs:260:39:260:39 | s | main.rs:260:13:260:41 | ...::D {...} [D] | provenance | | +| main.rs:260:39:260:39 | s | main.rs:260:13:260:41 | ...::D {...} [D] | provenance | | +| main.rs:261:5:261:5 | e [D] | main.rs:261:7:261:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:261:5:261:5 | e [D] | main.rs:261:7:261:10 | sink | provenance | MaD:1 Sink:MaD:1 | +| main.rs:270:9:270:9 | s | main.rs:271:10:271:10 | s | provenance | | +| main.rs:270:9:270:9 | s | main.rs:271:10:271:10 | s | provenance | | +| main.rs:270:13:270:25 | simple_source | main.rs:270:13:270:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:270:13:270:25 | simple_source | main.rs:270:13:270:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:270:13:270:29 | simple_source(...) | main.rs:270:9:270:9 | s | provenance | | +| main.rs:270:13:270:29 | simple_source(...) | main.rs:270:9:270:9 | s | provenance | | +| main.rs:278:9:278:9 | s | main.rs:279:17:279:17 | s | provenance | | +| main.rs:278:9:278:9 | s | main.rs:279:17:279:17 | s | provenance | | +| main.rs:278:13:278:22 | source(...) | main.rs:278:9:278:9 | s | provenance | | +| main.rs:278:13:278:22 | source(...) | main.rs:278:9:278:9 | s | provenance | | +| main.rs:279:17:279:17 | s | main.rs:279:5:279:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:279:17:279:17 | s | main.rs:279:5:279:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:287:5:287:14 | arg_source | main.rs:287:16:287:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:287:5:287:14 | arg_source | main.rs:287:16:287:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:287:16:287:16 | [post] i | main.rs:288:10:288:10 | i | provenance | | +| main.rs:287:16:287:16 | [post] i | main.rs:288:10:288:10 | i | provenance | | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -451,175 +421,139 @@ nodes | main.rs:175:10:175:10 | t [tuple.1] | semmle.label | t [tuple.1] | | main.rs:175:10:175:12 | t.1 | semmle.label | t.1 | | main.rs:175:10:175:12 | t.1 | semmle.label | t.1 | -| main.rs:187:9:187:9 | s | semmle.label | s | -| main.rs:187:9:187:9 | s | semmle.label | s | -| main.rs:187:13:187:22 | source(...) | semmle.label | source(...) | -| main.rs:187:13:187:22 | source(...) | semmle.label | source(...) | -| main.rs:188:14:188:14 | ... | semmle.label | ... | -| main.rs:188:14:188:14 | ... | semmle.label | ... | -| main.rs:189:14:189:14 | n | semmle.label | n | -| main.rs:189:14:189:14 | n | semmle.label | n | -| main.rs:192:11:192:11 | s | semmle.label | s | -| main.rs:192:11:192:11 | s | semmle.label | s | -| main.rs:196:13:196:22 | source(...) | semmle.label | source(...) | -| main.rs:196:13:196:22 | source(...) | semmle.label | source(...) | -| main.rs:197:17:197:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:197:17:197:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:197:40:197:40 | s | semmle.label | s | -| main.rs:197:40:197:40 | s | semmle.label | s | -| main.rs:198:9:198:9 | t | semmle.label | t | -| main.rs:198:9:198:9 | t | semmle.label | t | -| main.rs:198:13:198:24 | apply(...) | semmle.label | apply(...) | -| main.rs:198:13:198:24 | apply(...) | semmle.label | apply(...) | -| main.rs:198:23:198:23 | f [captured s] | semmle.label | f [captured s] | -| main.rs:198:23:198:23 | f [captured s] | semmle.label | f [captured s] | -| main.rs:199:10:199:10 | t | semmle.label | t | -| main.rs:199:10:199:10 | t | semmle.label | t | -| main.rs:203:9:203:9 | s | semmle.label | s | -| main.rs:203:9:203:9 | s | semmle.label | s | -| main.rs:203:13:203:22 | source(...) | semmle.label | source(...) | -| main.rs:203:13:203:22 | source(...) | semmle.label | source(...) | -| main.rs:204:14:204:14 | ... | semmle.label | ... | -| main.rs:204:14:204:14 | ... | semmle.label | ... | -| main.rs:204:17:204:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:204:17:204:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | -| main.rs:205:9:205:9 | t | semmle.label | t | -| main.rs:205:9:205:9 | t | semmle.label | t | -| main.rs:205:13:205:23 | apply(...) | semmle.label | apply(...) | -| main.rs:205:13:205:23 | apply(...) | semmle.label | apply(...) | -| main.rs:205:19:205:19 | s | semmle.label | s | -| main.rs:205:19:205:19 | s | semmle.label | s | -| main.rs:206:10:206:10 | t | semmle.label | t | -| main.rs:206:10:206:10 | t | semmle.label | t | -| main.rs:215:9:215:9 | s | semmle.label | s | -| main.rs:215:9:215:9 | s | semmle.label | s | -| main.rs:215:13:215:22 | source(...) | semmle.label | source(...) | -| main.rs:215:13:215:22 | source(...) | semmle.label | source(...) | -| main.rs:216:9:216:9 | t | semmle.label | t | -| main.rs:216:9:216:9 | t | semmle.label | t | -| main.rs:216:13:216:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | -| main.rs:216:13:216:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | -| main.rs:216:13:216:37 | await ... | semmle.label | await ... | -| main.rs:216:13:216:37 | await ... | semmle.label | await ... | -| main.rs:216:30:216:30 | s | semmle.label | s | -| main.rs:216:30:216:30 | s | semmle.label | s | -| main.rs:217:10:217:10 | t | semmle.label | t | -| main.rs:217:10:217:10 | t | semmle.label | t | -| main.rs:236:9:236:9 | s [D] | semmle.label | s [D] | -| main.rs:236:9:236:9 | s [D] | semmle.label | s [D] | -| main.rs:236:13:236:23 | enum_source | semmle.label | enum_source | -| main.rs:236:13:236:23 | enum_source | semmle.label | enum_source | -| main.rs:236:13:236:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | -| main.rs:236:13:236:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | -| main.rs:237:11:237:11 | s [D] | semmle.label | s [D] | -| main.rs:237:11:237:11 | s [D] | semmle.label | s [D] | -| main.rs:239:9:239:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:239:9:239:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:239:35:239:35 | i | semmle.label | i | -| main.rs:239:35:239:35 | i | semmle.label | i | -| main.rs:239:47:239:47 | i | semmle.label | i | -| main.rs:239:47:239:47 | i | semmle.label | i | -| main.rs:245:9:245:9 | s [C] | semmle.label | s [C] | -| main.rs:245:9:245:9 | s [C] | semmle.label | s [C] | -| main.rs:245:13:245:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:245:13:245:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | -| main.rs:245:15:245:20 | source | semmle.label | source | -| main.rs:245:15:245:20 | source | semmle.label | source | -| main.rs:246:11:246:11 | s [C] | semmle.label | s [C] | -| main.rs:246:11:246:11 | s [C] | semmle.label | s [C] | -| main.rs:247:9:247:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:247:9:247:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:247:35:247:35 | i | semmle.label | i | -| main.rs:247:35:247:35 | i | semmle.label | i | -| main.rs:247:47:247:47 | i | semmle.label | i | -| main.rs:247:47:247:47 | i | semmle.label | i | -| main.rs:256:9:256:9 | s | semmle.label | s | -| main.rs:256:9:256:9 | s | semmle.label | s | -| main.rs:256:13:256:22 | source(...) | semmle.label | source(...) | -| main.rs:256:13:256:22 | source(...) | semmle.label | source(...) | -| main.rs:257:5:257:13 | enum_sink | semmle.label | enum_sink | -| main.rs:257:5:257:13 | enum_sink | semmle.label | enum_sink | -| main.rs:257:15:257:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:257:15:257:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | -| main.rs:257:41:257:41 | s | semmle.label | s | -| main.rs:257:41:257:41 | s | semmle.label | s | -| main.rs:262:9:262:9 | s | semmle.label | s | -| main.rs:262:9:262:9 | s | semmle.label | s | -| main.rs:262:13:262:22 | source(...) | semmle.label | source(...) | -| main.rs:262:13:262:22 | source(...) | semmle.label | source(...) | -| main.rs:263:9:263:9 | e [D] | semmle.label | e [D] | -| main.rs:263:9:263:9 | e [D] | semmle.label | e [D] | -| main.rs:263:13:263:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:263:13:263:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | -| main.rs:263:39:263:39 | s | semmle.label | s | -| main.rs:263:39:263:39 | s | semmle.label | s | -| main.rs:264:5:264:5 | e [D] | semmle.label | e [D] | -| main.rs:264:5:264:5 | e [D] | semmle.label | e [D] | -| main.rs:264:7:264:10 | sink | semmle.label | sink | -| main.rs:264:7:264:10 | sink | semmle.label | sink | -| main.rs:273:9:273:9 | s | semmle.label | s | -| main.rs:273:9:273:9 | s | semmle.label | s | -| main.rs:273:13:273:25 | simple_source | semmle.label | simple_source | -| main.rs:273:13:273:25 | simple_source | semmle.label | simple_source | -| main.rs:273:13:273:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:273:13:273:29 | simple_source(...) | semmle.label | simple_source(...) | -| main.rs:274:10:274:10 | s | semmle.label | s | -| main.rs:274:10:274:10 | s | semmle.label | s | -| main.rs:281:9:281:9 | s | semmle.label | s | -| main.rs:281:9:281:9 | s | semmle.label | s | -| main.rs:281:13:281:22 | source(...) | semmle.label | source(...) | -| main.rs:281:13:281:22 | source(...) | semmle.label | source(...) | -| main.rs:282:5:282:15 | simple_sink | semmle.label | simple_sink | -| main.rs:282:5:282:15 | simple_sink | semmle.label | simple_sink | -| main.rs:282:17:282:17 | s | semmle.label | s | -| main.rs:282:17:282:17 | s | semmle.label | s | -| main.rs:290:5:290:14 | arg_source | semmle.label | arg_source | -| main.rs:290:5:290:14 | arg_source | semmle.label | arg_source | -| main.rs:290:16:290:16 | [post] i | semmle.label | [post] i | -| main.rs:290:16:290:16 | [post] i | semmle.label | [post] i | -| main.rs:291:10:291:10 | i | semmle.label | i | -| main.rs:291:10:291:10 | i | semmle.label | i | -| main.rs:343:9:343:10 | x1 | semmle.label | x1 | -| main.rs:343:9:343:10 | x1 | semmle.label | x1 | -| main.rs:343:14:343:23 | source(...) | semmle.label | source(...) | -| main.rs:343:14:343:23 | source(...) | semmle.label | source(...) | -| main.rs:343:14:343:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:343:14:343:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:344:10:344:11 | x1 | semmle.label | x1 | -| main.rs:344:10:344:11 | x1 | semmle.label | x1 | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:346:9:346:10 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:346:14:353:6 | ... .max(...) [MyStruct.field1] | semmle.label | ... .max(...) [MyStruct.field1] | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:346:15:349:5 | MyStruct {...} [MyStruct.field1] | semmle.label | MyStruct {...} [MyStruct.field1] | -| main.rs:347:17:347:26 | source(...) | semmle.label | source(...) | -| main.rs:347:17:347:26 | source(...) | semmle.label | source(...) | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:354:10:354:11 | x2 [MyStruct.field1] | semmle.label | x2 [MyStruct.field1] | -| main.rs:354:10:354:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:354:10:354:18 | x2.field1 | semmle.label | x2.field1 | -| main.rs:359:9:359:10 | x4 | semmle.label | x4 | -| main.rs:359:9:359:10 | x4 | semmle.label | x4 | -| main.rs:359:14:359:23 | source(...) | semmle.label | source(...) | -| main.rs:359:14:359:23 | source(...) | semmle.label | source(...) | -| main.rs:359:14:359:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:359:14:359:30 | ... .max(...) | semmle.label | ... .max(...) | -| main.rs:360:10:360:11 | x4 | semmle.label | x4 | -| main.rs:360:10:360:11 | x4 | semmle.label | x4 | -| main.rs:362:9:362:10 | x5 | semmle.label | x5 | -| main.rs:362:14:362:23 | source(...) | semmle.label | source(...) | -| main.rs:362:14:362:30 | ... .lt(...) | semmle.label | ... .lt(...) | -| main.rs:363:10:363:11 | x5 | semmle.label | x5 | -| main.rs:365:9:365:10 | x6 | semmle.label | x6 | -| main.rs:365:14:365:23 | source(...) | semmle.label | source(...) | -| main.rs:365:14:365:27 | ... < ... | semmle.label | ... < ... | -| main.rs:366:10:366:11 | x6 | semmle.label | x6 | +| main.rs:184:9:184:9 | s | semmle.label | s | +| main.rs:184:9:184:9 | s | semmle.label | s | +| main.rs:184:13:184:22 | source(...) | semmle.label | source(...) | +| main.rs:184:13:184:22 | source(...) | semmle.label | source(...) | +| main.rs:185:14:185:14 | ... | semmle.label | ... | +| main.rs:185:14:185:14 | ... | semmle.label | ... | +| main.rs:186:14:186:14 | n | semmle.label | n | +| main.rs:186:14:186:14 | n | semmle.label | n | +| main.rs:189:11:189:11 | s | semmle.label | s | +| main.rs:189:11:189:11 | s | semmle.label | s | +| main.rs:193:13:193:22 | source(...) | semmle.label | source(...) | +| main.rs:193:13:193:22 | source(...) | semmle.label | source(...) | +| main.rs:194:17:194:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:194:17:194:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:194:40:194:40 | s | semmle.label | s | +| main.rs:194:40:194:40 | s | semmle.label | s | +| main.rs:195:9:195:9 | t | semmle.label | t | +| main.rs:195:9:195:9 | t | semmle.label | t | +| main.rs:195:13:195:24 | apply(...) | semmle.label | apply(...) | +| main.rs:195:13:195:24 | apply(...) | semmle.label | apply(...) | +| main.rs:195:23:195:23 | f [captured s] | semmle.label | f [captured s] | +| main.rs:195:23:195:23 | f [captured s] | semmle.label | f [captured s] | +| main.rs:196:10:196:10 | t | semmle.label | t | +| main.rs:196:10:196:10 | t | semmle.label | t | +| main.rs:200:9:200:9 | s | semmle.label | s | +| main.rs:200:9:200:9 | s | semmle.label | s | +| main.rs:200:13:200:22 | source(...) | semmle.label | source(...) | +| main.rs:200:13:200:22 | source(...) | semmle.label | source(...) | +| main.rs:201:14:201:14 | ... | semmle.label | ... | +| main.rs:201:14:201:14 | ... | semmle.label | ... | +| main.rs:201:17:201:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:201:17:201:42 | if ... {...} else {...} | semmle.label | if ... {...} else {...} | +| main.rs:202:9:202:9 | t | semmle.label | t | +| main.rs:202:9:202:9 | t | semmle.label | t | +| main.rs:202:13:202:23 | apply(...) | semmle.label | apply(...) | +| main.rs:202:13:202:23 | apply(...) | semmle.label | apply(...) | +| main.rs:202:19:202:19 | s | semmle.label | s | +| main.rs:202:19:202:19 | s | semmle.label | s | +| main.rs:203:10:203:10 | t | semmle.label | t | +| main.rs:203:10:203:10 | t | semmle.label | t | +| main.rs:212:9:212:9 | s | semmle.label | s | +| main.rs:212:9:212:9 | s | semmle.label | s | +| main.rs:212:13:212:22 | source(...) | semmle.label | source(...) | +| main.rs:212:13:212:22 | source(...) | semmle.label | source(...) | +| main.rs:213:9:213:9 | t | semmle.label | t | +| main.rs:213:9:213:9 | t | semmle.label | t | +| main.rs:213:13:213:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | +| main.rs:213:13:213:31 | get_async_number(...) [future] | semmle.label | get_async_number(...) [future] | +| main.rs:213:13:213:37 | await ... | semmle.label | await ... | +| main.rs:213:13:213:37 | await ... | semmle.label | await ... | +| main.rs:213:30:213:30 | s | semmle.label | s | +| main.rs:213:30:213:30 | s | semmle.label | s | +| main.rs:214:10:214:10 | t | semmle.label | t | +| main.rs:214:10:214:10 | t | semmle.label | t | +| main.rs:233:9:233:9 | s [D] | semmle.label | s [D] | +| main.rs:233:9:233:9 | s [D] | semmle.label | s [D] | +| main.rs:233:13:233:23 | enum_source | semmle.label | enum_source | +| main.rs:233:13:233:23 | enum_source | semmle.label | enum_source | +| main.rs:233:13:233:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | +| main.rs:233:13:233:27 | enum_source(...) [D] | semmle.label | enum_source(...) [D] | +| main.rs:234:11:234:11 | s [D] | semmle.label | s [D] | +| main.rs:234:11:234:11 | s [D] | semmle.label | s [D] | +| main.rs:236:9:236:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:236:9:236:37 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:236:35:236:35 | i | semmle.label | i | +| main.rs:236:35:236:35 | i | semmle.label | i | +| main.rs:236:47:236:47 | i | semmle.label | i | +| main.rs:236:47:236:47 | i | semmle.label | i | +| main.rs:242:9:242:9 | s [C] | semmle.label | s [C] | +| main.rs:242:9:242:9 | s [C] | semmle.label | s [C] | +| main.rs:242:13:242:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | +| main.rs:242:13:242:24 | e.source(...) [C] | semmle.label | e.source(...) [C] | +| main.rs:242:15:242:20 | source | semmle.label | source | +| main.rs:242:15:242:20 | source | semmle.label | source | +| main.rs:243:11:243:11 | s [C] | semmle.label | s [C] | +| main.rs:243:11:243:11 | s [C] | semmle.label | s [C] | +| main.rs:244:9:244:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:244:9:244:37 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:244:35:244:35 | i | semmle.label | i | +| main.rs:244:35:244:35 | i | semmle.label | i | +| main.rs:244:47:244:47 | i | semmle.label | i | +| main.rs:244:47:244:47 | i | semmle.label | i | +| main.rs:253:9:253:9 | s | semmle.label | s | +| main.rs:253:9:253:9 | s | semmle.label | s | +| main.rs:253:13:253:22 | source(...) | semmle.label | source(...) | +| main.rs:253:13:253:22 | source(...) | semmle.label | source(...) | +| main.rs:254:5:254:13 | enum_sink | semmle.label | enum_sink | +| main.rs:254:5:254:13 | enum_sink | semmle.label | enum_sink | +| main.rs:254:15:254:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:254:15:254:43 | ...::C {...} [C] | semmle.label | ...::C {...} [C] | +| main.rs:254:41:254:41 | s | semmle.label | s | +| main.rs:254:41:254:41 | s | semmle.label | s | +| main.rs:259:9:259:9 | s | semmle.label | s | +| main.rs:259:9:259:9 | s | semmle.label | s | +| main.rs:259:13:259:22 | source(...) | semmle.label | source(...) | +| main.rs:259:13:259:22 | source(...) | semmle.label | source(...) | +| main.rs:260:9:260:9 | e [D] | semmle.label | e [D] | +| main.rs:260:9:260:9 | e [D] | semmle.label | e [D] | +| main.rs:260:13:260:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:260:13:260:41 | ...::D {...} [D] | semmle.label | ...::D {...} [D] | +| main.rs:260:39:260:39 | s | semmle.label | s | +| main.rs:260:39:260:39 | s | semmle.label | s | +| main.rs:261:5:261:5 | e [D] | semmle.label | e [D] | +| main.rs:261:5:261:5 | e [D] | semmle.label | e [D] | +| main.rs:261:7:261:10 | sink | semmle.label | sink | +| main.rs:261:7:261:10 | sink | semmle.label | sink | +| main.rs:270:9:270:9 | s | semmle.label | s | +| main.rs:270:9:270:9 | s | semmle.label | s | +| main.rs:270:13:270:25 | simple_source | semmle.label | simple_source | +| main.rs:270:13:270:25 | simple_source | semmle.label | simple_source | +| main.rs:270:13:270:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:270:13:270:29 | simple_source(...) | semmle.label | simple_source(...) | +| main.rs:271:10:271:10 | s | semmle.label | s | +| main.rs:271:10:271:10 | s | semmle.label | s | +| main.rs:278:9:278:9 | s | semmle.label | s | +| main.rs:278:9:278:9 | s | semmle.label | s | +| main.rs:278:13:278:22 | source(...) | semmle.label | source(...) | +| main.rs:278:13:278:22 | source(...) | semmle.label | source(...) | +| main.rs:279:5:279:15 | simple_sink | semmle.label | simple_sink | +| main.rs:279:5:279:15 | simple_sink | semmle.label | simple_sink | +| main.rs:279:17:279:17 | s | semmle.label | s | +| main.rs:279:17:279:17 | s | semmle.label | s | +| main.rs:287:5:287:14 | arg_source | semmle.label | arg_source | +| main.rs:287:5:287:14 | arg_source | semmle.label | arg_source | +| main.rs:287:16:287:16 | [post] i | semmle.label | [post] i | +| main.rs:287:16:287:16 | [post] i | semmle.label | [post] i | +| main.rs:288:10:288:10 | i | semmle.label | i | +| main.rs:288:10:288:10 | i | semmle.label | i | subpaths -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | -| main.rs:198:23:198:23 | f [captured s] | main.rs:197:40:197:40 | s | main.rs:197:17:197:42 | if ... {...} else {...} | main.rs:198:13:198:24 | apply(...) | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | main.rs:205:13:205:23 | apply(...) | -| main.rs:205:19:205:19 | s | main.rs:204:14:204:14 | ... | main.rs:204:17:204:42 | if ... {...} else {...} | main.rs:205:13:205:23 | apply(...) | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | main.rs:194:17:194:42 | if ... {...} else {...} | main.rs:195:13:195:24 | apply(...) | +| main.rs:195:23:195:23 | f [captured s] | main.rs:194:40:194:40 | s | main.rs:194:17:194:42 | if ... {...} else {...} | main.rs:195:13:195:24 | apply(...) | +| main.rs:202:19:202:19 | s | main.rs:201:14:201:14 | ... | main.rs:201:17:201:42 | if ... {...} else {...} | main.rs:202:13:202:23 | apply(...) | +| main.rs:202:19:202:19 | s | main.rs:201:14:201:14 | ... | main.rs:201:17:201:42 | if ... {...} else {...} | main.rs:202:13:202:23 | apply(...) | testFailures invalidSpecComponent #select @@ -646,33 +580,25 @@ invalidSpecComponent | main.rs:161:10:161:29 | get_tuple_element(...) | main.rs:159:13:159:22 | source(...) | main.rs:161:10:161:29 | get_tuple_element(...) | $@ | main.rs:159:13:159:22 | source(...) | source(...) | | main.rs:175:10:175:12 | t.1 | main.rs:172:13:172:22 | source(...) | main.rs:175:10:175:12 | t.1 | $@ | main.rs:172:13:172:22 | source(...) | source(...) | | main.rs:175:10:175:12 | t.1 | main.rs:172:13:172:22 | source(...) | main.rs:175:10:175:12 | t.1 | $@ | main.rs:172:13:172:22 | source(...) | source(...) | -| main.rs:189:14:189:14 | n | main.rs:187:13:187:22 | source(...) | main.rs:189:14:189:14 | n | $@ | main.rs:187:13:187:22 | source(...) | source(...) | -| main.rs:189:14:189:14 | n | main.rs:187:13:187:22 | source(...) | main.rs:189:14:189:14 | n | $@ | main.rs:187:13:187:22 | source(...) | source(...) | -| main.rs:199:10:199:10 | t | main.rs:196:13:196:22 | source(...) | main.rs:199:10:199:10 | t | $@ | main.rs:196:13:196:22 | source(...) | source(...) | -| main.rs:199:10:199:10 | t | main.rs:196:13:196:22 | source(...) | main.rs:199:10:199:10 | t | $@ | main.rs:196:13:196:22 | source(...) | source(...) | -| main.rs:206:10:206:10 | t | main.rs:203:13:203:22 | source(...) | main.rs:206:10:206:10 | t | $@ | main.rs:203:13:203:22 | source(...) | source(...) | -| main.rs:206:10:206:10 | t | main.rs:203:13:203:22 | source(...) | main.rs:206:10:206:10 | t | $@ | main.rs:203:13:203:22 | source(...) | source(...) | -| main.rs:217:10:217:10 | t | main.rs:215:13:215:22 | source(...) | main.rs:217:10:217:10 | t | $@ | main.rs:215:13:215:22 | source(...) | source(...) | -| main.rs:217:10:217:10 | t | main.rs:215:13:215:22 | source(...) | main.rs:217:10:217:10 | t | $@ | main.rs:215:13:215:22 | source(...) | source(...) | -| main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | -| main.rs:239:47:239:47 | i | main.rs:236:13:236:23 | enum_source | main.rs:239:47:239:47 | i | $@ | main.rs:236:13:236:23 | enum_source | enum_source | -| main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | -| main.rs:247:47:247:47 | i | main.rs:245:15:245:20 | source | main.rs:247:47:247:47 | i | $@ | main.rs:245:15:245:20 | source | source | -| main.rs:257:5:257:13 | enum_sink | main.rs:256:13:256:22 | source(...) | main.rs:257:5:257:13 | enum_sink | $@ | main.rs:256:13:256:22 | source(...) | source(...) | -| main.rs:257:5:257:13 | enum_sink | main.rs:256:13:256:22 | source(...) | main.rs:257:5:257:13 | enum_sink | $@ | main.rs:256:13:256:22 | source(...) | source(...) | -| main.rs:264:7:264:10 | sink | main.rs:262:13:262:22 | source(...) | main.rs:264:7:264:10 | sink | $@ | main.rs:262:13:262:22 | source(...) | source(...) | -| main.rs:264:7:264:10 | sink | main.rs:262:13:262:22 | source(...) | main.rs:264:7:264:10 | sink | $@ | main.rs:262:13:262:22 | source(...) | source(...) | -| main.rs:274:10:274:10 | s | main.rs:273:13:273:25 | simple_source | main.rs:274:10:274:10 | s | $@ | main.rs:273:13:273:25 | simple_source | simple_source | -| main.rs:274:10:274:10 | s | main.rs:273:13:273:25 | simple_source | main.rs:274:10:274:10 | s | $@ | main.rs:273:13:273:25 | simple_source | simple_source | -| main.rs:282:5:282:15 | simple_sink | main.rs:281:13:281:22 | source(...) | main.rs:282:5:282:15 | simple_sink | $@ | main.rs:281:13:281:22 | source(...) | source(...) | -| main.rs:282:5:282:15 | simple_sink | main.rs:281:13:281:22 | source(...) | main.rs:282:5:282:15 | simple_sink | $@ | main.rs:281:13:281:22 | source(...) | source(...) | -| main.rs:291:10:291:10 | i | main.rs:290:5:290:14 | arg_source | main.rs:291:10:291:10 | i | $@ | main.rs:290:5:290:14 | arg_source | arg_source | -| main.rs:291:10:291:10 | i | main.rs:290:5:290:14 | arg_source | main.rs:291:10:291:10 | i | $@ | main.rs:290:5:290:14 | arg_source | arg_source | -| main.rs:344:10:344:11 | x1 | main.rs:343:14:343:23 | source(...) | main.rs:344:10:344:11 | x1 | $@ | main.rs:343:14:343:23 | source(...) | source(...) | -| main.rs:344:10:344:11 | x1 | main.rs:343:14:343:23 | source(...) | main.rs:344:10:344:11 | x1 | $@ | main.rs:343:14:343:23 | source(...) | source(...) | -| main.rs:354:10:354:18 | x2.field1 | main.rs:347:17:347:26 | source(...) | main.rs:354:10:354:18 | x2.field1 | $@ | main.rs:347:17:347:26 | source(...) | source(...) | -| main.rs:354:10:354:18 | x2.field1 | main.rs:347:17:347:26 | source(...) | main.rs:354:10:354:18 | x2.field1 | $@ | main.rs:347:17:347:26 | source(...) | source(...) | -| main.rs:360:10:360:11 | x4 | main.rs:359:14:359:23 | source(...) | main.rs:360:10:360:11 | x4 | $@ | main.rs:359:14:359:23 | source(...) | source(...) | -| main.rs:360:10:360:11 | x4 | main.rs:359:14:359:23 | source(...) | main.rs:360:10:360:11 | x4 | $@ | main.rs:359:14:359:23 | source(...) | source(...) | -| main.rs:363:10:363:11 | x5 | main.rs:362:14:362:23 | source(...) | main.rs:363:10:363:11 | x5 | $@ | main.rs:362:14:362:23 | source(...) | source(...) | -| main.rs:366:10:366:11 | x6 | main.rs:365:14:365:23 | source(...) | main.rs:366:10:366:11 | x6 | $@ | main.rs:365:14:365:23 | source(...) | source(...) | +| main.rs:186:14:186:14 | n | main.rs:184:13:184:22 | source(...) | main.rs:186:14:186:14 | n | $@ | main.rs:184:13:184:22 | source(...) | source(...) | +| main.rs:186:14:186:14 | n | main.rs:184:13:184:22 | source(...) | main.rs:186:14:186:14 | n | $@ | main.rs:184:13:184:22 | source(...) | source(...) | +| main.rs:196:10:196:10 | t | main.rs:193:13:193:22 | source(...) | main.rs:196:10:196:10 | t | $@ | main.rs:193:13:193:22 | source(...) | source(...) | +| main.rs:196:10:196:10 | t | main.rs:193:13:193:22 | source(...) | main.rs:196:10:196:10 | t | $@ | main.rs:193:13:193:22 | source(...) | source(...) | +| main.rs:203:10:203:10 | t | main.rs:200:13:200:22 | source(...) | main.rs:203:10:203:10 | t | $@ | main.rs:200:13:200:22 | source(...) | source(...) | +| main.rs:203:10:203:10 | t | main.rs:200:13:200:22 | source(...) | main.rs:203:10:203:10 | t | $@ | main.rs:200:13:200:22 | source(...) | source(...) | +| main.rs:214:10:214:10 | t | main.rs:212:13:212:22 | source(...) | main.rs:214:10:214:10 | t | $@ | main.rs:212:13:212:22 | source(...) | source(...) | +| main.rs:214:10:214:10 | t | main.rs:212:13:212:22 | source(...) | main.rs:214:10:214:10 | t | $@ | main.rs:212:13:212:22 | source(...) | source(...) | +| main.rs:236:47:236:47 | i | main.rs:233:13:233:23 | enum_source | main.rs:236:47:236:47 | i | $@ | main.rs:233:13:233:23 | enum_source | enum_source | +| main.rs:236:47:236:47 | i | main.rs:233:13:233:23 | enum_source | main.rs:236:47:236:47 | i | $@ | main.rs:233:13:233:23 | enum_source | enum_source | +| main.rs:244:47:244:47 | i | main.rs:242:15:242:20 | source | main.rs:244:47:244:47 | i | $@ | main.rs:242:15:242:20 | source | source | +| main.rs:244:47:244:47 | i | main.rs:242:15:242:20 | source | main.rs:244:47:244:47 | i | $@ | main.rs:242:15:242:20 | source | source | +| main.rs:254:5:254:13 | enum_sink | main.rs:253:13:253:22 | source(...) | main.rs:254:5:254:13 | enum_sink | $@ | main.rs:253:13:253:22 | source(...) | source(...) | +| main.rs:254:5:254:13 | enum_sink | main.rs:253:13:253:22 | source(...) | main.rs:254:5:254:13 | enum_sink | $@ | main.rs:253:13:253:22 | source(...) | source(...) | +| main.rs:261:7:261:10 | sink | main.rs:259:13:259:22 | source(...) | main.rs:261:7:261:10 | sink | $@ | main.rs:259:13:259:22 | source(...) | source(...) | +| main.rs:261:7:261:10 | sink | main.rs:259:13:259:22 | source(...) | main.rs:261:7:261:10 | sink | $@ | main.rs:259:13:259:22 | source(...) | source(...) | +| main.rs:271:10:271:10 | s | main.rs:270:13:270:25 | simple_source | main.rs:271:10:271:10 | s | $@ | main.rs:270:13:270:25 | simple_source | simple_source | +| main.rs:271:10:271:10 | s | main.rs:270:13:270:25 | simple_source | main.rs:271:10:271:10 | s | $@ | main.rs:270:13:270:25 | simple_source | simple_source | +| main.rs:279:5:279:15 | simple_sink | main.rs:278:13:278:22 | source(...) | main.rs:279:5:279:15 | simple_sink | $@ | main.rs:278:13:278:22 | source(...) | source(...) | +| main.rs:279:5:279:15 | simple_sink | main.rs:278:13:278:22 | source(...) | main.rs:279:5:279:15 | simple_sink | $@ | main.rs:278:13:278:22 | source(...) | source(...) | +| main.rs:288:10:288:10 | i | main.rs:287:5:287:14 | arg_source | main.rs:288:10:288:10 | i | $@ | main.rs:287:5:287:14 | arg_source | arg_source | +| main.rs:288:10:288:10 | i | main.rs:287:5:287:14 | arg_source | main.rs:288:10:288:10 | i | $@ | main.rs:287:5:287:14 | arg_source | arg_source | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index eb51ac64f50f..ba5fc48cf247 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -32,5 +32,3 @@ extensions: - ["main::apply", "Argument[0]", "Argument[1].Parameter[0]", "value", "manual"] - ["main::apply", "Argument[1].ReturnValue", "ReturnValue", "value", "manual"] - ["main::get_async_number", "Argument[0]", "ReturnValue.Future", "value", "manual"] - - ["<_ as core::cmp::Ord>::max", "Argument[self]", "ReturnValue", "value", "manual"] - - ["<_ as core::cmp::PartialOrd>::lt", "Argument[self].Reference", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected index adaeba79f61a..19013601cdf4 100644 --- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected @@ -10,9 +10,6 @@ multipleCallTargets | test.rs:168:26:168:111 | ...::_print(...) | | test.rs:178:30:178:68 | ...::_print(...) | | test.rs:187:26:187:105 | ...::_print(...) | -| test.rs:228:22:228:72 | ... .read_to_string(...) | -| test.rs:482:22:482:50 | file.read_to_end(...) | -| test.rs:488:22:488:53 | file.read_to_string(...) | | test.rs:609:18:609:38 | ...::_print(...) | | test.rs:614:18:614:45 | ...::_print(...) | | test.rs:618:25:618:49 | address.to_socket_addrs() | diff --git a/rust/ql/test/library-tests/dataflow/sources/test.rs b/rust/ql/test/library-tests/dataflow/sources/test.rs index 914350b68ceb..845050c2fc93 100644 --- a/rust/ql/test/library-tests/dataflow/sources/test.rs +++ b/rust/ql/test/library-tests/dataflow/sources/test.rs @@ -214,7 +214,7 @@ fn test_io_stdin() -> std::io::Result<()> { { let mut buffer = Vec::::new(); let _bytes = std::io::stdin().read_to_end(&mut buffer)?; // $ Alert[rust/summary/taint-sources] - sink(&buffer); // $ hasTaintFlow -- @hvitved: works in CI, but not for me locally + sink(&buffer); // $ MISSING: hasTaintFlow } { diff --git a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected index 5e4affb7437f..0b49270f7557 100644 --- a/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/type-inference/CONSISTENCY/PathResolutionConsistency.expected @@ -1,9 +1,2 @@ multipleCallTargets | dereference.rs:61:15:61:24 | e1.deref() | -| main.rs:2032:13:2032:31 | ...::from(...) | -| main.rs:2033:13:2033:31 | ...::from(...) | -| main.rs:2034:13:2034:31 | ...::from(...) | -| main.rs:2040:13:2040:31 | ...::from(...) | -| main.rs:2041:13:2041:31 | ...::from(...) | -| main.rs:2042:13:2042:31 | ...::from(...) | -| main.rs:2078:21:2078:43 | ...::from(...) | diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index e89a19b58708..18af89be3ab7 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -406,12 +406,12 @@ mod impl_overlap { impl OverlappingTrait for S1 { // ::common_method fn common_method(self) -> S1 { - S1 + panic!("not called"); } // ::common_method_2 fn common_method_2(self, s1: S1) -> S1 { - S1 + panic!("not called"); } } @@ -427,78 +427,10 @@ mod impl_overlap { } } - struct S2(T2); - - impl S2 { - // S2::common_method - fn common_method(self) -> S1 { - S1 - } - - // S2::common_method - fn common_method_2(self) -> S1 { - S1 - } - } - - impl OverlappingTrait for S2 { - // _as_OverlappingTrait>::common_method - fn common_method(self) -> S1 { - S1 - } - - // _as_OverlappingTrait>::common_method_2 - fn common_method_2(self, s1: S1) -> S1 { - S1 - } - } - - impl OverlappingTrait for S2 { - // _as_OverlappingTrait>::common_method - fn common_method(self) -> S1 { - S1 - } - - // _as_OverlappingTrait>::common_method_2 - fn common_method_2(self, s1: S1) -> S1 { - S1 - } - } - - #[derive(Debug)] - struct S3(T3); - - trait OverlappingTrait2 { - fn m(&self, x: &T) -> &Self; - } - - impl OverlappingTrait2 for S3 { - // _as_OverlappingTrait2>::m - fn m(&self, x: &T) -> &Self { - self - } - } - - impl S3 { - // S3::m - fn m(&self, x: T) -> &Self { - self - } - } - pub fn f() { let x = S1; println!("{:?}", x.common_method()); // $ method=S1::common_method println!("{:?}", x.common_method_2()); // $ method=S1::common_method_2 - - let y = S2(S1); - println!("{:?}", y.common_method()); // $ method=_as_OverlappingTrait>::common_method - - let z = S2(0); - println!("{:?}", z.common_method()); // $ method=S2::common_method - - let w = S3(S1); - println!("{:?}", w.m(x)); // $ method=S3::m } } @@ -1978,7 +1910,11 @@ mod method_determined_by_argument_type { impl MyAdd for i64 { // MyAdd::my_add fn my_add(&self, value: bool) -> Self { - if value { 1 } else { 0 } + if value { + 1 + } else { + 0 + } } } @@ -1990,127 +1926,6 @@ mod method_determined_by_argument_type { } } -mod loops { - struct MyCallable {} - - impl MyCallable { - fn new() -> Self { - MyCallable {} - } - - fn call(&self) -> i64 { - 1 - } - } - - pub fn f() { - // for loops with arrays - - for i in [1, 2, 3] {} // $ type=i:i32 - for i in [1, 2, 3].map(|x| x + 1) {} // $ method=map MISSING: type=i:i32 - for i in [1, 2, 3].into_iter() {} // $ method=into_iter MISSING: type=i:i32 - - let vals1 = [1u8, 2, 3]; // $ type=vals1:[T;...].u8 - for u in vals1 {} // $ type=u:u8 - - let vals2 = [1u16; 3]; // $ type=vals2:[T;...].u16 - for u in vals2 {} // $ type=u:u16 - - let vals3: [u32; 3] = [1, 2, 3]; // $ type=vals3:[T;...].u32 - for u in vals3 {} // $ type=u:u32 - - let vals4: [u64; 3] = [1; 3]; // $ type=vals4:[T;...].u64 - for u in vals4 {} // $ type=u:u64 - - let mut strings1 = ["foo", "bar", "baz"]; // $ type=strings1:[T;...].str - for s in &strings1 {} // $ MISSING: type=s:&T.str - for s in &mut strings1 {} // $ MISSING: type=s:&T.str - for s in strings1 {} // $ type=s:str - - let strings2 = // $ type=strings2:[T;...].String - [ - String::from("foo"), - String::from("bar"), - String::from("baz"), - ]; - for s in strings2 {} // $ type=s:String - - let strings3 = // $ type=strings3:&T.[T;...].String - &[ - String::from("foo"), - String::from("bar"), - String::from("baz"), - ]; - for s in strings3 {} // $ MISSING: type=s:String - - let callables = [MyCallable::new(), MyCallable::new(), MyCallable::new()]; // $ MISSING: type=callables:[T;...].MyCallable; 3 - for c // $ type=c:MyCallable - in callables - { - let result = c.call(); // $ type=result:i64 method=call - } - - // for loops with ranges - - for i in 0..10 {} // $ MISSING: type=i:i32 - for u in [0u8..10] {} // $ MISSING: type=u:u8 - let range = 0..10; // $ MISSING: type=range:Range type=range:Idx.i32 - for i in range {} // $ MISSING: type=i:i32 - - let range1 = // $ type=range1:Range type=range1:Idx.u16 - std::ops::Range { - start: 0u16, - end: 10u16, - }; - for u in range1 {} // $ MISSING: type=u:u16 - - // for loops with containers - - let vals3 = vec![1, 2, 3]; // $ MISSING: type=vals3:Vec type=vals3:T.i32 - for i in vals3 {} // $ MISSING: type=i:i32 - - let vals4a: Vec = [1u16, 2, 3].to_vec(); // $ type=vals4a:Vec type=vals4a:T.u16 - for u in vals4a {} // $ type=u:u16 - - let vals4b = [1u16, 2, 3].to_vec(); // $ MISSING: type=vals4b:Vec type=vals4b:T.u16 - for u in vals4b {} // $ MISSING: type=u:u16 - - let vals5 = Vec::from([1u32, 2, 3]); // $ type=vals5:Vec MISSING: type=vals5:T.u32 - for u in vals5 {} // $ MISSING: type=u:u32 - - let vals6: Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ type=vals6:Vec type=vals6:T.&T.u64 - for u in vals6 {} // $ type=u:&T.u64 - - let mut vals7 = Vec::new(); // $ type=vals7:Vec MISSING: type=vals7:T.u8 - vals7.push(1u8); // $ method=push - for u in vals7 {} // $ MISSING: type=u:u8 - - let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ MISSING: type=matrix1:Vec type=matrix1:T.Vec type=matrix1:T.T.i32 - for row in matrix1 { - // $ MISSING: type=row:Vec type=row:T.i32 - for cell in row { // $ MISSING: type=cell:i32 - } - } - - let mut map1 = std::collections::HashMap::new(); // $ MISSING: type=map1:Hashmap type=map1:K.i32 type=map1:V.Box type1=map1:V.T.&T.str - map1.insert(1, Box::new("one")); // $ method=insert - map1.insert(2, Box::new("two")); // $ method=insert - for key in map1.keys() {} // $ method=keys MISSING: type=key:i32 - for value in map1.values() {} // $ method=values MISSING: type=value:Box type=value:T.&T.str - for (key, value) in map1.iter() {} // $ method=iter MISSING: type=key:i32 type=value:Box type=value:T.&T.str - for (key, value) in &map1 {} // $ MISSING: type=key:i32 type=value:Box type=value:T.&T.str - - // while loops - - let mut a: i64 = 0; // $ type=a:i64 - #[rustfmt::skip] - let _ = while a < 10 // $ method=lt type=a:i64 - { - a += 1; // $ type=a:i64 method=add_assign - }; - } -} - mod dereference; fn main() { @@ -2135,7 +1950,6 @@ fn main() { async_::f(); impl_trait::f(); indexers::f(); - loops::f(); macros::f(); method_determined_by_argument_type::f(); dereference::test(); diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 4867f1465b47..a82b69a71e15 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -674,2610 +674,2236 @@ inferType | main.rs:403:34:403:35 | s1 | | main.rs:397:5:398:14 | S1 | | main.rs:408:26:408:29 | SelfParam | | main.rs:397:5:398:14 | S1 | | main.rs:408:38:410:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:409:13:409:14 | S1 | | main.rs:397:5:398:14 | S1 | +| main.rs:409:20:409:31 | "not called" | | {EXTERNAL LOCATION} | str | | main.rs:413:28:413:31 | SelfParam | | main.rs:397:5:398:14 | S1 | | main.rs:413:34:413:35 | s1 | | main.rs:397:5:398:14 | S1 | | main.rs:413:48:415:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:414:13:414:14 | S1 | | main.rs:397:5:398:14 | S1 | +| main.rs:414:20:414:31 | "not called" | | {EXTERNAL LOCATION} | str | | main.rs:420:26:420:29 | SelfParam | | main.rs:397:5:398:14 | S1 | | main.rs:420:38:422:9 | { ... } | | main.rs:397:5:398:14 | S1 | | main.rs:421:13:421:16 | self | | main.rs:397:5:398:14 | S1 | | main.rs:425:28:425:31 | SelfParam | | main.rs:397:5:398:14 | S1 | | main.rs:425:40:427:9 | { ... } | | main.rs:397:5:398:14 | S1 | | main.rs:426:13:426:16 | self | | main.rs:397:5:398:14 | S1 | -| main.rs:434:26:434:29 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:434:26:434:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:434:38:436:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:435:13:435:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:439:28:439:31 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:439:28:439:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:439:40:441:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:440:13:440:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:446:26:446:29 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:446:26:446:29 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:446:38:448:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:447:13:447:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:451:28:451:31 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:451:28:451:31 | SelfParam | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:451:34:451:35 | s1 | | main.rs:397:5:398:14 | S1 | -| main.rs:451:48:453:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:452:13:452:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:458:26:458:29 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:458:26:458:29 | SelfParam | T2 | main.rs:397:5:398:14 | S1 | -| main.rs:458:38:460:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:459:13:459:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:463:28:463:31 | SelfParam | | main.rs:430:5:430:22 | S2 | -| main.rs:463:28:463:31 | SelfParam | T2 | main.rs:397:5:398:14 | S1 | -| main.rs:463:34:463:35 | s1 | | main.rs:397:5:398:14 | S1 | -| main.rs:463:48:465:9 | { ... } | | main.rs:397:5:398:14 | S1 | -| main.rs:464:13:464:14 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:472:14:472:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:472:14:472:18 | SelfParam | &T | main.rs:471:5:473:5 | Self [trait OverlappingTrait2] | -| main.rs:472:21:472:21 | x | | file://:0:0:0:0 | & | -| main.rs:472:21:472:21 | x | &T | main.rs:471:29:471:29 | T | -| main.rs:477:14:477:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:477:14:477:18 | SelfParam | &T | main.rs:468:5:469:22 | S3 | -| main.rs:477:14:477:18 | SelfParam | &T.T3 | main.rs:475:10:475:10 | T | -| main.rs:477:21:477:21 | x | | file://:0:0:0:0 | & | -| main.rs:477:21:477:21 | x | &T | main.rs:475:10:475:10 | T | -| main.rs:477:37:479:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:477:37:479:9 | { ... } | &T | main.rs:468:5:469:22 | S3 | -| main.rs:477:37:479:9 | { ... } | &T.T3 | main.rs:475:10:475:10 | T | -| main.rs:478:13:478:16 | self | | file://:0:0:0:0 | & | -| main.rs:478:13:478:16 | self | &T | main.rs:468:5:469:22 | S3 | -| main.rs:478:13:478:16 | self | &T.T3 | main.rs:475:10:475:10 | T | -| main.rs:484:14:484:18 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:484:14:484:18 | SelfParam | &T | main.rs:468:5:469:22 | S3 | -| main.rs:484:14:484:18 | SelfParam | &T.T3 | main.rs:482:10:482:10 | T | -| main.rs:484:21:484:21 | x | | main.rs:482:10:482:10 | T | -| main.rs:484:36:486:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:484:36:486:9 | { ... } | &T | main.rs:468:5:469:22 | S3 | -| main.rs:484:36:486:9 | { ... } | &T.T3 | main.rs:482:10:482:10 | T | -| main.rs:485:13:485:16 | self | | file://:0:0:0:0 | & | -| main.rs:485:13:485:16 | self | &T | main.rs:468:5:469:22 | S3 | -| main.rs:485:13:485:16 | self | &T.T3 | main.rs:482:10:482:10 | T | -| main.rs:490:13:490:13 | x | | main.rs:397:5:398:14 | S1 | -| main.rs:490:17:490:18 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:491:18:491:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:491:26:491:26 | x | | main.rs:397:5:398:14 | S1 | -| main.rs:491:26:491:42 | x.common_method() | | main.rs:397:5:398:14 | S1 | -| main.rs:492:18:492:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:492:26:492:26 | x | | main.rs:397:5:398:14 | S1 | -| main.rs:492:26:492:44 | x.common_method_2() | | main.rs:397:5:398:14 | S1 | -| main.rs:494:13:494:13 | y | | main.rs:430:5:430:22 | S2 | -| main.rs:494:13:494:13 | y | T2 | main.rs:397:5:398:14 | S1 | -| main.rs:494:17:494:22 | S2(...) | | main.rs:430:5:430:22 | S2 | -| main.rs:494:17:494:22 | S2(...) | T2 | main.rs:397:5:398:14 | S1 | -| main.rs:494:20:494:21 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:495:18:495:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:495:26:495:26 | y | | main.rs:430:5:430:22 | S2 | -| main.rs:495:26:495:26 | y | T2 | main.rs:397:5:398:14 | S1 | -| main.rs:495:26:495:42 | y.common_method() | | main.rs:397:5:398:14 | S1 | -| main.rs:497:13:497:13 | z | | main.rs:430:5:430:22 | S2 | -| main.rs:497:13:497:13 | z | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:497:17:497:21 | S2(...) | | main.rs:430:5:430:22 | S2 | -| main.rs:497:17:497:21 | S2(...) | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:497:20:497:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:498:18:498:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:498:26:498:26 | z | | main.rs:430:5:430:22 | S2 | -| main.rs:498:26:498:26 | z | T2 | {EXTERNAL LOCATION} | i32 | -| main.rs:498:26:498:42 | z.common_method() | | main.rs:397:5:398:14 | S1 | -| main.rs:500:13:500:13 | w | | main.rs:468:5:469:22 | S3 | -| main.rs:500:13:500:13 | w | T3 | main.rs:397:5:398:14 | S1 | -| main.rs:500:17:500:22 | S3(...) | | main.rs:468:5:469:22 | S3 | -| main.rs:500:17:500:22 | S3(...) | T3 | main.rs:397:5:398:14 | S1 | -| main.rs:500:20:500:21 | S1 | | main.rs:397:5:398:14 | S1 | -| main.rs:501:18:501:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:501:26:501:26 | w | | main.rs:468:5:469:22 | S3 | -| main.rs:501:26:501:26 | w | T3 | main.rs:397:5:398:14 | S1 | -| main.rs:501:26:501:31 | w.m(...) | | file://:0:0:0:0 | & | -| main.rs:501:26:501:31 | w.m(...) | &T | main.rs:468:5:469:22 | S3 | -| main.rs:501:26:501:31 | w.m(...) | &T.T3 | main.rs:397:5:398:14 | S1 | -| main.rs:501:30:501:30 | x | | main.rs:397:5:398:14 | S1 | -| main.rs:518:19:518:22 | SelfParam | | main.rs:516:5:519:5 | Self [trait FirstTrait] | -| main.rs:523:19:523:22 | SelfParam | | main.rs:521:5:524:5 | Self [trait SecondTrait] | -| main.rs:526:64:526:64 | x | | main.rs:526:45:526:61 | T | -| main.rs:528:13:528:14 | s1 | | main.rs:526:35:526:42 | I | -| main.rs:528:18:528:18 | x | | main.rs:526:45:526:61 | T | -| main.rs:528:18:528:27 | x.method() | | main.rs:526:35:526:42 | I | -| main.rs:529:18:529:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:529:26:529:27 | s1 | | main.rs:526:35:526:42 | I | -| main.rs:532:65:532:65 | x | | main.rs:532:46:532:62 | T | -| main.rs:534:13:534:14 | s2 | | main.rs:532:36:532:43 | I | -| main.rs:534:18:534:18 | x | | main.rs:532:46:532:62 | T | -| main.rs:534:18:534:27 | x.method() | | main.rs:532:36:532:43 | I | -| main.rs:535:18:535:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:535:26:535:27 | s2 | | main.rs:532:36:532:43 | I | -| main.rs:538:49:538:49 | x | | main.rs:538:30:538:46 | T | -| main.rs:539:13:539:13 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:539:17:539:17 | x | | main.rs:538:30:538:46 | T | -| main.rs:539:17:539:26 | x.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:540:18:540:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:540:26:540:26 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:543:53:543:53 | x | | main.rs:543:34:543:50 | T | -| main.rs:544:13:544:13 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:544:17:544:17 | x | | main.rs:543:34:543:50 | T | -| main.rs:544:17:544:26 | x.method() | | main.rs:508:5:509:14 | S1 | -| main.rs:545:18:545:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:545:26:545:26 | s | | main.rs:508:5:509:14 | S1 | -| main.rs:549:16:549:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | -| main.rs:551:16:551:19 | SelfParam | | main.rs:548:5:552:5 | Self [trait Pair] | -| main.rs:554:58:554:58 | x | | main.rs:554:41:554:55 | T | -| main.rs:554:64:554:64 | y | | main.rs:554:41:554:55 | T | -| main.rs:556:13:556:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:556:18:556:18 | x | | main.rs:554:41:554:55 | T | -| main.rs:556:18:556:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:557:13:557:14 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:557:18:557:18 | y | | main.rs:554:41:554:55 | T | -| main.rs:557:18:557:24 | y.snd() | | main.rs:511:5:512:14 | S2 | -| main.rs:558:18:558:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:558:32:558:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:558:36:558:37 | s2 | | main.rs:511:5:512:14 | S2 | -| main.rs:561:69:561:69 | x | | main.rs:561:52:561:66 | T | -| main.rs:561:75:561:75 | y | | main.rs:561:52:561:66 | T | -| main.rs:563:13:563:14 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:563:18:563:18 | x | | main.rs:561:52:561:66 | T | -| main.rs:563:18:563:24 | x.fst() | | main.rs:508:5:509:14 | S1 | -| main.rs:564:13:564:14 | s2 | | main.rs:561:41:561:49 | T2 | -| main.rs:564:18:564:18 | y | | main.rs:561:52:561:66 | T | -| main.rs:564:18:564:24 | y.snd() | | main.rs:561:41:561:49 | T2 | -| main.rs:565:18:565:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:565:32:565:33 | s1 | | main.rs:508:5:509:14 | S1 | -| main.rs:565:36:565:37 | s2 | | main.rs:561:41:561:49 | T2 | -| main.rs:568:50:568:50 | x | | main.rs:568:41:568:47 | T | -| main.rs:568:56:568:56 | y | | main.rs:568:41:568:47 | T | -| main.rs:570:13:570:14 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:570:18:570:18 | x | | main.rs:568:41:568:47 | T | -| main.rs:570:18:570:24 | x.fst() | | {EXTERNAL LOCATION} | bool | -| main.rs:571:13:571:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:571:18:571:18 | y | | main.rs:568:41:568:47 | T | -| main.rs:571:18:571:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:572:18:572:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:572:32:572:33 | s1 | | {EXTERNAL LOCATION} | bool | -| main.rs:572:36:572:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:575:54:575:54 | x | | main.rs:575:41:575:51 | T | -| main.rs:575:60:575:60 | y | | main.rs:575:41:575:51 | T | -| main.rs:577:13:577:14 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:577:18:577:18 | x | | main.rs:575:41:575:51 | T | -| main.rs:577:18:577:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | -| main.rs:578:13:578:14 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:578:18:578:18 | y | | main.rs:575:41:575:51 | T | -| main.rs:578:18:578:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | -| main.rs:579:18:579:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:579:32:579:33 | s1 | | {EXTERNAL LOCATION} | u8 | -| main.rs:579:36:579:37 | s2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:595:15:595:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:597:15:597:18 | SelfParam | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:600:9:602:9 | { ... } | | main.rs:594:19:594:19 | A | -| main.rs:601:13:601:16 | self | | main.rs:594:5:603:5 | Self [trait MyTrait] | -| main.rs:601:13:601:21 | self.m1() | | main.rs:594:19:594:19 | A | -| main.rs:606:43:606:43 | x | | main.rs:606:26:606:40 | T2 | -| main.rs:606:56:608:5 | { ... } | | main.rs:606:22:606:23 | T1 | -| main.rs:607:9:607:9 | x | | main.rs:606:26:606:40 | T2 | -| main.rs:607:9:607:14 | x.m1() | | main.rs:606:22:606:23 | T1 | -| main.rs:611:49:611:49 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:611:49:611:49 | x | T | main.rs:611:32:611:46 | T2 | -| main.rs:611:71:613:5 | { ... } | | main.rs:611:28:611:29 | T1 | -| main.rs:612:9:612:9 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:612:9:612:9 | x | T | main.rs:611:32:611:46 | T2 | -| main.rs:612:9:612:11 | x.a | | main.rs:611:32:611:46 | T2 | -| main.rs:612:9:612:16 | ... .m1() | | main.rs:611:28:611:29 | T1 | -| main.rs:616:15:616:18 | SelfParam | | main.rs:584:5:587:5 | MyThing | -| main.rs:616:15:616:18 | SelfParam | T | main.rs:615:10:615:10 | T | -| main.rs:616:26:618:9 | { ... } | | main.rs:615:10:615:10 | T | -| main.rs:617:13:617:16 | self | | main.rs:584:5:587:5 | MyThing | -| main.rs:617:13:617:16 | self | T | main.rs:615:10:615:10 | T | -| main.rs:617:13:617:18 | self.a | | main.rs:615:10:615:10 | T | -| main.rs:622:13:622:13 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:622:13:622:13 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:622:17:622:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:622:17:622:33 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:622:30:622:31 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:623:13:623:13 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:623:13:623:13 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:623:17:623:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:623:17:623:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:623:30:623:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:625:18:625:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:625:26:625:26 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:625:26:625:26 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:625:26:625:31 | x.m1() | | main.rs:589:5:590:14 | S1 | -| main.rs:626:18:626:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:626:26:626:26 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:626:26:626:26 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:626:26:626:31 | y.m1() | | main.rs:591:5:592:14 | S2 | -| main.rs:628:13:628:13 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:628:13:628:13 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:628:17:628:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:628:17:628:33 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:628:30:628:31 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:629:13:629:13 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:629:13:629:13 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:629:17:629:33 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:629:17:629:33 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:629:30:629:31 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:631:18:631:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:631:26:631:26 | x | | main.rs:584:5:587:5 | MyThing | -| main.rs:631:26:631:26 | x | T | main.rs:589:5:590:14 | S1 | -| main.rs:631:26:631:31 | x.m2() | | main.rs:589:5:590:14 | S1 | -| main.rs:632:18:632:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:632:26:632:26 | y | | main.rs:584:5:587:5 | MyThing | -| main.rs:632:26:632:26 | y | T | main.rs:591:5:592:14 | S2 | -| main.rs:632:26:632:31 | y.m2() | | main.rs:591:5:592:14 | S2 | -| main.rs:634:13:634:14 | x2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:634:13:634:14 | x2 | T | main.rs:589:5:590:14 | S1 | -| main.rs:634:18:634:34 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:634:18:634:34 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:634:31:634:32 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:635:13:635:14 | y2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:635:13:635:14 | y2 | T | main.rs:591:5:592:14 | S2 | -| main.rs:635:18:635:34 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:635:18:635:34 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:635:31:635:32 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:637:18:637:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:637:26:637:42 | call_trait_m1(...) | | main.rs:589:5:590:14 | S1 | -| main.rs:637:40:637:41 | x2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:637:40:637:41 | x2 | T | main.rs:589:5:590:14 | S1 | -| main.rs:638:18:638:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:638:26:638:42 | call_trait_m1(...) | | main.rs:591:5:592:14 | S2 | -| main.rs:638:40:638:41 | y2 | | main.rs:584:5:587:5 | MyThing | -| main.rs:638:40:638:41 | y2 | T | main.rs:591:5:592:14 | S2 | -| main.rs:640:13:640:14 | x3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:640:13:640:14 | x3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:640:13:640:14 | x3 | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:640:18:642:9 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:640:18:642:9 | MyThing {...} | T | main.rs:584:5:587:5 | MyThing | -| main.rs:640:18:642:9 | MyThing {...} | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:641:16:641:32 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:641:16:641:32 | MyThing {...} | T | main.rs:589:5:590:14 | S1 | -| main.rs:641:29:641:30 | S1 | | main.rs:589:5:590:14 | S1 | -| main.rs:643:13:643:14 | y3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:643:13:643:14 | y3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:643:13:643:14 | y3 | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:643:18:645:9 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:643:18:645:9 | MyThing {...} | T | main.rs:584:5:587:5 | MyThing | -| main.rs:643:18:645:9 | MyThing {...} | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:644:16:644:32 | MyThing {...} | | main.rs:584:5:587:5 | MyThing | -| main.rs:644:16:644:32 | MyThing {...} | T | main.rs:591:5:592:14 | S2 | -| main.rs:644:29:644:30 | S2 | | main.rs:591:5:592:14 | S2 | -| main.rs:647:13:647:13 | a | | main.rs:589:5:590:14 | S1 | -| main.rs:647:17:647:39 | call_trait_thing_m1(...) | | main.rs:589:5:590:14 | S1 | -| main.rs:647:37:647:38 | x3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:647:37:647:38 | x3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:647:37:647:38 | x3 | T.T | main.rs:589:5:590:14 | S1 | -| main.rs:648:18:648:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:648:26:648:26 | a | | main.rs:589:5:590:14 | S1 | -| main.rs:649:13:649:13 | b | | main.rs:591:5:592:14 | S2 | -| main.rs:649:17:649:39 | call_trait_thing_m1(...) | | main.rs:591:5:592:14 | S2 | -| main.rs:649:37:649:38 | y3 | | main.rs:584:5:587:5 | MyThing | -| main.rs:649:37:649:38 | y3 | T | main.rs:584:5:587:5 | MyThing | -| main.rs:649:37:649:38 | y3 | T.T | main.rs:591:5:592:14 | S2 | -| main.rs:650:18:650:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:650:26:650:26 | b | | main.rs:591:5:592:14 | S2 | -| main.rs:661:19:661:22 | SelfParam | | main.rs:655:5:658:5 | Wrapper | -| main.rs:661:19:661:22 | SelfParam | A | main.rs:660:10:660:10 | A | -| main.rs:661:30:663:9 | { ... } | | main.rs:660:10:660:10 | A | -| main.rs:662:13:662:16 | self | | main.rs:655:5:658:5 | Wrapper | -| main.rs:662:13:662:16 | self | A | main.rs:660:10:660:10 | A | -| main.rs:662:13:662:22 | self.field | | main.rs:660:10:660:10 | A | -| main.rs:670:15:670:18 | SelfParam | | main.rs:666:5:680:5 | Self [trait MyTrait] | -| main.rs:672:15:672:18 | SelfParam | | main.rs:666:5:680:5 | Self [trait MyTrait] | -| main.rs:676:9:679:9 | { ... } | | main.rs:667:9:667:28 | AssociatedType | -| main.rs:677:13:677:16 | self | | main.rs:666:5:680:5 | Self [trait MyTrait] | -| main.rs:677:13:677:21 | self.m1() | | main.rs:667:9:667:28 | AssociatedType | -| main.rs:678:13:678:43 | ...::default(...) | | main.rs:667:9:667:28 | AssociatedType | -| main.rs:686:19:686:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:686:19:686:23 | SelfParam | &T | main.rs:682:5:692:5 | Self [trait MyTraitAssoc2] | -| main.rs:686:26:686:26 | a | | main.rs:686:16:686:16 | A | -| main.rs:688:22:688:26 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:688:22:688:26 | SelfParam | &T | main.rs:682:5:692:5 | Self [trait MyTraitAssoc2] | -| main.rs:688:29:688:29 | a | | main.rs:688:19:688:19 | A | -| main.rs:688:35:688:35 | b | | main.rs:688:19:688:19 | A | -| main.rs:688:75:691:9 | { ... } | | main.rs:683:9:683:52 | GenericAssociatedType | -| main.rs:689:13:689:16 | self | | file://:0:0:0:0 | & | -| main.rs:689:13:689:16 | self | &T | main.rs:682:5:692:5 | Self [trait MyTraitAssoc2] | -| main.rs:689:13:689:23 | self.put(...) | | main.rs:683:9:683:52 | GenericAssociatedType | -| main.rs:689:22:689:22 | a | | main.rs:688:19:688:19 | A | -| main.rs:690:13:690:16 | self | | file://:0:0:0:0 | & | -| main.rs:690:13:690:16 | self | &T | main.rs:682:5:692:5 | Self [trait MyTraitAssoc2] | -| main.rs:690:13:690:23 | self.put(...) | | main.rs:683:9:683:52 | GenericAssociatedType | -| main.rs:690:22:690:22 | b | | main.rs:688:19:688:19 | A | -| main.rs:699:21:699:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:699:21:699:25 | SelfParam | &T | main.rs:694:5:704:5 | Self [trait TraitMultipleAssoc] | -| main.rs:701:20:701:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:701:20:701:24 | SelfParam | &T | main.rs:694:5:704:5 | Self [trait TraitMultipleAssoc] | -| main.rs:703:20:703:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:703:20:703:24 | SelfParam | &T | main.rs:694:5:704:5 | Self [trait TraitMultipleAssoc] | -| main.rs:719:15:719:18 | SelfParam | | main.rs:706:5:707:13 | S | -| main.rs:719:45:721:9 | { ... } | | main.rs:712:5:713:14 | AT | -| main.rs:720:13:720:14 | AT | | main.rs:712:5:713:14 | AT | -| main.rs:729:19:729:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:729:19:729:23 | SelfParam | &T | main.rs:706:5:707:13 | S | -| main.rs:729:26:729:26 | a | | main.rs:729:16:729:16 | A | -| main.rs:729:46:731:9 | { ... } | | main.rs:655:5:658:5 | Wrapper | -| main.rs:729:46:731:9 | { ... } | A | main.rs:729:16:729:16 | A | -| main.rs:730:13:730:32 | Wrapper {...} | | main.rs:655:5:658:5 | Wrapper | -| main.rs:730:13:730:32 | Wrapper {...} | A | main.rs:729:16:729:16 | A | -| main.rs:730:30:730:30 | a | | main.rs:729:16:729:16 | A | -| main.rs:738:15:738:18 | SelfParam | | main.rs:709:5:710:14 | S2 | -| main.rs:738:45:740:9 | { ... } | | main.rs:655:5:658:5 | Wrapper | -| main.rs:738:45:740:9 | { ... } | A | main.rs:709:5:710:14 | S2 | -| main.rs:739:13:739:35 | Wrapper {...} | | main.rs:655:5:658:5 | Wrapper | -| main.rs:739:13:739:35 | Wrapper {...} | A | main.rs:709:5:710:14 | S2 | -| main.rs:739:30:739:33 | self | | main.rs:709:5:710:14 | S2 | -| main.rs:745:30:747:9 | { ... } | | main.rs:655:5:658:5 | Wrapper | -| main.rs:745:30:747:9 | { ... } | A | main.rs:709:5:710:14 | S2 | -| main.rs:746:13:746:33 | Wrapper {...} | | main.rs:655:5:658:5 | Wrapper | -| main.rs:746:13:746:33 | Wrapper {...} | A | main.rs:709:5:710:14 | S2 | -| main.rs:746:30:746:31 | S2 | | main.rs:709:5:710:14 | S2 | -| main.rs:751:22:751:26 | thing | | main.rs:751:10:751:19 | T | -| main.rs:752:9:752:13 | thing | | main.rs:751:10:751:19 | T | -| main.rs:759:21:759:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:759:21:759:25 | SelfParam | &T | main.rs:712:5:713:14 | AT | -| main.rs:759:34:761:9 | { ... } | | main.rs:712:5:713:14 | AT | -| main.rs:760:13:760:14 | AT | | main.rs:712:5:713:14 | AT | -| main.rs:763:20:763:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:763:20:763:24 | SelfParam | &T | main.rs:712:5:713:14 | AT | -| main.rs:763:43:765:9 | { ... } | | main.rs:706:5:707:13 | S | -| main.rs:764:13:764:13 | S | | main.rs:706:5:707:13 | S | -| main.rs:767:20:767:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:767:20:767:24 | SelfParam | &T | main.rs:712:5:713:14 | AT | -| main.rs:767:43:769:9 | { ... } | | main.rs:709:5:710:14 | S2 | -| main.rs:768:13:768:14 | S2 | | main.rs:709:5:710:14 | S2 | -| main.rs:773:13:773:14 | x1 | | main.rs:706:5:707:13 | S | -| main.rs:773:18:773:18 | S | | main.rs:706:5:707:13 | S | -| main.rs:775:18:775:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:775:26:775:27 | x1 | | main.rs:706:5:707:13 | S | -| main.rs:775:26:775:32 | x1.m1() | | main.rs:712:5:713:14 | AT | -| main.rs:777:13:777:14 | x2 | | main.rs:706:5:707:13 | S | -| main.rs:777:18:777:18 | S | | main.rs:706:5:707:13 | S | -| main.rs:779:13:779:13 | y | | main.rs:712:5:713:14 | AT | -| main.rs:779:17:779:18 | x2 | | main.rs:706:5:707:13 | S | -| main.rs:779:17:779:23 | x2.m2() | | main.rs:712:5:713:14 | AT | -| main.rs:780:18:780:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:780:26:780:26 | y | | main.rs:712:5:713:14 | AT | -| main.rs:782:13:782:14 | x3 | | main.rs:706:5:707:13 | S | -| main.rs:782:18:782:18 | S | | main.rs:706:5:707:13 | S | -| main.rs:784:18:784:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:784:26:784:27 | x3 | | main.rs:706:5:707:13 | S | -| main.rs:784:26:784:34 | x3.put(...) | | main.rs:655:5:658:5 | Wrapper | -| main.rs:784:26:784:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | -| main.rs:784:26:784:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | -| main.rs:784:33:784:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:787:18:787:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:787:26:787:27 | x3 | | main.rs:706:5:707:13 | S | -| main.rs:787:26:787:40 | x3.putTwo(...) | | main.rs:655:5:658:5 | Wrapper | -| main.rs:787:26:787:40 | x3.putTwo(...) | A | main.rs:726:36:726:50 | AssociatedParam | -| main.rs:787:26:787:49 | ... .unwrap() | | main.rs:726:36:726:50 | AssociatedParam | -| main.rs:787:36:787:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:787:39:787:39 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:789:20:789:20 | S | | main.rs:706:5:707:13 | S | -| main.rs:790:18:790:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:792:13:792:14 | x5 | | main.rs:709:5:710:14 | S2 | -| main.rs:792:18:792:19 | S2 | | main.rs:709:5:710:14 | S2 | -| main.rs:793:18:793:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:793:26:793:27 | x5 | | main.rs:709:5:710:14 | S2 | -| main.rs:793:26:793:32 | x5.m1() | | main.rs:655:5:658:5 | Wrapper | -| main.rs:793:26:793:32 | x5.m1() | A | main.rs:709:5:710:14 | S2 | -| main.rs:794:13:794:14 | x6 | | main.rs:709:5:710:14 | S2 | -| main.rs:794:18:794:19 | S2 | | main.rs:709:5:710:14 | S2 | -| main.rs:795:18:795:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:795:26:795:27 | x6 | | main.rs:709:5:710:14 | S2 | -| main.rs:795:26:795:32 | x6.m2() | | main.rs:655:5:658:5 | Wrapper | -| main.rs:795:26:795:32 | x6.m2() | A | main.rs:709:5:710:14 | S2 | -| main.rs:797:13:797:22 | assoc_zero | | main.rs:712:5:713:14 | AT | -| main.rs:797:26:797:27 | AT | | main.rs:712:5:713:14 | AT | -| main.rs:797:26:797:38 | AT.get_zero() | | main.rs:712:5:713:14 | AT | -| main.rs:798:13:798:21 | assoc_one | | main.rs:706:5:707:13 | S | -| main.rs:798:25:798:26 | AT | | main.rs:712:5:713:14 | AT | -| main.rs:798:25:798:36 | AT.get_one() | | main.rs:706:5:707:13 | S | -| main.rs:799:13:799:21 | assoc_two | | main.rs:709:5:710:14 | S2 | -| main.rs:799:25:799:26 | AT | | main.rs:712:5:713:14 | AT | -| main.rs:799:25:799:36 | AT.get_two() | | main.rs:709:5:710:14 | S2 | -| main.rs:816:15:816:18 | SelfParam | | main.rs:804:5:808:5 | MyEnum | -| main.rs:816:15:816:18 | SelfParam | A | main.rs:815:10:815:10 | T | -| main.rs:816:26:821:9 | { ... } | | main.rs:815:10:815:10 | T | -| main.rs:817:13:820:13 | match self { ... } | | main.rs:815:10:815:10 | T | -| main.rs:817:19:817:22 | self | | main.rs:804:5:808:5 | MyEnum | -| main.rs:817:19:817:22 | self | A | main.rs:815:10:815:10 | T | -| main.rs:818:28:818:28 | a | | main.rs:815:10:815:10 | T | -| main.rs:818:34:818:34 | a | | main.rs:815:10:815:10 | T | -| main.rs:819:30:819:30 | a | | main.rs:815:10:815:10 | T | -| main.rs:819:37:819:37 | a | | main.rs:815:10:815:10 | T | -| main.rs:825:13:825:13 | x | | main.rs:804:5:808:5 | MyEnum | -| main.rs:825:13:825:13 | x | A | main.rs:810:5:811:14 | S1 | -| main.rs:825:17:825:30 | ...::C1(...) | | main.rs:804:5:808:5 | MyEnum | -| main.rs:825:17:825:30 | ...::C1(...) | A | main.rs:810:5:811:14 | S1 | -| main.rs:825:28:825:29 | S1 | | main.rs:810:5:811:14 | S1 | -| main.rs:826:13:826:13 | y | | main.rs:804:5:808:5 | MyEnum | -| main.rs:826:13:826:13 | y | A | main.rs:812:5:813:14 | S2 | -| main.rs:826:17:826:36 | ...::C2 {...} | | main.rs:804:5:808:5 | MyEnum | -| main.rs:826:17:826:36 | ...::C2 {...} | A | main.rs:812:5:813:14 | S2 | -| main.rs:826:33:826:34 | S2 | | main.rs:812:5:813:14 | S2 | -| main.rs:828:18:828:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:828:26:828:26 | x | | main.rs:804:5:808:5 | MyEnum | -| main.rs:828:26:828:26 | x | A | main.rs:810:5:811:14 | S1 | -| main.rs:828:26:828:31 | x.m1() | | main.rs:810:5:811:14 | S1 | -| main.rs:829:18:829:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:829:26:829:26 | y | | main.rs:804:5:808:5 | MyEnum | -| main.rs:829:26:829:26 | y | A | main.rs:812:5:813:14 | S2 | -| main.rs:829:26:829:31 | y.m1() | | main.rs:812:5:813:14 | S2 | -| main.rs:851:15:851:18 | SelfParam | | main.rs:849:5:852:5 | Self [trait MyTrait1] | -| main.rs:856:15:856:18 | SelfParam | | main.rs:854:5:866:5 | Self [trait MyTrait2] | -| main.rs:859:9:865:9 | { ... } | | main.rs:854:20:854:22 | Tr2 | -| main.rs:860:13:864:13 | if ... {...} else {...} | | main.rs:854:20:854:22 | Tr2 | -| main.rs:860:16:860:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:860:16:860:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:860:20:860:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:860:22:862:13 | { ... } | | main.rs:854:20:854:22 | Tr2 | -| main.rs:861:17:861:20 | self | | main.rs:854:5:866:5 | Self [trait MyTrait2] | -| main.rs:861:17:861:25 | self.m1() | | main.rs:854:20:854:22 | Tr2 | -| main.rs:862:20:864:13 | { ... } | | main.rs:854:20:854:22 | Tr2 | -| main.rs:863:17:863:30 | ...::m1(...) | | main.rs:854:20:854:22 | Tr2 | -| main.rs:863:26:863:29 | self | | main.rs:854:5:866:5 | Self [trait MyTrait2] | -| main.rs:870:15:870:18 | SelfParam | | main.rs:868:5:880:5 | Self [trait MyTrait3] | -| main.rs:873:9:879:9 | { ... } | | main.rs:868:20:868:22 | Tr3 | -| main.rs:874:13:878:13 | if ... {...} else {...} | | main.rs:868:20:868:22 | Tr3 | -| main.rs:874:16:874:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:874:16:874:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:874:20:874:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:874:22:876:13 | { ... } | | main.rs:868:20:868:22 | Tr3 | -| main.rs:875:17:875:20 | self | | main.rs:868:5:880:5 | Self [trait MyTrait3] | -| main.rs:875:17:875:25 | self.m2() | | main.rs:834:5:837:5 | MyThing | -| main.rs:875:17:875:25 | self.m2() | A | main.rs:868:20:868:22 | Tr3 | -| main.rs:875:17:875:27 | ... .a | | main.rs:868:20:868:22 | Tr3 | -| main.rs:876:20:878:13 | { ... } | | main.rs:868:20:868:22 | Tr3 | -| main.rs:877:17:877:30 | ...::m2(...) | | main.rs:834:5:837:5 | MyThing | -| main.rs:877:17:877:30 | ...::m2(...) | A | main.rs:868:20:868:22 | Tr3 | -| main.rs:877:17:877:32 | ... .a | | main.rs:868:20:868:22 | Tr3 | -| main.rs:877:26:877:29 | self | | main.rs:868:5:880:5 | Self [trait MyTrait3] | -| main.rs:884:15:884:18 | SelfParam | | main.rs:834:5:837:5 | MyThing | -| main.rs:884:15:884:18 | SelfParam | A | main.rs:882:10:882:10 | T | -| main.rs:884:26:886:9 | { ... } | | main.rs:882:10:882:10 | T | -| main.rs:885:13:885:16 | self | | main.rs:834:5:837:5 | MyThing | -| main.rs:885:13:885:16 | self | A | main.rs:882:10:882:10 | T | -| main.rs:885:13:885:18 | self.a | | main.rs:882:10:882:10 | T | -| main.rs:893:15:893:18 | SelfParam | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:893:15:893:18 | SelfParam | A | main.rs:891:10:891:10 | T | -| main.rs:893:35:895:9 | { ... } | | main.rs:834:5:837:5 | MyThing | -| main.rs:893:35:895:9 | { ... } | A | main.rs:891:10:891:10 | T | -| main.rs:894:13:894:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:894:13:894:33 | MyThing {...} | A | main.rs:891:10:891:10 | T | -| main.rs:894:26:894:29 | self | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:894:26:894:29 | self | A | main.rs:891:10:891:10 | T | -| main.rs:894:26:894:31 | self.a | | main.rs:891:10:891:10 | T | -| main.rs:902:44:902:44 | x | | main.rs:902:26:902:41 | T2 | -| main.rs:902:57:904:5 | { ... } | | main.rs:902:22:902:23 | T1 | -| main.rs:903:9:903:9 | x | | main.rs:902:26:902:41 | T2 | -| main.rs:903:9:903:14 | x.m1() | | main.rs:902:22:902:23 | T1 | -| main.rs:906:56:906:56 | x | | main.rs:906:39:906:53 | T | -| main.rs:908:13:908:13 | a | | main.rs:834:5:837:5 | MyThing | -| main.rs:908:13:908:13 | a | A | main.rs:844:5:845:14 | S1 | -| main.rs:908:17:908:17 | x | | main.rs:906:39:906:53 | T | -| main.rs:908:17:908:22 | x.m1() | | main.rs:834:5:837:5 | MyThing | -| main.rs:908:17:908:22 | x.m1() | A | main.rs:844:5:845:14 | S1 | -| main.rs:909:18:909:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:909:26:909:26 | a | | main.rs:834:5:837:5 | MyThing | -| main.rs:909:26:909:26 | a | A | main.rs:844:5:845:14 | S1 | -| main.rs:913:13:913:13 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:913:13:913:13 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:913:17:913:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:913:17:913:33 | MyThing {...} | A | main.rs:844:5:845:14 | S1 | -| main.rs:913:30:913:31 | S1 | | main.rs:844:5:845:14 | S1 | -| main.rs:914:13:914:13 | y | | main.rs:834:5:837:5 | MyThing | -| main.rs:914:13:914:13 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:914:17:914:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:914:17:914:33 | MyThing {...} | A | main.rs:846:5:847:14 | S2 | -| main.rs:914:30:914:31 | S2 | | main.rs:846:5:847:14 | S2 | -| main.rs:916:18:916:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:916:26:916:26 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:916:26:916:26 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:916:26:916:31 | x.m1() | | main.rs:844:5:845:14 | S1 | -| main.rs:917:18:917:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:917:26:917:26 | y | | main.rs:834:5:837:5 | MyThing | -| main.rs:917:26:917:26 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:917:26:917:31 | y.m1() | | main.rs:846:5:847:14 | S2 | -| main.rs:919:13:919:13 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:919:13:919:13 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:919:17:919:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:919:17:919:33 | MyThing {...} | A | main.rs:844:5:845:14 | S1 | -| main.rs:919:30:919:31 | S1 | | main.rs:844:5:845:14 | S1 | -| main.rs:920:13:920:13 | y | | main.rs:834:5:837:5 | MyThing | -| main.rs:920:13:920:13 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:920:17:920:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:920:17:920:33 | MyThing {...} | A | main.rs:846:5:847:14 | S2 | -| main.rs:920:30:920:31 | S2 | | main.rs:846:5:847:14 | S2 | -| main.rs:922:18:922:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:922:26:922:26 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:922:26:922:26 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:922:26:922:31 | x.m2() | | main.rs:844:5:845:14 | S1 | -| main.rs:923:18:923:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:923:26:923:26 | y | | main.rs:834:5:837:5 | MyThing | -| main.rs:923:26:923:26 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:923:26:923:31 | y.m2() | | main.rs:846:5:847:14 | S2 | -| main.rs:925:13:925:13 | x | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:925:13:925:13 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:925:17:925:34 | MyThing2 {...} | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:925:17:925:34 | MyThing2 {...} | A | main.rs:844:5:845:14 | S1 | -| main.rs:925:31:925:32 | S1 | | main.rs:844:5:845:14 | S1 | -| main.rs:926:13:926:13 | y | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:926:13:926:13 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:926:17:926:34 | MyThing2 {...} | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:926:17:926:34 | MyThing2 {...} | A | main.rs:846:5:847:14 | S2 | -| main.rs:926:31:926:32 | S2 | | main.rs:846:5:847:14 | S2 | -| main.rs:928:18:928:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:928:26:928:26 | x | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:928:26:928:26 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:928:26:928:31 | x.m3() | | main.rs:844:5:845:14 | S1 | -| main.rs:929:18:929:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:929:26:929:26 | y | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:929:26:929:26 | y | A | main.rs:846:5:847:14 | S2 | -| main.rs:929:26:929:31 | y.m3() | | main.rs:846:5:847:14 | S2 | -| main.rs:931:13:931:13 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:931:13:931:13 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:931:17:931:33 | MyThing {...} | | main.rs:834:5:837:5 | MyThing | -| main.rs:931:17:931:33 | MyThing {...} | A | main.rs:844:5:845:14 | S1 | -| main.rs:931:30:931:31 | S1 | | main.rs:844:5:845:14 | S1 | -| main.rs:932:13:932:13 | s | | main.rs:844:5:845:14 | S1 | -| main.rs:932:17:932:32 | call_trait_m1(...) | | main.rs:844:5:845:14 | S1 | -| main.rs:932:31:932:31 | x | | main.rs:834:5:837:5 | MyThing | -| main.rs:932:31:932:31 | x | A | main.rs:844:5:845:14 | S1 | -| main.rs:934:13:934:13 | x | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:934:13:934:13 | x | A | main.rs:846:5:847:14 | S2 | -| main.rs:934:17:934:34 | MyThing2 {...} | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:934:17:934:34 | MyThing2 {...} | A | main.rs:846:5:847:14 | S2 | -| main.rs:934:31:934:32 | S2 | | main.rs:846:5:847:14 | S2 | -| main.rs:935:13:935:13 | s | | main.rs:834:5:837:5 | MyThing | -| main.rs:935:13:935:13 | s | A | main.rs:846:5:847:14 | S2 | -| main.rs:935:17:935:32 | call_trait_m1(...) | | main.rs:834:5:837:5 | MyThing | -| main.rs:935:17:935:32 | call_trait_m1(...) | A | main.rs:846:5:847:14 | S2 | -| main.rs:935:31:935:31 | x | | main.rs:839:5:842:5 | MyThing2 | -| main.rs:935:31:935:31 | x | A | main.rs:846:5:847:14 | S2 | -| main.rs:953:22:953:22 | x | | file://:0:0:0:0 | & | -| main.rs:953:22:953:22 | x | &T | main.rs:953:11:953:19 | T | -| main.rs:953:35:955:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:953:35:955:5 | { ... } | &T | main.rs:953:11:953:19 | T | -| main.rs:954:9:954:9 | x | | file://:0:0:0:0 | & | -| main.rs:954:9:954:9 | x | &T | main.rs:953:11:953:19 | T | -| main.rs:958:17:958:20 | SelfParam | | main.rs:943:5:944:14 | S1 | -| main.rs:958:29:960:9 | { ... } | | main.rs:946:5:947:14 | S2 | -| main.rs:959:13:959:14 | S2 | | main.rs:946:5:947:14 | S2 | -| main.rs:963:21:963:21 | x | | main.rs:963:13:963:14 | T1 | -| main.rs:966:5:968:5 | { ... } | | main.rs:963:17:963:18 | T2 | -| main.rs:967:9:967:9 | x | | main.rs:963:13:963:14 | T1 | -| main.rs:967:9:967:16 | x.into() | | main.rs:963:17:963:18 | T2 | -| main.rs:971:13:971:13 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:971:17:971:18 | S1 | | main.rs:943:5:944:14 | S1 | -| main.rs:972:18:972:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:972:26:972:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:972:26:972:31 | id(...) | &T | main.rs:943:5:944:14 | S1 | -| main.rs:972:29:972:30 | &x | | file://:0:0:0:0 | & | -| main.rs:972:29:972:30 | &x | &T | main.rs:943:5:944:14 | S1 | -| main.rs:972:30:972:30 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:974:13:974:13 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:974:17:974:18 | S1 | | main.rs:943:5:944:14 | S1 | -| main.rs:975:18:975:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:975:26:975:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:975:26:975:37 | id::<...>(...) | &T | main.rs:943:5:944:14 | S1 | -| main.rs:975:35:975:36 | &x | | file://:0:0:0:0 | & | -| main.rs:975:35:975:36 | &x | &T | main.rs:943:5:944:14 | S1 | -| main.rs:975:36:975:36 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:977:13:977:13 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:977:17:977:18 | S1 | | main.rs:943:5:944:14 | S1 | -| main.rs:978:18:978:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:978:26:978:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:978:26:978:44 | id::<...>(...) | &T | main.rs:943:5:944:14 | S1 | -| main.rs:978:42:978:43 | &x | | file://:0:0:0:0 | & | -| main.rs:978:42:978:43 | &x | &T | main.rs:943:5:944:14 | S1 | -| main.rs:978:43:978:43 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:980:13:980:13 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:980:17:980:18 | S1 | | main.rs:943:5:944:14 | S1 | -| main.rs:981:9:981:25 | into::<...>(...) | | main.rs:946:5:947:14 | S2 | -| main.rs:981:24:981:24 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:983:13:983:13 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:983:17:983:18 | S1 | | main.rs:943:5:944:14 | S1 | -| main.rs:984:13:984:13 | y | | main.rs:946:5:947:14 | S2 | -| main.rs:984:21:984:27 | into(...) | | main.rs:946:5:947:14 | S2 | -| main.rs:984:26:984:26 | x | | main.rs:943:5:944:14 | S1 | -| main.rs:998:22:998:25 | SelfParam | | main.rs:989:5:995:5 | PairOption | -| main.rs:998:22:998:25 | SelfParam | Fst | main.rs:997:10:997:12 | Fst | -| main.rs:998:22:998:25 | SelfParam | Snd | main.rs:997:15:997:17 | Snd | -| main.rs:998:35:1005:9 | { ... } | | main.rs:997:15:997:17 | Snd | -| main.rs:999:13:1004:13 | match self { ... } | | main.rs:997:15:997:17 | Snd | -| main.rs:999:19:999:22 | self | | main.rs:989:5:995:5 | PairOption | -| main.rs:999:19:999:22 | self | Fst | main.rs:997:10:997:12 | Fst | -| main.rs:999:19:999:22 | self | Snd | main.rs:997:15:997:17 | Snd | -| main.rs:1000:43:1000:82 | MacroExpr | | main.rs:997:15:997:17 | Snd | -| main.rs:1000:50:1000:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | str | -| main.rs:1000:50:1000:81 | MacroExpr | | main.rs:997:15:997:17 | Snd | -| main.rs:1000:50:1000:81 | { ... } | | main.rs:997:15:997:17 | Snd | -| main.rs:1001:43:1001:81 | MacroExpr | | main.rs:997:15:997:17 | Snd | -| main.rs:1001:50:1001:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | str | -| main.rs:1001:50:1001:80 | MacroExpr | | main.rs:997:15:997:17 | Snd | -| main.rs:1001:50:1001:80 | { ... } | | main.rs:997:15:997:17 | Snd | -| main.rs:1002:37:1002:39 | snd | | main.rs:997:15:997:17 | Snd | -| main.rs:1002:45:1002:47 | snd | | main.rs:997:15:997:17 | Snd | -| main.rs:1003:41:1003:43 | snd | | main.rs:997:15:997:17 | Snd | -| main.rs:1003:49:1003:51 | snd | | main.rs:997:15:997:17 | Snd | -| main.rs:1029:10:1029:10 | t | | main.rs:989:5:995:5 | PairOption | -| main.rs:1029:10:1029:10 | t | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1029:10:1029:10 | t | Snd | main.rs:989:5:995:5 | PairOption | -| main.rs:1029:10:1029:10 | t | Snd.Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1029:10:1029:10 | t | Snd.Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1030:13:1030:13 | x | | main.rs:1014:5:1015:14 | S3 | -| main.rs:1030:17:1030:17 | t | | main.rs:989:5:995:5 | PairOption | -| main.rs:1030:17:1030:17 | t | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1030:17:1030:17 | t | Snd | main.rs:989:5:995:5 | PairOption | -| main.rs:1030:17:1030:17 | t | Snd.Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1030:17:1030:17 | t | Snd.Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1030:17:1030:29 | t.unwrapSnd() | | main.rs:989:5:995:5 | PairOption | -| main.rs:1030:17:1030:29 | t.unwrapSnd() | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1030:17:1030:29 | t.unwrapSnd() | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1030:17:1030:41 | ... .unwrapSnd() | | main.rs:1014:5:1015:14 | S3 | -| main.rs:1031:18:1031:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1031:26:1031:26 | x | | main.rs:1014:5:1015:14 | S3 | -| main.rs:1036:13:1036:14 | p1 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1036:13:1036:14 | p1 | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1036:13:1036:14 | p1 | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1036:26:1036:53 | ...::PairBoth(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1036:26:1036:53 | ...::PairBoth(...) | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1036:26:1036:53 | ...::PairBoth(...) | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1036:47:1036:48 | S1 | | main.rs:1008:5:1009:14 | S1 | -| main.rs:1036:51:1036:52 | S2 | | main.rs:1011:5:1012:14 | S2 | -| main.rs:1037:18:1037:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1037:26:1037:27 | p1 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1037:26:1037:27 | p1 | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1037:26:1037:27 | p1 | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1040:13:1040:14 | p2 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1040:13:1040:14 | p2 | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1040:13:1040:14 | p2 | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1040:26:1040:47 | ...::PairNone(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1040:26:1040:47 | ...::PairNone(...) | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1040:26:1040:47 | ...::PairNone(...) | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1041:18:1041:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1041:26:1041:27 | p2 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1041:26:1041:27 | p2 | Fst | main.rs:1008:5:1009:14 | S1 | -| main.rs:1041:26:1041:27 | p2 | Snd | main.rs:1011:5:1012:14 | S2 | -| main.rs:1044:13:1044:14 | p3 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1044:13:1044:14 | p3 | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1044:13:1044:14 | p3 | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1044:34:1044:56 | ...::PairSnd(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1044:34:1044:56 | ...::PairSnd(...) | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1044:34:1044:56 | ...::PairSnd(...) | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1044:54:1044:55 | S3 | | main.rs:1014:5:1015:14 | S3 | -| main.rs:1045:18:1045:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1045:26:1045:27 | p3 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1045:26:1045:27 | p3 | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1045:26:1045:27 | p3 | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1048:13:1048:14 | p3 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1048:13:1048:14 | p3 | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1048:13:1048:14 | p3 | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1048:35:1048:56 | ...::PairNone(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1048:35:1048:56 | ...::PairNone(...) | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1048:35:1048:56 | ...::PairNone(...) | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1049:18:1049:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1049:26:1049:27 | p3 | | main.rs:989:5:995:5 | PairOption | -| main.rs:1049:26:1049:27 | p3 | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1049:26:1049:27 | p3 | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1051:11:1051:54 | ...::PairSnd(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1051:11:1051:54 | ...::PairSnd(...) | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1051:11:1051:54 | ...::PairSnd(...) | Snd | main.rs:989:5:995:5 | PairOption | -| main.rs:1051:11:1051:54 | ...::PairSnd(...) | Snd.Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1051:11:1051:54 | ...::PairSnd(...) | Snd.Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1051:31:1051:53 | ...::PairSnd(...) | | main.rs:989:5:995:5 | PairOption | -| main.rs:1051:31:1051:53 | ...::PairSnd(...) | Fst | main.rs:1011:5:1012:14 | S2 | -| main.rs:1051:31:1051:53 | ...::PairSnd(...) | Snd | main.rs:1014:5:1015:14 | S3 | -| main.rs:1051:51:1051:52 | S3 | | main.rs:1014:5:1015:14 | S3 | -| main.rs:1064:16:1064:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1064:16:1064:24 | SelfParam | &T | main.rs:1062:5:1069:5 | Self [trait MyTrait] | -| main.rs:1064:27:1064:31 | value | | main.rs:1062:19:1062:19 | S | -| main.rs:1066:21:1066:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1066:21:1066:29 | SelfParam | &T | main.rs:1062:5:1069:5 | Self [trait MyTrait] | -| main.rs:1066:32:1066:36 | value | | main.rs:1062:19:1062:19 | S | -| main.rs:1067:13:1067:16 | self | | file://:0:0:0:0 | & | -| main.rs:1067:13:1067:16 | self | &T | main.rs:1062:5:1069:5 | Self [trait MyTrait] | -| main.rs:1067:22:1067:26 | value | | main.rs:1062:19:1062:19 | S | -| main.rs:1073:16:1073:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1073:16:1073:24 | SelfParam | &T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1073:16:1073:24 | SelfParam | &T.T | main.rs:1071:10:1071:10 | T | -| main.rs:1073:27:1073:31 | value | | main.rs:1071:10:1071:10 | T | -| main.rs:1077:26:1079:9 | { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1077:26:1079:9 | { ... } | T | main.rs:1076:10:1076:10 | T | -| main.rs:1078:13:1078:30 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1078:13:1078:30 | ...::MyNone(...) | T | main.rs:1076:10:1076:10 | T | -| main.rs:1083:20:1083:23 | SelfParam | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1083:20:1083:23 | SelfParam | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1083:20:1083:23 | SelfParam | T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1083:41:1088:9 | { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1083:41:1088:9 | { ... } | T | main.rs:1082:10:1082:10 | T | -| main.rs:1084:13:1087:13 | match self { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1084:13:1087:13 | match self { ... } | T | main.rs:1082:10:1082:10 | T | -| main.rs:1084:19:1084:22 | self | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1084:19:1084:22 | self | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1084:19:1084:22 | self | T.T | main.rs:1082:10:1082:10 | T | -| main.rs:1085:39:1085:56 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1085:39:1085:56 | ...::MyNone(...) | T | main.rs:1082:10:1082:10 | T | -| main.rs:1086:34:1086:34 | x | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1086:34:1086:34 | x | T | main.rs:1082:10:1082:10 | T | -| main.rs:1086:40:1086:40 | x | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1086:40:1086:40 | x | T | main.rs:1082:10:1082:10 | T | -| main.rs:1095:13:1095:14 | x1 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1095:18:1095:37 | ...::new(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1096:18:1096:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1096:26:1096:27 | x1 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1098:13:1098:18 | mut x2 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1098:13:1098:18 | mut x2 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1098:22:1098:36 | ...::new(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1098:22:1098:36 | ...::new(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1099:9:1099:10 | x2 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1099:9:1099:10 | x2 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1099:16:1099:16 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1100:18:1100:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1100:26:1100:27 | x2 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1100:26:1100:27 | x2 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1102:13:1102:18 | mut x3 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1102:22:1102:36 | ...::new(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1103:9:1103:10 | x3 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1103:21:1103:21 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1104:18:1104:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1104:26:1104:27 | x3 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1106:13:1106:18 | mut x4 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1106:13:1106:18 | mut x4 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1106:22:1106:36 | ...::new(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1106:22:1106:36 | ...::new(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1107:23:1107:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:1107:23:1107:29 | &mut x4 | &T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1107:23:1107:29 | &mut x4 | &T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1107:28:1107:29 | x4 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1107:28:1107:29 | x4 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1107:32:1107:32 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1108:18:1108:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1108:26:1108:27 | x4 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1108:26:1108:27 | x4 | T | main.rs:1091:5:1092:13 | S | -| main.rs:1110:13:1110:14 | x5 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1110:13:1110:14 | x5 | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1110:13:1110:14 | x5 | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1110:18:1110:58 | ...::MySome(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1110:18:1110:58 | ...::MySome(...) | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1110:18:1110:58 | ...::MySome(...) | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1110:35:1110:57 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1110:35:1110:57 | ...::MyNone(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1111:18:1111:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1111:26:1111:27 | x5 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1111:26:1111:27 | x5 | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1111:26:1111:27 | x5 | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1111:26:1111:37 | x5.flatten() | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1111:26:1111:37 | x5.flatten() | T | main.rs:1091:5:1092:13 | S | -| main.rs:1113:13:1113:14 | x6 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1113:13:1113:14 | x6 | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1113:13:1113:14 | x6 | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1113:18:1113:58 | ...::MySome(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1113:18:1113:58 | ...::MySome(...) | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1113:18:1113:58 | ...::MySome(...) | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1113:35:1113:57 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1113:35:1113:57 | ...::MyNone(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1114:18:1114:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1114:26:1114:61 | ...::flatten(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1114:26:1114:61 | ...::flatten(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1114:59:1114:60 | x6 | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1114:59:1114:60 | x6 | T | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1114:59:1114:60 | x6 | T.T | main.rs:1091:5:1092:13 | S | -| main.rs:1117:13:1117:19 | from_if | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1117:13:1117:19 | from_if | T | main.rs:1091:5:1092:13 | S | -| main.rs:1117:23:1121:9 | if ... {...} else {...} | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1117:23:1121:9 | if ... {...} else {...} | T | main.rs:1091:5:1092:13 | S | -| main.rs:1117:26:1117:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1117:26:1117:30 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1117:30:1117:30 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1117:32:1119:9 | { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1117:32:1119:9 | { ... } | T | main.rs:1091:5:1092:13 | S | -| main.rs:1118:13:1118:30 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1118:13:1118:30 | ...::MyNone(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1119:16:1121:9 | { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1119:16:1121:9 | { ... } | T | main.rs:1091:5:1092:13 | S | -| main.rs:1120:13:1120:31 | ...::MySome(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1120:13:1120:31 | ...::MySome(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1120:30:1120:30 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1122:18:1122:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1122:26:1122:32 | from_if | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1122:26:1122:32 | from_if | T | main.rs:1091:5:1092:13 | S | -| main.rs:1125:13:1125:22 | from_match | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1125:13:1125:22 | from_match | T | main.rs:1091:5:1092:13 | S | -| main.rs:1125:26:1128:9 | match ... { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1125:26:1128:9 | match ... { ... } | T | main.rs:1091:5:1092:13 | S | -| main.rs:1125:32:1125:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1125:32:1125:36 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1125:36:1125:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1126:13:1126:16 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1126:21:1126:38 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1126:21:1126:38 | ...::MyNone(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1127:13:1127:17 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1127:22:1127:40 | ...::MySome(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1127:22:1127:40 | ...::MySome(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1127:39:1127:39 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1129:18:1129:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1129:26:1129:35 | from_match | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1129:26:1129:35 | from_match | T | main.rs:1091:5:1092:13 | S | -| main.rs:1132:13:1132:21 | from_loop | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1132:13:1132:21 | from_loop | T | main.rs:1091:5:1092:13 | S | -| main.rs:1132:25:1137:9 | loop { ... } | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1132:25:1137:9 | loop { ... } | T | main.rs:1091:5:1092:13 | S | -| main.rs:1133:16:1133:16 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1133:16:1133:20 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1133:20:1133:20 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1134:23:1134:40 | ...::MyNone(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1134:23:1134:40 | ...::MyNone(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1136:19:1136:37 | ...::MySome(...) | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1136:19:1136:37 | ...::MySome(...) | T | main.rs:1091:5:1092:13 | S | -| main.rs:1136:36:1136:36 | S | | main.rs:1091:5:1092:13 | S | -| main.rs:1138:18:1138:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1138:26:1138:34 | from_loop | | main.rs:1056:5:1060:5 | MyOption | -| main.rs:1138:26:1138:34 | from_loop | T | main.rs:1091:5:1092:13 | S | -| main.rs:1156:15:1156:18 | SelfParam | | main.rs:1144:5:1145:19 | S | -| main.rs:1156:15:1156:18 | SelfParam | T | main.rs:1155:10:1155:10 | T | -| main.rs:1156:26:1158:9 | { ... } | | main.rs:1155:10:1155:10 | T | -| main.rs:1157:13:1157:16 | self | | main.rs:1144:5:1145:19 | S | -| main.rs:1157:13:1157:16 | self | T | main.rs:1155:10:1155:10 | T | -| main.rs:1157:13:1157:18 | self.0 | | main.rs:1155:10:1155:10 | T | -| main.rs:1160:15:1160:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1160:15:1160:19 | SelfParam | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1160:15:1160:19 | SelfParam | &T.T | main.rs:1155:10:1155:10 | T | -| main.rs:1160:28:1162:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1160:28:1162:9 | { ... } | &T | main.rs:1155:10:1155:10 | T | -| main.rs:1161:13:1161:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1161:13:1161:19 | &... | &T | main.rs:1155:10:1155:10 | T | -| main.rs:1161:14:1161:17 | self | | file://:0:0:0:0 | & | -| main.rs:1161:14:1161:17 | self | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1161:14:1161:17 | self | &T.T | main.rs:1155:10:1155:10 | T | -| main.rs:1161:14:1161:19 | self.0 | | main.rs:1155:10:1155:10 | T | -| main.rs:1164:15:1164:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1164:15:1164:25 | SelfParam | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1164:15:1164:25 | SelfParam | &T.T | main.rs:1155:10:1155:10 | T | -| main.rs:1164:34:1166:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1164:34:1166:9 | { ... } | &T | main.rs:1155:10:1155:10 | T | -| main.rs:1165:13:1165:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1165:13:1165:19 | &... | &T | main.rs:1155:10:1155:10 | T | -| main.rs:1165:14:1165:17 | self | | file://:0:0:0:0 | & | -| main.rs:1165:14:1165:17 | self | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1165:14:1165:17 | self | &T.T | main.rs:1155:10:1155:10 | T | -| main.rs:1165:14:1165:19 | self.0 | | main.rs:1155:10:1155:10 | T | -| main.rs:1170:29:1170:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1170:29:1170:33 | SelfParam | &T | main.rs:1169:5:1172:5 | Self [trait ATrait] | -| main.rs:1171:33:1171:36 | SelfParam | | main.rs:1169:5:1172:5 | Self [trait ATrait] | -| main.rs:1177:29:1177:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1177:29:1177:33 | SelfParam | &T | file://:0:0:0:0 | & | -| main.rs:1177:29:1177:33 | SelfParam | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1177:29:1177:33 | SelfParam | &T.&T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1177:43:1179:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1178:13:1178:22 | (...) | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:13:1178:24 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1178:14:1178:21 | * ... | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:15:1178:21 | (...) | | file://:0:0:0:0 | & | -| main.rs:1178:15:1178:21 | (...) | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:15:1178:21 | (...) | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:16:1178:20 | * ... | | file://:0:0:0:0 | & | -| main.rs:1178:16:1178:20 | * ... | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:16:1178:20 | * ... | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:17:1178:20 | self | | file://:0:0:0:0 | & | -| main.rs:1178:17:1178:20 | self | &T | file://:0:0:0:0 | & | -| main.rs:1178:17:1178:20 | self | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1178:17:1178:20 | self | &T.&T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1182:33:1182:36 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1182:33:1182:36 | SelfParam | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1182:46:1184:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1183:13:1183:19 | (...) | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1183:13:1183:21 | ... .a | | {EXTERNAL LOCATION} | i64 | -| main.rs:1183:14:1183:18 | * ... | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1183:15:1183:18 | self | | file://:0:0:0:0 | & | -| main.rs:1183:15:1183:18 | self | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1188:13:1188:14 | x1 | | main.rs:1144:5:1145:19 | S | -| main.rs:1188:13:1188:14 | x1 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1188:18:1188:22 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1188:18:1188:22 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1188:20:1188:21 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1189:18:1189:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1189:26:1189:27 | x1 | | main.rs:1144:5:1145:19 | S | -| main.rs:1189:26:1189:27 | x1 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1189:26:1189:32 | x1.m1() | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1191:13:1191:14 | x2 | | main.rs:1144:5:1145:19 | S | -| main.rs:1191:13:1191:14 | x2 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1191:18:1191:22 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1191:18:1191:22 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1191:20:1191:21 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1193:18:1193:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1193:26:1193:27 | x2 | | main.rs:1144:5:1145:19 | S | -| main.rs:1193:26:1193:27 | x2 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1193:26:1193:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:1193:26:1193:32 | x2.m2() | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1194:18:1194:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1194:26:1194:27 | x2 | | main.rs:1144:5:1145:19 | S | -| main.rs:1194:26:1194:27 | x2 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1194:26:1194:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:1194:26:1194:32 | x2.m3() | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1196:13:1196:14 | x3 | | main.rs:1144:5:1145:19 | S | -| main.rs:1196:13:1196:14 | x3 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1196:18:1196:22 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1196:18:1196:22 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1196:20:1196:21 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1198:18:1198:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1198:26:1198:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:1198:26:1198:41 | ...::m2(...) | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1198:38:1198:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1198:38:1198:40 | &x3 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1198:38:1198:40 | &x3 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1198:39:1198:40 | x3 | | main.rs:1144:5:1145:19 | S | -| main.rs:1198:39:1198:40 | x3 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1199:18:1199:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1199:26:1199:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:1199:26:1199:41 | ...::m3(...) | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1199:38:1199:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:1199:38:1199:40 | &x3 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1199:38:1199:40 | &x3 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1199:39:1199:40 | x3 | | main.rs:1144:5:1145:19 | S | -| main.rs:1199:39:1199:40 | x3 | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1201:13:1201:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:1201:13:1201:14 | x4 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1201:13:1201:14 | x4 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1201:18:1201:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1201:18:1201:23 | &... | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1201:18:1201:23 | &... | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1201:19:1201:23 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1201:19:1201:23 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1201:21:1201:22 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1203:18:1203:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1203:26:1203:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1203:26:1203:27 | x4 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1203:26:1203:27 | x4 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1203:26:1203:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:1203:26:1203:32 | x4.m2() | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1204:18:1204:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1204:26:1204:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:1204:26:1204:27 | x4 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1204:26:1204:27 | x4 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1204:26:1204:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:1204:26:1204:32 | x4.m3() | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1206:13:1206:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:1206:13:1206:14 | x5 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1206:13:1206:14 | x5 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1206:18:1206:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1206:18:1206:23 | &... | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1206:18:1206:23 | &... | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1206:19:1206:23 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1206:19:1206:23 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1206:21:1206:22 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1208:18:1208:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1208:26:1208:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1208:26:1208:27 | x5 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1208:26:1208:27 | x5 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1208:26:1208:32 | x5.m1() | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1209:18:1209:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1209:26:1209:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:1209:26:1209:27 | x5 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1209:26:1209:27 | x5 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1209:26:1209:29 | x5.0 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1211:13:1211:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:1211:13:1211:14 | x6 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1211:13:1211:14 | x6 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1211:18:1211:23 | &... | | file://:0:0:0:0 | & | -| main.rs:1211:18:1211:23 | &... | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1211:18:1211:23 | &... | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1211:19:1211:23 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1211:19:1211:23 | S(...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1211:21:1211:22 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1214:18:1214:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1214:26:1214:30 | (...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1214:26:1214:30 | (...) | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1214:26:1214:35 | ... .m1() | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1214:27:1214:29 | * ... | | main.rs:1144:5:1145:19 | S | -| main.rs:1214:27:1214:29 | * ... | T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1214:28:1214:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:1214:28:1214:29 | x6 | &T | main.rs:1144:5:1145:19 | S | -| main.rs:1214:28:1214:29 | x6 | &T.T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1216:13:1216:14 | x7 | | main.rs:1144:5:1145:19 | S | -| main.rs:1216:13:1216:14 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1216:13:1216:14 | x7 | T.&T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1216:18:1216:23 | S(...) | | main.rs:1144:5:1145:19 | S | -| main.rs:1216:18:1216:23 | S(...) | T | file://:0:0:0:0 | & | -| main.rs:1216:18:1216:23 | S(...) | T.&T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1216:20:1216:22 | &S2 | | file://:0:0:0:0 | & | -| main.rs:1216:20:1216:22 | &S2 | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1216:21:1216:22 | S2 | | main.rs:1147:5:1148:14 | S2 | -| main.rs:1219:13:1219:13 | t | | file://:0:0:0:0 | & | -| main.rs:1219:13:1219:13 | t | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1219:17:1219:18 | x7 | | main.rs:1144:5:1145:19 | S | -| main.rs:1219:17:1219:18 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1219:17:1219:18 | x7 | T.&T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1219:17:1219:23 | x7.m1() | | file://:0:0:0:0 | & | -| main.rs:1219:17:1219:23 | x7.m1() | &T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1220:18:1220:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1220:26:1220:27 | x7 | | main.rs:1144:5:1145:19 | S | -| main.rs:1220:26:1220:27 | x7 | T | file://:0:0:0:0 | & | -| main.rs:1220:26:1220:27 | x7 | T.&T | main.rs:1147:5:1148:14 | S2 | -| main.rs:1222:13:1222:14 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1222:26:1222:32 | "Hello" | | {EXTERNAL LOCATION} | str | -| main.rs:1222:26:1222:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | -| main.rs:1226:13:1226:13 | u | | {EXTERNAL LOCATION} | Result | -| main.rs:1226:13:1226:13 | u | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1226:17:1226:18 | x9 | | {EXTERNAL LOCATION} | String | -| main.rs:1226:17:1226:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | -| main.rs:1226:17:1226:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | -| main.rs:1228:13:1228:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1228:13:1228:20 | my_thing | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1228:24:1228:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1228:24:1228:39 | &... | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1228:25:1228:39 | MyInt {...} | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1228:36:1228:37 | 37 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1228:36:1228:37 | 37 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1230:17:1230:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1230:17:1230:24 | my_thing | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1231:18:1231:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1234:13:1234:20 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1234:13:1234:20 | my_thing | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1234:24:1234:39 | &... | | file://:0:0:0:0 | & | -| main.rs:1234:24:1234:39 | &... | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1234:25:1234:39 | MyInt {...} | | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1234:36:1234:37 | 38 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1234:36:1234:37 | 38 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1235:17:1235:24 | my_thing | | file://:0:0:0:0 | & | -| main.rs:1235:17:1235:24 | my_thing | &T | main.rs:1150:5:1153:5 | MyInt | -| main.rs:1236:18:1236:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1243:16:1243:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1243:16:1243:20 | SelfParam | &T | main.rs:1241:5:1249:5 | Self [trait MyTrait] | -| main.rs:1246:16:1246:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1246:16:1246:20 | SelfParam | &T | main.rs:1241:5:1249:5 | Self [trait MyTrait] | -| main.rs:1246:32:1248:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1246:32:1248:9 | { ... } | &T | main.rs:1241:5:1249:5 | Self [trait MyTrait] | -| main.rs:1247:13:1247:16 | self | | file://:0:0:0:0 | & | -| main.rs:1247:13:1247:16 | self | &T | main.rs:1241:5:1249:5 | Self [trait MyTrait] | -| main.rs:1247:13:1247:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:1247:13:1247:22 | self.foo() | &T | main.rs:1241:5:1249:5 | Self [trait MyTrait] | -| main.rs:1255:16:1255:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1255:16:1255:20 | SelfParam | &T | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1255:36:1257:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1255:36:1257:9 | { ... } | &T | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1256:13:1256:16 | self | | file://:0:0:0:0 | & | -| main.rs:1256:13:1256:16 | self | &T | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1261:13:1261:13 | x | | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1261:17:1261:24 | MyStruct | | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1262:9:1262:9 | x | | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1262:9:1262:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:1262:9:1262:15 | x.bar() | &T | main.rs:1251:5:1251:20 | MyStruct | -| main.rs:1272:16:1272:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1272:16:1272:20 | SelfParam | &T | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1272:16:1272:20 | SelfParam | &T.T | main.rs:1271:10:1271:10 | T | -| main.rs:1272:32:1274:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1272:32:1274:9 | { ... } | &T | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1272:32:1274:9 | { ... } | &T.T | main.rs:1271:10:1271:10 | T | -| main.rs:1273:13:1273:16 | self | | file://:0:0:0:0 | & | -| main.rs:1273:13:1273:16 | self | &T | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1273:13:1273:16 | self | &T.T | main.rs:1271:10:1271:10 | T | -| main.rs:1278:13:1278:13 | x | | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1278:13:1278:13 | x | T | main.rs:1267:5:1267:13 | S | -| main.rs:1278:17:1278:27 | MyStruct(...) | | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1278:17:1278:27 | MyStruct(...) | T | main.rs:1267:5:1267:13 | S | -| main.rs:1278:26:1278:26 | S | | main.rs:1267:5:1267:13 | S | -| main.rs:1279:9:1279:9 | x | | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1279:9:1279:9 | x | T | main.rs:1267:5:1267:13 | S | -| main.rs:1279:9:1279:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:1279:9:1279:15 | x.foo() | &T | main.rs:1269:5:1269:26 | MyStruct | -| main.rs:1279:9:1279:15 | x.foo() | &T.T | main.rs:1267:5:1267:13 | S | -| main.rs:1290:17:1290:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1290:17:1290:25 | SelfParam | &T | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1291:13:1291:16 | self | | file://:0:0:0:0 | & | -| main.rs:1291:13:1291:16 | self | &T | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1291:13:1291:21 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1291:13:1291:34 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1291:25:1291:34 | ! ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1291:26:1291:29 | self | | file://:0:0:0:0 | & | -| main.rs:1291:26:1291:29 | self | &T | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1291:26:1291:34 | self.bool | | {EXTERNAL LOCATION} | bool | -| main.rs:1298:15:1298:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1298:15:1298:19 | SelfParam | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1298:31:1300:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1298:31:1300:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1298:31:1300:9 | { ... } | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1298:31:1300:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1298:31:1300:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1298:31:1300:9 | { ... } | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1299:13:1299:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1299:13:1299:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1299:13:1299:19 | &... | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1299:13:1299:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1299:13:1299:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1299:13:1299:19 | &... | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1299:14:1299:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1299:14:1299:19 | &... | | main.rs:1295:5:1295:13 | S | -| main.rs:1299:14:1299:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1299:14:1299:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1299:14:1299:19 | &... | &T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1299:15:1299:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1299:15:1299:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1299:15:1299:19 | &self | &T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1299:16:1299:19 | self | | file://:0:0:0:0 | & | -| main.rs:1299:16:1299:19 | self | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1302:15:1302:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1302:15:1302:25 | SelfParam | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1302:37:1304:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1302:37:1304:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1302:37:1304:9 | { ... } | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1302:37:1304:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1302:37:1304:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1302:37:1304:9 | { ... } | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1303:13:1303:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1303:13:1303:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1303:13:1303:19 | &... | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1303:13:1303:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1303:13:1303:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1303:13:1303:19 | &... | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1303:14:1303:19 | &... | | file://:0:0:0:0 | & | -| main.rs:1303:14:1303:19 | &... | | main.rs:1295:5:1295:13 | S | -| main.rs:1303:14:1303:19 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1303:14:1303:19 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1303:14:1303:19 | &... | &T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1303:15:1303:19 | &self | | file://:0:0:0:0 | & | -| main.rs:1303:15:1303:19 | &self | &T | file://:0:0:0:0 | & | -| main.rs:1303:15:1303:19 | &self | &T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1303:16:1303:19 | self | | file://:0:0:0:0 | & | -| main.rs:1303:16:1303:19 | self | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1306:15:1306:15 | x | | file://:0:0:0:0 | & | -| main.rs:1306:15:1306:15 | x | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1306:34:1308:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1306:34:1308:9 | { ... } | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1307:13:1307:13 | x | | file://:0:0:0:0 | & | -| main.rs:1307:13:1307:13 | x | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1310:15:1310:15 | x | | file://:0:0:0:0 | & | -| main.rs:1310:15:1310:15 | x | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1310:34:1312:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1310:34:1312:9 | { ... } | &T | file://:0:0:0:0 | & | -| main.rs:1310:34:1312:9 | { ... } | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1310:34:1312:9 | { ... } | &T.&T | file://:0:0:0:0 | & | -| main.rs:1310:34:1312:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1310:34:1312:9 | { ... } | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1311:13:1311:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1311:13:1311:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1311:13:1311:16 | &... | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1311:13:1311:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1311:13:1311:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | -| main.rs:1311:13:1311:16 | &... | &T.&T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1311:14:1311:16 | &... | | file://:0:0:0:0 | & | -| main.rs:1311:14:1311:16 | &... | | main.rs:1295:5:1295:13 | S | -| main.rs:1311:14:1311:16 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1311:14:1311:16 | &... | &T.&T | file://:0:0:0:0 | & | -| main.rs:1311:14:1311:16 | &... | &T.&T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1311:15:1311:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1311:15:1311:16 | &x | &T | file://:0:0:0:0 | & | -| main.rs:1311:15:1311:16 | &x | &T.&T | main.rs:1295:5:1295:13 | S | -| main.rs:1311:16:1311:16 | x | | file://:0:0:0:0 | & | -| main.rs:1311:16:1311:16 | x | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1316:13:1316:13 | x | | main.rs:1295:5:1295:13 | S | -| main.rs:1316:17:1316:20 | S {...} | | main.rs:1295:5:1295:13 | S | -| main.rs:1317:9:1317:9 | x | | main.rs:1295:5:1295:13 | S | -| main.rs:1317:9:1317:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:1317:9:1317:14 | x.f1() | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1318:9:1318:9 | x | | main.rs:1295:5:1295:13 | S | -| main.rs:1318:9:1318:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:1318:9:1318:14 | x.f2() | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1319:9:1319:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:1319:9:1319:17 | ...::f3(...) | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1319:15:1319:16 | &x | | file://:0:0:0:0 | & | -| main.rs:1319:15:1319:16 | &x | &T | main.rs:1295:5:1295:13 | S | -| main.rs:1319:16:1319:16 | x | | main.rs:1295:5:1295:13 | S | -| main.rs:1321:13:1321:13 | n | | {EXTERNAL LOCATION} | bool | -| main.rs:1321:17:1321:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1321:18:1321:24 | * ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1321:18:1321:24 | * ... | | file://:0:0:0:0 | & | -| main.rs:1321:18:1321:24 | * ... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1321:19:1321:24 | &... | | file://:0:0:0:0 | & | -| main.rs:1321:19:1321:24 | &... | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1321:19:1321:24 | &... | &T | file://:0:0:0:0 | & | -| main.rs:1321:19:1321:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | -| main.rs:1321:20:1321:24 | &true | | {EXTERNAL LOCATION} | bool | -| main.rs:1321:20:1321:24 | &true | | file://:0:0:0:0 | & | -| main.rs:1321:20:1321:24 | &true | &T | {EXTERNAL LOCATION} | bool | -| main.rs:1321:21:1321:24 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1325:13:1325:20 | mut flag | | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1325:24:1325:41 | ...::default(...) | | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1326:22:1326:30 | &mut flag | | file://:0:0:0:0 | & | -| main.rs:1326:22:1326:30 | &mut flag | &T | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1326:27:1326:30 | flag | | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1327:18:1327:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1327:26:1327:29 | flag | | main.rs:1284:5:1287:5 | MyFlag | -| main.rs:1341:43:1344:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1341:43:1344:5 | { ... } | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1341:43:1344:5 | { ... } | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1342:13:1342:13 | x | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1342:17:1342:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1342:17:1342:30 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1342:17:1342:31 | TryExpr | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1342:28:1342:29 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1343:9:1343:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1343:9:1343:22 | ...::Ok(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1343:9:1343:22 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1343:20:1343:21 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1347:46:1351:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1347:46:1351:5 | { ... } | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1347:46:1351:5 | { ... } | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1348:13:1348:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1348:13:1348:13 | x | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1348:17:1348:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1348:17:1348:30 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1348:28:1348:29 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1349:13:1349:13 | y | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1349:17:1349:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1349:17:1349:17 | x | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1349:17:1349:18 | TryExpr | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1350:9:1350:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1350:9:1350:22 | ...::Ok(...) | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1350:9:1350:22 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1350:20:1350:21 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1354:40:1359:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1354:40:1359:5 | { ... } | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1354:40:1359:5 | { ... } | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1355:13:1355:13 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1355:13:1355:13 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1355:13:1355:13 | x | T.T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1355:17:1355:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1355:17:1355:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | -| main.rs:1355:17:1355:42 | ...::Ok(...) | T.T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1355:28:1355:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1355:28:1355:41 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1355:39:1355:40 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1357:17:1357:17 | x | | {EXTERNAL LOCATION} | Result | -| main.rs:1357:17:1357:17 | x | T | {EXTERNAL LOCATION} | Result | -| main.rs:1357:17:1357:17 | x | T.T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1357:17:1357:18 | TryExpr | | {EXTERNAL LOCATION} | Result | -| main.rs:1357:17:1357:18 | TryExpr | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1357:17:1357:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1358:9:1358:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1358:9:1358:22 | ...::Ok(...) | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1358:9:1358:22 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1358:20:1358:21 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1362:30:1362:34 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1362:30:1362:34 | input | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1362:30:1362:34 | input | T | main.rs:1362:20:1362:27 | T | -| main.rs:1362:69:1369:5 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1362:69:1369:5 | { ... } | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1362:69:1369:5 | { ... } | T | main.rs:1362:20:1362:27 | T | -| main.rs:1363:13:1363:17 | value | | main.rs:1362:20:1362:27 | T | -| main.rs:1363:21:1363:25 | input | | {EXTERNAL LOCATION} | Result | -| main.rs:1363:21:1363:25 | input | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1363:21:1363:25 | input | T | main.rs:1362:20:1362:27 | T | -| main.rs:1363:21:1363:26 | TryExpr | | main.rs:1362:20:1362:27 | T | -| main.rs:1364:22:1364:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1364:22:1364:38 | ...::Ok(...) | T | main.rs:1362:20:1362:27 | T | -| main.rs:1364:22:1367:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1364:33:1364:37 | value | | main.rs:1362:20:1362:27 | T | -| main.rs:1364:53:1367:9 | { ... } | | {EXTERNAL LOCATION} | Result | -| main.rs:1364:53:1367:9 | { ... } | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1365:22:1365:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1366:13:1366:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1366:13:1366:34 | ...::Ok::<...>(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1368:9:1368:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1368:9:1368:23 | ...::Err(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1368:9:1368:23 | ...::Err(...) | T | main.rs:1362:20:1362:27 | T | -| main.rs:1368:21:1368:22 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1372:37:1372:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1372:37:1372:52 | try_same_error(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1372:37:1372:52 | try_same_error(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1373:22:1373:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1376:37:1376:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1376:37:1376:55 | try_convert_error(...) | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1376:37:1376:55 | try_convert_error(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1377:22:1377:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1380:37:1380:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1380:37:1380:49 | try_chained(...) | E | main.rs:1337:5:1338:14 | S2 | -| main.rs:1380:37:1380:49 | try_chained(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1381:22:1381:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1384:37:1384:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1384:37:1384:63 | try_complex(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1384:37:1384:63 | try_complex(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1384:49:1384:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | -| main.rs:1384:49:1384:62 | ...::Ok(...) | E | main.rs:1334:5:1335:14 | S1 | -| main.rs:1384:49:1384:62 | ...::Ok(...) | T | main.rs:1334:5:1335:14 | S1 | -| main.rs:1384:60:1384:61 | S1 | | main.rs:1334:5:1335:14 | S1 | -| main.rs:1385:22:1385:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | -| main.rs:1392:13:1392:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1392:22:1392:22 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1393:13:1393:13 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1393:17:1393:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1394:13:1394:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1394:17:1394:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1394:17:1394:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | -| main.rs:1394:21:1394:21 | y | | {EXTERNAL LOCATION} | i32 | -| main.rs:1395:13:1395:13 | z | | {EXTERNAL LOCATION} | i32 | -| main.rs:1395:17:1395:17 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1395:17:1395:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | -| main.rs:1396:13:1396:13 | c | | {EXTERNAL LOCATION} | char | -| main.rs:1396:17:1396:19 | 'c' | | {EXTERNAL LOCATION} | char | -| main.rs:1397:13:1397:17 | hello | | {EXTERNAL LOCATION} | str | -| main.rs:1397:21:1397:27 | "Hello" | | {EXTERNAL LOCATION} | str | -| main.rs:1398:13:1398:13 | f | | {EXTERNAL LOCATION} | f64 | -| main.rs:1398:17:1398:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | -| main.rs:1399:13:1399:13 | t | | {EXTERNAL LOCATION} | bool | -| main.rs:1399:17:1399:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1400:13:1400:13 | f | | {EXTERNAL LOCATION} | bool | -| main.rs:1400:17:1400:21 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1407:13:1407:13 | x | | {EXTERNAL LOCATION} | bool | -| main.rs:1407:17:1407:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1407:17:1407:29 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1407:25:1407:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1408:13:1408:13 | y | | {EXTERNAL LOCATION} | bool | -| main.rs:1408:17:1408:20 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1408:17:1408:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1408:25:1408:29 | false | | {EXTERNAL LOCATION} | bool | -| main.rs:1410:13:1410:17 | mut a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1411:13:1411:16 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1411:20:1411:21 | 34 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1411:20:1411:27 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1411:26:1411:27 | 33 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1412:12:1412:15 | cond | | {EXTERNAL LOCATION} | bool | -| main.rs:1413:17:1413:17 | z | | file://:0:0:0:0 | () | -| main.rs:1413:21:1413:27 | (...) | | file://:0:0:0:0 | () | -| main.rs:1413:22:1413:22 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1413:22:1413:26 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1413:26:1413:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1415:13:1415:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1415:13:1415:17 | ... = ... | | file://:0:0:0:0 | () | -| main.rs:1415:17:1415:17 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1417:9:1417:9 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:1431:30:1433:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1432:13:1432:31 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1432:23:1432:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1432:23:1432:23 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1432:29:1432:29 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1432:29:1432:29 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1439:16:1439:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1439:22:1439:24 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1439:41:1444:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1440:13:1443:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1441:20:1441:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1441:20:1441:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1441:20:1441:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1441:29:1441:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1441:29:1441:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1442:20:1442:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1442:20:1442:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1442:20:1442:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1442:29:1442:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1442:29:1442:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1449:23:1449:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1449:23:1449:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1449:34:1449:36 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1450:13:1450:16 | self | | file://:0:0:0:0 | & | -| main.rs:1450:13:1450:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1450:13:1450:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1450:13:1450:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1450:23:1450:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1450:23:1450:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:431:13:431:13 | x | | main.rs:397:5:398:14 | S1 | +| main.rs:431:17:431:18 | S1 | | main.rs:397:5:398:14 | S1 | +| main.rs:432:18:432:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:432:26:432:26 | x | | main.rs:397:5:398:14 | S1 | +| main.rs:432:26:432:42 | x.common_method() | | main.rs:397:5:398:14 | S1 | +| main.rs:433:18:433:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:433:26:433:26 | x | | main.rs:397:5:398:14 | S1 | +| main.rs:433:26:433:44 | x.common_method_2() | | main.rs:397:5:398:14 | S1 | +| main.rs:450:19:450:22 | SelfParam | | main.rs:448:5:451:5 | Self [trait FirstTrait] | +| main.rs:455:19:455:22 | SelfParam | | main.rs:453:5:456:5 | Self [trait SecondTrait] | +| main.rs:458:64:458:64 | x | | main.rs:458:45:458:61 | T | +| main.rs:460:13:460:14 | s1 | | main.rs:458:35:458:42 | I | +| main.rs:460:18:460:18 | x | | main.rs:458:45:458:61 | T | +| main.rs:460:18:460:27 | x.method() | | main.rs:458:35:458:42 | I | +| main.rs:461:18:461:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:461:26:461:27 | s1 | | main.rs:458:35:458:42 | I | +| main.rs:464:65:464:65 | x | | main.rs:464:46:464:62 | T | +| main.rs:466:13:466:14 | s2 | | main.rs:464:36:464:43 | I | +| main.rs:466:18:466:18 | x | | main.rs:464:46:464:62 | T | +| main.rs:466:18:466:27 | x.method() | | main.rs:464:36:464:43 | I | +| main.rs:467:18:467:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:467:26:467:27 | s2 | | main.rs:464:36:464:43 | I | +| main.rs:470:49:470:49 | x | | main.rs:470:30:470:46 | T | +| main.rs:471:13:471:13 | s | | main.rs:440:5:441:14 | S1 | +| main.rs:471:17:471:17 | x | | main.rs:470:30:470:46 | T | +| main.rs:471:17:471:26 | x.method() | | main.rs:440:5:441:14 | S1 | +| main.rs:472:18:472:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:472:26:472:26 | s | | main.rs:440:5:441:14 | S1 | +| main.rs:475:53:475:53 | x | | main.rs:475:34:475:50 | T | +| main.rs:476:13:476:13 | s | | main.rs:440:5:441:14 | S1 | +| main.rs:476:17:476:17 | x | | main.rs:475:34:475:50 | T | +| main.rs:476:17:476:26 | x.method() | | main.rs:440:5:441:14 | S1 | +| main.rs:477:18:477:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:477:26:477:26 | s | | main.rs:440:5:441:14 | S1 | +| main.rs:481:16:481:19 | SelfParam | | main.rs:480:5:484:5 | Self [trait Pair] | +| main.rs:483:16:483:19 | SelfParam | | main.rs:480:5:484:5 | Self [trait Pair] | +| main.rs:486:58:486:58 | x | | main.rs:486:41:486:55 | T | +| main.rs:486:64:486:64 | y | | main.rs:486:41:486:55 | T | +| main.rs:488:13:488:14 | s1 | | main.rs:440:5:441:14 | S1 | +| main.rs:488:18:488:18 | x | | main.rs:486:41:486:55 | T | +| main.rs:488:18:488:24 | x.fst() | | main.rs:440:5:441:14 | S1 | +| main.rs:489:13:489:14 | s2 | | main.rs:443:5:444:14 | S2 | +| main.rs:489:18:489:18 | y | | main.rs:486:41:486:55 | T | +| main.rs:489:18:489:24 | y.snd() | | main.rs:443:5:444:14 | S2 | +| main.rs:490:18:490:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:490:32:490:33 | s1 | | main.rs:440:5:441:14 | S1 | +| main.rs:490:36:490:37 | s2 | | main.rs:443:5:444:14 | S2 | +| main.rs:493:69:493:69 | x | | main.rs:493:52:493:66 | T | +| main.rs:493:75:493:75 | y | | main.rs:493:52:493:66 | T | +| main.rs:495:13:495:14 | s1 | | main.rs:440:5:441:14 | S1 | +| main.rs:495:18:495:18 | x | | main.rs:493:52:493:66 | T | +| main.rs:495:18:495:24 | x.fst() | | main.rs:440:5:441:14 | S1 | +| main.rs:496:13:496:14 | s2 | | main.rs:493:41:493:49 | T2 | +| main.rs:496:18:496:18 | y | | main.rs:493:52:493:66 | T | +| main.rs:496:18:496:24 | y.snd() | | main.rs:493:41:493:49 | T2 | +| main.rs:497:18:497:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:497:32:497:33 | s1 | | main.rs:440:5:441:14 | S1 | +| main.rs:497:36:497:37 | s2 | | main.rs:493:41:493:49 | T2 | +| main.rs:500:50:500:50 | x | | main.rs:500:41:500:47 | T | +| main.rs:500:56:500:56 | y | | main.rs:500:41:500:47 | T | +| main.rs:502:13:502:14 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:502:18:502:18 | x | | main.rs:500:41:500:47 | T | +| main.rs:502:18:502:24 | x.fst() | | {EXTERNAL LOCATION} | bool | +| main.rs:503:13:503:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:503:18:503:18 | y | | main.rs:500:41:500:47 | T | +| main.rs:503:18:503:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:504:18:504:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:504:32:504:33 | s1 | | {EXTERNAL LOCATION} | bool | +| main.rs:504:36:504:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:507:54:507:54 | x | | main.rs:507:41:507:51 | T | +| main.rs:507:60:507:60 | y | | main.rs:507:41:507:51 | T | +| main.rs:509:13:509:14 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:509:18:509:18 | x | | main.rs:507:41:507:51 | T | +| main.rs:509:18:509:24 | x.fst() | | {EXTERNAL LOCATION} | u8 | +| main.rs:510:13:510:14 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:510:18:510:18 | y | | main.rs:507:41:507:51 | T | +| main.rs:510:18:510:24 | y.snd() | | {EXTERNAL LOCATION} | i64 | +| main.rs:511:18:511:29 | "{:?}, {:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:511:32:511:33 | s1 | | {EXTERNAL LOCATION} | u8 | +| main.rs:511:36:511:37 | s2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:527:15:527:18 | SelfParam | | main.rs:526:5:535:5 | Self [trait MyTrait] | +| main.rs:529:15:529:18 | SelfParam | | main.rs:526:5:535:5 | Self [trait MyTrait] | +| main.rs:532:9:534:9 | { ... } | | main.rs:526:19:526:19 | A | +| main.rs:533:13:533:16 | self | | main.rs:526:5:535:5 | Self [trait MyTrait] | +| main.rs:533:13:533:21 | self.m1() | | main.rs:526:19:526:19 | A | +| main.rs:538:43:538:43 | x | | main.rs:538:26:538:40 | T2 | +| main.rs:538:56:540:5 | { ... } | | main.rs:538:22:538:23 | T1 | +| main.rs:539:9:539:9 | x | | main.rs:538:26:538:40 | T2 | +| main.rs:539:9:539:14 | x.m1() | | main.rs:538:22:538:23 | T1 | +| main.rs:543:49:543:49 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:543:49:543:49 | x | T | main.rs:543:32:543:46 | T2 | +| main.rs:543:71:545:5 | { ... } | | main.rs:543:28:543:29 | T1 | +| main.rs:544:9:544:9 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:544:9:544:9 | x | T | main.rs:543:32:543:46 | T2 | +| main.rs:544:9:544:11 | x.a | | main.rs:543:32:543:46 | T2 | +| main.rs:544:9:544:16 | ... .m1() | | main.rs:543:28:543:29 | T1 | +| main.rs:548:15:548:18 | SelfParam | | main.rs:516:5:519:5 | MyThing | +| main.rs:548:15:548:18 | SelfParam | T | main.rs:547:10:547:10 | T | +| main.rs:548:26:550:9 | { ... } | | main.rs:547:10:547:10 | T | +| main.rs:549:13:549:16 | self | | main.rs:516:5:519:5 | MyThing | +| main.rs:549:13:549:16 | self | T | main.rs:547:10:547:10 | T | +| main.rs:549:13:549:18 | self.a | | main.rs:547:10:547:10 | T | +| main.rs:554:13:554:13 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:554:13:554:13 | x | T | main.rs:521:5:522:14 | S1 | +| main.rs:554:17:554:33 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:554:17:554:33 | MyThing {...} | T | main.rs:521:5:522:14 | S1 | +| main.rs:554:30:554:31 | S1 | | main.rs:521:5:522:14 | S1 | +| main.rs:555:13:555:13 | y | | main.rs:516:5:519:5 | MyThing | +| main.rs:555:13:555:13 | y | T | main.rs:523:5:524:14 | S2 | +| main.rs:555:17:555:33 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:555:17:555:33 | MyThing {...} | T | main.rs:523:5:524:14 | S2 | +| main.rs:555:30:555:31 | S2 | | main.rs:523:5:524:14 | S2 | +| main.rs:557:18:557:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:557:26:557:26 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:557:26:557:26 | x | T | main.rs:521:5:522:14 | S1 | +| main.rs:557:26:557:31 | x.m1() | | main.rs:521:5:522:14 | S1 | +| main.rs:558:18:558:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:558:26:558:26 | y | | main.rs:516:5:519:5 | MyThing | +| main.rs:558:26:558:26 | y | T | main.rs:523:5:524:14 | S2 | +| main.rs:558:26:558:31 | y.m1() | | main.rs:523:5:524:14 | S2 | +| main.rs:560:13:560:13 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:560:13:560:13 | x | T | main.rs:521:5:522:14 | S1 | +| main.rs:560:17:560:33 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:560:17:560:33 | MyThing {...} | T | main.rs:521:5:522:14 | S1 | +| main.rs:560:30:560:31 | S1 | | main.rs:521:5:522:14 | S1 | +| main.rs:561:13:561:13 | y | | main.rs:516:5:519:5 | MyThing | +| main.rs:561:13:561:13 | y | T | main.rs:523:5:524:14 | S2 | +| main.rs:561:17:561:33 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:561:17:561:33 | MyThing {...} | T | main.rs:523:5:524:14 | S2 | +| main.rs:561:30:561:31 | S2 | | main.rs:523:5:524:14 | S2 | +| main.rs:563:18:563:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:563:26:563:26 | x | | main.rs:516:5:519:5 | MyThing | +| main.rs:563:26:563:26 | x | T | main.rs:521:5:522:14 | S1 | +| main.rs:563:26:563:31 | x.m2() | | main.rs:521:5:522:14 | S1 | +| main.rs:564:18:564:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:564:26:564:26 | y | | main.rs:516:5:519:5 | MyThing | +| main.rs:564:26:564:26 | y | T | main.rs:523:5:524:14 | S2 | +| main.rs:564:26:564:31 | y.m2() | | main.rs:523:5:524:14 | S2 | +| main.rs:566:13:566:14 | x2 | | main.rs:516:5:519:5 | MyThing | +| main.rs:566:13:566:14 | x2 | T | main.rs:521:5:522:14 | S1 | +| main.rs:566:18:566:34 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:566:18:566:34 | MyThing {...} | T | main.rs:521:5:522:14 | S1 | +| main.rs:566:31:566:32 | S1 | | main.rs:521:5:522:14 | S1 | +| main.rs:567:13:567:14 | y2 | | main.rs:516:5:519:5 | MyThing | +| main.rs:567:13:567:14 | y2 | T | main.rs:523:5:524:14 | S2 | +| main.rs:567:18:567:34 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:567:18:567:34 | MyThing {...} | T | main.rs:523:5:524:14 | S2 | +| main.rs:567:31:567:32 | S2 | | main.rs:523:5:524:14 | S2 | +| main.rs:569:18:569:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:569:26:569:42 | call_trait_m1(...) | | main.rs:521:5:522:14 | S1 | +| main.rs:569:40:569:41 | x2 | | main.rs:516:5:519:5 | MyThing | +| main.rs:569:40:569:41 | x2 | T | main.rs:521:5:522:14 | S1 | +| main.rs:570:18:570:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:570:26:570:42 | call_trait_m1(...) | | main.rs:523:5:524:14 | S2 | +| main.rs:570:40:570:41 | y2 | | main.rs:516:5:519:5 | MyThing | +| main.rs:570:40:570:41 | y2 | T | main.rs:523:5:524:14 | S2 | +| main.rs:572:13:572:14 | x3 | | main.rs:516:5:519:5 | MyThing | +| main.rs:572:13:572:14 | x3 | T | main.rs:516:5:519:5 | MyThing | +| main.rs:572:13:572:14 | x3 | T.T | main.rs:521:5:522:14 | S1 | +| main.rs:572:18:574:9 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:572:18:574:9 | MyThing {...} | T | main.rs:516:5:519:5 | MyThing | +| main.rs:572:18:574:9 | MyThing {...} | T.T | main.rs:521:5:522:14 | S1 | +| main.rs:573:16:573:32 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:573:16:573:32 | MyThing {...} | T | main.rs:521:5:522:14 | S1 | +| main.rs:573:29:573:30 | S1 | | main.rs:521:5:522:14 | S1 | +| main.rs:575:13:575:14 | y3 | | main.rs:516:5:519:5 | MyThing | +| main.rs:575:13:575:14 | y3 | T | main.rs:516:5:519:5 | MyThing | +| main.rs:575:13:575:14 | y3 | T.T | main.rs:523:5:524:14 | S2 | +| main.rs:575:18:577:9 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:575:18:577:9 | MyThing {...} | T | main.rs:516:5:519:5 | MyThing | +| main.rs:575:18:577:9 | MyThing {...} | T.T | main.rs:523:5:524:14 | S2 | +| main.rs:576:16:576:32 | MyThing {...} | | main.rs:516:5:519:5 | MyThing | +| main.rs:576:16:576:32 | MyThing {...} | T | main.rs:523:5:524:14 | S2 | +| main.rs:576:29:576:30 | S2 | | main.rs:523:5:524:14 | S2 | +| main.rs:579:13:579:13 | a | | main.rs:521:5:522:14 | S1 | +| main.rs:579:17:579:39 | call_trait_thing_m1(...) | | main.rs:521:5:522:14 | S1 | +| main.rs:579:37:579:38 | x3 | | main.rs:516:5:519:5 | MyThing | +| main.rs:579:37:579:38 | x3 | T | main.rs:516:5:519:5 | MyThing | +| main.rs:579:37:579:38 | x3 | T.T | main.rs:521:5:522:14 | S1 | +| main.rs:580:18:580:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:580:26:580:26 | a | | main.rs:521:5:522:14 | S1 | +| main.rs:581:13:581:13 | b | | main.rs:523:5:524:14 | S2 | +| main.rs:581:17:581:39 | call_trait_thing_m1(...) | | main.rs:523:5:524:14 | S2 | +| main.rs:581:37:581:38 | y3 | | main.rs:516:5:519:5 | MyThing | +| main.rs:581:37:581:38 | y3 | T | main.rs:516:5:519:5 | MyThing | +| main.rs:581:37:581:38 | y3 | T.T | main.rs:523:5:524:14 | S2 | +| main.rs:582:18:582:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:582:26:582:26 | b | | main.rs:523:5:524:14 | S2 | +| main.rs:593:19:593:22 | SelfParam | | main.rs:587:5:590:5 | Wrapper | +| main.rs:593:19:593:22 | SelfParam | A | main.rs:592:10:592:10 | A | +| main.rs:593:30:595:9 | { ... } | | main.rs:592:10:592:10 | A | +| main.rs:594:13:594:16 | self | | main.rs:587:5:590:5 | Wrapper | +| main.rs:594:13:594:16 | self | A | main.rs:592:10:592:10 | A | +| main.rs:594:13:594:22 | self.field | | main.rs:592:10:592:10 | A | +| main.rs:602:15:602:18 | SelfParam | | main.rs:598:5:612:5 | Self [trait MyTrait] | +| main.rs:604:15:604:18 | SelfParam | | main.rs:598:5:612:5 | Self [trait MyTrait] | +| main.rs:608:9:611:9 | { ... } | | main.rs:599:9:599:28 | AssociatedType | +| main.rs:609:13:609:16 | self | | main.rs:598:5:612:5 | Self [trait MyTrait] | +| main.rs:609:13:609:21 | self.m1() | | main.rs:599:9:599:28 | AssociatedType | +| main.rs:610:13:610:43 | ...::default(...) | | main.rs:599:9:599:28 | AssociatedType | +| main.rs:618:19:618:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:618:19:618:23 | SelfParam | &T | main.rs:614:5:624:5 | Self [trait MyTraitAssoc2] | +| main.rs:618:26:618:26 | a | | main.rs:618:16:618:16 | A | +| main.rs:620:22:620:26 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:620:22:620:26 | SelfParam | &T | main.rs:614:5:624:5 | Self [trait MyTraitAssoc2] | +| main.rs:620:29:620:29 | a | | main.rs:620:19:620:19 | A | +| main.rs:620:35:620:35 | b | | main.rs:620:19:620:19 | A | +| main.rs:620:75:623:9 | { ... } | | main.rs:615:9:615:52 | GenericAssociatedType | +| main.rs:621:13:621:16 | self | | file://:0:0:0:0 | & | +| main.rs:621:13:621:16 | self | &T | main.rs:614:5:624:5 | Self [trait MyTraitAssoc2] | +| main.rs:621:13:621:23 | self.put(...) | | main.rs:615:9:615:52 | GenericAssociatedType | +| main.rs:621:22:621:22 | a | | main.rs:620:19:620:19 | A | +| main.rs:622:13:622:16 | self | | file://:0:0:0:0 | & | +| main.rs:622:13:622:16 | self | &T | main.rs:614:5:624:5 | Self [trait MyTraitAssoc2] | +| main.rs:622:13:622:23 | self.put(...) | | main.rs:615:9:615:52 | GenericAssociatedType | +| main.rs:622:22:622:22 | b | | main.rs:620:19:620:19 | A | +| main.rs:631:21:631:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:631:21:631:25 | SelfParam | &T | main.rs:626:5:636:5 | Self [trait TraitMultipleAssoc] | +| main.rs:633:20:633:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:633:20:633:24 | SelfParam | &T | main.rs:626:5:636:5 | Self [trait TraitMultipleAssoc] | +| main.rs:635:20:635:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:635:20:635:24 | SelfParam | &T | main.rs:626:5:636:5 | Self [trait TraitMultipleAssoc] | +| main.rs:651:15:651:18 | SelfParam | | main.rs:638:5:639:13 | S | +| main.rs:651:45:653:9 | { ... } | | main.rs:644:5:645:14 | AT | +| main.rs:652:13:652:14 | AT | | main.rs:644:5:645:14 | AT | +| main.rs:661:19:661:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:661:19:661:23 | SelfParam | &T | main.rs:638:5:639:13 | S | +| main.rs:661:26:661:26 | a | | main.rs:661:16:661:16 | A | +| main.rs:661:46:663:9 | { ... } | | main.rs:587:5:590:5 | Wrapper | +| main.rs:661:46:663:9 | { ... } | A | main.rs:661:16:661:16 | A | +| main.rs:662:13:662:32 | Wrapper {...} | | main.rs:587:5:590:5 | Wrapper | +| main.rs:662:13:662:32 | Wrapper {...} | A | main.rs:661:16:661:16 | A | +| main.rs:662:30:662:30 | a | | main.rs:661:16:661:16 | A | +| main.rs:670:15:670:18 | SelfParam | | main.rs:641:5:642:14 | S2 | +| main.rs:670:45:672:9 | { ... } | | main.rs:587:5:590:5 | Wrapper | +| main.rs:670:45:672:9 | { ... } | A | main.rs:641:5:642:14 | S2 | +| main.rs:671:13:671:35 | Wrapper {...} | | main.rs:587:5:590:5 | Wrapper | +| main.rs:671:13:671:35 | Wrapper {...} | A | main.rs:641:5:642:14 | S2 | +| main.rs:671:30:671:33 | self | | main.rs:641:5:642:14 | S2 | +| main.rs:677:30:679:9 | { ... } | | main.rs:587:5:590:5 | Wrapper | +| main.rs:677:30:679:9 | { ... } | A | main.rs:641:5:642:14 | S2 | +| main.rs:678:13:678:33 | Wrapper {...} | | main.rs:587:5:590:5 | Wrapper | +| main.rs:678:13:678:33 | Wrapper {...} | A | main.rs:641:5:642:14 | S2 | +| main.rs:678:30:678:31 | S2 | | main.rs:641:5:642:14 | S2 | +| main.rs:683:22:683:26 | thing | | main.rs:683:10:683:19 | T | +| main.rs:684:9:684:13 | thing | | main.rs:683:10:683:19 | T | +| main.rs:691:21:691:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:691:21:691:25 | SelfParam | &T | main.rs:644:5:645:14 | AT | +| main.rs:691:34:693:9 | { ... } | | main.rs:644:5:645:14 | AT | +| main.rs:692:13:692:14 | AT | | main.rs:644:5:645:14 | AT | +| main.rs:695:20:695:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:695:20:695:24 | SelfParam | &T | main.rs:644:5:645:14 | AT | +| main.rs:695:43:697:9 | { ... } | | main.rs:638:5:639:13 | S | +| main.rs:696:13:696:13 | S | | main.rs:638:5:639:13 | S | +| main.rs:699:20:699:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:699:20:699:24 | SelfParam | &T | main.rs:644:5:645:14 | AT | +| main.rs:699:43:701:9 | { ... } | | main.rs:641:5:642:14 | S2 | +| main.rs:700:13:700:14 | S2 | | main.rs:641:5:642:14 | S2 | +| main.rs:705:13:705:14 | x1 | | main.rs:638:5:639:13 | S | +| main.rs:705:18:705:18 | S | | main.rs:638:5:639:13 | S | +| main.rs:707:18:707:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:707:26:707:27 | x1 | | main.rs:638:5:639:13 | S | +| main.rs:707:26:707:32 | x1.m1() | | main.rs:644:5:645:14 | AT | +| main.rs:709:13:709:14 | x2 | | main.rs:638:5:639:13 | S | +| main.rs:709:18:709:18 | S | | main.rs:638:5:639:13 | S | +| main.rs:711:13:711:13 | y | | main.rs:644:5:645:14 | AT | +| main.rs:711:17:711:18 | x2 | | main.rs:638:5:639:13 | S | +| main.rs:711:17:711:23 | x2.m2() | | main.rs:644:5:645:14 | AT | +| main.rs:712:18:712:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:712:26:712:26 | y | | main.rs:644:5:645:14 | AT | +| main.rs:714:13:714:14 | x3 | | main.rs:638:5:639:13 | S | +| main.rs:714:18:714:18 | S | | main.rs:638:5:639:13 | S | +| main.rs:716:18:716:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:716:26:716:27 | x3 | | main.rs:638:5:639:13 | S | +| main.rs:716:26:716:34 | x3.put(...) | | main.rs:587:5:590:5 | Wrapper | +| main.rs:716:26:716:34 | x3.put(...) | A | {EXTERNAL LOCATION} | i32 | +| main.rs:716:26:716:43 | ... .unwrap() | | {EXTERNAL LOCATION} | i32 | +| main.rs:716:33:716:33 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:719:18:719:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:719:26:719:27 | x3 | | main.rs:638:5:639:13 | S | +| main.rs:719:26:719:40 | x3.putTwo(...) | | main.rs:587:5:590:5 | Wrapper | +| main.rs:719:26:719:40 | x3.putTwo(...) | A | main.rs:658:36:658:50 | AssociatedParam | +| main.rs:719:26:719:49 | ... .unwrap() | | main.rs:658:36:658:50 | AssociatedParam | +| main.rs:719:36:719:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:719:39:719:39 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:721:20:721:20 | S | | main.rs:638:5:639:13 | S | +| main.rs:722:18:722:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:724:13:724:14 | x5 | | main.rs:641:5:642:14 | S2 | +| main.rs:724:18:724:19 | S2 | | main.rs:641:5:642:14 | S2 | +| main.rs:725:18:725:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:725:26:725:27 | x5 | | main.rs:641:5:642:14 | S2 | +| main.rs:725:26:725:32 | x5.m1() | | main.rs:587:5:590:5 | Wrapper | +| main.rs:725:26:725:32 | x5.m1() | A | main.rs:641:5:642:14 | S2 | +| main.rs:726:13:726:14 | x6 | | main.rs:641:5:642:14 | S2 | +| main.rs:726:18:726:19 | S2 | | main.rs:641:5:642:14 | S2 | +| main.rs:727:18:727:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:727:26:727:27 | x6 | | main.rs:641:5:642:14 | S2 | +| main.rs:727:26:727:32 | x6.m2() | | main.rs:587:5:590:5 | Wrapper | +| main.rs:727:26:727:32 | x6.m2() | A | main.rs:641:5:642:14 | S2 | +| main.rs:729:13:729:22 | assoc_zero | | main.rs:644:5:645:14 | AT | +| main.rs:729:26:729:27 | AT | | main.rs:644:5:645:14 | AT | +| main.rs:729:26:729:38 | AT.get_zero() | | main.rs:644:5:645:14 | AT | +| main.rs:730:13:730:21 | assoc_one | | main.rs:638:5:639:13 | S | +| main.rs:730:25:730:26 | AT | | main.rs:644:5:645:14 | AT | +| main.rs:730:25:730:36 | AT.get_one() | | main.rs:638:5:639:13 | S | +| main.rs:731:13:731:21 | assoc_two | | main.rs:641:5:642:14 | S2 | +| main.rs:731:25:731:26 | AT | | main.rs:644:5:645:14 | AT | +| main.rs:731:25:731:36 | AT.get_two() | | main.rs:641:5:642:14 | S2 | +| main.rs:748:15:748:18 | SelfParam | | main.rs:736:5:740:5 | MyEnum | +| main.rs:748:15:748:18 | SelfParam | A | main.rs:747:10:747:10 | T | +| main.rs:748:26:753:9 | { ... } | | main.rs:747:10:747:10 | T | +| main.rs:749:13:752:13 | match self { ... } | | main.rs:747:10:747:10 | T | +| main.rs:749:19:749:22 | self | | main.rs:736:5:740:5 | MyEnum | +| main.rs:749:19:749:22 | self | A | main.rs:747:10:747:10 | T | +| main.rs:750:28:750:28 | a | | main.rs:747:10:747:10 | T | +| main.rs:750:34:750:34 | a | | main.rs:747:10:747:10 | T | +| main.rs:751:30:751:30 | a | | main.rs:747:10:747:10 | T | +| main.rs:751:37:751:37 | a | | main.rs:747:10:747:10 | T | +| main.rs:757:13:757:13 | x | | main.rs:736:5:740:5 | MyEnum | +| main.rs:757:13:757:13 | x | A | main.rs:742:5:743:14 | S1 | +| main.rs:757:17:757:30 | ...::C1(...) | | main.rs:736:5:740:5 | MyEnum | +| main.rs:757:17:757:30 | ...::C1(...) | A | main.rs:742:5:743:14 | S1 | +| main.rs:757:28:757:29 | S1 | | main.rs:742:5:743:14 | S1 | +| main.rs:758:13:758:13 | y | | main.rs:736:5:740:5 | MyEnum | +| main.rs:758:13:758:13 | y | A | main.rs:744:5:745:14 | S2 | +| main.rs:758:17:758:36 | ...::C2 {...} | | main.rs:736:5:740:5 | MyEnum | +| main.rs:758:17:758:36 | ...::C2 {...} | A | main.rs:744:5:745:14 | S2 | +| main.rs:758:33:758:34 | S2 | | main.rs:744:5:745:14 | S2 | +| main.rs:760:18:760:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:760:26:760:26 | x | | main.rs:736:5:740:5 | MyEnum | +| main.rs:760:26:760:26 | x | A | main.rs:742:5:743:14 | S1 | +| main.rs:760:26:760:31 | x.m1() | | main.rs:742:5:743:14 | S1 | +| main.rs:761:18:761:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:761:26:761:26 | y | | main.rs:736:5:740:5 | MyEnum | +| main.rs:761:26:761:26 | y | A | main.rs:744:5:745:14 | S2 | +| main.rs:761:26:761:31 | y.m1() | | main.rs:744:5:745:14 | S2 | +| main.rs:783:15:783:18 | SelfParam | | main.rs:781:5:784:5 | Self [trait MyTrait1] | +| main.rs:788:15:788:18 | SelfParam | | main.rs:786:5:798:5 | Self [trait MyTrait2] | +| main.rs:791:9:797:9 | { ... } | | main.rs:786:20:786:22 | Tr2 | +| main.rs:792:13:796:13 | if ... {...} else {...} | | main.rs:786:20:786:22 | Tr2 | +| main.rs:792:16:792:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:792:16:792:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:792:20:792:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:792:22:794:13 | { ... } | | main.rs:786:20:786:22 | Tr2 | +| main.rs:793:17:793:20 | self | | main.rs:786:5:798:5 | Self [trait MyTrait2] | +| main.rs:793:17:793:25 | self.m1() | | main.rs:786:20:786:22 | Tr2 | +| main.rs:794:20:796:13 | { ... } | | main.rs:786:20:786:22 | Tr2 | +| main.rs:795:17:795:30 | ...::m1(...) | | main.rs:786:20:786:22 | Tr2 | +| main.rs:795:26:795:29 | self | | main.rs:786:5:798:5 | Self [trait MyTrait2] | +| main.rs:802:15:802:18 | SelfParam | | main.rs:800:5:812:5 | Self [trait MyTrait3] | +| main.rs:805:9:811:9 | { ... } | | main.rs:800:20:800:22 | Tr3 | +| main.rs:806:13:810:13 | if ... {...} else {...} | | main.rs:800:20:800:22 | Tr3 | +| main.rs:806:16:806:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:806:16:806:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:806:20:806:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:806:22:808:13 | { ... } | | main.rs:800:20:800:22 | Tr3 | +| main.rs:807:17:807:20 | self | | main.rs:800:5:812:5 | Self [trait MyTrait3] | +| main.rs:807:17:807:25 | self.m2() | | main.rs:766:5:769:5 | MyThing | +| main.rs:807:17:807:25 | self.m2() | A | main.rs:800:20:800:22 | Tr3 | +| main.rs:807:17:807:27 | ... .a | | main.rs:800:20:800:22 | Tr3 | +| main.rs:808:20:810:13 | { ... } | | main.rs:800:20:800:22 | Tr3 | +| main.rs:809:17:809:30 | ...::m2(...) | | main.rs:766:5:769:5 | MyThing | +| main.rs:809:17:809:30 | ...::m2(...) | A | main.rs:800:20:800:22 | Tr3 | +| main.rs:809:17:809:32 | ... .a | | main.rs:800:20:800:22 | Tr3 | +| main.rs:809:26:809:29 | self | | main.rs:800:5:812:5 | Self [trait MyTrait3] | +| main.rs:816:15:816:18 | SelfParam | | main.rs:766:5:769:5 | MyThing | +| main.rs:816:15:816:18 | SelfParam | A | main.rs:814:10:814:10 | T | +| main.rs:816:26:818:9 | { ... } | | main.rs:814:10:814:10 | T | +| main.rs:817:13:817:16 | self | | main.rs:766:5:769:5 | MyThing | +| main.rs:817:13:817:16 | self | A | main.rs:814:10:814:10 | T | +| main.rs:817:13:817:18 | self.a | | main.rs:814:10:814:10 | T | +| main.rs:825:15:825:18 | SelfParam | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:825:15:825:18 | SelfParam | A | main.rs:823:10:823:10 | T | +| main.rs:825:35:827:9 | { ... } | | main.rs:766:5:769:5 | MyThing | +| main.rs:825:35:827:9 | { ... } | A | main.rs:823:10:823:10 | T | +| main.rs:826:13:826:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:826:13:826:33 | MyThing {...} | A | main.rs:823:10:823:10 | T | +| main.rs:826:26:826:29 | self | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:826:26:826:29 | self | A | main.rs:823:10:823:10 | T | +| main.rs:826:26:826:31 | self.a | | main.rs:823:10:823:10 | T | +| main.rs:834:44:834:44 | x | | main.rs:834:26:834:41 | T2 | +| main.rs:834:57:836:5 | { ... } | | main.rs:834:22:834:23 | T1 | +| main.rs:835:9:835:9 | x | | main.rs:834:26:834:41 | T2 | +| main.rs:835:9:835:14 | x.m1() | | main.rs:834:22:834:23 | T1 | +| main.rs:838:56:838:56 | x | | main.rs:838:39:838:53 | T | +| main.rs:840:13:840:13 | a | | main.rs:766:5:769:5 | MyThing | +| main.rs:840:13:840:13 | a | A | main.rs:776:5:777:14 | S1 | +| main.rs:840:17:840:17 | x | | main.rs:838:39:838:53 | T | +| main.rs:840:17:840:22 | x.m1() | | main.rs:766:5:769:5 | MyThing | +| main.rs:840:17:840:22 | x.m1() | A | main.rs:776:5:777:14 | S1 | +| main.rs:841:18:841:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:841:26:841:26 | a | | main.rs:766:5:769:5 | MyThing | +| main.rs:841:26:841:26 | a | A | main.rs:776:5:777:14 | S1 | +| main.rs:845:13:845:13 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:845:13:845:13 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:845:17:845:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:845:17:845:33 | MyThing {...} | A | main.rs:776:5:777:14 | S1 | +| main.rs:845:30:845:31 | S1 | | main.rs:776:5:777:14 | S1 | +| main.rs:846:13:846:13 | y | | main.rs:766:5:769:5 | MyThing | +| main.rs:846:13:846:13 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:846:17:846:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:846:17:846:33 | MyThing {...} | A | main.rs:778:5:779:14 | S2 | +| main.rs:846:30:846:31 | S2 | | main.rs:778:5:779:14 | S2 | +| main.rs:848:18:848:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:848:26:848:26 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:848:26:848:26 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:848:26:848:31 | x.m1() | | main.rs:776:5:777:14 | S1 | +| main.rs:849:18:849:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:849:26:849:26 | y | | main.rs:766:5:769:5 | MyThing | +| main.rs:849:26:849:26 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:849:26:849:31 | y.m1() | | main.rs:778:5:779:14 | S2 | +| main.rs:851:13:851:13 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:851:13:851:13 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:851:17:851:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:851:17:851:33 | MyThing {...} | A | main.rs:776:5:777:14 | S1 | +| main.rs:851:30:851:31 | S1 | | main.rs:776:5:777:14 | S1 | +| main.rs:852:13:852:13 | y | | main.rs:766:5:769:5 | MyThing | +| main.rs:852:13:852:13 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:852:17:852:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:852:17:852:33 | MyThing {...} | A | main.rs:778:5:779:14 | S2 | +| main.rs:852:30:852:31 | S2 | | main.rs:778:5:779:14 | S2 | +| main.rs:854:18:854:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:854:26:854:26 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:854:26:854:26 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:854:26:854:31 | x.m2() | | main.rs:776:5:777:14 | S1 | +| main.rs:855:18:855:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:855:26:855:26 | y | | main.rs:766:5:769:5 | MyThing | +| main.rs:855:26:855:26 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:855:26:855:31 | y.m2() | | main.rs:778:5:779:14 | S2 | +| main.rs:857:13:857:13 | x | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:857:13:857:13 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:857:17:857:34 | MyThing2 {...} | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:857:17:857:34 | MyThing2 {...} | A | main.rs:776:5:777:14 | S1 | +| main.rs:857:31:857:32 | S1 | | main.rs:776:5:777:14 | S1 | +| main.rs:858:13:858:13 | y | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:858:13:858:13 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:858:17:858:34 | MyThing2 {...} | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:858:17:858:34 | MyThing2 {...} | A | main.rs:778:5:779:14 | S2 | +| main.rs:858:31:858:32 | S2 | | main.rs:778:5:779:14 | S2 | +| main.rs:860:18:860:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:860:26:860:26 | x | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:860:26:860:26 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:860:26:860:31 | x.m3() | | main.rs:776:5:777:14 | S1 | +| main.rs:861:18:861:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:861:26:861:26 | y | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:861:26:861:26 | y | A | main.rs:778:5:779:14 | S2 | +| main.rs:861:26:861:31 | y.m3() | | main.rs:778:5:779:14 | S2 | +| main.rs:863:13:863:13 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:863:13:863:13 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:863:17:863:33 | MyThing {...} | | main.rs:766:5:769:5 | MyThing | +| main.rs:863:17:863:33 | MyThing {...} | A | main.rs:776:5:777:14 | S1 | +| main.rs:863:30:863:31 | S1 | | main.rs:776:5:777:14 | S1 | +| main.rs:864:13:864:13 | s | | main.rs:776:5:777:14 | S1 | +| main.rs:864:17:864:32 | call_trait_m1(...) | | main.rs:776:5:777:14 | S1 | +| main.rs:864:31:864:31 | x | | main.rs:766:5:769:5 | MyThing | +| main.rs:864:31:864:31 | x | A | main.rs:776:5:777:14 | S1 | +| main.rs:866:13:866:13 | x | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:866:13:866:13 | x | A | main.rs:778:5:779:14 | S2 | +| main.rs:866:17:866:34 | MyThing2 {...} | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:866:17:866:34 | MyThing2 {...} | A | main.rs:778:5:779:14 | S2 | +| main.rs:866:31:866:32 | S2 | | main.rs:778:5:779:14 | S2 | +| main.rs:867:13:867:13 | s | | main.rs:766:5:769:5 | MyThing | +| main.rs:867:13:867:13 | s | A | main.rs:778:5:779:14 | S2 | +| main.rs:867:17:867:32 | call_trait_m1(...) | | main.rs:766:5:769:5 | MyThing | +| main.rs:867:17:867:32 | call_trait_m1(...) | A | main.rs:778:5:779:14 | S2 | +| main.rs:867:31:867:31 | x | | main.rs:771:5:774:5 | MyThing2 | +| main.rs:867:31:867:31 | x | A | main.rs:778:5:779:14 | S2 | +| main.rs:885:22:885:22 | x | | file://:0:0:0:0 | & | +| main.rs:885:22:885:22 | x | &T | main.rs:885:11:885:19 | T | +| main.rs:885:35:887:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:885:35:887:5 | { ... } | &T | main.rs:885:11:885:19 | T | +| main.rs:886:9:886:9 | x | | file://:0:0:0:0 | & | +| main.rs:886:9:886:9 | x | &T | main.rs:885:11:885:19 | T | +| main.rs:890:17:890:20 | SelfParam | | main.rs:875:5:876:14 | S1 | +| main.rs:890:29:892:9 | { ... } | | main.rs:878:5:879:14 | S2 | +| main.rs:891:13:891:14 | S2 | | main.rs:878:5:879:14 | S2 | +| main.rs:895:21:895:21 | x | | main.rs:895:13:895:14 | T1 | +| main.rs:898:5:900:5 | { ... } | | main.rs:895:17:895:18 | T2 | +| main.rs:899:9:899:9 | x | | main.rs:895:13:895:14 | T1 | +| main.rs:899:9:899:16 | x.into() | | main.rs:895:17:895:18 | T2 | +| main.rs:903:13:903:13 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:903:17:903:18 | S1 | | main.rs:875:5:876:14 | S1 | +| main.rs:904:18:904:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:904:26:904:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:904:26:904:31 | id(...) | &T | main.rs:875:5:876:14 | S1 | +| main.rs:904:29:904:30 | &x | | file://:0:0:0:0 | & | +| main.rs:904:29:904:30 | &x | &T | main.rs:875:5:876:14 | S1 | +| main.rs:904:30:904:30 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:906:13:906:13 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:906:17:906:18 | S1 | | main.rs:875:5:876:14 | S1 | +| main.rs:907:18:907:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:907:26:907:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:907:26:907:37 | id::<...>(...) | &T | main.rs:875:5:876:14 | S1 | +| main.rs:907:35:907:36 | &x | | file://:0:0:0:0 | & | +| main.rs:907:35:907:36 | &x | &T | main.rs:875:5:876:14 | S1 | +| main.rs:907:36:907:36 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:909:13:909:13 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:909:17:909:18 | S1 | | main.rs:875:5:876:14 | S1 | +| main.rs:910:18:910:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:910:26:910:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:910:26:910:44 | id::<...>(...) | &T | main.rs:875:5:876:14 | S1 | +| main.rs:910:42:910:43 | &x | | file://:0:0:0:0 | & | +| main.rs:910:42:910:43 | &x | &T | main.rs:875:5:876:14 | S1 | +| main.rs:910:43:910:43 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:912:13:912:13 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:912:17:912:18 | S1 | | main.rs:875:5:876:14 | S1 | +| main.rs:913:9:913:25 | into::<...>(...) | | main.rs:878:5:879:14 | S2 | +| main.rs:913:24:913:24 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:915:13:915:13 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:915:17:915:18 | S1 | | main.rs:875:5:876:14 | S1 | +| main.rs:916:13:916:13 | y | | main.rs:878:5:879:14 | S2 | +| main.rs:916:21:916:27 | into(...) | | main.rs:878:5:879:14 | S2 | +| main.rs:916:26:916:26 | x | | main.rs:875:5:876:14 | S1 | +| main.rs:930:22:930:25 | SelfParam | | main.rs:921:5:927:5 | PairOption | +| main.rs:930:22:930:25 | SelfParam | Fst | main.rs:929:10:929:12 | Fst | +| main.rs:930:22:930:25 | SelfParam | Snd | main.rs:929:15:929:17 | Snd | +| main.rs:930:35:937:9 | { ... } | | main.rs:929:15:929:17 | Snd | +| main.rs:931:13:936:13 | match self { ... } | | main.rs:929:15:929:17 | Snd | +| main.rs:931:19:931:22 | self | | main.rs:921:5:927:5 | PairOption | +| main.rs:931:19:931:22 | self | Fst | main.rs:929:10:929:12 | Fst | +| main.rs:931:19:931:22 | self | Snd | main.rs:929:15:929:17 | Snd | +| main.rs:932:43:932:82 | MacroExpr | | main.rs:929:15:929:17 | Snd | +| main.rs:932:50:932:81 | "PairNone has no second elemen... | | {EXTERNAL LOCATION} | str | +| main.rs:932:50:932:81 | MacroExpr | | main.rs:929:15:929:17 | Snd | +| main.rs:932:50:932:81 | { ... } | | main.rs:929:15:929:17 | Snd | +| main.rs:933:43:933:81 | MacroExpr | | main.rs:929:15:929:17 | Snd | +| main.rs:933:50:933:80 | "PairFst has no second element... | | {EXTERNAL LOCATION} | str | +| main.rs:933:50:933:80 | MacroExpr | | main.rs:929:15:929:17 | Snd | +| main.rs:933:50:933:80 | { ... } | | main.rs:929:15:929:17 | Snd | +| main.rs:934:37:934:39 | snd | | main.rs:929:15:929:17 | Snd | +| main.rs:934:45:934:47 | snd | | main.rs:929:15:929:17 | Snd | +| main.rs:935:41:935:43 | snd | | main.rs:929:15:929:17 | Snd | +| main.rs:935:49:935:51 | snd | | main.rs:929:15:929:17 | Snd | +| main.rs:961:10:961:10 | t | | main.rs:921:5:927:5 | PairOption | +| main.rs:961:10:961:10 | t | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:961:10:961:10 | t | Snd | main.rs:921:5:927:5 | PairOption | +| main.rs:961:10:961:10 | t | Snd.Fst | main.rs:943:5:944:14 | S2 | +| main.rs:961:10:961:10 | t | Snd.Snd | main.rs:946:5:947:14 | S3 | +| main.rs:962:13:962:13 | x | | main.rs:946:5:947:14 | S3 | +| main.rs:962:17:962:17 | t | | main.rs:921:5:927:5 | PairOption | +| main.rs:962:17:962:17 | t | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:962:17:962:17 | t | Snd | main.rs:921:5:927:5 | PairOption | +| main.rs:962:17:962:17 | t | Snd.Fst | main.rs:943:5:944:14 | S2 | +| main.rs:962:17:962:17 | t | Snd.Snd | main.rs:946:5:947:14 | S3 | +| main.rs:962:17:962:29 | t.unwrapSnd() | | main.rs:921:5:927:5 | PairOption | +| main.rs:962:17:962:29 | t.unwrapSnd() | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:962:17:962:29 | t.unwrapSnd() | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:962:17:962:41 | ... .unwrapSnd() | | main.rs:946:5:947:14 | S3 | +| main.rs:963:18:963:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:963:26:963:26 | x | | main.rs:946:5:947:14 | S3 | +| main.rs:968:13:968:14 | p1 | | main.rs:921:5:927:5 | PairOption | +| main.rs:968:13:968:14 | p1 | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:968:13:968:14 | p1 | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:968:26:968:53 | ...::PairBoth(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:968:26:968:53 | ...::PairBoth(...) | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:968:26:968:53 | ...::PairBoth(...) | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:968:47:968:48 | S1 | | main.rs:940:5:941:14 | S1 | +| main.rs:968:51:968:52 | S2 | | main.rs:943:5:944:14 | S2 | +| main.rs:969:18:969:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:969:26:969:27 | p1 | | main.rs:921:5:927:5 | PairOption | +| main.rs:969:26:969:27 | p1 | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:969:26:969:27 | p1 | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:972:13:972:14 | p2 | | main.rs:921:5:927:5 | PairOption | +| main.rs:972:13:972:14 | p2 | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:972:13:972:14 | p2 | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:972:26:972:47 | ...::PairNone(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:972:26:972:47 | ...::PairNone(...) | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:972:26:972:47 | ...::PairNone(...) | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:973:18:973:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:973:26:973:27 | p2 | | main.rs:921:5:927:5 | PairOption | +| main.rs:973:26:973:27 | p2 | Fst | main.rs:940:5:941:14 | S1 | +| main.rs:973:26:973:27 | p2 | Snd | main.rs:943:5:944:14 | S2 | +| main.rs:976:13:976:14 | p3 | | main.rs:921:5:927:5 | PairOption | +| main.rs:976:13:976:14 | p3 | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:976:13:976:14 | p3 | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:976:34:976:56 | ...::PairSnd(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:976:34:976:56 | ...::PairSnd(...) | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:976:34:976:56 | ...::PairSnd(...) | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:976:54:976:55 | S3 | | main.rs:946:5:947:14 | S3 | +| main.rs:977:18:977:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:977:26:977:27 | p3 | | main.rs:921:5:927:5 | PairOption | +| main.rs:977:26:977:27 | p3 | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:977:26:977:27 | p3 | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:980:13:980:14 | p3 | | main.rs:921:5:927:5 | PairOption | +| main.rs:980:13:980:14 | p3 | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:980:13:980:14 | p3 | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:980:35:980:56 | ...::PairNone(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:980:35:980:56 | ...::PairNone(...) | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:980:35:980:56 | ...::PairNone(...) | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:981:18:981:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:981:26:981:27 | p3 | | main.rs:921:5:927:5 | PairOption | +| main.rs:981:26:981:27 | p3 | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:981:26:981:27 | p3 | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:983:11:983:54 | ...::PairSnd(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:983:11:983:54 | ...::PairSnd(...) | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:983:11:983:54 | ...::PairSnd(...) | Snd | main.rs:921:5:927:5 | PairOption | +| main.rs:983:11:983:54 | ...::PairSnd(...) | Snd.Fst | main.rs:943:5:944:14 | S2 | +| main.rs:983:11:983:54 | ...::PairSnd(...) | Snd.Snd | main.rs:946:5:947:14 | S3 | +| main.rs:983:31:983:53 | ...::PairSnd(...) | | main.rs:921:5:927:5 | PairOption | +| main.rs:983:31:983:53 | ...::PairSnd(...) | Fst | main.rs:943:5:944:14 | S2 | +| main.rs:983:31:983:53 | ...::PairSnd(...) | Snd | main.rs:946:5:947:14 | S3 | +| main.rs:983:51:983:52 | S3 | | main.rs:946:5:947:14 | S3 | +| main.rs:996:16:996:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:996:16:996:24 | SelfParam | &T | main.rs:994:5:1001:5 | Self [trait MyTrait] | +| main.rs:996:27:996:31 | value | | main.rs:994:19:994:19 | S | +| main.rs:998:21:998:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:998:21:998:29 | SelfParam | &T | main.rs:994:5:1001:5 | Self [trait MyTrait] | +| main.rs:998:32:998:36 | value | | main.rs:994:19:994:19 | S | +| main.rs:999:13:999:16 | self | | file://:0:0:0:0 | & | +| main.rs:999:13:999:16 | self | &T | main.rs:994:5:1001:5 | Self [trait MyTrait] | +| main.rs:999:22:999:26 | value | | main.rs:994:19:994:19 | S | +| main.rs:1005:16:1005:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1005:16:1005:24 | SelfParam | &T | main.rs:988:5:992:5 | MyOption | +| main.rs:1005:16:1005:24 | SelfParam | &T.T | main.rs:1003:10:1003:10 | T | +| main.rs:1005:27:1005:31 | value | | main.rs:1003:10:1003:10 | T | +| main.rs:1009:26:1011:9 | { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1009:26:1011:9 | { ... } | T | main.rs:1008:10:1008:10 | T | +| main.rs:1010:13:1010:30 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1010:13:1010:30 | ...::MyNone(...) | T | main.rs:1008:10:1008:10 | T | +| main.rs:1015:20:1015:23 | SelfParam | | main.rs:988:5:992:5 | MyOption | +| main.rs:1015:20:1015:23 | SelfParam | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1015:20:1015:23 | SelfParam | T.T | main.rs:1014:10:1014:10 | T | +| main.rs:1015:41:1020:9 | { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1015:41:1020:9 | { ... } | T | main.rs:1014:10:1014:10 | T | +| main.rs:1016:13:1019:13 | match self { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1016:13:1019:13 | match self { ... } | T | main.rs:1014:10:1014:10 | T | +| main.rs:1016:19:1016:22 | self | | main.rs:988:5:992:5 | MyOption | +| main.rs:1016:19:1016:22 | self | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1016:19:1016:22 | self | T.T | main.rs:1014:10:1014:10 | T | +| main.rs:1017:39:1017:56 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1017:39:1017:56 | ...::MyNone(...) | T | main.rs:1014:10:1014:10 | T | +| main.rs:1018:34:1018:34 | x | | main.rs:988:5:992:5 | MyOption | +| main.rs:1018:34:1018:34 | x | T | main.rs:1014:10:1014:10 | T | +| main.rs:1018:40:1018:40 | x | | main.rs:988:5:992:5 | MyOption | +| main.rs:1018:40:1018:40 | x | T | main.rs:1014:10:1014:10 | T | +| main.rs:1027:13:1027:14 | x1 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1027:18:1027:37 | ...::new(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1028:18:1028:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1028:26:1028:27 | x1 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1030:13:1030:18 | mut x2 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1030:13:1030:18 | mut x2 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1030:22:1030:36 | ...::new(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1030:22:1030:36 | ...::new(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1031:9:1031:10 | x2 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1031:9:1031:10 | x2 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1031:16:1031:16 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1032:18:1032:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1032:26:1032:27 | x2 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1032:26:1032:27 | x2 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1034:13:1034:18 | mut x3 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1034:22:1034:36 | ...::new(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1035:9:1035:10 | x3 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1035:21:1035:21 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1036:18:1036:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1036:26:1036:27 | x3 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1038:13:1038:18 | mut x4 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1038:13:1038:18 | mut x4 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1038:22:1038:36 | ...::new(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1038:22:1038:36 | ...::new(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1039:23:1039:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:1039:23:1039:29 | &mut x4 | &T | main.rs:988:5:992:5 | MyOption | +| main.rs:1039:23:1039:29 | &mut x4 | &T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1039:28:1039:29 | x4 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1039:28:1039:29 | x4 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1039:32:1039:32 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1040:18:1040:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1040:26:1040:27 | x4 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1040:26:1040:27 | x4 | T | main.rs:1023:5:1024:13 | S | +| main.rs:1042:13:1042:14 | x5 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1042:13:1042:14 | x5 | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1042:13:1042:14 | x5 | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1042:18:1042:58 | ...::MySome(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1042:18:1042:58 | ...::MySome(...) | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1042:18:1042:58 | ...::MySome(...) | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1042:35:1042:57 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1042:35:1042:57 | ...::MyNone(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1043:18:1043:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1043:26:1043:27 | x5 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1043:26:1043:27 | x5 | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1043:26:1043:27 | x5 | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1043:26:1043:37 | x5.flatten() | | main.rs:988:5:992:5 | MyOption | +| main.rs:1043:26:1043:37 | x5.flatten() | T | main.rs:1023:5:1024:13 | S | +| main.rs:1045:13:1045:14 | x6 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1045:13:1045:14 | x6 | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1045:13:1045:14 | x6 | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1045:18:1045:58 | ...::MySome(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1045:18:1045:58 | ...::MySome(...) | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1045:18:1045:58 | ...::MySome(...) | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1045:35:1045:57 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1045:35:1045:57 | ...::MyNone(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1046:18:1046:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1046:26:1046:61 | ...::flatten(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1046:26:1046:61 | ...::flatten(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1046:59:1046:60 | x6 | | main.rs:988:5:992:5 | MyOption | +| main.rs:1046:59:1046:60 | x6 | T | main.rs:988:5:992:5 | MyOption | +| main.rs:1046:59:1046:60 | x6 | T.T | main.rs:1023:5:1024:13 | S | +| main.rs:1049:13:1049:19 | from_if | | main.rs:988:5:992:5 | MyOption | +| main.rs:1049:13:1049:19 | from_if | T | main.rs:1023:5:1024:13 | S | +| main.rs:1049:23:1053:9 | if ... {...} else {...} | | main.rs:988:5:992:5 | MyOption | +| main.rs:1049:23:1053:9 | if ... {...} else {...} | T | main.rs:1023:5:1024:13 | S | +| main.rs:1049:26:1049:26 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1049:26:1049:30 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1049:30:1049:30 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1049:32:1051:9 | { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1049:32:1051:9 | { ... } | T | main.rs:1023:5:1024:13 | S | +| main.rs:1050:13:1050:30 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1050:13:1050:30 | ...::MyNone(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1051:16:1053:9 | { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1051:16:1053:9 | { ... } | T | main.rs:1023:5:1024:13 | S | +| main.rs:1052:13:1052:31 | ...::MySome(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1052:13:1052:31 | ...::MySome(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1052:30:1052:30 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1054:18:1054:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1054:26:1054:32 | from_if | | main.rs:988:5:992:5 | MyOption | +| main.rs:1054:26:1054:32 | from_if | T | main.rs:1023:5:1024:13 | S | +| main.rs:1057:13:1057:22 | from_match | | main.rs:988:5:992:5 | MyOption | +| main.rs:1057:13:1057:22 | from_match | T | main.rs:1023:5:1024:13 | S | +| main.rs:1057:26:1060:9 | match ... { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1057:26:1060:9 | match ... { ... } | T | main.rs:1023:5:1024:13 | S | +| main.rs:1057:32:1057:32 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1057:32:1057:36 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1057:36:1057:36 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1058:13:1058:16 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1058:21:1058:38 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1058:21:1058:38 | ...::MyNone(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1059:13:1059:17 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1059:22:1059:40 | ...::MySome(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1059:22:1059:40 | ...::MySome(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1059:39:1059:39 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1061:18:1061:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1061:26:1061:35 | from_match | | main.rs:988:5:992:5 | MyOption | +| main.rs:1061:26:1061:35 | from_match | T | main.rs:1023:5:1024:13 | S | +| main.rs:1064:13:1064:21 | from_loop | | main.rs:988:5:992:5 | MyOption | +| main.rs:1064:13:1064:21 | from_loop | T | main.rs:1023:5:1024:13 | S | +| main.rs:1064:25:1069:9 | loop { ... } | | main.rs:988:5:992:5 | MyOption | +| main.rs:1064:25:1069:9 | loop { ... } | T | main.rs:1023:5:1024:13 | S | +| main.rs:1065:16:1065:16 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1065:16:1065:20 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1065:20:1065:20 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1066:23:1066:40 | ...::MyNone(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1066:23:1066:40 | ...::MyNone(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1068:19:1068:37 | ...::MySome(...) | | main.rs:988:5:992:5 | MyOption | +| main.rs:1068:19:1068:37 | ...::MySome(...) | T | main.rs:1023:5:1024:13 | S | +| main.rs:1068:36:1068:36 | S | | main.rs:1023:5:1024:13 | S | +| main.rs:1070:18:1070:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1070:26:1070:34 | from_loop | | main.rs:988:5:992:5 | MyOption | +| main.rs:1070:26:1070:34 | from_loop | T | main.rs:1023:5:1024:13 | S | +| main.rs:1088:15:1088:18 | SelfParam | | main.rs:1076:5:1077:19 | S | +| main.rs:1088:15:1088:18 | SelfParam | T | main.rs:1087:10:1087:10 | T | +| main.rs:1088:26:1090:9 | { ... } | | main.rs:1087:10:1087:10 | T | +| main.rs:1089:13:1089:16 | self | | main.rs:1076:5:1077:19 | S | +| main.rs:1089:13:1089:16 | self | T | main.rs:1087:10:1087:10 | T | +| main.rs:1089:13:1089:18 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1092:15:1092:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1092:15:1092:19 | SelfParam | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1092:15:1092:19 | SelfParam | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1092:28:1094:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1092:28:1094:9 | { ... } | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:13:1093:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1093:13:1093:19 | &... | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:14:1093:17 | self | | file://:0:0:0:0 | & | +| main.rs:1093:14:1093:17 | self | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1093:14:1093:17 | self | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1093:14:1093:19 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1096:15:1096:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1096:15:1096:25 | SelfParam | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1096:15:1096:25 | SelfParam | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1096:34:1098:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1096:34:1098:9 | { ... } | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:13:1097:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1097:13:1097:19 | &... | &T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:14:1097:17 | self | | file://:0:0:0:0 | & | +| main.rs:1097:14:1097:17 | self | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1097:14:1097:17 | self | &T.T | main.rs:1087:10:1087:10 | T | +| main.rs:1097:14:1097:19 | self.0 | | main.rs:1087:10:1087:10 | T | +| main.rs:1102:29:1102:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1102:29:1102:33 | SelfParam | &T | main.rs:1101:5:1104:5 | Self [trait ATrait] | +| main.rs:1103:33:1103:36 | SelfParam | | main.rs:1101:5:1104:5 | Self [trait ATrait] | +| main.rs:1109:29:1109:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1109:29:1109:33 | SelfParam | &T | file://:0:0:0:0 | & | +| main.rs:1109:29:1109:33 | SelfParam | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1109:29:1109:33 | SelfParam | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1109:43:1111:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1110:13:1110:22 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:13:1110:24 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1110:14:1110:21 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:15:1110:21 | (...) | | file://:0:0:0:0 | & | +| main.rs:1110:15:1110:21 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:15:1110:21 | (...) | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:16:1110:20 | * ... | | file://:0:0:0:0 | & | +| main.rs:1110:16:1110:20 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:16:1110:20 | * ... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:17:1110:20 | self | | file://:0:0:0:0 | & | +| main.rs:1110:17:1110:20 | self | &T | file://:0:0:0:0 | & | +| main.rs:1110:17:1110:20 | self | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1110:17:1110:20 | self | &T.&T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1114:33:1114:36 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1114:33:1114:36 | SelfParam | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1114:46:1116:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1115:13:1115:19 | (...) | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:13:1115:21 | ... .a | | {EXTERNAL LOCATION} | i64 | +| main.rs:1115:14:1115:18 | * ... | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1115:15:1115:18 | self | | file://:0:0:0:0 | & | +| main.rs:1115:15:1115:18 | self | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1120:13:1120:14 | x1 | | main.rs:1076:5:1077:19 | S | +| main.rs:1120:13:1120:14 | x1 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1120:18:1120:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1120:18:1120:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1120:20:1120:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1121:18:1121:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1121:26:1121:27 | x1 | | main.rs:1076:5:1077:19 | S | +| main.rs:1121:26:1121:27 | x1 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1121:26:1121:32 | x1.m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:13:1123:14 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1123:13:1123:14 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:18:1123:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1123:18:1123:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1123:20:1123:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1125:18:1125:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1125:26:1125:27 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1125:26:1125:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1125:26:1125:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:1125:26:1125:32 | x2.m2() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1126:18:1126:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1126:26:1126:27 | x2 | | main.rs:1076:5:1077:19 | S | +| main.rs:1126:26:1126:27 | x2 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1126:26:1126:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:1126:26:1126:32 | x2.m3() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:13:1128:14 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1128:13:1128:14 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:18:1128:22 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1128:18:1128:22 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1128:20:1128:21 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:18:1130:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1130:26:1130:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:1130:26:1130:41 | ...::m2(...) | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:38:1130:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1130:38:1130:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1130:38:1130:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1130:39:1130:40 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1130:39:1130:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:18:1131:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1131:26:1131:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:1131:26:1131:41 | ...::m3(...) | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:38:1131:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:1131:38:1131:40 | &x3 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1131:38:1131:40 | &x3 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1131:39:1131:40 | x3 | | main.rs:1076:5:1077:19 | S | +| main.rs:1131:39:1131:40 | x3 | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:13:1133:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:1133:13:1133:14 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1133:13:1133:14 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:18:1133:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1133:18:1133:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1133:18:1133:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:19:1133:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1133:19:1133:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1133:21:1133:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1135:18:1135:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1135:26:1135:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1135:26:1135:27 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1135:26:1135:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1135:26:1135:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:1135:26:1135:32 | x4.m2() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1136:18:1136:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1136:26:1136:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:1136:26:1136:27 | x4 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1136:26:1136:27 | x4 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1136:26:1136:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:1136:26:1136:32 | x4.m3() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:13:1138:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:1138:13:1138:14 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1138:13:1138:14 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:18:1138:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1138:18:1138:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1138:18:1138:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:19:1138:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1138:19:1138:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1138:21:1138:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1140:18:1140:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1140:26:1140:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1140:26:1140:27 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1140:26:1140:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1140:26:1140:32 | x5.m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1141:18:1141:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1141:26:1141:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:1141:26:1141:27 | x5 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1141:26:1141:27 | x5 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1141:26:1141:29 | x5.0 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:13:1143:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:1143:13:1143:14 | x6 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1143:13:1143:14 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:18:1143:23 | &... | | file://:0:0:0:0 | & | +| main.rs:1143:18:1143:23 | &... | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1143:18:1143:23 | &... | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:19:1143:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1143:19:1143:23 | S(...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1143:21:1143:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:18:1146:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1146:26:1146:30 | (...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1146:26:1146:30 | (...) | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:26:1146:35 | ... .m1() | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:27:1146:29 | * ... | | main.rs:1076:5:1077:19 | S | +| main.rs:1146:27:1146:29 | * ... | T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1146:28:1146:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:1146:28:1146:29 | x6 | &T | main.rs:1076:5:1077:19 | S | +| main.rs:1146:28:1146:29 | x6 | &T.T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:13:1148:14 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1148:13:1148:14 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1148:13:1148:14 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:18:1148:23 | S(...) | | main.rs:1076:5:1077:19 | S | +| main.rs:1148:18:1148:23 | S(...) | T | file://:0:0:0:0 | & | +| main.rs:1148:18:1148:23 | S(...) | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:20:1148:22 | &S2 | | file://:0:0:0:0 | & | +| main.rs:1148:20:1148:22 | &S2 | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1148:21:1148:22 | S2 | | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:13:1151:13 | t | | file://:0:0:0:0 | & | +| main.rs:1151:13:1151:13 | t | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:17:1151:18 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1151:17:1151:18 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1151:17:1151:18 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1151:17:1151:23 | x7.m1() | | file://:0:0:0:0 | & | +| main.rs:1151:17:1151:23 | x7.m1() | &T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1152:18:1152:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1152:26:1152:27 | x7 | | main.rs:1076:5:1077:19 | S | +| main.rs:1152:26:1152:27 | x7 | T | file://:0:0:0:0 | & | +| main.rs:1152:26:1152:27 | x7 | T.&T | main.rs:1079:5:1080:14 | S2 | +| main.rs:1154:13:1154:14 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1154:26:1154:32 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1154:26:1154:44 | "Hello".to_string() | | {EXTERNAL LOCATION} | String | +| main.rs:1158:13:1158:13 | u | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:13:1158:13 | u | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1158:17:1158:18 | x9 | | {EXTERNAL LOCATION} | String | +| main.rs:1158:17:1158:33 | x9.parse() | | {EXTERNAL LOCATION} | Result | +| main.rs:1158:17:1158:33 | x9.parse() | T | {EXTERNAL LOCATION} | u32 | +| main.rs:1160:13:1160:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1160:13:1160:20 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:24:1160:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1160:24:1160:39 | &... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:25:1160:39 | MyInt {...} | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1160:36:1160:37 | 37 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1160:36:1160:37 | 37 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1162:17:1162:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1162:17:1162:24 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1163:18:1163:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1166:13:1166:20 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1166:13:1166:20 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:24:1166:39 | &... | | file://:0:0:0:0 | & | +| main.rs:1166:24:1166:39 | &... | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:25:1166:39 | MyInt {...} | | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1166:36:1166:37 | 38 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1166:36:1166:37 | 38 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1167:17:1167:24 | my_thing | | file://:0:0:0:0 | & | +| main.rs:1167:17:1167:24 | my_thing | &T | main.rs:1082:5:1085:5 | MyInt | +| main.rs:1168:18:1168:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1175:16:1175:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1175:16:1175:20 | SelfParam | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1178:16:1178:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1178:16:1178:20 | SelfParam | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1178:32:1180:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1178:32:1180:9 | { ... } | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1179:13:1179:16 | self | | file://:0:0:0:0 | & | +| main.rs:1179:13:1179:16 | self | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1179:13:1179:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:1179:13:1179:22 | self.foo() | &T | main.rs:1173:5:1181:5 | Self [trait MyTrait] | +| main.rs:1187:16:1187:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1187:16:1187:20 | SelfParam | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1187:36:1189:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1187:36:1189:9 | { ... } | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1188:13:1188:16 | self | | file://:0:0:0:0 | & | +| main.rs:1188:13:1188:16 | self | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1193:13:1193:13 | x | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1193:17:1193:24 | MyStruct | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1194:9:1194:9 | x | | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1194:9:1194:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:1194:9:1194:15 | x.bar() | &T | main.rs:1183:5:1183:20 | MyStruct | +| main.rs:1204:16:1204:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1204:16:1204:20 | SelfParam | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1204:16:1204:20 | SelfParam | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1204:32:1206:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1204:32:1206:9 | { ... } | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1204:32:1206:9 | { ... } | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1205:13:1205:16 | self | | file://:0:0:0:0 | & | +| main.rs:1205:13:1205:16 | self | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1205:13:1205:16 | self | &T.T | main.rs:1203:10:1203:10 | T | +| main.rs:1210:13:1210:13 | x | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1210:13:1210:13 | x | T | main.rs:1199:5:1199:13 | S | +| main.rs:1210:17:1210:27 | MyStruct(...) | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1210:17:1210:27 | MyStruct(...) | T | main.rs:1199:5:1199:13 | S | +| main.rs:1210:26:1210:26 | S | | main.rs:1199:5:1199:13 | S | +| main.rs:1211:9:1211:9 | x | | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1211:9:1211:9 | x | T | main.rs:1199:5:1199:13 | S | +| main.rs:1211:9:1211:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:1211:9:1211:15 | x.foo() | &T | main.rs:1201:5:1201:26 | MyStruct | +| main.rs:1211:9:1211:15 | x.foo() | &T.T | main.rs:1199:5:1199:13 | S | +| main.rs:1222:17:1222:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1222:17:1222:25 | SelfParam | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:13:1223:16 | self | | file://:0:0:0:0 | & | +| main.rs:1223:13:1223:16 | self | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:13:1223:21 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1223:13:1223:34 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1223:25:1223:34 | ! ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1223:26:1223:29 | self | | file://:0:0:0:0 | & | +| main.rs:1223:26:1223:29 | self | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1223:26:1223:34 | self.bool | | {EXTERNAL LOCATION} | bool | +| main.rs:1230:15:1230:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1230:15:1230:19 | SelfParam | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1230:31:1232:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1230:31:1232:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1230:31:1232:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:13:1231:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:13:1231:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1231:13:1231:19 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:14:1231:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1231:14:1231:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1231:14:1231:19 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:15:1231:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1231:15:1231:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1231:15:1231:19 | &self | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1231:16:1231:19 | self | | file://:0:0:0:0 | & | +| main.rs:1231:16:1231:19 | self | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:15:1234:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1234:15:1234:25 | SelfParam | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:37:1236:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1234:37:1236:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1234:37:1236:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:13:1235:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:13:1235:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1235:13:1235:19 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:14:1235:19 | &... | | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1235:14:1235:19 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1235:14:1235:19 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:15:1235:19 | &self | | file://:0:0:0:0 | & | +| main.rs:1235:15:1235:19 | &self | &T | file://:0:0:0:0 | & | +| main.rs:1235:15:1235:19 | &self | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1235:16:1235:19 | self | | file://:0:0:0:0 | & | +| main.rs:1235:16:1235:19 | self | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1238:15:1238:15 | x | | file://:0:0:0:0 | & | +| main.rs:1238:15:1238:15 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1238:34:1240:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1238:34:1240:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1239:13:1239:13 | x | | file://:0:0:0:0 | & | +| main.rs:1239:13:1239:13 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:15:1242:15 | x | | file://:0:0:0:0 | & | +| main.rs:1242:15:1242:15 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:34:1244:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1242:34:1244:9 | { ... } | &T.&T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1242:34:1244:9 | { ... } | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:13:1243:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:13:1243:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T.&T.&T | file://:0:0:0:0 | & | +| main.rs:1243:13:1243:16 | &... | &T.&T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:14:1243:16 | &... | | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | | main.rs:1227:5:1227:13 | S | +| main.rs:1243:14:1243:16 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | &T.&T | file://:0:0:0:0 | & | +| main.rs:1243:14:1243:16 | &... | &T.&T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:15:1243:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1243:15:1243:16 | &x | &T | file://:0:0:0:0 | & | +| main.rs:1243:15:1243:16 | &x | &T.&T | main.rs:1227:5:1227:13 | S | +| main.rs:1243:16:1243:16 | x | | file://:0:0:0:0 | & | +| main.rs:1243:16:1243:16 | x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1248:13:1248:13 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1248:17:1248:20 | S {...} | | main.rs:1227:5:1227:13 | S | +| main.rs:1249:9:1249:9 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1249:9:1249:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:1249:9:1249:14 | x.f1() | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1250:9:1250:9 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1250:9:1250:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:1250:9:1250:14 | x.f2() | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:9:1251:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:1251:9:1251:17 | ...::f3(...) | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:15:1251:16 | &x | | file://:0:0:0:0 | & | +| main.rs:1251:15:1251:16 | &x | &T | main.rs:1227:5:1227:13 | S | +| main.rs:1251:16:1251:16 | x | | main.rs:1227:5:1227:13 | S | +| main.rs:1253:13:1253:13 | n | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:17:1253:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:18:1253:24 | * ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:18:1253:24 | * ... | | file://:0:0:0:0 | & | +| main.rs:1253:18:1253:24 | * ... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:19:1253:24 | &... | | file://:0:0:0:0 | & | +| main.rs:1253:19:1253:24 | &... | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:19:1253:24 | &... | &T | file://:0:0:0:0 | & | +| main.rs:1253:19:1253:24 | &... | &T.&T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:20:1253:24 | &true | | {EXTERNAL LOCATION} | bool | +| main.rs:1253:20:1253:24 | &true | | file://:0:0:0:0 | & | +| main.rs:1253:20:1253:24 | &true | &T | {EXTERNAL LOCATION} | bool | +| main.rs:1253:21:1253:24 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1257:13:1257:20 | mut flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1257:24:1257:41 | ...::default(...) | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1258:22:1258:30 | &mut flag | | file://:0:0:0:0 | & | +| main.rs:1258:22:1258:30 | &mut flag | &T | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1258:27:1258:30 | flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1259:18:1259:23 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1259:26:1259:29 | flag | | main.rs:1216:5:1219:5 | MyFlag | +| main.rs:1273:43:1276:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1273:43:1276:5 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1273:43:1276:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:13:1274:13 | x | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:17:1274:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1274:17:1274:30 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:17:1274:31 | TryExpr | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1274:28:1274:29 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:9:1275:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1275:9:1275:22 | ...::Ok(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:9:1275:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1275:20:1275:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1279:46:1283:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1279:46:1283:5 | { ... } | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1279:46:1283:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:13:1280:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1280:13:1280:13 | x | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:17:1280:30 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1280:17:1280:30 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1280:28:1280:29 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:13:1281:13 | y | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:17:1281:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1281:17:1281:17 | x | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1281:17:1281:18 | TryExpr | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1282:9:1282:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1282:9:1282:22 | ...::Ok(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1282:9:1282:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1282:20:1282:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1286:40:1291:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1286:40:1291:5 | { ... } | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1286:40:1291:5 | { ... } | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:13:1287:13 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:13:1287:13 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1287:13:1287:13 | x | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:17:1287:42 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:17:1287:42 | ...::Ok(...) | T | {EXTERNAL LOCATION} | Result | +| main.rs:1287:17:1287:42 | ...::Ok(...) | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:28:1287:41 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1287:28:1287:41 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1287:39:1287:40 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:17 | x | | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:17 | x | T | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:17 | x | T.T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:18 | TryExpr | | {EXTERNAL LOCATION} | Result | +| main.rs:1289:17:1289:18 | TryExpr | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1289:17:1289:29 | ... .map(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1290:9:1290:22 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1290:9:1290:22 | ...::Ok(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1290:9:1290:22 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1290:20:1290:21 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:30:1294:34 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1294:30:1294:34 | input | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:30:1294:34 | input | T | main.rs:1294:20:1294:27 | T | +| main.rs:1294:69:1301:5 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1294:69:1301:5 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1294:69:1301:5 | { ... } | T | main.rs:1294:20:1294:27 | T | +| main.rs:1295:13:1295:17 | value | | main.rs:1294:20:1294:27 | T | +| main.rs:1295:21:1295:25 | input | | {EXTERNAL LOCATION} | Result | +| main.rs:1295:21:1295:25 | input | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1295:21:1295:25 | input | T | main.rs:1294:20:1294:27 | T | +| main.rs:1295:21:1295:26 | TryExpr | | main.rs:1294:20:1294:27 | T | +| main.rs:1296:22:1296:38 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:22:1296:38 | ...::Ok(...) | T | main.rs:1294:20:1294:27 | T | +| main.rs:1296:22:1299:10 | ... .and_then(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:33:1296:37 | value | | main.rs:1294:20:1294:27 | T | +| main.rs:1296:53:1299:9 | { ... } | | {EXTERNAL LOCATION} | Result | +| main.rs:1296:53:1299:9 | { ... } | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1297:22:1297:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1298:13:1298:34 | ...::Ok::<...>(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1298:13:1298:34 | ...::Ok::<...>(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1300:9:1300:23 | ...::Err(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1300:9:1300:23 | ...::Err(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1300:9:1300:23 | ...::Err(...) | T | main.rs:1294:20:1294:27 | T | +| main.rs:1300:21:1300:22 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1304:37:1304:52 | try_same_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1304:37:1304:52 | try_same_error(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1304:37:1304:52 | try_same_error(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1305:22:1305:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1308:37:1308:55 | try_convert_error(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1308:37:1308:55 | try_convert_error(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1308:37:1308:55 | try_convert_error(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1309:22:1309:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1312:37:1312:49 | try_chained(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1312:37:1312:49 | try_chained(...) | E | main.rs:1269:5:1270:14 | S2 | +| main.rs:1312:37:1312:49 | try_chained(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1313:22:1313:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1316:37:1316:63 | try_complex(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1316:37:1316:63 | try_complex(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:37:1316:63 | try_complex(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:49:1316:62 | ...::Ok(...) | | {EXTERNAL LOCATION} | Result | +| main.rs:1316:49:1316:62 | ...::Ok(...) | E | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:49:1316:62 | ...::Ok(...) | T | main.rs:1266:5:1267:14 | S1 | +| main.rs:1316:60:1316:61 | S1 | | main.rs:1266:5:1267:14 | S1 | +| main.rs:1317:22:1317:27 | "{:?}\\n" | | {EXTERNAL LOCATION} | str | +| main.rs:1324:13:1324:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1324:22:1324:22 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1325:13:1325:13 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1325:17:1325:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:13:1326:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:17:1326:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:17:1326:21 | ... + ... | | {EXTERNAL LOCATION} | i32 | +| main.rs:1326:21:1326:21 | y | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:13:1327:13 | z | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:17:1327:17 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1327:17:1327:23 | x.abs() | | {EXTERNAL LOCATION} | i32 | +| main.rs:1328:13:1328:13 | c | | {EXTERNAL LOCATION} | char | +| main.rs:1328:17:1328:19 | 'c' | | {EXTERNAL LOCATION} | char | +| main.rs:1329:13:1329:17 | hello | | {EXTERNAL LOCATION} | str | +| main.rs:1329:21:1329:27 | "Hello" | | {EXTERNAL LOCATION} | str | +| main.rs:1330:13:1330:13 | f | | {EXTERNAL LOCATION} | f64 | +| main.rs:1330:17:1330:24 | 123.0f64 | | {EXTERNAL LOCATION} | f64 | +| main.rs:1331:13:1331:13 | t | | {EXTERNAL LOCATION} | bool | +| main.rs:1331:17:1331:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1332:13:1332:13 | f | | {EXTERNAL LOCATION} | bool | +| main.rs:1332:17:1332:21 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:13:1339:13 | x | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:17:1339:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:17:1339:29 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1339:25:1339:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:13:1340:13 | y | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:17:1340:20 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:17:1340:29 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1340:25:1340:29 | false | | {EXTERNAL LOCATION} | bool | +| main.rs:1342:13:1342:17 | mut a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1343:13:1343:16 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1343:20:1343:21 | 34 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1343:20:1343:27 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1343:26:1343:27 | 33 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1344:12:1344:15 | cond | | {EXTERNAL LOCATION} | bool | +| main.rs:1345:17:1345:17 | z | | file://:0:0:0:0 | () | +| main.rs:1345:21:1345:27 | (...) | | file://:0:0:0:0 | () | +| main.rs:1345:22:1345:22 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1345:22:1345:26 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1345:26:1345:26 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1347:13:1347:13 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1347:13:1347:17 | ... = ... | | file://:0:0:0:0 | () | +| main.rs:1347:17:1347:17 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1349:9:1349:9 | a | | {EXTERNAL LOCATION} | i32 | +| main.rs:1363:30:1365:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1364:13:1364:31 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1364:23:1364:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1364:23:1364:23 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1364:29:1364:29 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1364:29:1364:29 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1371:16:1371:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1371:22:1371:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1371:41:1376:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1372:13:1375:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:20:1373:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:20:1373:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1373:20:1373:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1373:29:1373:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1373:29:1373:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:20:1374:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1374:20:1374:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:20:1374:33 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1374:29:1374:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1374:29:1374:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1381:23:1381:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1381:23:1381:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1381:34:1381:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:13:1382:16 | self | | file://:0:0:0:0 | & | +| main.rs:1382:13:1382:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:13:1382:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1382:13:1382:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1382:23:1382:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1382:23:1382:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1383:13:1383:16 | self | | file://:0:0:0:0 | & | +| main.rs:1383:13:1383:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1383:13:1383:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1383:13:1383:27 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1383:23:1383:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1383:23:1383:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1389:16:1389:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1389:22:1389:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1389:41:1394:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1390:13:1393:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:20:1391:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:20:1391:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1391:20:1391:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1391:29:1391:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1391:29:1391:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:20:1392:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1392:20:1392:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:20:1392:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1392:29:1392:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1392:29:1392:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1399:23:1399:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1399:23:1399:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1399:34:1399:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1400:13:1400:16 | self | | file://:0:0:0:0 | & | +| main.rs:1400:13:1400:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1400:13:1400:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1400:13:1400:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1400:23:1400:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1400:23:1400:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1401:13:1401:16 | self | | file://:0:0:0:0 | & | +| main.rs:1401:13:1401:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1401:13:1401:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1401:13:1401:27 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1401:23:1401:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1401:23:1401:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1407:16:1407:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1407:22:1407:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1407:41:1412:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1408:13:1411:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1409:20:1409:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1409:20:1409:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1409:20:1409:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1409:29:1409:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1409:29:1409:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1410:20:1410:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1410:20:1410:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1410:20:1410:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1410:29:1410:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1410:29:1410:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1416:23:1416:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1416:23:1416:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1416:34:1416:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1417:13:1417:16 | self | | file://:0:0:0:0 | & | +| main.rs:1417:13:1417:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1417:13:1417:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1417:13:1417:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1417:23:1417:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1417:23:1417:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1418:13:1418:16 | self | | file://:0:0:0:0 | & | +| main.rs:1418:13:1418:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1418:13:1418:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1418:13:1418:27 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1418:23:1418:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1418:23:1418:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1424:16:1424:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1424:22:1424:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1424:41:1429:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1425:13:1428:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1426:20:1426:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1426:20:1426:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1426:20:1426:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1426:29:1426:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1426:29:1426:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1427:20:1427:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1427:20:1427:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1427:20:1427:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1427:29:1427:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1427:29:1427:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1433:23:1433:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1433:23:1433:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1433:34:1433:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1434:13:1434:16 | self | | file://:0:0:0:0 | & | +| main.rs:1434:13:1434:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1434:13:1434:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1434:13:1434:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1434:23:1434:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1434:23:1434:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1435:13:1435:16 | self | | file://:0:0:0:0 | & | +| main.rs:1435:13:1435:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1435:13:1435:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1435:13:1435:27 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1435:23:1435:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1435:23:1435:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1441:16:1441:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1441:22:1441:24 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1441:41:1446:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1442:13:1445:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1443:20:1443:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1443:20:1443:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1443:20:1443:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1443:29:1443:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1443:29:1443:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1444:20:1444:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1444:20:1444:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1444:20:1444:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1444:29:1444:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1444:29:1444:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1450:23:1450:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1450:23:1450:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1450:34:1450:36 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1451:13:1451:16 | self | | file://:0:0:0:0 | & | -| main.rs:1451:13:1451:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1451:13:1451:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1451:13:1451:27 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1451:23:1451:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1451:23:1451:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1457:16:1457:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1457:22:1457:24 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1457:41:1462:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1458:13:1461:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1459:20:1459:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1459:20:1459:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1459:20:1459:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1459:29:1459:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1459:29:1459:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1460:20:1460:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1460:20:1460:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1460:20:1460:33 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1460:29:1460:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1460:29:1460:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1467:23:1467:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1467:23:1467:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1467:34:1467:36 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1451:13:1451:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1451:13:1451:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1451:13:1451:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1451:23:1451:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1451:23:1451:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1452:13:1452:16 | self | | file://:0:0:0:0 | & | +| main.rs:1452:13:1452:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1452:13:1452:18 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1452:13:1452:27 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1452:23:1452:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1452:23:1452:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1458:19:1458:22 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1458:25:1458:27 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1458:44:1463:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1459:13:1462:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1460:20:1460:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1460:20:1460:25 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1460:20:1460:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1460:29:1460:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1460:29:1460:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1461:20:1461:23 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1461:20:1461:25 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1461:20:1461:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1461:29:1461:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1461:29:1461:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1467:26:1467:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1467:26:1467:34 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1467:37:1467:39 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:13:1468:16 | self | | file://:0:0:0:0 | & | -| main.rs:1468:13:1468:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1468:13:1468:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:13:1468:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1468:13:1468:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1468:23:1468:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1468:13:1468:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1468:23:1468:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1468:23:1468:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1469:13:1469:16 | self | | file://:0:0:0:0 | & | -| main.rs:1469:13:1469:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1469:13:1469:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1469:13:1469:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1469:13:1469:27 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1469:23:1469:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1469:13:1469:27 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1469:23:1469:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1469:23:1469:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1475:16:1475:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1475:22:1475:24 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1475:41:1480:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1476:13:1479:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1477:20:1477:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1475:18:1475:21 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1475:24:1475:26 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1475:43:1480:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1476:13:1479:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1477:20:1477:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1477:20:1477:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1477:20:1477:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1477:29:1477:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1477:20:1477:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1477:29:1477:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1477:29:1477:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1478:20:1478:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1478:20:1478:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1478:20:1478:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1478:20:1478:33 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1478:29:1478:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1478:20:1478:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1478:29:1478:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1478:29:1478:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1484:23:1484:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1484:23:1484:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1484:34:1484:36 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1484:25:1484:33 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1484:25:1484:33 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1484:36:1484:38 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1485:13:1485:16 | self | | file://:0:0:0:0 | & | -| main.rs:1485:13:1485:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1485:13:1485:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1485:13:1485:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1485:13:1485:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1485:23:1485:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1485:13:1485:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1485:23:1485:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1485:23:1485:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1486:13:1486:16 | self | | file://:0:0:0:0 | & | -| main.rs:1486:13:1486:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1486:13:1486:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1486:13:1486:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1486:13:1486:27 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1486:23:1486:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1486:13:1486:27 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1486:23:1486:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1486:23:1486:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1492:16:1492:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1492:22:1492:24 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1492:41:1497:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1493:13:1496:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1494:20:1494:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1492:19:1492:22 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1492:25:1492:27 | rhs | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1492:44:1497:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1493:13:1496:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1494:20:1494:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1494:20:1494:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:20:1494:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1494:29:1494:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1494:20:1494:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1494:29:1494:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1494:29:1494:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1495:20:1495:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1495:20:1495:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1495:20:1495:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1495:20:1495:33 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1495:29:1495:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1495:20:1495:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1495:29:1495:31 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1495:29:1495:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1501:23:1501:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1501:23:1501:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1501:34:1501:36 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1501:26:1501:34 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1501:26:1501:34 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1501:37:1501:39 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1502:13:1502:16 | self | | file://:0:0:0:0 | & | -| main.rs:1502:13:1502:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1502:13:1502:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1502:13:1502:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1502:13:1502:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1502:23:1502:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1502:13:1502:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1502:23:1502:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1502:23:1502:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | | main.rs:1503:13:1503:16 | self | | file://:0:0:0:0 | & | -| main.rs:1503:13:1503:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1503:13:1503:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1503:13:1503:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1503:13:1503:27 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1503:23:1503:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1503:13:1503:27 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1503:23:1503:25 | rhs | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1503:23:1503:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1509:16:1509:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1509:22:1509:24 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1509:41:1514:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1510:13:1513:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1511:20:1511:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1509:16:1509:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1509:22:1509:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1509:40:1514:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1510:13:1513:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1511:20:1511:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1511:20:1511:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1511:20:1511:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1511:29:1511:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1511:29:1511:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1512:20:1512:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1511:20:1511:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1511:30:1511:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1512:20:1512:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1512:20:1512:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1512:20:1512:33 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1512:29:1512:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1512:29:1512:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1512:20:1512:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1512:30:1512:32 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1518:23:1518:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1518:23:1518:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1518:34:1518:36 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1518:23:1518:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1518:34:1518:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1519:13:1519:16 | self | | file://:0:0:0:0 | & | -| main.rs:1519:13:1519:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1519:13:1519:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1519:13:1519:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1519:13:1519:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1519:23:1519:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1519:23:1519:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1519:13:1519:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1519:24:1519:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1520:13:1520:16 | self | | file://:0:0:0:0 | & | -| main.rs:1520:13:1520:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1520:13:1520:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1520:13:1520:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1520:13:1520:27 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1520:23:1520:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1520:23:1520:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1526:19:1526:22 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1526:25:1526:27 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1526:44:1531:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1527:13:1530:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1528:20:1528:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1520:13:1520:26 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1520:24:1520:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1526:16:1526:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1526:22:1526:24 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1526:40:1531:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1527:13:1530:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1528:20:1528:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1528:20:1528:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:20:1528:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1528:29:1528:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1528:29:1528:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:20:1529:23 | self | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1528:20:1528:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1528:30:1528:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1529:20:1529:23 | self | | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1529:20:1529:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:20:1529:33 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1529:29:1529:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1529:29:1529:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1535:26:1535:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1535:26:1535:34 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1535:37:1535:39 | rhs | | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1529:20:1529:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1529:30:1529:32 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1535:23:1535:31 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1535:23:1535:31 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1535:34:1535:36 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1536:13:1536:16 | self | | file://:0:0:0:0 | & | -| main.rs:1536:13:1536:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1536:13:1536:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1536:13:1536:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1536:13:1536:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1536:23:1536:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1536:23:1536:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1536:13:1536:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1536:24:1536:26 | rhs | | {EXTERNAL LOCATION} | u32 | | main.rs:1537:13:1537:16 | self | | file://:0:0:0:0 | & | -| main.rs:1537:13:1537:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | +| main.rs:1537:13:1537:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | | main.rs:1537:13:1537:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1537:13:1537:27 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1537:23:1537:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1537:23:1537:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1543:18:1543:21 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1543:24:1543:26 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1543:43:1548:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1544:13:1547:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1545:20:1545:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1545:20:1545:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:20:1545:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1545:29:1545:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1545:29:1545:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:20:1546:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1546:20:1546:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:20:1546:33 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1546:29:1546:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1546:29:1546:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1552:25:1552:33 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1552:25:1552:33 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1552:36:1552:38 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1553:13:1553:16 | self | | file://:0:0:0:0 | & | -| main.rs:1553:13:1553:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1553:13:1553:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1553:13:1553:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1553:23:1553:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1553:23:1553:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:13:1554:16 | self | | file://:0:0:0:0 | & | -| main.rs:1554:13:1554:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1554:13:1554:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1554:13:1554:27 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1554:23:1554:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1554:23:1554:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1560:19:1560:22 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1560:25:1560:27 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1560:44:1565:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1561:13:1564:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1562:20:1562:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1562:20:1562:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:20:1562:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1562:29:1562:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1562:29:1562:33 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:20:1563:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1563:20:1563:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:20:1563:33 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1563:29:1563:31 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1563:29:1563:33 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1569:26:1569:34 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1569:26:1569:34 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1569:37:1569:39 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1570:13:1570:16 | self | | file://:0:0:0:0 | & | -| main.rs:1570:13:1570:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1570:13:1570:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1570:13:1570:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1570:23:1570:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1570:23:1570:27 | rhs.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:13:1571:16 | self | | file://:0:0:0:0 | & | -| main.rs:1571:13:1571:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1571:13:1571:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1571:13:1571:27 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1571:23:1571:25 | rhs | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1571:23:1571:27 | rhs.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1577:16:1577:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1577:22:1577:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1577:40:1582:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1578:13:1581:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1579:20:1579:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1579:20:1579:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1579:20:1579:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1579:30:1579:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1580:20:1580:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1580:20:1580:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:20:1580:32 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1580:30:1580:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1586:23:1586:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1586:23:1586:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1586:34:1586:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1587:13:1587:16 | self | | file://:0:0:0:0 | & | -| main.rs:1587:13:1587:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1587:13:1587:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1587:13:1587:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1587:24:1587:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1588:13:1588:16 | self | | file://:0:0:0:0 | & | -| main.rs:1588:13:1588:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1588:13:1588:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1588:13:1588:26 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1588:24:1588:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1594:16:1594:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1594:22:1594:24 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1594:40:1599:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1595:13:1598:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1596:20:1596:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1596:20:1596:25 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:20:1596:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1596:30:1596:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1597:20:1597:23 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1597:20:1597:25 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:20:1597:32 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1597:30:1597:32 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1603:23:1603:31 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1603:23:1603:31 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1603:34:1603:36 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1604:13:1604:16 | self | | file://:0:0:0:0 | & | -| main.rs:1604:13:1604:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1604:13:1604:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1604:13:1604:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1604:24:1604:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1605:13:1605:16 | self | | file://:0:0:0:0 | & | -| main.rs:1605:13:1605:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1605:13:1605:18 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1605:13:1605:26 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1605:24:1605:26 | rhs | | {EXTERNAL LOCATION} | u32 | -| main.rs:1611:16:1611:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1611:30:1616:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1612:13:1615:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1613:20:1613:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1613:21:1613:24 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1613:21:1613:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1614:20:1614:26 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1614:21:1614:24 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1614:21:1614:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1621:16:1621:19 | SelfParam | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1621:30:1626:9 | { ... } | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1622:13:1625:13 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1623:20:1623:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1623:21:1623:24 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1623:21:1623:26 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:20:1624:26 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1624:21:1624:24 | self | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1624:21:1624:26 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1630:15:1630:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1630:15:1630:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1630:22:1630:26 | other | | file://:0:0:0:0 | & | -| main.rs:1630:22:1630:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1630:44:1632:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1631:13:1631:16 | self | | file://:0:0:0:0 | & | -| main.rs:1631:13:1631:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1631:13:1631:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:13:1631:29 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1631:13:1631:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1631:23:1631:27 | other | | file://:0:0:0:0 | & | -| main.rs:1631:23:1631:27 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1631:23:1631:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:34:1631:37 | self | | file://:0:0:0:0 | & | -| main.rs:1631:34:1631:37 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1631:34:1631:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1631:34:1631:50 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1631:44:1631:48 | other | | file://:0:0:0:0 | & | -| main.rs:1631:44:1631:48 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1631:44:1631:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1634:15:1634:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1634:15:1634:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1634:22:1634:26 | other | | file://:0:0:0:0 | & | -| main.rs:1634:22:1634:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1634:44:1636:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1635:13:1635:16 | self | | file://:0:0:0:0 | & | -| main.rs:1635:13:1635:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1635:13:1635:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1635:13:1635:29 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1635:13:1635:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1635:23:1635:27 | other | | file://:0:0:0:0 | & | -| main.rs:1635:23:1635:27 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1635:23:1635:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1635:34:1635:37 | self | | file://:0:0:0:0 | & | -| main.rs:1635:34:1635:37 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1635:34:1635:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1635:34:1635:50 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1635:44:1635:48 | other | | file://:0:0:0:0 | & | -| main.rs:1635:44:1635:48 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1635:44:1635:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1640:24:1640:28 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1640:24:1640:28 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1640:31:1640:35 | other | | file://:0:0:0:0 | & | -| main.rs:1640:31:1640:35 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1640:75:1642:9 | { ... } | | {EXTERNAL LOCATION} | Option | -| main.rs:1640:75:1642:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1641:13:1641:29 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:13:1641:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:1641:13:1641:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | -| main.rs:1641:14:1641:17 | self | | file://:0:0:0:0 | & | -| main.rs:1641:14:1641:17 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1641:14:1641:19 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:14:1641:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:23:1641:26 | self | | file://:0:0:0:0 | & | -| main.rs:1641:23:1641:26 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1641:23:1641:28 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:43:1641:62 | &... | | file://:0:0:0:0 | & | -| main.rs:1641:43:1641:62 | &... | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:44:1641:62 | (...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:45:1641:49 | other | | file://:0:0:0:0 | & | -| main.rs:1641:45:1641:49 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1641:45:1641:51 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:45:1641:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1641:55:1641:59 | other | | file://:0:0:0:0 | & | -| main.rs:1641:55:1641:59 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1641:55:1641:61 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1644:15:1644:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1644:15:1644:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1644:22:1644:26 | other | | file://:0:0:0:0 | & | -| main.rs:1644:22:1644:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1644:44:1646:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1645:13:1645:16 | self | | file://:0:0:0:0 | & | -| main.rs:1645:13:1645:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1645:13:1645:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1645:13:1645:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1645:13:1645:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1645:22:1645:26 | other | | file://:0:0:0:0 | & | -| main.rs:1645:22:1645:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1645:22:1645:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1645:33:1645:36 | self | | file://:0:0:0:0 | & | -| main.rs:1645:33:1645:36 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1645:33:1645:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1645:33:1645:48 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1645:42:1645:46 | other | | file://:0:0:0:0 | & | -| main.rs:1645:42:1645:46 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1645:42:1645:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1648:15:1648:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1648:15:1648:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1648:22:1648:26 | other | | file://:0:0:0:0 | & | -| main.rs:1648:22:1648:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1648:44:1650:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1649:13:1649:16 | self | | file://:0:0:0:0 | & | -| main.rs:1649:13:1649:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1649:13:1649:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1649:13:1649:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1649:13:1649:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1649:23:1649:27 | other | | file://:0:0:0:0 | & | -| main.rs:1649:23:1649:27 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1649:23:1649:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1649:34:1649:37 | self | | file://:0:0:0:0 | & | -| main.rs:1649:34:1649:37 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1649:34:1649:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1649:34:1649:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1649:44:1649:48 | other | | file://:0:0:0:0 | & | -| main.rs:1649:44:1649:48 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1649:44:1649:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1652:15:1652:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1652:15:1652:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1652:22:1652:26 | other | | file://:0:0:0:0 | & | -| main.rs:1652:22:1652:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1652:44:1654:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1653:13:1653:16 | self | | file://:0:0:0:0 | & | -| main.rs:1653:13:1653:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1653:13:1653:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1653:13:1653:28 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1653:13:1653:48 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1653:22:1653:26 | other | | file://:0:0:0:0 | & | -| main.rs:1653:22:1653:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1653:22:1653:28 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1653:33:1653:36 | self | | file://:0:0:0:0 | & | -| main.rs:1653:33:1653:36 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1653:33:1653:38 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1653:33:1653:48 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1653:42:1653:46 | other | | file://:0:0:0:0 | & | -| main.rs:1653:42:1653:46 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1653:42:1653:48 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1656:15:1656:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1656:15:1656:19 | SelfParam | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1656:22:1656:26 | other | | file://:0:0:0:0 | & | -| main.rs:1656:22:1656:26 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1656:44:1658:9 | { ... } | | {EXTERNAL LOCATION} | bool | -| main.rs:1657:13:1657:16 | self | | file://:0:0:0:0 | & | -| main.rs:1657:13:1657:16 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1657:13:1657:18 | self.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:13:1657:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1657:13:1657:50 | ... && ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1657:23:1657:27 | other | | file://:0:0:0:0 | & | -| main.rs:1657:23:1657:27 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1657:23:1657:29 | other.x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:34:1657:37 | self | | file://:0:0:0:0 | & | -| main.rs:1657:34:1657:37 | self | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1657:34:1657:39 | self.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1657:34:1657:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1657:44:1657:48 | other | | file://:0:0:0:0 | & | -| main.rs:1657:44:1657:48 | other | &T | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1657:44:1657:50 | other.y | | {EXTERNAL LOCATION} | i64 | -| main.rs:1664:13:1664:18 | i64_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1664:22:1664:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1664:23:1664:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1664:23:1664:34 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1664:31:1664:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:13:1665:18 | i64_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1665:22:1665:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1665:23:1665:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1665:23:1665:34 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1665:31:1665:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1666:13:1666:18 | i64_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1666:22:1666:34 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1666:23:1666:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1666:23:1666:33 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1666:30:1666:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1667:13:1667:18 | i64_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1667:22:1667:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1667:23:1667:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1667:23:1667:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1667:31:1667:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1668:13:1668:18 | i64_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1668:22:1668:35 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1668:23:1668:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1668:23:1668:34 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1668:30:1668:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1669:13:1669:18 | i64_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1669:22:1669:37 | (...) | | {EXTERNAL LOCATION} | bool | -| main.rs:1669:23:1669:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1669:23:1669:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1669:32:1669:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1672:13:1672:19 | i64_add | | {EXTERNAL LOCATION} | i64 | -| main.rs:1672:23:1672:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1672:23:1672:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1672:31:1672:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:13:1673:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:23:1673:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:23:1673:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1673:31:1673:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:13:1674:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:23:1674:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:23:1674:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1674:31:1674:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:13:1675:19 | i64_div | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:23:1675:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:23:1675:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1675:31:1675:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:13:1676:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:23:1676:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:23:1676:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1676:31:1676:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1679:13:1679:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1679:34:1679:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1680:9:1680:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1680:9:1680:31 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1680:27:1680:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:13:1682:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1682:34:1682:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1683:9:1683:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1683:9:1683:31 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1683:27:1683:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1685:13:1685:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1685:34:1685:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1686:9:1686:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1686:9:1686:31 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1686:27:1686:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1688:13:1688:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1688:34:1688:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1689:9:1689:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1689:9:1689:31 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1689:27:1689:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:13:1691:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1691:34:1691:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:9:1692:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1692:9:1692:31 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1692:27:1692:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1695:13:1695:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | -| main.rs:1695:26:1695:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1695:26:1695:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1695:34:1695:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1696:13:1696:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1696:25:1696:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1696:25:1696:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1696:33:1696:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1697:13:1697:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | -| main.rs:1697:26:1697:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1697:26:1697:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1697:34:1697:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1698:13:1698:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | -| main.rs:1698:23:1698:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1698:23:1698:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1698:32:1698:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:13:1699:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:23:1699:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:23:1699:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1699:32:1699:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1702:13:1702:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1702:37:1702:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1703:9:1703:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1703:9:1703:34 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1703:30:1703:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1705:13:1705:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1705:36:1705:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1706:9:1706:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1706:9:1706:33 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1706:29:1706:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:13:1708:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1708:37:1708:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:9:1709:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1709:9:1709:34 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1709:30:1709:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1711:13:1711:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1711:34:1711:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1712:9:1712:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1712:9:1712:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1712:28:1712:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1714:13:1714:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1714:34:1714:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1715:9:1715:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | -| main.rs:1715:9:1715:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1715:28:1715:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1717:13:1717:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | -| main.rs:1717:23:1717:28 | - ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1717:24:1717:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1718:13:1718:19 | i64_not | | {EXTERNAL LOCATION} | i64 | -| main.rs:1718:23:1718:28 | ! ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1718:24:1718:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1721:13:1721:14 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1721:18:1721:36 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1721:28:1721:28 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1721:28:1721:28 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1721:34:1721:34 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1721:34:1721:34 | 2 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1722:13:1722:14 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1722:18:1722:36 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1722:28:1722:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1722:28:1722:28 | 3 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1722:34:1722:34 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1722:34:1722:34 | 4 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1725:13:1725:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | -| main.rs:1725:23:1725:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1725:23:1725:30 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1725:29:1725:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1726:13:1726:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | -| main.rs:1726:23:1726:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1726:23:1726:30 | ... != ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1726:29:1726:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1727:13:1727:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:23:1727:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1727:23:1727:29 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1727:28:1727:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1728:13:1728:19 | vec2_le | | {EXTERNAL LOCATION} | bool | -| main.rs:1728:23:1728:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1728:23:1728:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1728:29:1728:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1729:13:1729:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | -| main.rs:1729:23:1729:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1729:23:1729:29 | ... > ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1729:28:1729:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1730:13:1730:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | -| main.rs:1730:23:1730:24 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1730:23:1730:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1730:29:1730:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1733:13:1733:20 | vec2_add | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1733:24:1733:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1733:24:1733:30 | ... + ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1733:29:1733:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1734:13:1734:20 | vec2_sub | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1734:24:1734:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1734:24:1734:30 | ... - ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1734:29:1734:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1735:13:1735:20 | vec2_mul | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1735:24:1735:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1735:24:1735:30 | ... * ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1735:29:1735:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1736:13:1736:20 | vec2_div | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1736:24:1736:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1736:24:1736:30 | ... / ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1736:29:1736:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1737:13:1737:20 | vec2_rem | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1737:24:1737:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1737:24:1737:30 | ... % ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1737:29:1737:30 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1740:13:1740:31 | mut vec2_add_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1740:35:1740:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1741:9:1741:23 | vec2_add_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1741:9:1741:29 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:1741:28:1741:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1743:13:1743:31 | mut vec2_sub_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1743:35:1743:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1744:9:1744:23 | vec2_sub_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1744:9:1744:29 | ... -= ... | | file://:0:0:0:0 | () | -| main.rs:1744:28:1744:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1746:13:1746:31 | mut vec2_mul_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1746:35:1746:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1747:9:1747:23 | vec2_mul_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1747:9:1747:29 | ... *= ... | | file://:0:0:0:0 | () | -| main.rs:1747:28:1747:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1749:13:1749:31 | mut vec2_div_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1749:35:1749:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1750:9:1750:23 | vec2_div_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1750:9:1750:29 | ... /= ... | | file://:0:0:0:0 | () | -| main.rs:1750:28:1750:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1752:13:1752:31 | mut vec2_rem_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1752:35:1752:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1753:9:1753:23 | vec2_rem_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1753:9:1753:29 | ... %= ... | | file://:0:0:0:0 | () | -| main.rs:1753:28:1753:29 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1756:13:1756:23 | vec2_bitand | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1756:27:1756:28 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1756:27:1756:33 | ... & ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1756:32:1756:33 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1757:13:1757:22 | vec2_bitor | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1757:26:1757:27 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1757:26:1757:32 | ... \| ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1757:31:1757:32 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1758:13:1758:23 | vec2_bitxor | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1758:27:1758:28 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1758:27:1758:33 | ... ^ ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1758:32:1758:33 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1759:13:1759:20 | vec2_shl | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1759:24:1759:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1759:24:1759:33 | ... << ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1759:30:1759:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1760:13:1760:20 | vec2_shr | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1760:24:1760:25 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1760:24:1760:33 | ... >> ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1760:30:1760:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1763:13:1763:34 | mut vec2_bitand_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1763:38:1763:39 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1764:9:1764:26 | vec2_bitand_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1764:9:1764:32 | ... &= ... | | file://:0:0:0:0 | () | -| main.rs:1764:31:1764:32 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1766:13:1766:33 | mut vec2_bitor_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1766:37:1766:38 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1767:9:1767:25 | vec2_bitor_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1767:9:1767:31 | ... \|= ... | | file://:0:0:0:0 | () | -| main.rs:1767:30:1767:31 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1769:13:1769:34 | mut vec2_bitxor_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1769:38:1769:39 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1770:9:1770:26 | vec2_bitxor_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1770:9:1770:32 | ... ^= ... | | file://:0:0:0:0 | () | -| main.rs:1770:31:1770:32 | v2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1772:13:1772:31 | mut vec2_shl_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1772:35:1772:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1773:9:1773:23 | vec2_shl_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1773:9:1773:32 | ... <<= ... | | file://:0:0:0:0 | () | -| main.rs:1773:29:1773:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1775:13:1775:31 | mut vec2_shr_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1775:35:1775:36 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1776:9:1776:23 | vec2_shr_assign | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1776:9:1776:32 | ... >>= ... | | file://:0:0:0:0 | () | -| main.rs:1776:29:1776:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:1779:13:1779:20 | vec2_neg | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1779:24:1779:26 | - ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1779:25:1779:26 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1780:13:1780:20 | vec2_not | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1780:24:1780:26 | ! ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1780:25:1780:26 | v1 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1783:13:1783:24 | default_vec2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1783:28:1783:45 | ...::default(...) | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1784:13:1784:26 | vec2_zero_plus | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1784:30:1784:48 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1784:30:1784:63 | ... + ... | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1784:40:1784:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:40:1784:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1784:46:1784:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1784:46:1784:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1784:52:1784:63 | default_vec2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1788:13:1788:24 | default_vec2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1788:28:1788:45 | ...::default(...) | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1789:13:1789:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | -| main.rs:1789:30:1789:48 | Vec2 {...} | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1789:30:1789:64 | ... == ... | | {EXTERNAL LOCATION} | bool | -| main.rs:1789:40:1789:40 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1789:40:1789:40 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:46:1789:46 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1789:46:1789:46 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1789:53:1789:64 | default_vec2 | | main.rs:1424:5:1429:5 | Vec2 | -| main.rs:1799:18:1799:21 | SelfParam | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1802:25:1804:5 | { ... } | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1803:9:1803:10 | S1 | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1806:41:1808:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1806:41:1808:5 | { ... } | | main.rs:1806:16:1806:39 | ImplTraitTypeRepr | -| main.rs:1806:41:1808:5 | { ... } | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1807:9:1807:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1807:9:1807:20 | { ... } | | main.rs:1806:16:1806:39 | ImplTraitTypeRepr | -| main.rs:1807:9:1807:20 | { ... } | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1807:17:1807:18 | S1 | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1816:13:1816:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | -| main.rs:1816:13:1816:42 | SelfParam | Ptr | file://:0:0:0:0 | & | -| main.rs:1816:13:1816:42 | SelfParam | Ptr.&T | main.rs:1810:5:1810:14 | S2 | -| main.rs:1817:13:1817:15 | _cx | | file://:0:0:0:0 | & | -| main.rs:1817:13:1817:15 | _cx | &T | {EXTERNAL LOCATION} | Context | -| main.rs:1818:44:1820:9 | { ... } | | {EXTERNAL LOCATION} | Poll | -| main.rs:1818:44:1820:9 | { ... } | T | main.rs:1796:5:1796:14 | S1 | -| main.rs:1819:13:1819:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | -| main.rs:1819:13:1819:38 | ...::Ready(...) | T | main.rs:1796:5:1796:14 | S1 | -| main.rs:1819:36:1819:37 | S1 | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1823:41:1825:5 | { ... } | | main.rs:1810:5:1810:14 | S2 | -| main.rs:1823:41:1825:5 | { ... } | | main.rs:1823:16:1823:39 | ImplTraitTypeRepr | -| main.rs:1824:9:1824:10 | S2 | | main.rs:1810:5:1810:14 | S2 | -| main.rs:1824:9:1824:10 | S2 | | main.rs:1823:16:1823:39 | ImplTraitTypeRepr | -| main.rs:1828:9:1828:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1828:9:1828:12 | f1(...) | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1828:9:1828:18 | await ... | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1829:9:1829:12 | f2(...) | | main.rs:1806:16:1806:39 | ImplTraitTypeRepr | -| main.rs:1829:9:1829:18 | await ... | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1830:9:1830:12 | f3(...) | | main.rs:1823:16:1823:39 | ImplTraitTypeRepr | -| main.rs:1830:9:1830:18 | await ... | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1831:9:1831:10 | S2 | | main.rs:1810:5:1810:14 | S2 | -| main.rs:1831:9:1831:16 | await S2 | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1832:13:1832:13 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1832:13:1832:13 | b | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1832:17:1832:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1832:17:1832:28 | { ... } | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1832:25:1832:26 | S1 | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1833:9:1833:9 | b | | {EXTERNAL LOCATION} | trait Future | -| main.rs:1833:9:1833:9 | b | Output | main.rs:1796:5:1796:14 | S1 | -| main.rs:1833:9:1833:15 | await b | | main.rs:1796:5:1796:14 | S1 | -| main.rs:1842:15:1842:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1842:15:1842:19 | SelfParam | &T | main.rs:1841:5:1843:5 | Self [trait Trait1] | -| main.rs:1846:15:1846:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1846:15:1846:19 | SelfParam | &T | main.rs:1845:5:1847:5 | Self [trait Trait2] | -| main.rs:1850:15:1850:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1850:15:1850:19 | SelfParam | &T | main.rs:1838:5:1838:14 | S1 | -| main.rs:1854:15:1854:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1854:15:1854:19 | SelfParam | &T | main.rs:1838:5:1838:14 | S1 | -| main.rs:1857:37:1859:5 | { ... } | | main.rs:1838:5:1838:14 | S1 | -| main.rs:1857:37:1859:5 | { ... } | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1858:9:1858:10 | S1 | | main.rs:1838:5:1838:14 | S1 | -| main.rs:1858:9:1858:10 | S1 | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1862:18:1862:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1862:18:1862:22 | SelfParam | &T | main.rs:1861:5:1863:5 | Self [trait MyTrait] | -| main.rs:1866:18:1866:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1866:18:1866:22 | SelfParam | &T | main.rs:1838:5:1838:14 | S1 | -| main.rs:1866:31:1868:9 | { ... } | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1867:13:1867:14 | S2 | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1871:45:1873:5 | { ... } | | main.rs:1838:5:1838:14 | S1 | -| main.rs:1871:45:1873:5 | { ... } | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1872:9:1872:10 | S1 | | main.rs:1838:5:1838:14 | S1 | -| main.rs:1872:9:1872:10 | S1 | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1875:41:1875:41 | t | | main.rs:1875:26:1875:38 | B | -| main.rs:1875:52:1877:5 | { ... } | | main.rs:1875:23:1875:23 | A | -| main.rs:1876:9:1876:9 | t | | main.rs:1875:26:1875:38 | B | -| main.rs:1876:9:1876:17 | t.get_a() | | main.rs:1875:23:1875:23 | A | -| main.rs:1879:26:1879:26 | t | | main.rs:1879:29:1879:43 | ImplTraitTypeRepr | -| main.rs:1879:51:1881:5 | { ... } | | main.rs:1879:23:1879:23 | A | -| main.rs:1880:9:1880:9 | t | | main.rs:1879:29:1879:43 | ImplTraitTypeRepr | -| main.rs:1880:9:1880:17 | t.get_a() | | main.rs:1879:23:1879:23 | A | -| main.rs:1884:13:1884:13 | x | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1884:17:1884:20 | f1(...) | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1885:9:1885:9 | x | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1886:9:1886:9 | x | | main.rs:1857:16:1857:35 | ImplTraitTypeRepr | -| main.rs:1887:13:1887:13 | a | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1887:17:1887:32 | get_a_my_trait(...) | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1888:13:1888:13 | b | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1888:17:1888:33 | uses_my_trait1(...) | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1888:32:1888:32 | a | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1889:13:1889:13 | a | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1889:17:1889:32 | get_a_my_trait(...) | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1890:13:1890:13 | c | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1890:17:1890:33 | uses_my_trait2(...) | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1890:32:1890:32 | a | | main.rs:1871:28:1871:43 | ImplTraitTypeRepr | -| main.rs:1891:13:1891:13 | d | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1891:17:1891:34 | uses_my_trait2(...) | | main.rs:1839:5:1839:14 | S2 | -| main.rs:1891:32:1891:33 | S1 | | main.rs:1838:5:1838:14 | S1 | -| main.rs:1902:16:1902:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1902:16:1902:20 | SelfParam | &T | main.rs:1898:5:1899:13 | S | -| main.rs:1902:31:1904:9 | { ... } | | main.rs:1898:5:1899:13 | S | -| main.rs:1903:13:1903:13 | S | | main.rs:1898:5:1899:13 | S | -| main.rs:1913:26:1915:9 | { ... } | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1913:26:1915:9 | { ... } | T | main.rs:1912:10:1912:10 | T | -| main.rs:1914:13:1914:38 | MyVec {...} | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1914:13:1914:38 | MyVec {...} | T | main.rs:1912:10:1912:10 | T | -| main.rs:1914:27:1914:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:1914:27:1914:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:1914:27:1914:36 | ...::new(...) | T | main.rs:1912:10:1912:10 | T | -| main.rs:1917:17:1917:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1917:17:1917:25 | SelfParam | &T | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1917:17:1917:25 | SelfParam | &T.T | main.rs:1912:10:1912:10 | T | -| main.rs:1917:28:1917:32 | value | | main.rs:1912:10:1912:10 | T | -| main.rs:1918:13:1918:16 | self | | file://:0:0:0:0 | & | -| main.rs:1918:13:1918:16 | self | &T | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1918:13:1918:16 | self | &T.T | main.rs:1912:10:1912:10 | T | -| main.rs:1918:13:1918:21 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:1918:13:1918:21 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:1918:13:1918:21 | self.data | T | main.rs:1912:10:1912:10 | T | -| main.rs:1918:28:1918:32 | value | | main.rs:1912:10:1912:10 | T | -| main.rs:1926:18:1926:22 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1926:18:1926:22 | SelfParam | &T | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1926:18:1926:22 | SelfParam | &T.T | main.rs:1922:10:1922:10 | T | -| main.rs:1926:25:1926:29 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:1926:56:1928:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:1926:56:1928:9 | { ... } | &T | main.rs:1922:10:1922:10 | T | -| main.rs:1927:13:1927:29 | &... | | file://:0:0:0:0 | & | -| main.rs:1927:13:1927:29 | &... | &T | main.rs:1922:10:1922:10 | T | -| main.rs:1927:14:1927:17 | self | | file://:0:0:0:0 | & | -| main.rs:1927:14:1927:17 | self | &T | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1927:14:1927:17 | self | &T.T | main.rs:1922:10:1922:10 | T | -| main.rs:1927:14:1927:22 | self.data | | {EXTERNAL LOCATION} | Vec | -| main.rs:1927:14:1927:22 | self.data | A | {EXTERNAL LOCATION} | Global | -| main.rs:1927:14:1927:22 | self.data | T | main.rs:1922:10:1922:10 | T | -| main.rs:1927:14:1927:29 | ...[index] | | main.rs:1922:10:1922:10 | T | -| main.rs:1927:24:1927:28 | index | | {EXTERNAL LOCATION} | usize | -| main.rs:1931:22:1931:26 | slice | | file://:0:0:0:0 | & | -| main.rs:1931:22:1931:26 | slice | | file://:0:0:0:0 | [] | -| main.rs:1931:22:1931:26 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:1931:22:1931:26 | slice | &T.[T] | main.rs:1898:5:1899:13 | S | -| main.rs:1938:13:1938:13 | x | | main.rs:1898:5:1899:13 | S | -| main.rs:1938:17:1938:21 | slice | | file://:0:0:0:0 | & | -| main.rs:1938:17:1938:21 | slice | | file://:0:0:0:0 | [] | -| main.rs:1938:17:1938:21 | slice | &T | file://:0:0:0:0 | [] | -| main.rs:1938:17:1938:21 | slice | &T.[T] | main.rs:1898:5:1899:13 | S | -| main.rs:1938:17:1938:24 | slice[0] | | main.rs:1898:5:1899:13 | S | -| main.rs:1938:17:1938:30 | ... .foo() | | main.rs:1898:5:1899:13 | S | -| main.rs:1938:23:1938:23 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1942:13:1942:19 | mut vec | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1942:13:1942:19 | mut vec | T | main.rs:1898:5:1899:13 | S | -| main.rs:1942:23:1942:34 | ...::new(...) | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1942:23:1942:34 | ...::new(...) | T | main.rs:1898:5:1899:13 | S | -| main.rs:1943:9:1943:11 | vec | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1943:9:1943:11 | vec | T | main.rs:1898:5:1899:13 | S | -| main.rs:1943:18:1943:18 | S | | main.rs:1898:5:1899:13 | S | -| main.rs:1944:9:1944:11 | vec | | main.rs:1907:5:1910:5 | MyVec | -| main.rs:1944:9:1944:11 | vec | T | main.rs:1898:5:1899:13 | S | -| main.rs:1944:9:1944:14 | vec[0] | | main.rs:1898:5:1899:13 | S | -| main.rs:1944:9:1944:20 | ... .foo() | | main.rs:1898:5:1899:13 | S | -| main.rs:1944:13:1944:13 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1944:13:1944:13 | 0 | | {EXTERNAL LOCATION} | usize | -| main.rs:1946:13:1946:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:1946:13:1946:14 | xs | | file://:0:0:0:0 | [] | -| main.rs:1946:13:1946:14 | xs | [T;...] | main.rs:1898:5:1899:13 | S | -| main.rs:1946:13:1946:14 | xs | [T] | main.rs:1898:5:1899:13 | S | -| main.rs:1946:21:1946:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1946:26:1946:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:1946:26:1946:28 | [...] | | file://:0:0:0:0 | [] | -| main.rs:1946:26:1946:28 | [...] | [T;...] | main.rs:1898:5:1899:13 | S | -| main.rs:1946:26:1946:28 | [...] | [T] | main.rs:1898:5:1899:13 | S | -| main.rs:1946:27:1946:27 | S | | main.rs:1898:5:1899:13 | S | -| main.rs:1947:13:1947:13 | x | | main.rs:1898:5:1899:13 | S | -| main.rs:1947:17:1947:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:1947:17:1947:18 | xs | | file://:0:0:0:0 | [] | -| main.rs:1947:17:1947:18 | xs | [T;...] | main.rs:1898:5:1899:13 | S | -| main.rs:1947:17:1947:18 | xs | [T] | main.rs:1898:5:1899:13 | S | -| main.rs:1947:17:1947:21 | xs[0] | | main.rs:1898:5:1899:13 | S | -| main.rs:1947:17:1947:27 | ... .foo() | | main.rs:1898:5:1899:13 | S | -| main.rs:1947:20:1947:20 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1949:23:1949:25 | &xs | | file://:0:0:0:0 | & | -| main.rs:1949:23:1949:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:1949:23:1949:25 | &xs | &T | file://:0:0:0:0 | [] | -| main.rs:1949:23:1949:25 | &xs | &T.[T;...] | main.rs:1898:5:1899:13 | S | -| main.rs:1949:23:1949:25 | &xs | &T.[T] | main.rs:1898:5:1899:13 | S | -| main.rs:1949:24:1949:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:1949:24:1949:25 | xs | | file://:0:0:0:0 | [] | -| main.rs:1949:24:1949:25 | xs | [T;...] | main.rs:1898:5:1899:13 | S | -| main.rs:1949:24:1949:25 | xs | [T] | main.rs:1898:5:1899:13 | S | -| main.rs:1955:25:1955:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | -| main.rs:1955:25:1955:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | -| main.rs:1955:25:1955:45 | { ... } | | {EXTERNAL LOCATION} | String | -| main.rs:1955:38:1955:45 | "World!" | | {EXTERNAL LOCATION} | str | -| main.rs:1961:19:1961:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1961:19:1961:23 | SelfParam | &T | main.rs:1960:5:1962:5 | Self [trait MyAdd] | -| main.rs:1961:26:1961:30 | value | | main.rs:1960:17:1960:17 | T | -| main.rs:1966:19:1966:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1966:19:1966:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1966:26:1966:30 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:1966:46:1968:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1967:13:1967:17 | value | | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:19:1973:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1973:19:1973:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:26:1973:30 | value | | file://:0:0:0:0 | & | -| main.rs:1973:26:1973:30 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1973:47:1975:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1974:13:1974:18 | * ... | | {EXTERNAL LOCATION} | i64 | -| main.rs:1974:14:1974:18 | value | | file://:0:0:0:0 | & | -| main.rs:1974:14:1974:18 | value | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1980:19:1980:23 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:1980:19:1980:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1980:26:1980:30 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:1980:47:1982:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1980:47:1982:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1981:13:1981:37 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | -| main.rs:1981:13:1981:37 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | -| main.rs:1981:16:1981:20 | value | | {EXTERNAL LOCATION} | bool | -| main.rs:1981:22:1981:26 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1981:22:1981:26 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1981:24:1981:24 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1981:24:1981:24 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1981:33:1981:37 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:1981:33:1981:37 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:1981:35:1981:35 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1981:35:1981:35 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1986:13:1986:13 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1986:13:1986:13 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1986:22:1986:23 | 73 | | {EXTERNAL LOCATION} | i32 | -| main.rs:1986:22:1986:23 | 73 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:9:1987:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1987:9:1987:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:9:1987:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1987:18:1987:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:9:1988:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1988:9:1988:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:9:1988:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:18:1988:22 | &5i64 | | file://:0:0:0:0 | & | -| main.rs:1988:18:1988:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | -| main.rs:1988:19:1988:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | -| main.rs:1989:9:1989:9 | x | | {EXTERNAL LOCATION} | i32 | -| main.rs:1989:9:1989:9 | x | | {EXTERNAL LOCATION} | i64 | -| main.rs:1989:9:1989:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | -| main.rs:1989:18:1989:21 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:1997:26:1999:9 | { ... } | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:1998:13:1998:25 | MyCallable {...} | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2001:17:2001:21 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:2001:17:2001:21 | SelfParam | &T | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2001:31:2003:9 | { ... } | | {EXTERNAL LOCATION} | i32 | -| main.rs:2001:31:2003:9 | { ... } | | {EXTERNAL LOCATION} | i64 | -| main.rs:2002:13:2002:13 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2002:13:2002:13 | 1 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2009:13:2009:13 | i | | {EXTERNAL LOCATION} | i32 | -| main.rs:2009:18:2009:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2009:18:2009:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2009:19:2009:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2009:22:2009:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2009:25:2009:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2010:18:2010:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2010:18:2010:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2010:18:2010:41 | ... .map(...) | | file://:0:0:0:0 | [] | -| main.rs:2010:19:2010:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2010:22:2010:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2010:25:2010:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2010:40:2010:40 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2011:18:2011:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2011:18:2011:26 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2011:19:2011:19 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2011:22:2011:22 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2011:25:2011:25 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:13:2013:17 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2013:13:2013:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:13:2013:17 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2013:21:2013:31 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2013:21:2013:31 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:21:2013:31 | [...] | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2013:22:2013:24 | 1u8 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:22:2013:24 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2013:27:2013:27 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:27:2013:27 | 2 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2013:30:2013:30 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2013:30:2013:30 | 3 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2014:13:2014:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2014:13:2014:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2014:18:2014:22 | vals1 | | file://:0:0:0:0 | [] | -| main.rs:2014:18:2014:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2014:18:2014:22 | vals1 | [T;...] | {EXTERNAL LOCATION} | u8 | -| main.rs:2016:13:2016:17 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2016:13:2016:17 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2016:21:2016:29 | [1u16; 3] | | file://:0:0:0:0 | [] | -| main.rs:2016:21:2016:29 | [1u16; 3] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2016:22:2016:25 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2016:28:2016:28 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2017:13:2017:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2017:18:2017:22 | vals2 | | file://:0:0:0:0 | [] | -| main.rs:2017:18:2017:22 | vals2 | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2019:13:2019:17 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2019:13:2019:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:13:2019:17 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:26:2019:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:31:2019:39 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2019:31:2019:39 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:31:2019:39 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:32:2019:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:32:2019:32 | 1 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:35:2019:35 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:35:2019:35 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2019:38:2019:38 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2019:38:2019:38 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2020:13:2020:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2020:13:2020:13 | u | | {EXTERNAL LOCATION} | u32 | -| main.rs:2020:18:2020:22 | vals3 | | file://:0:0:0:0 | [] | -| main.rs:2020:18:2020:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2020:18:2020:22 | vals3 | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2022:13:2022:17 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2022:13:2022:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2022:13:2022:17 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2022:26:2022:26 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2022:31:2022:36 | [1; 3] | | file://:0:0:0:0 | [] | -| main.rs:2022:31:2022:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2022:31:2022:36 | [1; 3] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2022:32:2022:32 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2022:32:2022:32 | 1 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2022:35:2022:35 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2023:13:2023:13 | u | | {EXTERNAL LOCATION} | i32 | -| main.rs:2023:13:2023:13 | u | | {EXTERNAL LOCATION} | u64 | -| main.rs:2023:18:2023:22 | vals4 | | file://:0:0:0:0 | [] | -| main.rs:2023:18:2023:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2023:18:2023:22 | vals4 | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2025:13:2025:24 | mut strings1 | | file://:0:0:0:0 | [] | -| main.rs:2025:13:2025:24 | mut strings1 | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2025:28:2025:48 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2025:28:2025:48 | [...] | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2025:29:2025:33 | "foo" | | {EXTERNAL LOCATION} | str | -| main.rs:2025:36:2025:40 | "bar" | | {EXTERNAL LOCATION} | str | -| main.rs:2025:43:2025:47 | "baz" | | {EXTERNAL LOCATION} | str | -| main.rs:2026:18:2026:26 | &strings1 | | file://:0:0:0:0 | & | -| main.rs:2026:18:2026:26 | &strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2026:18:2026:26 | &strings1 | &T.[T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2026:19:2026:26 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2026:19:2026:26 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2027:18:2027:30 | &mut strings1 | | file://:0:0:0:0 | & | -| main.rs:2027:18:2027:30 | &mut strings1 | &T | file://:0:0:0:0 | [] | -| main.rs:2027:18:2027:30 | &mut strings1 | &T.[T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2027:23:2027:30 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2027:23:2027:30 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2028:13:2028:13 | s | | {EXTERNAL LOCATION} | str | -| main.rs:2028:18:2028:25 | strings1 | | file://:0:0:0:0 | [] | -| main.rs:2028:18:2028:25 | strings1 | [T;...] | {EXTERNAL LOCATION} | str | -| main.rs:2030:13:2030:20 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2030:13:2030:20 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2031:9:2035:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2031:9:2035:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2032:13:2032:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2032:26:2032:30 | "foo" | | {EXTERNAL LOCATION} | str | -| main.rs:2033:13:2033:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2033:26:2033:30 | "bar" | | {EXTERNAL LOCATION} | str | -| main.rs:2034:13:2034:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2034:26:2034:30 | "baz" | | {EXTERNAL LOCATION} | str | -| main.rs:2036:13:2036:13 | s | | {EXTERNAL LOCATION} | String | -| main.rs:2036:18:2036:25 | strings2 | | file://:0:0:0:0 | [] | -| main.rs:2036:18:2036:25 | strings2 | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2038:13:2038:20 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2038:13:2038:20 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2038:13:2038:20 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2039:9:2043:9 | &... | | file://:0:0:0:0 | & | -| main.rs:2039:9:2043:9 | &... | &T | file://:0:0:0:0 | [] | -| main.rs:2039:9:2043:9 | &... | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2039:10:2043:9 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2039:10:2043:9 | [...] | [T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2040:13:2040:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2040:26:2040:30 | "foo" | | {EXTERNAL LOCATION} | str | -| main.rs:2041:13:2041:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2041:26:2041:30 | "bar" | | {EXTERNAL LOCATION} | str | -| main.rs:2042:13:2042:31 | ...::from(...) | | {EXTERNAL LOCATION} | String | -| main.rs:2042:26:2042:30 | "baz" | | {EXTERNAL LOCATION} | str | -| main.rs:2044:18:2044:25 | strings3 | | file://:0:0:0:0 | & | -| main.rs:2044:18:2044:25 | strings3 | &T | file://:0:0:0:0 | [] | -| main.rs:2044:18:2044:25 | strings3 | &T.[T;...] | {EXTERNAL LOCATION} | String | -| main.rs:2046:13:2046:21 | callables | | file://:0:0:0:0 | [] | -| main.rs:2046:13:2046:21 | callables | [T;...] | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2046:25:2046:81 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2046:25:2046:81 | [...] | [T;...] | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2046:26:2046:42 | ...::new(...) | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2046:45:2046:61 | ...::new(...) | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2046:64:2046:80 | ...::new(...) | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2047:13:2047:13 | c | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2048:12:2048:20 | callables | | file://:0:0:0:0 | [] | -| main.rs:2048:12:2048:20 | callables | [T;...] | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2050:17:2050:22 | result | | {EXTERNAL LOCATION} | i64 | -| main.rs:2050:26:2050:26 | c | | main.rs:1994:5:1994:24 | MyCallable | -| main.rs:2050:26:2050:33 | c.call() | | {EXTERNAL LOCATION} | i64 | -| main.rs:2055:18:2055:18 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2055:21:2055:22 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2056:18:2056:26 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2056:19:2056:21 | 0u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2056:24:2056:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2057:21:2057:21 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2057:24:2057:25 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2060:13:2060:18 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2060:13:2060:18 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2061:9:2064:9 | ...::Range {...} | | {EXTERNAL LOCATION} | Range | -| main.rs:2061:9:2064:9 | ...::Range {...} | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2062:20:2062:23 | 0u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2063:18:2063:22 | 10u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2065:18:2065:23 | range1 | | {EXTERNAL LOCATION} | Range | -| main.rs:2065:18:2065:23 | range1 | Idx | {EXTERNAL LOCATION} | u16 | -| main.rs:2069:26:2069:26 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2069:29:2069:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2069:32:2069:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2072:13:2072:18 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2072:13:2072:18 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2072:13:2072:18 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2072:32:2072:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2072:32:2072:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2072:32:2072:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2072:32:2072:52 | ... .to_vec() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2072:32:2072:52 | ... .to_vec() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2072:32:2072:52 | ... .to_vec() | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2072:33:2072:36 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2072:33:2072:36 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2072:39:2072:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2072:39:2072:39 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2072:42:2072:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2072:42:2072:42 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2073:13:2073:13 | u | | {EXTERNAL LOCATION} | u16 | -| main.rs:2073:18:2073:23 | vals4a | | {EXTERNAL LOCATION} | Vec | -| main.rs:2073:18:2073:23 | vals4a | A | {EXTERNAL LOCATION} | Global | -| main.rs:2073:18:2073:23 | vals4a | T | {EXTERNAL LOCATION} | u16 | -| main.rs:2075:22:2075:33 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2075:22:2075:33 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:22:2075:33 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 | -| main.rs:2075:23:2075:26 | 1u16 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:23:2075:26 | 1u16 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2075:29:2075:29 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:29:2075:29 | 2 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2075:32:2075:32 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2075:32:2075:32 | 3 | | {EXTERNAL LOCATION} | u16 | -| main.rs:2078:13:2078:17 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2078:13:2078:17 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2078:13:2078:17 | vals5 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2078:21:2078:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2078:21:2078:43 | ...::from(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2078:21:2078:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2078:31:2078:42 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2078:31:2078:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:31:2078:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 | -| main.rs:2078:32:2078:35 | 1u32 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:32:2078:35 | 1u32 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2078:38:2078:38 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:38:2078:38 | 2 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2078:41:2078:41 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2078:41:2078:41 | 3 | | {EXTERNAL LOCATION} | u32 | -| main.rs:2079:13:2079:13 | u | | {EXTERNAL LOCATION} | u8 | -| main.rs:2079:18:2079:22 | vals5 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2079:18:2079:22 | vals5 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2079:18:2079:22 | vals5 | T | {EXTERNAL LOCATION} | u8 | -| main.rs:2081:13:2081:17 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2081:13:2081:17 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2081:13:2081:17 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2081:13:2081:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2081:32:2081:43 | [...] | | file://:0:0:0:0 | [] | -| main.rs:2081:32:2081:43 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 | -| main.rs:2081:32:2081:43 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 | -| main.rs:2081:32:2081:60 | ... .collect() | | {EXTERNAL LOCATION} | Vec | -| main.rs:2081:32:2081:60 | ... .collect() | A | {EXTERNAL LOCATION} | Global | -| main.rs:2081:32:2081:60 | ... .collect() | T | file://:0:0:0:0 | & | -| main.rs:2081:32:2081:60 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2081:33:2081:36 | 1u64 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2081:33:2081:36 | 1u64 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2081:39:2081:39 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2081:39:2081:39 | 2 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2081:42:2081:42 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2081:42:2081:42 | 3 | | {EXTERNAL LOCATION} | u64 | -| main.rs:2082:13:2082:13 | u | | file://:0:0:0:0 | & | -| main.rs:2082:13:2082:13 | u | &T | {EXTERNAL LOCATION} | u64 | -| main.rs:2082:18:2082:22 | vals6 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2082:18:2082:22 | vals6 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2082:18:2082:22 | vals6 | T | file://:0:0:0:0 | & | -| main.rs:2082:18:2082:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 | -| main.rs:2084:13:2084:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2084:13:2084:21 | mut vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2084:25:2084:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | -| main.rs:2084:25:2084:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2085:9:2085:13 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2085:9:2085:13 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2085:20:2085:22 | 1u8 | | {EXTERNAL LOCATION} | u8 | -| main.rs:2086:18:2086:22 | vals7 | | {EXTERNAL LOCATION} | Vec | -| main.rs:2086:18:2086:22 | vals7 | A | {EXTERNAL LOCATION} | Global | -| main.rs:2088:33:2088:33 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2088:36:2088:36 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2088:45:2088:45 | 3 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2088:48:2088:48 | 4 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2095:13:2095:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2095:13:2095:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2095:24:2095:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2095:24:2095:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2096:9:2096:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2096:9:2096:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2096:9:2096:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2096:21:2096:21 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2096:24:2096:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2096:24:2096:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2096:33:2096:37 | "one" | | {EXTERNAL LOCATION} | str | -| main.rs:2097:9:2097:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2097:9:2097:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2097:9:2097:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option | -| main.rs:2097:21:2097:21 | 2 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2097:24:2097:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2097:24:2097:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2097:33:2097:37 | "two" | | {EXTERNAL LOCATION} | str | -| main.rs:2098:20:2098:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2098:20:2098:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2098:20:2098:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys | -| main.rs:2099:22:2099:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2099:22:2099:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2099:22:2099:34 | map1.values() | | {EXTERNAL LOCATION} | Values | -| main.rs:2100:29:2100:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2100:29:2100:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2100:29:2100:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter | -| main.rs:2101:29:2101:33 | &map1 | | file://:0:0:0:0 | & | -| main.rs:2101:29:2101:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap | -| main.rs:2101:29:2101:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2101:30:2101:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2101:30:2101:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | -| main.rs:2105:13:2105:17 | mut a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2105:13:2105:17 | mut a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2105:26:2105:26 | 0 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2105:26:2105:26 | 0 | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:23:2107:23 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2107:23:2107:23 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2107:23:2107:28 | ... < ... | | {EXTERNAL LOCATION} | bool | -| main.rs:2107:27:2107:28 | 10 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2109:13:2109:13 | a | | {EXTERNAL LOCATION} | i32 | -| main.rs:2109:13:2109:13 | a | | {EXTERNAL LOCATION} | i64 | -| main.rs:2109:13:2109:18 | ... += ... | | file://:0:0:0:0 | () | -| main.rs:2109:18:2109:18 | 1 | | {EXTERNAL LOCATION} | i32 | -| main.rs:2118:5:2118:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2119:5:2119:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2119:20:2119:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2119:41:2119:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2135:5:2135:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1537:13:1537:26 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1537:24:1537:26 | rhs | | {EXTERNAL LOCATION} | u32 | +| main.rs:1543:16:1543:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1543:30:1548:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1544:13:1547:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1545:20:1545:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1545:21:1545:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1545:21:1545:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:20:1546:26 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1546:21:1546:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1546:21:1546:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1553:16:1553:19 | SelfParam | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1553:30:1558:9 | { ... } | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1554:13:1557:13 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1555:20:1555:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1555:21:1555:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1555:21:1555:26 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:20:1556:26 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1556:21:1556:24 | self | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1556:21:1556:26 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1562:15:1562:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1562:15:1562:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1562:22:1562:26 | other | | file://:0:0:0:0 | & | +| main.rs:1562:22:1562:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1562:44:1564:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:13:1563:16 | self | | file://:0:0:0:0 | & | +| main.rs:1563:13:1563:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:13:1563:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:13:1563:29 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:13:1563:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:23:1563:27 | other | | file://:0:0:0:0 | & | +| main.rs:1563:23:1563:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:23:1563:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:37 | self | | file://:0:0:0:0 | & | +| main.rs:1563:34:1563:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:34:1563:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1563:34:1563:50 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1563:44:1563:48 | other | | file://:0:0:0:0 | & | +| main.rs:1563:44:1563:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1563:44:1563:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1566:15:1566:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1566:15:1566:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1566:22:1566:26 | other | | file://:0:0:0:0 | & | +| main.rs:1566:22:1566:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1566:44:1568:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:13:1567:16 | self | | file://:0:0:0:0 | & | +| main.rs:1567:13:1567:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:13:1567:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:13:1567:29 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:13:1567:50 | ... \|\| ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:23:1567:27 | other | | file://:0:0:0:0 | & | +| main.rs:1567:23:1567:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:23:1567:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:34:1567:37 | self | | file://:0:0:0:0 | & | +| main.rs:1567:34:1567:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:34:1567:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1567:34:1567:50 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1567:44:1567:48 | other | | file://:0:0:0:0 | & | +| main.rs:1567:44:1567:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1567:44:1567:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1572:24:1572:28 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1572:24:1572:28 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1572:31:1572:35 | other | | file://:0:0:0:0 | & | +| main.rs:1572:31:1572:35 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1572:75:1574:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| main.rs:1572:75:1574:9 | { ... } | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1573:13:1573:29 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:13:1573:63 | ... .partial_cmp(...) | | {EXTERNAL LOCATION} | Option | +| main.rs:1573:13:1573:63 | ... .partial_cmp(...) | T | {EXTERNAL LOCATION} | Ordering | +| main.rs:1573:14:1573:17 | self | | file://:0:0:0:0 | & | +| main.rs:1573:14:1573:17 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:14:1573:19 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:14:1573:28 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:23:1573:26 | self | | file://:0:0:0:0 | & | +| main.rs:1573:23:1573:26 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:23:1573:28 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:43:1573:62 | &... | | file://:0:0:0:0 | & | +| main.rs:1573:43:1573:62 | &... | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:44:1573:62 | (...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:45:1573:49 | other | | file://:0:0:0:0 | & | +| main.rs:1573:45:1573:49 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:45:1573:51 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:45:1573:61 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1573:55:1573:59 | other | | file://:0:0:0:0 | & | +| main.rs:1573:55:1573:59 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1573:55:1573:61 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1576:15:1576:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1576:15:1576:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1576:22:1576:26 | other | | file://:0:0:0:0 | & | +| main.rs:1576:22:1576:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1576:44:1578:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:13:1577:16 | self | | file://:0:0:0:0 | & | +| main.rs:1577:13:1577:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:13:1577:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:13:1577:28 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:13:1577:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:22:1577:26 | other | | file://:0:0:0:0 | & | +| main.rs:1577:22:1577:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:22:1577:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:33:1577:36 | self | | file://:0:0:0:0 | & | +| main.rs:1577:33:1577:36 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:33:1577:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1577:33:1577:48 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1577:42:1577:46 | other | | file://:0:0:0:0 | & | +| main.rs:1577:42:1577:46 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1577:42:1577:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1580:15:1580:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1580:15:1580:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1580:22:1580:26 | other | | file://:0:0:0:0 | & | +| main.rs:1580:22:1580:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1580:44:1582:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:13:1581:16 | self | | file://:0:0:0:0 | & | +| main.rs:1581:13:1581:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:13:1581:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:13:1581:29 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:13:1581:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:23:1581:27 | other | | file://:0:0:0:0 | & | +| main.rs:1581:23:1581:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:23:1581:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:34:1581:37 | self | | file://:0:0:0:0 | & | +| main.rs:1581:34:1581:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:34:1581:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1581:34:1581:50 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1581:44:1581:48 | other | | file://:0:0:0:0 | & | +| main.rs:1581:44:1581:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1581:44:1581:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1584:15:1584:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1584:15:1584:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1584:22:1584:26 | other | | file://:0:0:0:0 | & | +| main.rs:1584:22:1584:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1584:44:1586:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:13:1585:16 | self | | file://:0:0:0:0 | & | +| main.rs:1585:13:1585:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:13:1585:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:13:1585:28 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:13:1585:48 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:22:1585:26 | other | | file://:0:0:0:0 | & | +| main.rs:1585:22:1585:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:22:1585:28 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:33:1585:36 | self | | file://:0:0:0:0 | & | +| main.rs:1585:33:1585:36 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:33:1585:38 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1585:33:1585:48 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1585:42:1585:46 | other | | file://:0:0:0:0 | & | +| main.rs:1585:42:1585:46 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1585:42:1585:48 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1588:15:1588:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1588:15:1588:19 | SelfParam | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1588:22:1588:26 | other | | file://:0:0:0:0 | & | +| main.rs:1588:22:1588:26 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1588:44:1590:9 | { ... } | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:13:1589:16 | self | | file://:0:0:0:0 | & | +| main.rs:1589:13:1589:16 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:13:1589:18 | self.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:13:1589:29 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:13:1589:50 | ... && ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:23:1589:27 | other | | file://:0:0:0:0 | & | +| main.rs:1589:23:1589:27 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:23:1589:29 | other.x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:34:1589:37 | self | | file://:0:0:0:0 | & | +| main.rs:1589:34:1589:37 | self | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:34:1589:39 | self.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1589:34:1589:50 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1589:44:1589:48 | other | | file://:0:0:0:0 | & | +| main.rs:1589:44:1589:48 | other | &T | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1589:44:1589:50 | other.y | | {EXTERNAL LOCATION} | i64 | +| main.rs:1596:13:1596:18 | i64_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:22:1596:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:23:1596:26 | 1i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1596:23:1596:34 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1596:31:1596:34 | 2i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1597:13:1597:18 | i64_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:22:1597:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:23:1597:26 | 3i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1597:23:1597:34 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1597:31:1597:34 | 4i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:13:1598:18 | i64_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:22:1598:34 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:23:1598:26 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1598:23:1598:33 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1598:30:1598:33 | 6i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:13:1599:18 | i64_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:22:1599:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:23:1599:26 | 7i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1599:23:1599:34 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1599:31:1599:34 | 8i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1600:13:1600:18 | i64_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:22:1600:35 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:23:1600:26 | 9i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1600:23:1600:34 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1600:30:1600:34 | 10i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1601:13:1601:18 | i64_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:22:1601:37 | (...) | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:23:1601:27 | 11i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1601:23:1601:36 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1601:32:1601:36 | 12i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:13:1604:19 | i64_add | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:23:1604:27 | 13i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:23:1604:35 | ... + ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1604:31:1604:35 | 14i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:13:1605:19 | i64_sub | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:23:1605:27 | 15i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:23:1605:35 | ... - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1605:31:1605:35 | 16i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:13:1606:19 | i64_mul | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:23:1606:27 | 17i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:23:1606:35 | ... * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1606:31:1606:35 | 18i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:13:1607:19 | i64_div | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:23:1607:27 | 19i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:23:1607:35 | ... / ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1607:31:1607:35 | 20i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:13:1608:19 | i64_rem | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:23:1608:27 | 21i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:23:1608:35 | ... % ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1608:31:1608:35 | 22i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1611:13:1611:30 | mut i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1611:34:1611:38 | 23i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1612:9:1612:22 | i64_add_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1612:9:1612:31 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1612:27:1612:31 | 24i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1614:13:1614:30 | mut i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1614:34:1614:38 | 25i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:9:1615:22 | i64_sub_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1615:9:1615:31 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1615:27:1615:31 | 26i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1617:13:1617:30 | mut i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1617:34:1617:38 | 27i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1618:9:1618:22 | i64_mul_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1618:9:1618:31 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1618:27:1618:31 | 28i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1620:13:1620:30 | mut i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1620:34:1620:38 | 29i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:9:1621:22 | i64_div_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1621:9:1621:31 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1621:27:1621:31 | 30i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1623:13:1623:30 | mut i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1623:34:1623:38 | 31i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:9:1624:22 | i64_rem_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1624:9:1624:31 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1624:27:1624:31 | 32i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:13:1627:22 | i64_bitand | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:26:1627:30 | 33i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:26:1627:38 | ... & ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1627:34:1627:38 | 34i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:13:1628:21 | i64_bitor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:25:1628:29 | 35i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:25:1628:37 | ... \| ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1628:33:1628:37 | 36i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:13:1629:22 | i64_bitxor | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:26:1629:30 | 37i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:26:1629:38 | ... ^ ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1629:34:1629:38 | 38i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:13:1630:19 | i64_shl | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:23:1630:27 | 39i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:23:1630:36 | ... << ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1630:32:1630:36 | 40i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:13:1631:19 | i64_shr | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:23:1631:27 | 41i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:23:1631:36 | ... >> ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1631:32:1631:36 | 42i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1634:13:1634:33 | mut i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1634:37:1634:41 | 43i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1635:9:1635:25 | i64_bitand_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1635:9:1635:34 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1635:30:1635:34 | 44i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1637:13:1637:32 | mut i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1637:36:1637:40 | 45i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1638:9:1638:24 | i64_bitor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1638:9:1638:33 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1638:29:1638:33 | 46i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:13:1640:33 | mut i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1640:37:1640:41 | 47i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:9:1641:25 | i64_bitxor_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1641:9:1641:34 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1641:30:1641:34 | 48i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1643:13:1643:30 | mut i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1643:34:1643:38 | 49i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1644:9:1644:22 | i64_shl_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1644:9:1644:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1644:28:1644:32 | 50i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1646:13:1646:30 | mut i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1646:34:1646:38 | 51i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:9:1647:22 | i64_shr_assign | | {EXTERNAL LOCATION} | i64 | +| main.rs:1647:9:1647:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1647:28:1647:32 | 52i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:13:1649:19 | i64_neg | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:23:1649:28 | - ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1649:24:1649:28 | 53i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:13:1650:19 | i64_not | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:23:1650:28 | ! ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1650:24:1650:28 | 54i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1653:13:1653:14 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1653:18:1653:36 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1653:28:1653:28 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1653:28:1653:28 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1653:34:1653:34 | 2 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1653:34:1653:34 | 2 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1654:13:1654:14 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1654:18:1654:36 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1654:28:1654:28 | 3 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1654:28:1654:28 | 3 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1654:34:1654:34 | 4 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1654:34:1654:34 | 4 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1657:13:1657:19 | vec2_eq | | {EXTERNAL LOCATION} | bool | +| main.rs:1657:23:1657:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1657:23:1657:30 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1657:29:1657:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1658:13:1658:19 | vec2_ne | | {EXTERNAL LOCATION} | bool | +| main.rs:1658:23:1658:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1658:23:1658:30 | ... != ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1658:29:1658:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1659:13:1659:19 | vec2_lt | | {EXTERNAL LOCATION} | bool | +| main.rs:1659:23:1659:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1659:23:1659:29 | ... < ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1659:28:1659:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1660:13:1660:19 | vec2_le | | {EXTERNAL LOCATION} | bool | +| main.rs:1660:23:1660:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1660:23:1660:30 | ... <= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1660:29:1660:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1661:13:1661:19 | vec2_gt | | {EXTERNAL LOCATION} | bool | +| main.rs:1661:23:1661:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1661:23:1661:29 | ... > ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1661:28:1661:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1662:13:1662:19 | vec2_ge | | {EXTERNAL LOCATION} | bool | +| main.rs:1662:23:1662:24 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1662:23:1662:30 | ... >= ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1662:29:1662:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:13:1665:20 | vec2_add | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:24:1665:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:24:1665:30 | ... + ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1665:29:1665:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:13:1666:20 | vec2_sub | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:24:1666:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:24:1666:30 | ... - ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1666:29:1666:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:13:1667:20 | vec2_mul | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:24:1667:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:24:1667:30 | ... * ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1667:29:1667:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:13:1668:20 | vec2_div | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:24:1668:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:24:1668:30 | ... / ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1668:29:1668:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:13:1669:20 | vec2_rem | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:24:1669:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:24:1669:30 | ... % ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1669:29:1669:30 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1672:13:1672:31 | mut vec2_add_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1672:35:1672:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1673:9:1673:23 | vec2_add_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1673:9:1673:29 | ... += ... | | file://:0:0:0:0 | () | +| main.rs:1673:28:1673:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1675:13:1675:31 | mut vec2_sub_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1675:35:1675:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1676:9:1676:23 | vec2_sub_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1676:9:1676:29 | ... -= ... | | file://:0:0:0:0 | () | +| main.rs:1676:28:1676:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1678:13:1678:31 | mut vec2_mul_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1678:35:1678:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1679:9:1679:23 | vec2_mul_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1679:9:1679:29 | ... *= ... | | file://:0:0:0:0 | () | +| main.rs:1679:28:1679:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1681:13:1681:31 | mut vec2_div_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1681:35:1681:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1682:9:1682:23 | vec2_div_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1682:9:1682:29 | ... /= ... | | file://:0:0:0:0 | () | +| main.rs:1682:28:1682:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1684:13:1684:31 | mut vec2_rem_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1684:35:1684:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1685:9:1685:23 | vec2_rem_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1685:9:1685:29 | ... %= ... | | file://:0:0:0:0 | () | +| main.rs:1685:28:1685:29 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:13:1688:23 | vec2_bitand | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:27:1688:28 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:27:1688:33 | ... & ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1688:32:1688:33 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:13:1689:22 | vec2_bitor | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:26:1689:27 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:26:1689:32 | ... \| ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1689:31:1689:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:13:1690:23 | vec2_bitxor | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:27:1690:28 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:27:1690:33 | ... ^ ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1690:32:1690:33 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:13:1691:20 | vec2_shl | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:24:1691:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:24:1691:33 | ... << ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1691:30:1691:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1692:13:1692:20 | vec2_shr | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:24:1692:25 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:24:1692:33 | ... >> ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1692:30:1692:33 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1695:13:1695:34 | mut vec2_bitand_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1695:38:1695:39 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1696:9:1696:26 | vec2_bitand_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1696:9:1696:32 | ... &= ... | | file://:0:0:0:0 | () | +| main.rs:1696:31:1696:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1698:13:1698:33 | mut vec2_bitor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1698:37:1698:38 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1699:9:1699:25 | vec2_bitor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1699:9:1699:31 | ... \|= ... | | file://:0:0:0:0 | () | +| main.rs:1699:30:1699:31 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1701:13:1701:34 | mut vec2_bitxor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1701:38:1701:39 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1702:9:1702:26 | vec2_bitxor_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1702:9:1702:32 | ... ^= ... | | file://:0:0:0:0 | () | +| main.rs:1702:31:1702:32 | v2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1704:13:1704:31 | mut vec2_shl_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1704:35:1704:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1705:9:1705:23 | vec2_shl_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1705:9:1705:32 | ... <<= ... | | file://:0:0:0:0 | () | +| main.rs:1705:29:1705:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1707:13:1707:31 | mut vec2_shr_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1707:35:1707:36 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1708:9:1708:23 | vec2_shr_assign | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1708:9:1708:32 | ... >>= ... | | file://:0:0:0:0 | () | +| main.rs:1708:29:1708:32 | 1u32 | | {EXTERNAL LOCATION} | u32 | +| main.rs:1711:13:1711:20 | vec2_neg | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1711:24:1711:26 | - ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1711:25:1711:26 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:13:1712:20 | vec2_not | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:24:1712:26 | ! ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1712:25:1712:26 | v1 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1715:13:1715:24 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1715:28:1715:45 | ...::default(...) | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:13:1716:26 | vec2_zero_plus | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:30:1716:48 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:30:1716:63 | ... + ... | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1716:40:1716:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1716:40:1716:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:46:1716:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1716:46:1716:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1716:52:1716:63 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1720:13:1720:24 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1720:28:1720:45 | ...::default(...) | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1721:13:1721:26 | vec2_zero_plus | | {EXTERNAL LOCATION} | bool | +| main.rs:1721:30:1721:48 | Vec2 {...} | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1721:30:1721:64 | ... == ... | | {EXTERNAL LOCATION} | bool | +| main.rs:1721:40:1721:40 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1721:40:1721:40 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:46:1721:46 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1721:46:1721:46 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1721:53:1721:64 | default_vec2 | | main.rs:1356:5:1361:5 | Vec2 | +| main.rs:1731:18:1731:21 | SelfParam | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1734:25:1736:5 | { ... } | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1735:9:1735:10 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1738:41:1740:5 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1738:41:1740:5 | { ... } | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1738:41:1740:5 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1739:9:1739:20 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1739:9:1739:20 | { ... } | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1739:9:1739:20 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1739:17:1739:18 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1748:13:1748:42 | SelfParam | | {EXTERNAL LOCATION} | Pin | +| main.rs:1748:13:1748:42 | SelfParam | Ptr | file://:0:0:0:0 | & | +| main.rs:1748:13:1748:42 | SelfParam | Ptr.&T | main.rs:1742:5:1742:14 | S2 | +| main.rs:1749:13:1749:15 | _cx | | file://:0:0:0:0 | & | +| main.rs:1749:13:1749:15 | _cx | &T | {EXTERNAL LOCATION} | Context | +| main.rs:1750:44:1752:9 | { ... } | | {EXTERNAL LOCATION} | Poll | +| main.rs:1750:44:1752:9 | { ... } | T | main.rs:1728:5:1728:14 | S1 | +| main.rs:1751:13:1751:38 | ...::Ready(...) | | {EXTERNAL LOCATION} | Poll | +| main.rs:1751:13:1751:38 | ...::Ready(...) | T | main.rs:1728:5:1728:14 | S1 | +| main.rs:1751:36:1751:37 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1755:41:1757:5 | { ... } | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1755:41:1757:5 | { ... } | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1756:9:1756:10 | S2 | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1756:9:1756:10 | S2 | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1760:9:1760:12 | f1(...) | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1760:9:1760:12 | f1(...) | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1760:9:1760:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1761:9:1761:12 | f2(...) | | main.rs:1738:16:1738:39 | ImplTraitTypeRepr | +| main.rs:1761:9:1761:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1762:9:1762:12 | f3(...) | | main.rs:1755:16:1755:39 | ImplTraitTypeRepr | +| main.rs:1762:9:1762:18 | await ... | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1763:9:1763:10 | S2 | | main.rs:1742:5:1742:14 | S2 | +| main.rs:1763:9:1763:16 | await S2 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:13:1764:13 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1764:13:1764:13 | b | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:17:1764:28 | { ... } | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1764:17:1764:28 | { ... } | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1764:25:1764:26 | S1 | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1765:9:1765:9 | b | | {EXTERNAL LOCATION} | trait Future | +| main.rs:1765:9:1765:9 | b | Output | main.rs:1728:5:1728:14 | S1 | +| main.rs:1765:9:1765:15 | await b | | main.rs:1728:5:1728:14 | S1 | +| main.rs:1774:15:1774:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1774:15:1774:19 | SelfParam | &T | main.rs:1773:5:1775:5 | Self [trait Trait1] | +| main.rs:1778:15:1778:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1778:15:1778:19 | SelfParam | &T | main.rs:1777:5:1779:5 | Self [trait Trait2] | +| main.rs:1782:15:1782:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1782:15:1782:19 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1786:15:1786:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1786:15:1786:19 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1789:37:1791:5 | { ... } | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1789:37:1791:5 | { ... } | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1790:9:1790:10 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1790:9:1790:10 | S1 | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1794:18:1794:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1794:18:1794:22 | SelfParam | &T | main.rs:1793:5:1795:5 | Self [trait MyTrait] | +| main.rs:1798:18:1798:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1798:18:1798:22 | SelfParam | &T | main.rs:1770:5:1770:14 | S1 | +| main.rs:1798:31:1800:9 | { ... } | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1799:13:1799:14 | S2 | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1803:45:1805:5 | { ... } | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1803:45:1805:5 | { ... } | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1804:9:1804:10 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1804:9:1804:10 | S1 | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1807:41:1807:41 | t | | main.rs:1807:26:1807:38 | B | +| main.rs:1807:52:1809:5 | { ... } | | main.rs:1807:23:1807:23 | A | +| main.rs:1808:9:1808:9 | t | | main.rs:1807:26:1807:38 | B | +| main.rs:1808:9:1808:17 | t.get_a() | | main.rs:1807:23:1807:23 | A | +| main.rs:1811:26:1811:26 | t | | main.rs:1811:29:1811:43 | ImplTraitTypeRepr | +| main.rs:1811:51:1813:5 | { ... } | | main.rs:1811:23:1811:23 | A | +| main.rs:1812:9:1812:9 | t | | main.rs:1811:29:1811:43 | ImplTraitTypeRepr | +| main.rs:1812:9:1812:17 | t.get_a() | | main.rs:1811:23:1811:23 | A | +| main.rs:1816:13:1816:13 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1816:17:1816:20 | f1(...) | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1817:9:1817:9 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1818:9:1818:9 | x | | main.rs:1789:16:1789:35 | ImplTraitTypeRepr | +| main.rs:1819:13:1819:13 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1819:17:1819:32 | get_a_my_trait(...) | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1820:13:1820:13 | b | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1820:17:1820:33 | uses_my_trait1(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1820:32:1820:32 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1821:13:1821:13 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1821:17:1821:32 | get_a_my_trait(...) | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1822:13:1822:13 | c | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1822:17:1822:33 | uses_my_trait2(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1822:32:1822:32 | a | | main.rs:1803:28:1803:43 | ImplTraitTypeRepr | +| main.rs:1823:13:1823:13 | d | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1823:17:1823:34 | uses_my_trait2(...) | | main.rs:1771:5:1771:14 | S2 | +| main.rs:1823:32:1823:33 | S1 | | main.rs:1770:5:1770:14 | S1 | +| main.rs:1834:16:1834:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1834:16:1834:20 | SelfParam | &T | main.rs:1830:5:1831:13 | S | +| main.rs:1834:31:1836:9 | { ... } | | main.rs:1830:5:1831:13 | S | +| main.rs:1835:13:1835:13 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1845:26:1847:9 | { ... } | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1845:26:1847:9 | { ... } | T | main.rs:1844:10:1844:10 | T | +| main.rs:1846:13:1846:38 | MyVec {...} | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1846:13:1846:38 | MyVec {...} | T | main.rs:1844:10:1844:10 | T | +| main.rs:1846:27:1846:36 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| main.rs:1846:27:1846:36 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:1846:27:1846:36 | ...::new(...) | T | main.rs:1844:10:1844:10 | T | +| main.rs:1849:17:1849:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1849:17:1849:25 | SelfParam | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1849:17:1849:25 | SelfParam | &T.T | main.rs:1844:10:1844:10 | T | +| main.rs:1849:28:1849:32 | value | | main.rs:1844:10:1844:10 | T | +| main.rs:1850:13:1850:16 | self | | file://:0:0:0:0 | & | +| main.rs:1850:13:1850:16 | self | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1850:13:1850:16 | self | &T.T | main.rs:1844:10:1844:10 | T | +| main.rs:1850:13:1850:21 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1850:13:1850:21 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:1850:13:1850:21 | self.data | T | main.rs:1844:10:1844:10 | T | +| main.rs:1850:28:1850:32 | value | | main.rs:1844:10:1844:10 | T | +| main.rs:1858:18:1858:22 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1858:18:1858:22 | SelfParam | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1858:18:1858:22 | SelfParam | &T.T | main.rs:1854:10:1854:10 | T | +| main.rs:1858:25:1858:29 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1858:56:1860:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:1858:56:1860:9 | { ... } | &T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:13:1859:29 | &... | | file://:0:0:0:0 | & | +| main.rs:1859:13:1859:29 | &... | &T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:17 | self | | file://:0:0:0:0 | & | +| main.rs:1859:14:1859:17 | self | &T | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1859:14:1859:17 | self | &T.T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:22 | self.data | | {EXTERNAL LOCATION} | Vec | +| main.rs:1859:14:1859:22 | self.data | A | {EXTERNAL LOCATION} | Global | +| main.rs:1859:14:1859:22 | self.data | T | main.rs:1854:10:1854:10 | T | +| main.rs:1859:14:1859:29 | ...[index] | | main.rs:1854:10:1854:10 | T | +| main.rs:1859:24:1859:28 | index | | {EXTERNAL LOCATION} | usize | +| main.rs:1863:22:1863:26 | slice | | file://:0:0:0:0 | & | +| main.rs:1863:22:1863:26 | slice | | file://:0:0:0:0 | [] | +| main.rs:1863:22:1863:26 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1863:22:1863:26 | slice | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1870:13:1870:13 | x | | main.rs:1830:5:1831:13 | S | +| main.rs:1870:17:1870:21 | slice | | file://:0:0:0:0 | & | +| main.rs:1870:17:1870:21 | slice | | file://:0:0:0:0 | [] | +| main.rs:1870:17:1870:21 | slice | &T | file://:0:0:0:0 | [] | +| main.rs:1870:17:1870:21 | slice | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1870:17:1870:24 | slice[0] | | main.rs:1830:5:1831:13 | S | +| main.rs:1870:17:1870:30 | ... .foo() | | main.rs:1830:5:1831:13 | S | +| main.rs:1870:23:1870:23 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1874:13:1874:19 | mut vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1874:13:1874:19 | mut vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1874:23:1874:34 | ...::new(...) | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1874:23:1874:34 | ...::new(...) | T | main.rs:1830:5:1831:13 | S | +| main.rs:1875:9:1875:11 | vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1875:9:1875:11 | vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1875:18:1875:18 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1876:9:1876:11 | vec | | main.rs:1839:5:1842:5 | MyVec | +| main.rs:1876:9:1876:11 | vec | T | main.rs:1830:5:1831:13 | S | +| main.rs:1876:9:1876:14 | vec[0] | | main.rs:1830:5:1831:13 | S | +| main.rs:1876:9:1876:20 | ... .foo() | | main.rs:1830:5:1831:13 | S | +| main.rs:1876:13:1876:13 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1876:13:1876:13 | 0 | | {EXTERNAL LOCATION} | usize | +| main.rs:1878:13:1878:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1878:13:1878:14 | xs | | file://:0:0:0:0 | [] | +| main.rs:1878:13:1878:14 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1878:13:1878:14 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1878:21:1878:21 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1878:26:1878:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1878:26:1878:28 | [...] | | file://:0:0:0:0 | [] | +| main.rs:1878:26:1878:28 | [...] | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1878:26:1878:28 | [...] | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1878:27:1878:27 | S | | main.rs:1830:5:1831:13 | S | +| main.rs:1879:13:1879:13 | x | | main.rs:1830:5:1831:13 | S | +| main.rs:1879:17:1879:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1879:17:1879:18 | xs | | file://:0:0:0:0 | [] | +| main.rs:1879:17:1879:18 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1879:17:1879:18 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1879:17:1879:21 | xs[0] | | main.rs:1830:5:1831:13 | S | +| main.rs:1879:17:1879:27 | ... .foo() | | main.rs:1830:5:1831:13 | S | +| main.rs:1879:20:1879:20 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1881:23:1881:25 | &xs | | file://:0:0:0:0 | & | +| main.rs:1881:23:1881:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1881:23:1881:25 | &xs | &T | file://:0:0:0:0 | [] | +| main.rs:1881:23:1881:25 | &xs | &T.[T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1881:23:1881:25 | &xs | &T.[T] | main.rs:1830:5:1831:13 | S | +| main.rs:1881:24:1881:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1881:24:1881:25 | xs | | file://:0:0:0:0 | [] | +| main.rs:1881:24:1881:25 | xs | [T;...] | main.rs:1830:5:1831:13 | S | +| main.rs:1881:24:1881:25 | xs | [T] | main.rs:1830:5:1831:13 | S | +| main.rs:1887:25:1887:35 | "Hello, {}" | | {EXTERNAL LOCATION} | str | +| main.rs:1887:25:1887:45 | ...::format(...) | | {EXTERNAL LOCATION} | String | +| main.rs:1887:25:1887:45 | { ... } | | {EXTERNAL LOCATION} | String | +| main.rs:1887:38:1887:45 | "World!" | | {EXTERNAL LOCATION} | str | +| main.rs:1893:19:1893:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1893:19:1893:23 | SelfParam | &T | main.rs:1892:5:1894:5 | Self [trait MyAdd] | +| main.rs:1893:26:1893:30 | value | | main.rs:1892:17:1892:17 | T | +| main.rs:1898:19:1898:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1898:19:1898:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:26:1898:30 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:1898:46:1900:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1899:13:1899:17 | value | | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:19:1905:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1905:19:1905:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:26:1905:30 | value | | file://:0:0:0:0 | & | +| main.rs:1905:26:1905:30 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1905:47:1907:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:13:1906:18 | * ... | | {EXTERNAL LOCATION} | i64 | +| main.rs:1906:14:1906:18 | value | | file://:0:0:0:0 | & | +| main.rs:1906:14:1906:18 | value | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1912:19:1912:23 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:1912:19:1912:23 | SelfParam | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1912:26:1912:30 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:1912:47:1918:9 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1912:47:1918:9 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:13:1917:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i32 | +| main.rs:1913:13:1917:13 | if value {...} else {...} | | {EXTERNAL LOCATION} | i64 | +| main.rs:1913:16:1913:20 | value | | {EXTERNAL LOCATION} | bool | +| main.rs:1913:22:1915:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1913:22:1915:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1914:17:1914:17 | 1 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1914:17:1914:17 | 1 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1915:20:1917:13 | { ... } | | {EXTERNAL LOCATION} | i32 | +| main.rs:1915:20:1917:13 | { ... } | | {EXTERNAL LOCATION} | i64 | +| main.rs:1916:17:1916:17 | 0 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1916:17:1916:17 | 0 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:13:1922:13 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1922:13:1922:13 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1922:22:1922:23 | 73 | | {EXTERNAL LOCATION} | i32 | +| main.rs:1922:22:1922:23 | 73 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:9:1923:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1923:9:1923:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:9:1923:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1923:18:1923:21 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:9:1924:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1924:9:1924:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:9:1924:23 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:18:1924:22 | &5i64 | | file://:0:0:0:0 | & | +| main.rs:1924:18:1924:22 | &5i64 | &T | {EXTERNAL LOCATION} | i64 | +| main.rs:1924:19:1924:22 | 5i64 | | {EXTERNAL LOCATION} | i64 | +| main.rs:1925:9:1925:9 | x | | {EXTERNAL LOCATION} | i32 | +| main.rs:1925:9:1925:9 | x | | {EXTERNAL LOCATION} | i64 | +| main.rs:1925:9:1925:22 | x.my_add(...) | | {EXTERNAL LOCATION} | i64 | +| main.rs:1925:18:1925:21 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:1933:5:1933:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:1934:5:1934:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:1934:20:1934:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:1934:41:1934:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:1950:5:1950:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future | testFailures diff --git a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected index b95bb1ccc856..065aa039536d 100644 --- a/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/variables/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,5 @@ multipleCallTargets | main.rs:85:19:85:40 | ...::from(...) | | main.rs:102:19:102:40 | ...::from(...) | +| main.rs:374:5:374:27 | ... .add_assign(...) | +| main.rs:459:9:459:23 | z.add_assign(...) | diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index f74c73a107f5..f45005b51a0d 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -255,7 +255,6 @@ read | main.rs:355:14:355:14 | x | main.rs:355:14:355:14 | x | main.rs:356:13:356:13 | x | | main.rs:362:9:362:9 | v | main.rs:362:9:362:9 | v | main.rs:365:12:365:12 | v | | main.rs:364:9:364:12 | text | main.rs:364:9:364:12 | text | main.rs:366:19:366:22 | text | -| main.rs:371:13:371:13 | a | main.rs:371:13:371:13 | a | main.rs:372:5:372:5 | a | | main.rs:372:5:372:5 | a | main.rs:371:13:371:13 | a | main.rs:373:15:373:15 | a | | main.rs:372:5:372:5 | a | main.rs:371:13:371:13 | a | main.rs:374:11:374:11 | a | | main.rs:374:6:374:11 | &mut a | main.rs:371:13:371:13 | a | main.rs:375:15:375:15 | a | diff --git a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected index 564927f7ed34..9d66941b0792 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CONSISTENCY/PathResolutionConsistency.expected @@ -2,4 +2,3 @@ multipleCallTargets | test_logging.rs:77:20:77:36 | password.as_str() | | test_logging.rs:78:22:78:38 | password.as_str() | | test_logging.rs:88:18:88:34 | password.as_str() | -| test_logging.rs:243:5:245:66 | ... .write_all(...) | diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected deleted file mode 100644 index 65a8ba1953ae..000000000000 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.expected +++ /dev/null @@ -1,422 +0,0 @@ -#select -| lifetime.rs:69:13:69:14 | p1 | lifetime.rs:21:9:21:18 | &my_local1 | lifetime.rs:69:13:69:14 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:19:6:19:14 | my_local1 | my_local1 | -| lifetime.rs:70:13:70:14 | p2 | lifetime.rs:27:9:27:22 | &mut my_local2 | lifetime.rs:70:13:70:14 | p2 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:25:10:25:18 | my_local2 | my_local2 | -| lifetime.rs:71:13:71:14 | p3 | lifetime.rs:33:9:33:28 | &raw const my_local3 | lifetime.rs:71:13:71:14 | p3 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:31:6:31:14 | my_local3 | my_local3 | -| lifetime.rs:72:13:72:14 | p4 | lifetime.rs:39:9:39:26 | &raw mut my_local4 | lifetime.rs:72:13:72:14 | p4 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:37:10:37:18 | my_local4 | my_local4 | -| lifetime.rs:73:13:73:14 | p5 | lifetime.rs:43:9:43:15 | ¶m5 | lifetime.rs:73:13:73:14 | p5 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:42:23:42:28 | param5 | param5 | -| lifetime.rs:74:13:74:14 | p6 | lifetime.rs:50:9:50:18 | &... | lifetime.rs:74:13:74:14 | p6 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:47:6:47:8 | val | val | -| lifetime.rs:75:13:75:14 | p7 | lifetime.rs:63:8:63:27 | &raw const my_local7 | lifetime.rs:75:13:75:14 | p7 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:62:7:62:15 | my_local7 | my_local7 | -| lifetime.rs:76:4:76:5 | p2 | lifetime.rs:27:9:27:22 | &mut my_local2 | lifetime.rs:76:4:76:5 | p2 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:25:10:25:18 | my_local2 | my_local2 | -| lifetime.rs:77:4:77:5 | p4 | lifetime.rs:39:9:39:26 | &raw mut my_local4 | lifetime.rs:77:4:77:5 | p4 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:37:10:37:18 | my_local4 | my_local4 | -| lifetime.rs:172:13:172:15 | ptr | lifetime.rs:187:12:187:21 | &my_local1 | lifetime.rs:172:13:172:15 | ptr | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:186:6:186:14 | my_local1 | my_local1 | -| lifetime.rs:255:14:255:17 | prev | lifetime.rs:251:10:251:19 | &my_local2 | lifetime.rs:255:14:255:17 | prev | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:242:7:242:15 | my_local2 | my_local2 | -| lifetime.rs:310:31:310:32 | e1 | lifetime.rs:272:30:272:32 | &e1 | lifetime.rs:310:31:310:32 | e1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:271:6:271:7 | e1 | e1 | -| lifetime.rs:317:13:317:18 | result | lifetime.rs:289:25:289:26 | &x | lifetime.rs:317:13:317:18 | result | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:289:17:289:17 | x | x | -| lifetime.rs:411:16:411:17 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:411:16:411:17 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | -| lifetime.rs:416:16:416:17 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:416:16:416:17 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | -| lifetime.rs:428:7:428:8 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:428:7:428:8 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | -| lifetime.rs:433:7:433:8 | p1 | lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:433:7:433:8 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:382:11:382:17 | my_pair | my_pair | -| lifetime.rs:459:13:459:14 | p1 | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:459:13:459:14 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | -| lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:441:6:441:11 | my_val | my_val | -| lifetime.rs:659:15:659:18 | ref1 | lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:659:15:659:18 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:653:8:653:11 | str1 | str1 | -| lifetime.rs:667:14:667:17 | ref1 | lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:667:14:667:17 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:653:8:653:11 | str1 | str1 | -| lifetime.rs:667:14:667:17 | ref1 | lifetime.rs:655:11:655:25 | &raw const str2 | lifetime.rs:667:14:667:17 | ref1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:651:7:651:10 | str2 | str2 | -| lifetime.rs:789:12:789:13 | p1 | lifetime.rs:781:9:781:19 | &my_local10 | lifetime.rs:789:12:789:13 | p1 | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:779:6:779:15 | my_local10 | my_local10 | -| lifetime.rs:808:23:808:25 | ptr | lifetime.rs:798:9:798:12 | &val | lifetime.rs:808:23:808:25 | ptr | Access of a pointer to $@ after its lifetime has ended. | lifetime.rs:796:6:796:8 | val | val | -edges -| deallocation.rs:148:6:148:7 | p1 | deallocation.rs:151:14:151:15 | p1 | provenance | | -| deallocation.rs:148:6:148:7 | p1 | deallocation.rs:158:14:158:15 | p1 | provenance | | -| deallocation.rs:148:30:148:38 | &raw const my_buffer | deallocation.rs:148:6:148:7 | p1 | provenance | | -| deallocation.rs:228:28:228:43 | ...: ... | deallocation.rs:230:18:230:20 | ptr | provenance | | -| deallocation.rs:240:27:240:42 | ...: ... | deallocation.rs:248:18:248:20 | ptr | provenance | | -| deallocation.rs:257:7:257:10 | ptr1 | deallocation.rs:260:4:260:7 | ptr1 | provenance | | -| deallocation.rs:257:7:257:10 | ptr1 | deallocation.rs:260:4:260:7 | ptr1 | provenance | | -| deallocation.rs:257:14:257:33 | &raw mut ... | deallocation.rs:257:7:257:10 | ptr1 | provenance | | -| deallocation.rs:258:7:258:10 | ptr2 | deallocation.rs:261:4:261:7 | ptr2 | provenance | | -| deallocation.rs:258:7:258:10 | ptr2 | deallocation.rs:261:4:261:7 | ptr2 | provenance | | -| deallocation.rs:258:14:258:33 | &raw mut ... | deallocation.rs:258:7:258:10 | ptr2 | provenance | | -| deallocation.rs:260:4:260:7 | ptr1 | deallocation.rs:263:27:263:30 | ptr1 | provenance | | -| deallocation.rs:261:4:261:7 | ptr2 | deallocation.rs:265:26:265:29 | ptr2 | provenance | | -| deallocation.rs:263:27:263:30 | ptr1 | deallocation.rs:228:28:228:43 | ...: ... | provenance | | -| deallocation.rs:265:26:265:29 | ptr2 | deallocation.rs:240:27:240:42 | ...: ... | provenance | | -| deallocation.rs:276:6:276:9 | ptr1 | deallocation.rs:279:13:279:16 | ptr1 | provenance | | -| deallocation.rs:276:6:276:9 | ptr1 | deallocation.rs:287:13:287:16 | ptr1 | provenance | | -| deallocation.rs:276:13:276:28 | &raw mut ... | deallocation.rs:276:6:276:9 | ptr1 | provenance | | -| deallocation.rs:295:6:295:9 | ptr2 | deallocation.rs:298:13:298:16 | ptr2 | provenance | | -| deallocation.rs:295:6:295:9 | ptr2 | deallocation.rs:308:13:308:16 | ptr2 | provenance | | -| deallocation.rs:295:13:295:28 | &raw mut ... | deallocation.rs:295:6:295:9 | ptr2 | provenance | | -| lifetime.rs:21:2:21:18 | return ... | lifetime.rs:54:11:54:30 | get_local_dangling(...) | provenance | | -| lifetime.rs:21:9:21:18 | &my_local1 | lifetime.rs:21:2:21:18 | return ... | provenance | | -| lifetime.rs:27:2:27:22 | return ... | lifetime.rs:55:11:55:34 | get_local_dangling_mut(...) | provenance | | -| lifetime.rs:27:9:27:22 | &mut my_local2 | lifetime.rs:27:2:27:22 | return ... | provenance | | -| lifetime.rs:33:2:33:28 | return ... | lifetime.rs:56:11:56:40 | get_local_dangling_raw_const(...) | provenance | | -| lifetime.rs:33:9:33:28 | &raw const my_local3 | lifetime.rs:33:2:33:28 | return ... | provenance | | -| lifetime.rs:39:2:39:26 | return ... | lifetime.rs:57:11:57:38 | get_local_dangling_raw_mut(...) | provenance | | -| lifetime.rs:39:9:39:26 | &raw mut my_local4 | lifetime.rs:39:2:39:26 | return ... | provenance | | -| lifetime.rs:43:2:43:15 | return ... | lifetime.rs:58:11:58:31 | get_param_dangling(...) | provenance | | -| lifetime.rs:43:9:43:15 | ¶m5 | lifetime.rs:43:2:43:15 | return ... | provenance | | -| lifetime.rs:50:2:50:18 | return ... | lifetime.rs:59:11:59:36 | get_local_field_dangling(...) | provenance | | -| lifetime.rs:50:9:50:18 | &... | lifetime.rs:50:2:50:18 | return ... | provenance | | -| lifetime.rs:54:6:54:7 | p1 | lifetime.rs:69:13:69:14 | p1 | provenance | | -| lifetime.rs:54:11:54:30 | get_local_dangling(...) | lifetime.rs:54:6:54:7 | p1 | provenance | | -| lifetime.rs:55:6:55:7 | p2 | lifetime.rs:70:13:70:14 | p2 | provenance | | -| lifetime.rs:55:6:55:7 | p2 | lifetime.rs:76:4:76:5 | p2 | provenance | | -| lifetime.rs:55:11:55:34 | get_local_dangling_mut(...) | lifetime.rs:55:6:55:7 | p2 | provenance | | -| lifetime.rs:56:6:56:7 | p3 | lifetime.rs:71:13:71:14 | p3 | provenance | | -| lifetime.rs:56:11:56:40 | get_local_dangling_raw_const(...) | lifetime.rs:56:6:56:7 | p3 | provenance | | -| lifetime.rs:57:6:57:7 | p4 | lifetime.rs:72:13:72:14 | p4 | provenance | | -| lifetime.rs:57:6:57:7 | p4 | lifetime.rs:77:4:77:5 | p4 | provenance | | -| lifetime.rs:57:11:57:38 | get_local_dangling_raw_mut(...) | lifetime.rs:57:6:57:7 | p4 | provenance | | -| lifetime.rs:58:6:58:7 | p5 | lifetime.rs:73:13:73:14 | p5 | provenance | | -| lifetime.rs:58:11:58:31 | get_param_dangling(...) | lifetime.rs:58:6:58:7 | p5 | provenance | | -| lifetime.rs:59:6:59:7 | p6 | lifetime.rs:74:13:74:14 | p6 | provenance | | -| lifetime.rs:59:11:59:36 | get_local_field_dangling(...) | lifetime.rs:59:6:59:7 | p6 | provenance | | -| lifetime.rs:63:3:63:4 | p7 | lifetime.rs:75:13:75:14 | p7 | provenance | | -| lifetime.rs:63:8:63:27 | &raw const my_local7 | lifetime.rs:63:3:63:4 | p7 | provenance | | -| lifetime.rs:91:17:91:30 | ...: ... | lifetime.rs:101:14:101:15 | p1 | provenance | | -| lifetime.rs:91:33:91:44 | ...: ... | lifetime.rs:102:14:102:15 | p2 | provenance | | -| lifetime.rs:91:33:91:44 | ...: ... | lifetime.rs:110:5:110:6 | p2 | provenance | | -| lifetime.rs:94:2:94:3 | p3 | lifetime.rs:103:14:103:15 | p3 | provenance | | -| lifetime.rs:94:7:94:16 | &my_local1 | lifetime.rs:94:2:94:3 | p3 | provenance | | -| lifetime.rs:119:15:119:24 | &my_local3 | lifetime.rs:91:17:91:30 | ...: ... | provenance | | -| lifetime.rs:119:27:119:44 | &mut my_local_mut4 | lifetime.rs:91:33:91:44 | ...: ... | provenance | | -| lifetime.rs:127:2:127:24 | return ... | lifetime.rs:139:11:139:21 | get_const(...) | provenance | | -| lifetime.rs:127:9:127:24 | &MY_GLOBAL_CONST | lifetime.rs:127:2:127:24 | return ... | provenance | | -| lifetime.rs:134:3:134:30 | return ... | lifetime.rs:140:11:140:26 | get_static_mut(...) | provenance | | -| lifetime.rs:134:10:134:30 | &mut MY_GLOBAL_STATIC | lifetime.rs:134:3:134:30 | return ... | provenance | | -| lifetime.rs:139:6:139:7 | p1 | lifetime.rs:147:14:147:15 | p1 | provenance | | -| lifetime.rs:139:11:139:21 | get_const(...) | lifetime.rs:139:6:139:7 | p1 | provenance | | -| lifetime.rs:140:6:140:7 | p2 | lifetime.rs:148:14:148:15 | p2 | provenance | | -| lifetime.rs:140:6:140:7 | p2 | lifetime.rs:154:5:154:6 | p2 | provenance | | -| lifetime.rs:140:11:140:26 | get_static_mut(...) | lifetime.rs:140:6:140:7 | p2 | provenance | | -| lifetime.rs:161:17:161:31 | ...: ... | lifetime.rs:164:13:164:15 | ptr | provenance | | -| lifetime.rs:169:17:169:31 | ...: ... | lifetime.rs:172:13:172:15 | ptr | provenance | | -| lifetime.rs:177:17:177:31 | ...: ... | lifetime.rs:180:13:180:15 | ptr | provenance | | -| lifetime.rs:187:6:187:8 | ptr | lifetime.rs:189:15:189:17 | ptr | provenance | | -| lifetime.rs:187:6:187:8 | ptr | lifetime.rs:190:15:190:17 | ptr | provenance | | -| lifetime.rs:187:6:187:8 | ptr | lifetime.rs:192:2:192:11 | return ptr | provenance | | -| lifetime.rs:187:12:187:21 | &my_local1 | lifetime.rs:187:6:187:8 | ptr | provenance | | -| lifetime.rs:189:15:189:17 | ptr | lifetime.rs:161:17:161:31 | ...: ... | provenance | | -| lifetime.rs:190:15:190:17 | ptr | lifetime.rs:177:17:177:31 | ...: ... | provenance | | -| lifetime.rs:192:2:192:11 | return ptr | lifetime.rs:196:12:196:36 | access_and_get_dangling(...) | provenance | | -| lifetime.rs:196:6:196:8 | ptr | lifetime.rs:200:15:200:17 | ptr | provenance | | -| lifetime.rs:196:6:196:8 | ptr | lifetime.rs:201:15:201:17 | ptr | provenance | | -| lifetime.rs:196:12:196:36 | access_and_get_dangling(...) | lifetime.rs:196:6:196:8 | ptr | provenance | | -| lifetime.rs:200:15:200:17 | ptr | lifetime.rs:169:17:169:31 | ...: ... | provenance | | -| lifetime.rs:201:15:201:17 | ptr | lifetime.rs:177:17:177:31 | ...: ... | provenance | | -| lifetime.rs:206:19:206:36 | ...: ... | lifetime.rs:216:16:216:21 | ptr_up | provenance | | -| lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:211:33:211:40 | ptr_ours | provenance | | -| lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:217:18:217:25 | ptr_ours | provenance | | -| lifetime.rs:208:6:208:13 | ptr_ours | lifetime.rs:225:2:225:16 | return ptr_ours | provenance | | -| lifetime.rs:208:17:208:29 | &my_local_rec | lifetime.rs:208:6:208:13 | ptr_ours | provenance | | -| lifetime.rs:211:7:211:14 | ptr_down | lifetime.rs:218:18:218:25 | ptr_down | provenance | | -| lifetime.rs:211:18:211:52 | access_ptr_rec(...) | lifetime.rs:211:7:211:14 | ptr_down | provenance | | -| lifetime.rs:211:33:211:40 | ptr_ours | lifetime.rs:206:19:206:36 | ...: ... | provenance | | -| lifetime.rs:225:2:225:16 | return ptr_ours | lifetime.rs:211:18:211:52 | access_ptr_rec(...) | provenance | | -| lifetime.rs:230:6:230:14 | ptr_start | lifetime.rs:232:21:232:29 | ptr_start | provenance | | -| lifetime.rs:230:18:230:31 | &my_local_rec2 | lifetime.rs:230:6:230:14 | ptr_start | provenance | | -| lifetime.rs:232:21:232:29 | ptr_start | lifetime.rs:206:19:206:36 | ...: ... | provenance | | -| lifetime.rs:239:6:239:13 | mut prev | lifetime.rs:247:15:247:18 | prev | provenance | | -| lifetime.rs:239:6:239:13 | mut prev | lifetime.rs:255:14:255:17 | prev | provenance | | -| lifetime.rs:239:34:239:43 | &my_local1 | lifetime.rs:239:6:239:13 | mut prev | provenance | | -| lifetime.rs:251:3:251:6 | prev | lifetime.rs:247:15:247:18 | prev | provenance | | -| lifetime.rs:251:3:251:6 | prev | lifetime.rs:255:14:255:17 | prev | provenance | | -| lifetime.rs:251:10:251:19 | &my_local2 | lifetime.rs:251:3:251:6 | prev | provenance | | -| lifetime.rs:270:47:275:1 | { ... } | lifetime.rs:303:11:303:31 | get_pointer_to_enum(...) | provenance | | -| lifetime.rs:272:6:272:11 | result | lifetime.rs:270:47:275:1 | { ... } | provenance | | -| lifetime.rs:272:30:272:32 | &e1 | lifetime.rs:272:6:272:11 | result | provenance | | -| lifetime.rs:284:46:300:1 | { ... } | lifetime.rs:305:15:305:37 | get_pointer_from_enum(...) | provenance | | -| lifetime.rs:288:2:288:7 | result | lifetime.rs:284:46:300:1 | { ... } | provenance | | -| lifetime.rs:288:2:288:7 | result | lifetime.rs:295:13:295:18 | result | provenance | | -| lifetime.rs:289:25:289:26 | &x | lifetime.rs:288:2:288:7 | result | provenance | | -| lifetime.rs:303:6:303:7 | e1 | lifetime.rs:310:31:310:32 | e1 | provenance | | -| lifetime.rs:303:11:303:31 | get_pointer_to_enum(...) | lifetime.rs:303:6:303:7 | e1 | provenance | | -| lifetime.rs:305:6:305:11 | result | lifetime.rs:317:13:317:18 | result | provenance | | -| lifetime.rs:305:15:305:37 | get_pointer_from_enum(...) | lifetime.rs:305:6:305:11 | result | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:388:15:388:16 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:391:15:391:16 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:399:6:399:7 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:401:6:401:7 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:411:16:411:17 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:416:16:416:17 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:428:7:428:8 | p1 | provenance | | -| lifetime.rs:383:3:383:4 | p1 | lifetime.rs:433:7:433:8 | p1 | provenance | | -| lifetime.rs:383:31:383:37 | &raw mut my_pair | lifetime.rs:383:3:383:4 | p1 | provenance | | -| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:394:14:394:15 | p2 | provenance | | -| lifetime.rs:384:3:384:4 | p2 | lifetime.rs:421:15:421:16 | p2 | provenance | | -| lifetime.rs:384:27:384:35 | &raw const ... | lifetime.rs:384:3:384:4 | p2 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:395:14:395:15 | p3 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | -| lifetime.rs:385:3:385:4 | p3 | lifetime.rs:400:5:400:6 | p3 | provenance | | -| lifetime.rs:385:31:385:39 | &raw mut ... | lifetime.rs:385:3:385:4 | p3 | provenance | | -| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:422:15:422:16 | p3 | provenance | | -| lifetime.rs:400:5:400:6 | p3 | lifetime.rs:429:6:429:7 | p3 | provenance | | -| lifetime.rs:442:6:442:7 | r1 | lifetime.rs:443:42:443:43 | r1 | provenance | | -| lifetime.rs:442:17:442:23 | &my_val | lifetime.rs:442:6:442:7 | r1 | provenance | | -| lifetime.rs:443:6:443:7 | p1 | lifetime.rs:446:13:446:14 | p1 | provenance | | -| lifetime.rs:443:6:443:7 | p1 | lifetime.rs:450:2:450:10 | return p1 | provenance | | -| lifetime.rs:443:23:443:44 | ...::from_ref(...) | lifetime.rs:443:6:443:7 | p1 | provenance | | -| lifetime.rs:443:42:443:43 | r1 | lifetime.rs:443:23:443:44 | ...::from_ref(...) | provenance | MaD:1 | -| lifetime.rs:450:2:450:10 | return p1 | lifetime.rs:454:11:454:29 | get_ptr_from_ref(...) | provenance | | -| lifetime.rs:450:2:450:10 | return p1 | lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | provenance | | -| lifetime.rs:454:6:454:7 | p1 | lifetime.rs:459:13:459:14 | p1 | provenance | | -| lifetime.rs:454:11:454:29 | get_ptr_from_ref(...) | lifetime.rs:454:6:454:7 | p1 | provenance | | -| lifetime.rs:568:7:568:8 | p2 | lifetime.rs:572:14:572:15 | p2 | provenance | | -| lifetime.rs:568:24:568:33 | &my_local2 | lifetime.rs:568:7:568:8 | p2 | provenance | | -| lifetime.rs:630:3:630:6 | str2 | lifetime.rs:633:15:633:18 | str2 | provenance | | -| lifetime.rs:630:3:630:6 | str2 | lifetime.rs:641:14:641:17 | str2 | provenance | | -| lifetime.rs:630:10:630:25 | &... | lifetime.rs:630:3:630:6 | str2 | provenance | | -| lifetime.rs:654:4:654:7 | str2 | lifetime.rs:655:22:655:25 | str2 | provenance | | -| lifetime.rs:654:31:654:35 | &str1 | lifetime.rs:654:4:654:7 | str2 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 | lifetime.rs:659:15:659:18 | ref1 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 | lifetime.rs:667:14:667:17 | ref1 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | lifetime.rs:659:15:659:18 | ref1 | provenance | | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | lifetime.rs:667:14:667:17 | ref1 | provenance | | -| lifetime.rs:655:11:655:25 | &raw const str2 | lifetime.rs:655:4:655:7 | ref1 | provenance | | -| lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | lifetime.rs:655:4:655:7 | ref1 [&ref] | provenance | | -| lifetime.rs:655:22:655:25 | str2 | lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | provenance | | -| lifetime.rs:680:7:680:8 | r1 | lifetime.rs:692:13:692:14 | r1 | provenance | | -| lifetime.rs:682:4:682:12 | &... | lifetime.rs:680:7:680:8 | r1 | provenance | | -| lifetime.rs:684:7:684:14 | TuplePat [tuple.0] | lifetime.rs:684:8:684:9 | r2 | provenance | | -| lifetime.rs:684:7:684:14 | TuplePat [tuple.1] | lifetime.rs:684:12:684:13 | r3 | provenance | | -| lifetime.rs:684:8:684:9 | r2 | lifetime.rs:693:13:693:14 | r2 | provenance | | -| lifetime.rs:684:12:684:13 | r3 | lifetime.rs:694:13:694:14 | r3 | provenance | | -| lifetime.rs:686:4:687:16 | TupleExpr [tuple.0] | lifetime.rs:684:7:684:14 | TuplePat [tuple.0] | provenance | | -| lifetime.rs:686:4:687:16 | TupleExpr [tuple.1] | lifetime.rs:684:7:684:14 | TuplePat [tuple.1] | provenance | | -| lifetime.rs:686:5:686:13 | &... | lifetime.rs:686:4:687:16 | TupleExpr [tuple.0] | provenance | | -| lifetime.rs:687:5:687:15 | &... | lifetime.rs:686:4:687:16 | TupleExpr [tuple.1] | provenance | | -| lifetime.rs:717:35:723:2 | { ... } | lifetime.rs:730:11:730:25 | e1.test_match() | provenance | | -| lifetime.rs:718:7:718:8 | r1 | lifetime.rs:717:35:723:2 | { ... } | provenance | | -| lifetime.rs:719:26:719:34 | &... | lifetime.rs:718:7:718:8 | r1 | provenance | | -| lifetime.rs:730:6:730:7 | r1 | lifetime.rs:734:12:734:13 | r1 | provenance | | -| lifetime.rs:730:11:730:25 | e1.test_match() | lifetime.rs:730:6:730:7 | r1 | provenance | | -| lifetime.rs:766:2:766:13 | &val | lifetime.rs:766:2:766:13 | ptr | provenance | | -| lifetime.rs:766:2:766:13 | ptr | lifetime.rs:767:2:767:13 | ptr | provenance | | -| lifetime.rs:769:6:769:8 | ptr | lifetime.rs:771:12:771:14 | ptr | provenance | | -| lifetime.rs:769:12:769:23 | &val | lifetime.rs:769:12:769:23 | ptr | provenance | | -| lifetime.rs:769:12:769:23 | ptr | lifetime.rs:769:6:769:8 | ptr | provenance | | -| lifetime.rs:781:2:781:19 | return ... | lifetime.rs:785:11:785:41 | get_local_for_unsafe_function(...) | provenance | | -| lifetime.rs:781:9:781:19 | &my_local10 | lifetime.rs:781:2:781:19 | return ... | provenance | | -| lifetime.rs:785:6:785:7 | p1 | lifetime.rs:789:12:789:13 | p1 | provenance | | -| lifetime.rs:785:11:785:41 | get_local_for_unsafe_function(...) | lifetime.rs:785:6:785:7 | p1 | provenance | | -| lifetime.rs:798:2:798:12 | return ... | lifetime.rs:802:12:802:24 | get_pointer(...) | provenance | | -| lifetime.rs:798:9:798:12 | &val | lifetime.rs:798:2:798:12 | return ... | provenance | | -| lifetime.rs:802:6:802:8 | ptr | lifetime.rs:808:23:808:25 | ptr | provenance | | -| lifetime.rs:802:12:802:24 | get_pointer(...) | lifetime.rs:802:6:802:8 | ptr | provenance | | -models -| 1 | Summary: core::ptr::from_ref; Argument[0]; ReturnValue; value | -nodes -| deallocation.rs:148:6:148:7 | p1 | semmle.label | p1 | -| deallocation.rs:148:30:148:38 | &raw const my_buffer | semmle.label | &raw const my_buffer | -| deallocation.rs:151:14:151:15 | p1 | semmle.label | p1 | -| deallocation.rs:158:14:158:15 | p1 | semmle.label | p1 | -| deallocation.rs:228:28:228:43 | ...: ... | semmle.label | ...: ... | -| deallocation.rs:230:18:230:20 | ptr | semmle.label | ptr | -| deallocation.rs:240:27:240:42 | ...: ... | semmle.label | ...: ... | -| deallocation.rs:248:18:248:20 | ptr | semmle.label | ptr | -| deallocation.rs:257:7:257:10 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:257:14:257:33 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:258:7:258:10 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:258:14:258:33 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:260:4:260:7 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:260:4:260:7 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:261:4:261:7 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:261:4:261:7 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:263:27:263:30 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:265:26:265:29 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:276:6:276:9 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:276:13:276:28 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:279:13:279:16 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:287:13:287:16 | ptr1 | semmle.label | ptr1 | -| deallocation.rs:295:6:295:9 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:295:13:295:28 | &raw mut ... | semmle.label | &raw mut ... | -| deallocation.rs:298:13:298:16 | ptr2 | semmle.label | ptr2 | -| deallocation.rs:308:13:308:16 | ptr2 | semmle.label | ptr2 | -| lifetime.rs:21:2:21:18 | return ... | semmle.label | return ... | -| lifetime.rs:21:9:21:18 | &my_local1 | semmle.label | &my_local1 | -| lifetime.rs:27:2:27:22 | return ... | semmle.label | return ... | -| lifetime.rs:27:9:27:22 | &mut my_local2 | semmle.label | &mut my_local2 | -| lifetime.rs:33:2:33:28 | return ... | semmle.label | return ... | -| lifetime.rs:33:9:33:28 | &raw const my_local3 | semmle.label | &raw const my_local3 | -| lifetime.rs:39:2:39:26 | return ... | semmle.label | return ... | -| lifetime.rs:39:9:39:26 | &raw mut my_local4 | semmle.label | &raw mut my_local4 | -| lifetime.rs:43:2:43:15 | return ... | semmle.label | return ... | -| lifetime.rs:43:9:43:15 | ¶m5 | semmle.label | ¶m5 | -| lifetime.rs:50:2:50:18 | return ... | semmle.label | return ... | -| lifetime.rs:50:9:50:18 | &... | semmle.label | &... | -| lifetime.rs:54:6:54:7 | p1 | semmle.label | p1 | -| lifetime.rs:54:11:54:30 | get_local_dangling(...) | semmle.label | get_local_dangling(...) | -| lifetime.rs:55:6:55:7 | p2 | semmle.label | p2 | -| lifetime.rs:55:11:55:34 | get_local_dangling_mut(...) | semmle.label | get_local_dangling_mut(...) | -| lifetime.rs:56:6:56:7 | p3 | semmle.label | p3 | -| lifetime.rs:56:11:56:40 | get_local_dangling_raw_const(...) | semmle.label | get_local_dangling_raw_const(...) | -| lifetime.rs:57:6:57:7 | p4 | semmle.label | p4 | -| lifetime.rs:57:11:57:38 | get_local_dangling_raw_mut(...) | semmle.label | get_local_dangling_raw_mut(...) | -| lifetime.rs:58:6:58:7 | p5 | semmle.label | p5 | -| lifetime.rs:58:11:58:31 | get_param_dangling(...) | semmle.label | get_param_dangling(...) | -| lifetime.rs:59:6:59:7 | p6 | semmle.label | p6 | -| lifetime.rs:59:11:59:36 | get_local_field_dangling(...) | semmle.label | get_local_field_dangling(...) | -| lifetime.rs:63:3:63:4 | p7 | semmle.label | p7 | -| lifetime.rs:63:8:63:27 | &raw const my_local7 | semmle.label | &raw const my_local7 | -| lifetime.rs:69:13:69:14 | p1 | semmle.label | p1 | -| lifetime.rs:70:13:70:14 | p2 | semmle.label | p2 | -| lifetime.rs:71:13:71:14 | p3 | semmle.label | p3 | -| lifetime.rs:72:13:72:14 | p4 | semmle.label | p4 | -| lifetime.rs:73:13:73:14 | p5 | semmle.label | p5 | -| lifetime.rs:74:13:74:14 | p6 | semmle.label | p6 | -| lifetime.rs:75:13:75:14 | p7 | semmle.label | p7 | -| lifetime.rs:76:4:76:5 | p2 | semmle.label | p2 | -| lifetime.rs:77:4:77:5 | p4 | semmle.label | p4 | -| lifetime.rs:91:17:91:30 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:91:33:91:44 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:94:2:94:3 | p3 | semmle.label | p3 | -| lifetime.rs:94:7:94:16 | &my_local1 | semmle.label | &my_local1 | -| lifetime.rs:101:14:101:15 | p1 | semmle.label | p1 | -| lifetime.rs:102:14:102:15 | p2 | semmle.label | p2 | -| lifetime.rs:103:14:103:15 | p3 | semmle.label | p3 | -| lifetime.rs:110:5:110:6 | p2 | semmle.label | p2 | -| lifetime.rs:119:15:119:24 | &my_local3 | semmle.label | &my_local3 | -| lifetime.rs:119:27:119:44 | &mut my_local_mut4 | semmle.label | &mut my_local_mut4 | -| lifetime.rs:127:2:127:24 | return ... | semmle.label | return ... | -| lifetime.rs:127:9:127:24 | &MY_GLOBAL_CONST | semmle.label | &MY_GLOBAL_CONST | -| lifetime.rs:134:3:134:30 | return ... | semmle.label | return ... | -| lifetime.rs:134:10:134:30 | &mut MY_GLOBAL_STATIC | semmle.label | &mut MY_GLOBAL_STATIC | -| lifetime.rs:139:6:139:7 | p1 | semmle.label | p1 | -| lifetime.rs:139:11:139:21 | get_const(...) | semmle.label | get_const(...) | -| lifetime.rs:140:6:140:7 | p2 | semmle.label | p2 | -| lifetime.rs:140:11:140:26 | get_static_mut(...) | semmle.label | get_static_mut(...) | -| lifetime.rs:147:14:147:15 | p1 | semmle.label | p1 | -| lifetime.rs:148:14:148:15 | p2 | semmle.label | p2 | -| lifetime.rs:154:5:154:6 | p2 | semmle.label | p2 | -| lifetime.rs:161:17:161:31 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:164:13:164:15 | ptr | semmle.label | ptr | -| lifetime.rs:169:17:169:31 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:172:13:172:15 | ptr | semmle.label | ptr | -| lifetime.rs:177:17:177:31 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:180:13:180:15 | ptr | semmle.label | ptr | -| lifetime.rs:187:6:187:8 | ptr | semmle.label | ptr | -| lifetime.rs:187:12:187:21 | &my_local1 | semmle.label | &my_local1 | -| lifetime.rs:189:15:189:17 | ptr | semmle.label | ptr | -| lifetime.rs:190:15:190:17 | ptr | semmle.label | ptr | -| lifetime.rs:192:2:192:11 | return ptr | semmle.label | return ptr | -| lifetime.rs:196:6:196:8 | ptr | semmle.label | ptr | -| lifetime.rs:196:12:196:36 | access_and_get_dangling(...) | semmle.label | access_and_get_dangling(...) | -| lifetime.rs:200:15:200:17 | ptr | semmle.label | ptr | -| lifetime.rs:201:15:201:17 | ptr | semmle.label | ptr | -| lifetime.rs:206:19:206:36 | ...: ... | semmle.label | ...: ... | -| lifetime.rs:208:6:208:13 | ptr_ours | semmle.label | ptr_ours | -| lifetime.rs:208:17:208:29 | &my_local_rec | semmle.label | &my_local_rec | -| lifetime.rs:211:7:211:14 | ptr_down | semmle.label | ptr_down | -| lifetime.rs:211:18:211:52 | access_ptr_rec(...) | semmle.label | access_ptr_rec(...) | -| lifetime.rs:211:33:211:40 | ptr_ours | semmle.label | ptr_ours | -| lifetime.rs:216:16:216:21 | ptr_up | semmle.label | ptr_up | -| lifetime.rs:217:18:217:25 | ptr_ours | semmle.label | ptr_ours | -| lifetime.rs:218:18:218:25 | ptr_down | semmle.label | ptr_down | -| lifetime.rs:225:2:225:16 | return ptr_ours | semmle.label | return ptr_ours | -| lifetime.rs:230:6:230:14 | ptr_start | semmle.label | ptr_start | -| lifetime.rs:230:18:230:31 | &my_local_rec2 | semmle.label | &my_local_rec2 | -| lifetime.rs:232:21:232:29 | ptr_start | semmle.label | ptr_start | -| lifetime.rs:239:6:239:13 | mut prev | semmle.label | mut prev | -| lifetime.rs:239:34:239:43 | &my_local1 | semmle.label | &my_local1 | -| lifetime.rs:247:15:247:18 | prev | semmle.label | prev | -| lifetime.rs:251:3:251:6 | prev | semmle.label | prev | -| lifetime.rs:251:10:251:19 | &my_local2 | semmle.label | &my_local2 | -| lifetime.rs:255:14:255:17 | prev | semmle.label | prev | -| lifetime.rs:270:47:275:1 | { ... } | semmle.label | { ... } | -| lifetime.rs:272:6:272:11 | result | semmle.label | result | -| lifetime.rs:272:30:272:32 | &e1 | semmle.label | &e1 | -| lifetime.rs:284:46:300:1 | { ... } | semmle.label | { ... } | -| lifetime.rs:288:2:288:7 | result | semmle.label | result | -| lifetime.rs:289:25:289:26 | &x | semmle.label | &x | -| lifetime.rs:295:13:295:18 | result | semmle.label | result | -| lifetime.rs:303:6:303:7 | e1 | semmle.label | e1 | -| lifetime.rs:303:11:303:31 | get_pointer_to_enum(...) | semmle.label | get_pointer_to_enum(...) | -| lifetime.rs:305:6:305:11 | result | semmle.label | result | -| lifetime.rs:305:15:305:37 | get_pointer_from_enum(...) | semmle.label | get_pointer_from_enum(...) | -| lifetime.rs:310:31:310:32 | e1 | semmle.label | e1 | -| lifetime.rs:317:13:317:18 | result | semmle.label | result | -| lifetime.rs:383:3:383:4 | p1 | semmle.label | p1 | -| lifetime.rs:383:31:383:37 | &raw mut my_pair | semmle.label | &raw mut my_pair | -| lifetime.rs:384:3:384:4 | p2 | semmle.label | p2 | -| lifetime.rs:384:27:384:35 | &raw const ... | semmle.label | &raw const ... | -| lifetime.rs:385:3:385:4 | p3 | semmle.label | p3 | -| lifetime.rs:385:31:385:39 | &raw mut ... | semmle.label | &raw mut ... | -| lifetime.rs:388:15:388:16 | p1 | semmle.label | p1 | -| lifetime.rs:391:15:391:16 | p1 | semmle.label | p1 | -| lifetime.rs:394:14:394:15 | p2 | semmle.label | p2 | -| lifetime.rs:395:14:395:15 | p3 | semmle.label | p3 | -| lifetime.rs:399:6:399:7 | p1 | semmle.label | p1 | -| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | -| lifetime.rs:400:5:400:6 | p3 | semmle.label | p3 | -| lifetime.rs:401:6:401:7 | p1 | semmle.label | p1 | -| lifetime.rs:411:16:411:17 | p1 | semmle.label | p1 | -| lifetime.rs:416:16:416:17 | p1 | semmle.label | p1 | -| lifetime.rs:421:15:421:16 | p2 | semmle.label | p2 | -| lifetime.rs:422:15:422:16 | p3 | semmle.label | p3 | -| lifetime.rs:428:7:428:8 | p1 | semmle.label | p1 | -| lifetime.rs:429:6:429:7 | p3 | semmle.label | p3 | -| lifetime.rs:433:7:433:8 | p1 | semmle.label | p1 | -| lifetime.rs:442:6:442:7 | r1 | semmle.label | r1 | -| lifetime.rs:442:17:442:23 | &my_val | semmle.label | &my_val | -| lifetime.rs:443:6:443:7 | p1 | semmle.label | p1 | -| lifetime.rs:443:23:443:44 | ...::from_ref(...) | semmle.label | ...::from_ref(...) | -| lifetime.rs:443:42:443:43 | r1 | semmle.label | r1 | -| lifetime.rs:446:13:446:14 | p1 | semmle.label | p1 | -| lifetime.rs:450:2:450:10 | return p1 | semmle.label | return p1 | -| lifetime.rs:454:6:454:7 | p1 | semmle.label | p1 | -| lifetime.rs:454:11:454:29 | get_ptr_from_ref(...) | semmle.label | get_ptr_from_ref(...) | -| lifetime.rs:459:13:459:14 | p1 | semmle.label | p1 | -| lifetime.rs:460:13:460:31 | get_ptr_from_ref(...) | semmle.label | get_ptr_from_ref(...) | -| lifetime.rs:568:7:568:8 | p2 | semmle.label | p2 | -| lifetime.rs:568:24:568:33 | &my_local2 | semmle.label | &my_local2 | -| lifetime.rs:572:14:572:15 | p2 | semmle.label | p2 | -| lifetime.rs:630:3:630:6 | str2 | semmle.label | str2 | -| lifetime.rs:630:10:630:25 | &... | semmle.label | &... | -| lifetime.rs:633:15:633:18 | str2 | semmle.label | str2 | -| lifetime.rs:641:14:641:17 | str2 | semmle.label | str2 | -| lifetime.rs:654:4:654:7 | str2 | semmle.label | str2 | -| lifetime.rs:654:31:654:35 | &str1 | semmle.label | &str1 | -| lifetime.rs:655:4:655:7 | ref1 | semmle.label | ref1 | -| lifetime.rs:655:4:655:7 | ref1 [&ref] | semmle.label | ref1 [&ref] | -| lifetime.rs:655:11:655:25 | &raw const str2 | semmle.label | &raw const str2 | -| lifetime.rs:655:11:655:25 | &raw const str2 [&ref] | semmle.label | &raw const str2 [&ref] | -| lifetime.rs:655:22:655:25 | str2 | semmle.label | str2 | -| lifetime.rs:659:15:659:18 | ref1 | semmle.label | ref1 | -| lifetime.rs:667:14:667:17 | ref1 | semmle.label | ref1 | -| lifetime.rs:680:7:680:8 | r1 | semmle.label | r1 | -| lifetime.rs:682:4:682:12 | &... | semmle.label | &... | -| lifetime.rs:684:7:684:14 | TuplePat [tuple.0] | semmle.label | TuplePat [tuple.0] | -| lifetime.rs:684:7:684:14 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] | -| lifetime.rs:684:8:684:9 | r2 | semmle.label | r2 | -| lifetime.rs:684:12:684:13 | r3 | semmle.label | r3 | -| lifetime.rs:686:4:687:16 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| lifetime.rs:686:4:687:16 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| lifetime.rs:686:5:686:13 | &... | semmle.label | &... | -| lifetime.rs:687:5:687:15 | &... | semmle.label | &... | -| lifetime.rs:692:13:692:14 | r1 | semmle.label | r1 | -| lifetime.rs:693:13:693:14 | r2 | semmle.label | r2 | -| lifetime.rs:694:13:694:14 | r3 | semmle.label | r3 | -| lifetime.rs:717:35:723:2 | { ... } | semmle.label | { ... } | -| lifetime.rs:718:7:718:8 | r1 | semmle.label | r1 | -| lifetime.rs:719:26:719:34 | &... | semmle.label | &... | -| lifetime.rs:730:6:730:7 | r1 | semmle.label | r1 | -| lifetime.rs:730:11:730:25 | e1.test_match() | semmle.label | e1.test_match() | -| lifetime.rs:734:12:734:13 | r1 | semmle.label | r1 | -| lifetime.rs:766:2:766:13 | &val | semmle.label | &val | -| lifetime.rs:766:2:766:13 | ptr | semmle.label | ptr | -| lifetime.rs:767:2:767:13 | ptr | semmle.label | ptr | -| lifetime.rs:769:6:769:8 | ptr | semmle.label | ptr | -| lifetime.rs:769:12:769:23 | &val | semmle.label | &val | -| lifetime.rs:769:12:769:23 | ptr | semmle.label | ptr | -| lifetime.rs:771:12:771:14 | ptr | semmle.label | ptr | -| lifetime.rs:781:2:781:19 | return ... | semmle.label | return ... | -| lifetime.rs:781:9:781:19 | &my_local10 | semmle.label | &my_local10 | -| lifetime.rs:785:6:785:7 | p1 | semmle.label | p1 | -| lifetime.rs:785:11:785:41 | get_local_for_unsafe_function(...) | semmle.label | get_local_for_unsafe_function(...) | -| lifetime.rs:789:12:789:13 | p1 | semmle.label | p1 | -| lifetime.rs:798:2:798:12 | return ... | semmle.label | return ... | -| lifetime.rs:798:9:798:12 | &val | semmle.label | &val | -| lifetime.rs:802:6:802:8 | ptr | semmle.label | ptr | -| lifetime.rs:802:12:802:24 | get_pointer(...) | semmle.label | get_pointer(...) | -| lifetime.rs:808:23:808:25 | ptr | semmle.label | ptr | -subpaths diff --git a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.qlref b/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.qlref deleted file mode 100644 index d9249badc000..000000000000 --- a/rust/ql/test/query-tests/security/CWE-825/AccessAfterLifetime.qlref +++ /dev/null @@ -1,4 +0,0 @@ -query: queries/security/CWE-825/AccessAfterLifetime.ql -postprocess: - - utils/test/PrettyPrintModels.ql - - utils/test/InlineExpectationsTestQuery.ql diff --git a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected index bd02a006dc88..8a491037fbf9 100644 --- a/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-825/CONSISTENCY/PathResolutionConsistency.expected @@ -3,14 +3,6 @@ multipleCallTargets | deallocation.rs:112:3:112:41 | ...::free(...) | | deallocation.rs:260:11:260:29 | ...::from(...) | | deallocation.rs:261:11:261:29 | ...::from(...) | -| lifetime.rs:610:13:610:31 | ...::from(...) | -| lifetime.rs:611:13:611:31 | ...::from(...) | -| lifetime.rs:612:27:612:38 | foo.as_str() | -| lifetime.rs:612:41:612:52 | bar.as_str() | -| lifetime.rs:628:13:628:31 | ...::from(...) | -| lifetime.rs:629:32:629:43 | baz.as_str() | -| main.rs:41:8:41:24 | ...::into_raw(...) | -| main.rs:80:11:80:27 | ...::into_raw(...) | multiplePathResolutions | deallocation.rs:106:16:106:19 | libc | | deallocation.rs:112:3:112:6 | libc | diff --git a/rust/ql/test/query-tests/security/CWE-825/Cargo.lock b/rust/ql/test/query-tests/security/CWE-825/Cargo.lock index a43970486824..af842b2d7e42 100644 --- a/rust/ql/test/query-tests/security/CWE-825/Cargo.lock +++ b/rust/ql/test/query-tests/security/CWE-825/Cargo.lock @@ -2,164 +2,15 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "libc" version = "0.2.173" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" -[[package]] -name = "memchr" -version = "2.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "proc-macro2" -version = "1.0.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "slab" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" - -[[package]] -name = "syn" -version = "2.0.104" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "test" version = "0.0.1" dependencies = [ - "futures", "libc", ] - -[[package]] -name = "unicode-ident" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" diff --git a/rust/ql/test/query-tests/security/CWE-825/deallocation.rs b/rust/ql/test/query-tests/security/CWE-825/deallocation.rs index 89ef0470e99d..361f938e02c4 100644 --- a/rust/ql/test/query-tests/security/CWE-825/deallocation.rs +++ b/rust/ql/test/query-tests/security/CWE-825/deallocation.rs @@ -17,7 +17,7 @@ pub fn test_alloc(mode: i32) { println!(" v3 = {v3}"); println!(" v4 = {v4}"); - std::alloc::dealloc(m1, layout); // $ Source[rust/access-invalid-pointer]=dealloc + std::alloc::dealloc(m1, layout); // $ Source=dealloc // (m1, m2 are now dangling) match mode { @@ -29,8 +29,8 @@ pub fn test_alloc(mode: i32) { println!(" v6 = {v6} (!)"); // corrupt in practice // test repeat reads (we don't want lots of very similar results for the same dealloc) - let _v5b = *m1; - let _v5c = *m1; + let v5b = *m1; + let v5c = *m1; }, 100 => { // more reads @@ -67,7 +67,7 @@ pub fn test_alloc_array(mode: i32) { println!(" v1 = {v1}"); println!(" v2 = {v2}"); - std::alloc::dealloc(m2 as *mut u8, layout); // $ Source[rust/access-invalid-pointer]=dealloc_array + std::alloc::dealloc(m2 as *mut u8, layout); // $ Source=dealloc_array // m1, m2 are now dangling match mode { @@ -109,7 +109,7 @@ pub fn test_libc() { let v1 = *my_ptr; // GOOD println!(" v1 = {v1}"); - libc::free(my_ptr as *mut libc::c_void); // $ Source[rust/access-invalid-pointer]=free + libc::free(my_ptr as *mut libc::c_void); // $ Source=free // (my_ptr is now dangling) let v2 = *my_ptr; // $ Alert[rust/access-invalid-pointer]=free @@ -120,9 +120,9 @@ pub fn test_libc() { // --- std::ptr --- pub fn test_ptr_invalid(mode: i32) { - let p1: *const i64 = std::ptr::dangling(); // $ Source[rust/access-invalid-pointer]=dangling - let p2: *mut i64 = std::ptr::dangling_mut(); // $ Source[rust/access-invalid-pointer]=dangling_mut - let p3: *const i64 = std::ptr::null(); // $ Source[rust/access-invalid-pointer]=null + let p1: *const i64 = std::ptr::dangling(); // $ Source=dangling + let p2: *mut i64 = std::ptr::dangling_mut(); // $ Source=dangling_mut + let p3: *const i64 = std::ptr::null(); // $ Source=null if mode == 120 { unsafe { @@ -173,7 +173,7 @@ pub fn test_ptr_drop(mode: i32) { println!(" v1 = {v1}"); println!(" v2 = {v2}"); - std::ptr::drop_in_place(p1); // $ Source[rust/access-invalid-pointer]=drop_in_place + std::ptr::drop_in_place(p1); // $ Source=drop_in_place // explicitly destructs the pointed-to `m2` if mode == 1 { @@ -212,7 +212,7 @@ impl Drop for MyDropBuffer { unsafe { _ = *self.ptr; - drop(*self.ptr); // $ MISSING: Source[rust/access-invalid-pointer]=drop + drop(*self.ptr); // $ MISSING: Source=drop _ = *self.ptr; // $ MISSING: Alert[rust/access-invalid-pointer]=drop std::alloc::dealloc(self.ptr, layout); } @@ -239,7 +239,7 @@ fn test_qhelp_example_good(ptr: *mut String) { fn test_qhelp_example_bad(ptr: *mut String) { unsafe { - std::ptr::drop_in_place(ptr); // $ Source[rust/access-invalid-pointer]=drop_in_place + std::ptr::drop_in_place(ptr); // $ Source=drop_in_place } // ... @@ -280,7 +280,7 @@ pub fn test_vec_reserve() { println!(" v1 = {}", v1); } - vec1.reserve(1000); // $ MISSING: Source[rust/access-invalid-pointer]=reserve + vec1.reserve(1000); // $ MISSING: Source=reserve // (may invalidate the pointer) unsafe { @@ -300,7 +300,7 @@ pub fn test_vec_reserve() { } for _i in 0..1000 { - vec2.push(0); // $ MISSING: Source[rust/access-invalid-pointer]=push + vec2.push(0); // $ MISSING: Source=push // (may invalidate the pointer) } diff --git a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs index f388aff5aaf2..d7fd8204993a 100644 --- a/rust/ql/test/query-tests/security/CWE-825/lifetime.rs +++ b/rust/ql/test/query-tests/security/CWE-825/lifetime.rs @@ -18,36 +18,36 @@ impl Drop for MyValue { fn get_local_dangling() -> *const i64 { let my_local1: i64 = 1; - return &my_local1; // $ Source[rust/access-after-lifetime-ended]=local1 + return &my_local1; } // (return value immediately becomes dangling) fn get_local_dangling_mut() -> *mut i64 { let mut my_local2: i64 = 2; - return &mut my_local2; // $ Source[rust/access-after-lifetime-ended]=local2 + return &mut my_local2; } // (return value immediately becomes dangling) fn get_local_dangling_raw_const() -> *const i64 { let my_local3: i64 = 3; - return &raw const my_local3; // $ Source[rust/access-after-lifetime-ended]=local3 + return &raw const my_local3; } // (return value immediately becomes dangling) fn get_local_dangling_raw_mut() -> *mut i64 { let mut my_local4: i64 = 4; - return &raw mut my_local4; // $ Source[rust/access-after-lifetime-ended]=local4 + return &raw mut my_local4; } // (return value immediately becomes dangling) fn get_param_dangling(param5: i64) -> *const i64 { - return ¶m5; // $ Source[rust/access-after-lifetime-ended]=param5 + return ¶m5; } // (return value immediately becomes dangling) fn get_local_field_dangling() -> *const i64 { let val: MyValue; val = MyValue { value: 6 }; - return &val.value; // $ Source[rust/access-after-lifetime-ended]=localfield + return &val.value; } pub fn test_local_dangling() { @@ -60,21 +60,21 @@ pub fn test_local_dangling() { let p7: *const i64; { let my_local7 = 7; - p7 = &raw const my_local7; // $ Source[rust/access-after-lifetime-ended]=local7 + p7 = &raw const my_local7; } // (my_local goes out of scope, thus p7 is dangling) use_the_stack(); unsafe { - let v1 = *p1; // $ Alert[rust/access-after-lifetime-ended]=local1 - let v2 = *p2; // $ Alert[rust/access-after-lifetime-ended]=local2 - let v3 = *p3; // $ Alert[rust/access-after-lifetime-ended]=local3 - let v4 = *p4; // $ Alert[rust/access-after-lifetime-ended]=local4 - let v5 = *p5; // $ Alert[rust/access-after-lifetime-ended]=param5 - let v6 = *p6; // $ Alert[rust/access-after-lifetime-ended]=localfield - let v7 = *p7; // $ Alert[rust/access-after-lifetime-ended]=local7 - *p2 = 8; // $ Alert[rust/access-after-lifetime-ended]=local2 - *p4 = 9; // $ Alert[rust/access-after-lifetime-ended]=local4 + let v1 = *p1; // $ MISSING: Alert + let v2 = *p2; // $ MISSING: Alert + let v3 = *p3; // $ MISSING: Alert + let v4 = *p4; // $ MISSING: Alert + let v5 = *p5; // $ MISSING: Alert + let v6 = *p6; // $ MISSING: Alert + let v7 = *p7; // $ MISSING: Alert + *p2 = 8; // $ MISSING: Alert + *p4 = 9; // $ MISSING: Alert println!(" v1 = {v1} (!)"); // corrupt in practice println!(" v2 = {v2} (!)"); // corrupt in practice @@ -96,7 +96,7 @@ fn use_pointers(p1: *const i64, p2: *mut i64, mode: i32) { use_the_stack(); unsafe { - if mode == 0 { + if (mode == 0) { // reads let v1 = *p1; // GOOD let v2 = *p2; // GOOD @@ -105,7 +105,7 @@ fn use_pointers(p1: *const i64, p2: *mut i64, mode: i32) { println!(" v2 = {v2}"); println!(" v3 = {v3}"); } - if mode == 200 { + if (mode == 200) { // writes *p2 = 2; // GOOD } @@ -142,14 +142,14 @@ pub fn test_static(mode: i32) { use_the_stack(); unsafe { - if mode == 0 { + if (mode == 0) { // reads let v1 = *p1; // GOOD let v2 = *p2; // GOOD println!(" v1 = {v1}"); println!(" v2 = {v2}"); } - if mode == 210 { + if (mode == 210) { // writes *p2 = 3; // GOOD } @@ -169,7 +169,7 @@ fn access_ptr_1(ptr: *const i64) { fn access_ptr_2(ptr: *const i64) { // only called with `ptr` dangling unsafe { - let v2 = *ptr; // $ Alert[rust/access-after-lifetime-ended]=local1 + let v2 = *ptr; // $ MISSING: Alert println!(" v2 = {v2} (!)"); // corrupt in practice } } @@ -184,7 +184,7 @@ fn access_ptr_3(ptr: *const i64) { fn access_and_get_dangling() -> *const i64 { let my_local1 = 1; - let ptr = &my_local1; // $ Source[rust/access-after-lifetime-ended]=local1 + let ptr = &my_local1; access_ptr_1(ptr); access_ptr_3(ptr); @@ -244,116 +244,54 @@ pub fn test_loop() { use_the_stack(); unsafe { - let v1 = (*prev)[0]; // $ MISSING: Alert[rust/access-after-lifetime-ended]=local2 + let v1 = (*prev)[0]; // $ MISSING: Alert println!(" v1 = {v1} (!)"); // incorrect values in practice (except first iteration) } - prev = &my_local2; // $ Source[rust/access-after-lifetime-ended]=local2 + prev = &my_local2; } // (my_local2 goes out of scope, thus prev is dangling) unsafe { - let v2 = (*prev)[0]; // $ Alert[rust/access-after-lifetime-ended]=local2 + let v2 = (*prev)[0]; // $ MISSING: Alert println!(" v2 = {v2} (!)"); // corrupt in practice } } -// --- enums --- +// --- enum --- enum MyEnum { Value(i64), } -enum MyEnum2 { - Pointer(*const i64), +impl Drop for MyEnum { + fn drop(&mut self) { + println!(" drop MyEnum"); + } } -pub fn get_pointer_to_enum() -> *const MyEnum { - let e1 = MyEnum::Value(1); - let result: *const MyEnum = &e1; // $ Source[rust/access-after-lifetime-ended]=e1 - - result -} // (e1 goes out of scope, so result is dangling) - -pub fn get_pointer_in_enum() -> MyEnum2 { - let v2 = 2; - let e2 = MyEnum2::Pointer(&v2); // $ MISSING: Source[rust/access-after-lifetime-ended]=v2 - - e2 -} // (v2 goes out of scope, so the contained pointer is dangling) - -pub fn get_pointer_from_enum() -> *const i64 { - let e3 = MyEnum::Value(3); +pub fn test_enum() { let result: *const i64; - result = match e3 { - MyEnum::Value(x) => { &x } // $ Source[rust/access-after-lifetime-ended]=match_x - }; // (x goes out of scope, so result is possibly dangling already) - - use_the_stack(); + { + let e1 = MyEnum::Value(1); - unsafe { - let v0 = *result; // ? - println!(" v0 = {v0} (?)"); - } + result = match e1 { + MyEnum::Value(x) => { &x } + }; // (x goes out of scope, so result is dangling, I think; seen in real world code) - result -} // (e3 goes out of scope, so result is definitely dangling now) + use_the_stack(); -pub fn test_enums() { - let e1 = get_pointer_to_enum(); - let e2 = get_pointer_in_enum(); - let result = get_pointer_from_enum(); + unsafe { + let v1 = *result; // $ MISSING: Alert + println!(" v1 = {v1}"); + } + } // (e1 goes out of scope, so result is definitely dangling now) use_the_stack(); unsafe { - if let MyEnum::Value(v1) = *e1 { // $ Alert[rust/access-after-lifetime-ended]=e1 - println!(" v1 = {v1} (!)"); // corrupt in practice - } - if let MyEnum2::Pointer(p2) = e2 { - let v2 = unsafe { *p2 }; // $ MISSING: Alert[rust/access-after-lifetime-ended]=v2 - println!(" v2 = {v2} (!)"); // corrupt in practice - } - let v3 = *result; // $ Alert[rust/access-after-lifetime-ended]=match_x - println!(" v3 = {v3} (!)"); // corrupt in practice - } -} - -// --- recursive enum --- - -enum RecursiveEnum { - Wrapper(Box), - Pointer(*const i64), -} - -pub fn get_recursive_enum() -> Box { - let v1 = 1; - let enum1 = RecursiveEnum::Wrapper(Box::new(RecursiveEnum::Pointer(&v1))); // Source[rust/access-after-lifetime-ended]=v1 - let mut ref1 = &enum1; - - while let RecursiveEnum::Wrapper(inner) = ref1 { - println!(" wrapper"); - ref1 = &inner; - } - if let RecursiveEnum::Pointer(ptr) = ref1 { - let v2: i64 = unsafe { **ptr }; // GOOD - println!(" v2 = {v2}"); - } - - return Box::new(enum1); -} // (v1 goes out of scope, thus the contained pointer is dangling) - -pub fn test_recursive_enums() { - let enum1 = *get_recursive_enum(); - let mut ref1 = &enum1; - - while let RecursiveEnum::Wrapper(inner) = ref1 { - println!(" wrapper"); - ref1 = &inner; - } - if let RecursiveEnum::Pointer(ptr) = ref1 { - let v3: i64 = unsafe { **ptr }; // Alert[rust/access-after-lifetime-ended]=v1 - println!(" v3 = {v3} (!)"); // corrupt in practice + let v2 = *result; // $ MISSING: Alert + println!(" v2 = {v2}"); // dropped in practice } } @@ -380,9 +318,9 @@ pub fn test_ptr_to_struct(mode: i32) { { let mut my_pair = MyPair { a: 1, b: 2}; - p1 = std::ptr::addr_of_mut!(my_pair); // $ Source[rust/access-after-lifetime-ended]=my_pair - p2 = std::ptr::addr_of!(my_pair.a); // $ MISSING: Source[rust/access-after-lifetime-ended]=my_pair_a - p3 = std::ptr::addr_of_mut!(my_pair.b); // $ MISSING: Source[rust/access-after-lifetime-ended]=my_pair_b + p1 = std::ptr::addr_of_mut!(my_pair); + p2 = std::ptr::addr_of!(my_pair.a); + p3 = std::ptr::addr_of_mut!(my_pair.b); unsafe { let v1 = (*p1).a; // GOOD @@ -408,12 +346,12 @@ pub fn test_ptr_to_struct(mode: i32) { match mode { 0 => { // read - let v5 = (*p1).a; // $ Alert[rust/access-after-lifetime-ended]=my_pair + let v5 = (*p1).a; // $ MISSING: Alert println!(" v5 = {v5} (!)"); // dropped in practice }, 220 => { // another read - let v6 = (*p1).b; // $ Alert[rust/access-after-lifetime-ended]=my_pair + let v6 = (*p1).b; // $ MISSING: Alert println!(" v6 = {v6} (!)"); // dropped in practice }, 221 => { @@ -425,12 +363,12 @@ pub fn test_ptr_to_struct(mode: i32) { }, 222 => { // writes - (*p1).a = 6; // $ Alert[rust/access-after-lifetime-ended]=my_pair + (*p1).a = 6; // $ MISSING: Alert *p3 = 7; // $ MISSING: Alert }, 223 => { // another write - (*p1).b = 8; // $ Alert[rust/access-after-lifetime-ended]=my_pair + (*p1).b = 8; // $ MISSING: Alert }, _ => {} } @@ -439,7 +377,7 @@ pub fn test_ptr_to_struct(mode: i32) { fn get_ptr_from_ref(val: i32) -> *const i32 { let my_val = val; - let r1: &i32 = &my_val; // $ Source[rust/access-after-lifetime-ended]=my_val + let r1: &i32 = &my_val; let p1: *const i32 = std::ptr::from_ref(r1); unsafe { @@ -456,8 +394,8 @@ pub fn test_ptr_from_ref() { use_the_stack(); unsafe { - let v2 = *p1; // $ Alert[rust/access-after-lifetime-ended]=my_val - let v3 = *get_ptr_from_ref(2); // $ Alert[rust/access-after-lifetime-ended]=my_val + let v2 = *p1; // $ MISSING: Alert + let v3 = *get_ptr_from_ref(2); // $ MISSING: Alert println!(" v2 = {v2} (!)"); // corrupt in practice println!(" v3 = {v3} (!)"); } @@ -491,7 +429,7 @@ pub fn test_rc() { println!(" v3 = {v3}"); println!(" v4 = {v4}"); } - } // rc1 goes out of scope, the reference count is 0, so p1, p2 are dangling + } // rc1 go out of scope, the reference count is 0, so p1, p2 are dangling unsafe { let v5 = *p1; // $ MISSING: Alert @@ -503,327 +441,3 @@ pub fn test_rc() { // note: simialar things are likely possible with Ref, RefMut, RefCell, // Vec and others. } - -// --- closures --- - -fn get_closure(p3: *const i64, p4: *const i64) -> impl FnOnce() { - let my_local1: i64 = 1; - let my_local2: i64 = 2; - let p1: *const i64 = &my_local1; // $ MISSING: Source[rust/access-after-lifetime-ended]=local1 - - return move || { // captures `my_local2`, `p1`, `p3`, `p4` by value (due to `move`) - let p2: *const i64 = &my_local2; - - unsafe { - let v1 = *p1; // $ MISSING: Alert[rust/access-after-lifetime-ended]=local1 - let v2 = *p2; // GOOD - let v3 = *p3; // GOOD - let v4 = *p4; // $ MISSING: Alert[rust/access-after-lifetime-ended]=local4 - println!(" v1 = {v1} (!)"); // corrupt in practice - println!(" v2 = {v2}"); - println!(" v3 = {v3}"); - println!(" v4 = {v4} (!)"); - } - }; -} // (`my_local1` goes out of scope, thus `p1` is dangling) - -fn with_closure(ptr: *const i64, closure: fn(*const i64, *const i64)) { - let my_local5: i64 = 5; - - closure(ptr, - &my_local5); -} - -pub fn test_closures() { - let closure; - let my_local3: i64 = 3; - { - let my_local4: i64 = 4; - closure = get_closure( &my_local3, - &my_local4); // $ MISSING: Source[rust/access-after-lifetime-ended]=local4 - } // (`my_local4` goes out of scope, so `p4` is dangling) - - use_the_stack(); - - closure(); - - with_closure(&my_local3, |p1, p2| { - unsafe { - let v5 = *p1; // GOOD - let v6 = *p2; // $ GOOD - println!(" v5 = {v5}"); - println!(" v6 = {v6}"); - } - }); -} - -// --- async --- - -fn get_async_closure(p3: *const i64, p4: *const i64) -> impl std::future::Future { - let my_local1: i64 = 1; - let my_local2: i64 = 2; - let p1: *const i64 = &my_local1; - - return async move { // captures `my_local2`, `p1`, `p3`, `p4` by value (due to `move`) - let p2: *const i64 = &my_local2; - - unsafe { - let v1 = *p1; // $ MISSING: Alert - let v2 = *p2; // GOOD - let v3 = *p3; // GOOD - let v4 = *p4; // $ MISSING: Alert - println!(" v1 = {v1} (!)"); // corrupt in practice - println!(" v2 = {v2}"); - println!(" v3 = {v3}"); - println!(" v4 = {v4} (!)"); - } - }; -} // (`my_local1` goes out of scope, thus `p1` is dangling) - -pub fn test_async() { - let async_closure; - let my_local3: i64 = 3; - { - let my_local4: i64 = 4; - async_closure = get_async_closure(&my_local3, - &my_local4); - } // (`my_local4` goes out of scope, so `p4` is dangling) - - use_the_stack(); - - futures::executor::block_on(async_closure); -} - -// --- lifetime annotations --- - -fn select_str<'a>(cond: bool, a: &'a str, b: &'a str) -> &'a str { - if cond { a } else { b } -} - -struct MyRefStr<'a> { - ref_str: &'a str, -} - -pub fn test_lifetime_annotations() { - let str1: *const str; - { - let foo = String::from("foo"); - let bar = String::from("bar"); - str1 = select_str(true, foo.as_str(), bar.as_str()); - - unsafe { - let v1 = &*str1; // GOOD - println!(" v1 = {v1}"); - } - } // (`foo`, `bar` go out of scope, the return value of `select_str` has the same lifetime, thus `str1` is dangling) - - unsafe { - let v2 = &*str1; // $ MISSING: Alert - println!(" v2 = {v2} (!)"); // corrupt in practice - } - - let my_ref; - let str2: *const str; - { - let baz = String::from("baz"); - my_ref = MyRefStr { ref_str: baz.as_str() }; - str2 = &*my_ref.ref_str; - - unsafe { - let v3 = &*str2; // GOOD - println!(" v3 = {v3}"); - } - } // (`baz` goes out of scope, `ref_str` has the same lifetime, thus `str2` is dangling) - - use_the_stack(); - - unsafe { - let v4 = &*str2; // $ MISSING: Alert - println!(" v4 = {v4} (!)"); // corrupt in practice - } -} - -// --- implicit dereferences --- - -pub fn test_implicit_derefs() { - let ref1; - { - let str2; - { - let str1 = "bar"; - str2 = "foo".to_string() + &str1; // $ Source[rust/access-after-lifetime-ended]=str1 - ref1 = &raw const str2; // $ Source[rust/access-after-lifetime-ended]=str2 - } // (str1 goes out of scope, but it's been copied into str2) - - unsafe { - let v1 = &*ref1; // $ SPURIOUS: Alert[rust/access-after-lifetime-ended]=str1 - println!(" v1 = {v1}"); - } - } // (str2 goes out of scope, thus ref1 is dangling) - - use_the_stack(); - - unsafe { - let v2 = &*ref1; // $ Alert[rust/access-after-lifetime-ended]=str2 SPURIOUS: Alert[rust/access-after-lifetime-ended]=str1 - println!(" v2 = {v2} (!)"); // corrupt in practice - } -} - -// --- members --- - -struct MyType { - value: i64, -} - -impl MyType { - fn test(&self) { - let r1 = unsafe { - let v1 = &self; - &v1.value - }; - let (r2, r3) = unsafe { - let v2 = &self; - (&v2.value, - &self.value) - }; - - use_the_stack(); - - let v1 = *r1; - let v2 = *r2; - let v3 = *r3; - println!(" v1 = {v1}"); - println!(" v2 = {v2}"); - println!(" v3 = {v3}"); - } -} - -pub fn test_members() { - let mt = MyType { value: 1 }; - mt.test(); -} - -// --- enum members --- - -struct MyValue2 { - value: i64 -} - -enum MyEnum3 { - Value(MyValue2), -} - -impl MyEnum3 { - pub fn test_match(&self) -> &i64 { - let r1 = match self { - MyEnum3::Value(v2) => &v2.value, - }; - - r1 - } -} - -pub fn test_enum_members() { - let v1 = MyValue2 { value: 1 }; - let e1 = MyEnum3::Value(v1); - - let r1 = e1.test_match(); - - use_the_stack(); - - let v3 = *r1; - println!(" v3 = {v3}"); -} - -// --- macros --- - -macro_rules! my_macro1 { - () => { - let ptr: *const i64; - { - let val: i64 = 1; - ptr = &val; - } - - unsafe { - let v = *ptr; - println!(" v = {v}"); - } - } -} - -macro_rules! my_macro2 { - () => { - { - let val: i64 = 1; - let ptr: *const i64 = &val; - ptr - } - } -} - -pub fn test_macros() { - my_macro1!(); - my_macro1!(); - - let ptr = my_macro2!(); - unsafe { - let v = *ptr; - println!(" v = {v}"); - } -} - -// --- unsafe function --- - -fn get_local_for_unsafe_function() -> *const f64 { - let my_local10: f64 = 1.23; - - return &my_local10; // $ Source[rust/access-after-lifetime-ended]=local10 -} // (return value immediately becomes dangling) - -pub unsafe fn test_unsafe_function() { - let p1 = get_local_for_unsafe_function(); - - use_the_stack(); - - let v1 = *p1; // $ Alert[rust/access-after-lifetime-ended]=local10 - println!(" v1 = {v1} (!)"); // corrupt in practice -} - -// --- examples from qhelp --- - -fn get_pointer() -> *const i64 { - let val = 123; - - return &val; // $ Source[rust/access-after-lifetime-ended]=val -} // lifetime of `val` ends here, the pointer becomes dangling - -pub fn test_lifetimes_example_bad() { - let ptr = get_pointer(); - let dereferenced_ptr; - - use_the_stack(); - - unsafe { - dereferenced_ptr = *ptr; // $ Alert[rust/access-after-lifetime-ended]=val - } - - println!(" val = {dereferenced_ptr} (!)"); // corrupt in practice -} - -fn get_box() -> Box { - let val = 123; - - return Box::new(val); -} - -pub fn test_lifetimes_example_good() { - let ptr = get_box(); - let dereferenced_ptr; - - use_the_stack(); - - dereferenced_ptr = *ptr; // GOOD - - println!(" val = {dereferenced_ptr}"); -} diff --git a/rust/ql/test/query-tests/security/CWE-825/main.rs b/rust/ql/test/query-tests/security/CWE-825/main.rs index 5f66313ae85e..ec135011f705 100644 --- a/rust/ql/test/query-tests/security/CWE-825/main.rs +++ b/rust/ql/test/query-tests/security/CWE-825/main.rs @@ -154,11 +154,8 @@ fn main() { println!("test_loop:"); test_loop(); - println!("test_enums:"); - test_enums(); - - println!("test_recursive_enums:"); - test_recursive_enums(); + println!("test_enum:"); + test_enum(); println!("test_ptr_to_struct:"); test_ptr_to_struct(mode); @@ -168,36 +165,4 @@ fn main() { println!("test_rc:"); test_rc(); - - println!("test_closures:"); - test_closures(); - - println!("test_async:"); - test_async(); - - println!("test_lifetime_annotations:"); - test_lifetime_annotations(); - - println!("test_implicit_derefs:"); - test_implicit_derefs(); - - println!("test_members:"); - test_members(); - - println!("test_enum_members:"); - test_enum_members(); - - println!("test_macros:"); - test_macros(); - - println!("test_unsafe_function:"); - unsafe { - test_unsafe_function(); - } - - println!("test_lifetimes_example_bad:"); - test_lifetimes_example_bad(); - - println!("test_lifetimes_example_good:"); - test_lifetimes_example_good(); } diff --git a/rust/ql/test/query-tests/security/CWE-825/options.yml b/rust/ql/test/query-tests/security/CWE-825/options.yml index 49ed7e1c1017..46c4e09d1210 100644 --- a/rust/ql/test/query-tests/security/CWE-825/options.yml +++ b/rust/ql/test/query-tests/security/CWE-825/options.yml @@ -1,4 +1,3 @@ qltest_use_nightly: true qltest_dependencies: - libc = { version = "0.2.11" } - - futures = { version = "0.3" } diff --git a/rust/ql/test/setup.sh b/rust/ql/test/setup.sh index 1d7feb284eda..f087e7bc32bf 100755 --- a/rust/ql/test/setup.sh +++ b/rust/ql/test/setup.sh @@ -5,11 +5,14 @@ set -euo pipefail # This script is run by the CI to set up the test environment for the Rust QL tests # We run this as rustup is not meant to be run in parallel, and will this setup will be run by rust-analyzer in the # parallel QL tests unless we do the setup prior to launching the tests. +# We do this for each `rust-toolchain.toml` we use in the tests (and the root one in `rust` last, so it becomes the +# default). -# no need to install rust-src explicitly, it's listed in both toolchains cd "$(dirname "$0")" -pushd ../../extractor/src/nightly-toolchain -rustup install -popd -# this needs to be last to set the default toolchain + +find . -name rust-toolchain.toml \ + -execdir rustup install \; \ + -execdir rustup component add rust-src \; + +# no to install rust-src explicitly, it's listed in ql/rust/rust-toolchain.toml rustup install diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 8295cd5860b0..5e953e0b5156 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -914,7 +914,7 @@ class _: """ -@annotate(AssocItem, replace_bases={AstNode: Item}) +@annotate(AssocItem) class _: """ An associated item in a `Trait` or `Impl`. @@ -985,7 +985,7 @@ class _: """ -@annotate(Const, replace_bases={Item: None}) +@annotate(Const) class _: """ A constant item declaration. @@ -1078,7 +1078,7 @@ class _: """ -@annotate(ExternItem, replace_bases={AstNode: Item}) +@annotate(ExternItem) class _: """ An item inside an extern block. @@ -1359,7 +1359,7 @@ class _: """ -@annotate(MacroCall, cfg=True, replace_bases={Item: None}) +@annotate(MacroCall, cfg=True) class _: """ A macro invocation. @@ -1807,7 +1807,7 @@ class _: """ -@annotate(Static, replace_bases={Item: None}) +@annotate(Static) class _: """ A static item declaration. @@ -1947,7 +1947,7 @@ class _: """ -@annotate(TypeAlias, replace_bases={Item: None}) +@annotate(TypeAlias) class _: """ A type alias. For example: @@ -2143,7 +2143,7 @@ class _: loop_body: drop -@annotate(Function, add_bases=[Callable], replace_bases={Item: None}) +@annotate(Function, add_bases=[Callable]) class _: param_list: drop attrs: drop diff --git a/shared/controlflow/codeql/controlflow/BasicBlock.qll b/shared/controlflow/codeql/controlflow/BasicBlock.qll index 132920e329fb..9c26b18c0938 100644 --- a/shared/controlflow/codeql/controlflow/BasicBlock.qll +++ b/shared/controlflow/codeql/controlflow/BasicBlock.qll @@ -5,8 +5,6 @@ * INTERNAL use only. This is an experimental API subject to change without * notice. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/controlflow/codeql/controlflow/Cfg.qll b/shared/controlflow/codeql/controlflow/Cfg.qll index c9d7d4147347..bb49cc8d8aee 100644 --- a/shared/controlflow/codeql/controlflow/Cfg.qll +++ b/shared/controlflow/codeql/controlflow/Cfg.qll @@ -2,8 +2,6 @@ * Provides a shared interface and implementation for constructing control-flow graphs * (CFGs) from abstract syntax trees (ASTs). */ -overlay[local?] -module; private import codeql.util.Location private import codeql.util.FileSystem diff --git a/shared/controlflow/codeql/controlflow/Guards.qll b/shared/controlflow/codeql/controlflow/Guards.qll deleted file mode 100644 index d78d6ec8e8a1..000000000000 --- a/shared/controlflow/codeql/controlflow/Guards.qll +++ /dev/null @@ -1,1116 +0,0 @@ -/** - * Provides classes and predicates for determining "guard-controls" - * relationships. - * - * In their most general form, these relate a guard expression, a value, and a - * basic block, and state that execution of the basic block implies that - * control flow must have passed through the guard in order to reach the basic - * block, and when it did, the guard evaluated to the given value. - * - * For example, in `if (x == 0) { A }`, the guard `x == 0` evaluating to `true` - * controls the basic block `A`, in this case because the true branch dominates - * `A`, but more elaborate controls-relationships may also hold. - * For example, in - * ```java - * int sz = a != null ? a.length : 0; - * if (sz != 0) { - * // this block is controlled by: - * // sz != 0 evaluating to true - * // sz evaluating to not 0 - * // a.length evaluating to not 0 - * // a != null evaluating to true - * // a evaluating to not null - * } - * ``` - * - * The provided predicates are separated into general "controls" predicates and - * "directly controls" predicates. The former use all possible implication - * logic as described above, whereas the latter only use control flow dominance - * of the corresponding conditional successor edges. - * - * In some cases, a guard may have a successor edge that can be relevant for - * controlling the input to an SSA phi node, but does not dominate the - * preceding block. To support this, the `hasBranchEdge` and - * `controlsBranchEdge` predicates are provided, where the former only uses the - * control flow graph similar to the `directlyControls` predicate, and the - * latter uses the full implication logic. - * - * All of these predicates are also available in the more general form that refers - * to `GuardValue`s instead of `boolean`s. - * - * The implementation is nested in two parameterized modules intended to - * facilitate multiple instantiations of the nested module with different - * precision levels. For example, more implications are available if the result - * of Range Analysis is available, but Range Analysis depends on Guards. This - * allows an initial instantiation of the `Logic` module without Range Analysis - * that can be used as input to Range Analysis, and a second instantiation - * using the result of Range Analysis to provide a final and more complete - * controls relation. - */ -overlay[local?] -module; - -private import codeql.util.Boolean -private import codeql.util.Location - -signature module InputSig { - class SuccessorType { - /** Gets a textual representation of this successor type. */ - string toString(); - } - - class ExceptionSuccessor extends SuccessorType; - - class ConditionalSuccessor extends SuccessorType { - /** Gets the Boolean value of this successor. */ - boolean getValue(); - } - - class BooleanSuccessor extends ConditionalSuccessor; - - class NullnessSuccessor extends ConditionalSuccessor; - - /** A control flow node. */ - class ControlFlowNode { - /** Gets a textual representation of this control flow node. */ - string toString(); - - /** Gets the location of this control flow node. */ - Location getLocation(); - } - - /** - * A basic block, that is, a maximal straight-line sequence of control flow nodes - * without branches or joins. - */ - class BasicBlock { - /** Gets a textual representation of this basic block. */ - string toString(); - - /** Gets the `i`th node in this basic block. */ - ControlFlowNode getNode(int i); - - /** Gets the last control flow node in this basic block. */ - ControlFlowNode getLastNode(); - - /** Gets the length of this basic block. */ - int length(); - - /** Gets the location of this basic block. */ - Location getLocation(); - - BasicBlock getASuccessor(SuccessorType t); - - predicate dominates(BasicBlock bb); - - predicate strictlyDominates(BasicBlock bb); - } - - /** - * Holds if `bb1` has `bb2` as a direct successor and the edge between `bb1` - * and `bb2` is a dominating edge. - * - * An edge `(bb1, bb2)` is dominating if there exists a basic block that can - * only be reached from the entry block by going through `(bb1, bb2)`. This - * implies that `(bb1, bb2)` dominates its endpoint `bb2`. I.e., `bb2` can - * only be reached from the entry block by going via `(bb1, bb2)`. - * - * This is a necessary and sufficient condition for an edge to dominate some - * block, and therefore `dominatingEdge(bb1, bb2) and bb2.dominates(bb3)` - * means that the edge `(bb1, bb2)` dominates `bb3`. - */ - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2); - - class AstNode { - /** Gets a textual representation of this AST node. */ - string toString(); - - /** Gets the location of this AST node. */ - Location getLocation(); - } - - class Expr extends AstNode { - /** Gets the associated control flow node. */ - ControlFlowNode getControlFlowNode(); - - /** Gets the basic block containing this expression. */ - BasicBlock getBasicBlock(); - } - - class ConstantValue { - /** Gets a textual representation of this constant value. */ - string toString(); - } - - class ConstantExpr extends Expr { - predicate isNull(); - - boolean asBooleanValue(); - - int asIntegerValue(); - - ConstantValue asConstantValue(); - } - - class NonNullExpr extends Expr; - - class Case extends AstNode { - Expr getSwitchExpr(); - - predicate isDefaultCase(); - - ConstantExpr asConstantCase(); - - predicate matchEdge(BasicBlock bb1, BasicBlock bb2); - - predicate nonMatchEdge(BasicBlock bb1, BasicBlock bb2); - } - - class AndExpr extends Expr { - /** Gets an operand of this expression. */ - Expr getAnOperand(); - } - - class OrExpr extends Expr { - /** Gets an operand of this expression. */ - Expr getAnOperand(); - } - - class NotExpr extends Expr { - /** Gets the operand of this expression. */ - Expr getOperand(); - } - - /** - * An expression that has the same value as a specific sub-expression. - * - * For example, in Java, the assignment `x = rhs` has the same value as `rhs`. - */ - class IdExpr extends Expr { - Expr getEqualChildExpr(); - } - - /** - * Holds if `eqtest` is an equality or inequality test between `left` and - * `right`. The `polarity` indicates whether this is an equality test (true) - * or inequality test (false). - */ - predicate equalityTest(Expr eqtest, Expr left, Expr right, boolean polarity); - - class ConditionalExpr extends Expr { - /** Gets the condition of this expression. */ - Expr getCondition(); - - /** Gets the true branch of this expression. */ - Expr getThen(); - - /** Gets the false branch of this expression. */ - Expr getElse(); - } -} - -/** Provides guards-related predicates and classes. */ -module Make Input> { - private import Input - - private newtype TAbstractSingleValue = - TValueNull() or - TValueTrue() or - TValueInt(int i) { exists(ConstantExpr c | c.asIntegerValue() = i) or i = 0 } or - TValueConstant(ConstantValue c) { exists(ConstantExpr ce | ce.asConstantValue() = c) } - - private newtype TGuardValue = - TValue(TAbstractSingleValue val, Boolean isVal) or - TException(Boolean throws) - - private class AbstractSingleValue extends TAbstractSingleValue { - /** Gets a textual representation of this value. */ - string toString() { - result = "null" and this instanceof TValueNull - or - result = "true" and this instanceof TValueTrue - or - exists(int i | result = i.toString() and this = TValueInt(i)) - or - exists(ConstantValue c | result = c.toString() and this = TValueConstant(c)) - } - } - - /** An abstract value that a `Guard` may evaluate to. */ - class GuardValue extends TGuardValue { - /** - * Gets the dual value. Examples of dual values include: - * - null vs. not null - * - true vs. false - * - evaluating to a specific value vs. evaluating to any other value - * - throwing an exception vs. not throwing an exception - */ - GuardValue getDualValue() { - exists(AbstractSingleValue val, boolean isVal | - this = TValue(val, isVal) and - result = TValue(val, isVal.booleanNot()) - ) - or - exists(boolean throws | - this = TException(throws) and - result = TException(throws.booleanNot()) - ) - } - - /** Holds if this value represents `null`. */ - predicate isNullValue() { this.isNullness(true) } - - /** Holds if this value represents non-`null`. */ - predicate isNonNullValue() { this.isNullness(false) } - - /** Holds if this value represents `null` or non-`null` as indicated by `isNull`. */ - predicate isNullness(boolean isNull) { this = TValue(TValueNull(), isNull) } - - /** Gets the integer that this value represents, if any. */ - int asIntValue() { this = TValue(TValueInt(result), true) } - - /** Gets the boolean that this value represents, if any. */ - boolean asBooleanValue() { this = TValue(TValueTrue(), result) } - - /** Gets the constant that this value represents, if any. */ - ConstantValue asConstantValue() { this = TValue(TValueConstant(result), true) } - - /** Holds if this value represents throwing an exception. */ - predicate isThrowsException() { this = TException(true) } - - /** Gets a textual representation of this value. */ - string toString() { - result = this.asBooleanValue().toString() - or - exists(AbstractSingleValue val | not val instanceof TValueTrue | - this = TValue(val, true) and result = val.toString() - or - this = TValue(val, false) and result = "not " + val.toString() - ) - or - exists(boolean throws | this = TException(throws) | - throws = true and result = "exception" - or - throws = false and result = "no exception" - ) - } - } - - bindingset[a, b] - pragma[inline_late] - private predicate disjointValues(GuardValue a, GuardValue b) { - a = b.getDualValue() - or - exists(AbstractSingleValue a1, AbstractSingleValue b1 | - a = TValue(a1, true) and - b = TValue(b1, true) and - a1 != b1 - ) - } - - private predicate constantHasValue(ConstantExpr c, GuardValue v) { - c.isNull() and v.isNullValue() - or - v.asBooleanValue() = c.asBooleanValue() - or - v.asIntValue() = c.asIntegerValue() - or - v.asConstantValue() = c.asConstantValue() - } - - private predicate exceptionBranchPoint(BasicBlock bb1, BasicBlock normalSucc, BasicBlock excSucc) { - exists(SuccessorType norm, ExceptionSuccessor exc | - bb1.getASuccessor(norm) = normalSucc and - bb1.getASuccessor(exc) = excSucc and - normalSucc != excSucc and - not norm instanceof ExceptionSuccessor - ) - } - - private predicate branchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue v) { - exists(ConditionalSuccessor s | - bb1.getASuccessor(s) = bb2 and - exists(AbstractSingleValue val | - s instanceof NullnessSuccessor and val = TValueNull() - or - s instanceof BooleanSuccessor and val = TValueTrue() - | - v = TValue(val, s.getValue()) - ) - ) - or - exceptionBranchPoint(bb1, bb2, _) and v = TException(false) - or - exceptionBranchPoint(bb1, _, bb2) and v = TException(true) - } - - private predicate caseBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue v, Case c) { - v.asBooleanValue() = true and - c.matchEdge(bb1, bb2) - or - v.asBooleanValue() = false and - c.nonMatchEdge(bb1, bb2) - } - - private predicate equalityTestSymmetric(Expr eqtest, Expr e1, Expr e2, boolean eqval) { - equalityTest(eqtest, e1, e2, eqval) - or - equalityTest(eqtest, e2, e1, eqval) - } - - private predicate constcaseEquality(PreGuard g, Expr e1, ConstantExpr e2) { - exists(Case c | - g = c and - e1 = c.getSwitchExpr() and - e2 = c.asConstantCase() - ) - } - - final private class FinalAstNode = AstNode; - - /** - * A guard. This may be any expression whose value determines subsequent - * control flow. It may also be a switch case, which as a guard is considered - * to evaluate to either true or false depending on whether the case matches. - */ - final class PreGuard extends FinalAstNode { - /** - * Holds if this guard evaluating to `v` corresponds to taking the edge - * from `bb1` to `bb2`. For ordinary conditional branching this guard is - * the last node in `bb1`, but for switch case matching it is the switch - * expression, which may either be in `bb1` or an earlier basic block. - */ - predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue v) { - bb1.getLastNode() = this.(Expr).getControlFlowNode() and - branchEdge(bb1, bb2, v) - or - caseBranchEdge(bb1, bb2, v, this) - } - - /** - * Holds if this guard evaluating to `v` directly controls the basic block `bb`. - * - * That is, `bb` is dominated by the `v`-successor edge of this guard. - */ - predicate directlyValueControls(BasicBlock bb, GuardValue v) { - exists(BasicBlock guard, BasicBlock succ | - this.hasValueBranchEdge(guard, succ, v) and - dominatingEdge(guard, succ) and - succ.dominates(bb) - ) - } - - /** - * Holds if this guard is the last node in `bb1` and that its successor is - * `bb2` exactly when evaluating to `branch`. - */ - predicate hasBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { - this.hasValueBranchEdge(bb1, bb2, any(GuardValue gv | gv.asBooleanValue() = branch)) - } - - /** - * Holds if this guard evaluating to `branch` directly controls the basic - * block `bb`. - * - * That is, `bb` is dominated by the `branch`-successor edge of this guard. - */ - predicate directlyControls(BasicBlock bb, boolean branch) { - this.directlyValueControls(bb, any(GuardValue gv | gv.asBooleanValue() = branch)) - } - - /** - * Holds if this guard tests equality between `e1` and `e2` upon evaluating - * to `eqval`. - */ - predicate isEquality(Expr e1, Expr e2, boolean eqval) { - equalityTestSymmetric(this, e1, e2, eqval) - or - constcaseEquality(this, e1, e2) and eqval = true - or - constcaseEquality(this, e2, e1) and eqval = true - } - - /** - * Gets the basic block of this guard. For expressions, this is the basic - * block of the expression itself, and for switch cases, this is the basic - * block of the expression being compared against the cases. - */ - BasicBlock getBasicBlock() { - result = this.(Expr).getBasicBlock() - or - result = this.(Case).getSwitchExpr().getBasicBlock() - } - } - - private Expr getBranchExpr(ConditionalExpr cond, boolean branch) { - branch = true and result = cond.getThen() - or - branch = false and result = cond.getElse() - } - - private predicate baseImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { - g1.(AndExpr).getAnOperand() = g2 and v1.asBooleanValue() = true and v2 = v1 - or - g1.(OrExpr).getAnOperand() = g2 and v1.asBooleanValue() = false and v2 = v1 - or - g1.(NotExpr).getOperand() = g2 and v1.asBooleanValue().booleanNot() = v2.asBooleanValue() - or - exists(GuardValue eqval, ConstantExpr constant, GuardValue cv | - g1.isEquality(g2, constant, eqval.asBooleanValue()) and - constantHasValue(constant, cv) - | - v1 = eqval and v2 = cv - or - v1 = eqval.getDualValue() and v2 = cv.getDualValue() - ) - or - exists(NonNullExpr nonnull | - equalityTestSymmetric(g1, g2, nonnull, v1.asBooleanValue()) and - v2.isNonNullValue() - ) - or - exists(Case c1, Expr switchExpr | - g1 = c1 and - c1.isDefaultCase() and - c1.getSwitchExpr() = switchExpr and - v1.asBooleanValue() = true and - g2.(Case).getSwitchExpr() = switchExpr and - v2.asBooleanValue() = false and - g1 != g2 - ) - } - - signature module LogicInputSig { - class SsaDefinition { - /** Gets the basic block to which this SSA definition belongs. */ - BasicBlock getBasicBlock(); - - Expr getARead(); - - /** Gets a textual representation of this SSA definition. */ - string toString(); - - /** Gets the location of this SSA definition. */ - Location getLocation(); - } - - class SsaWriteDefinition extends SsaDefinition { - Expr getDefinition(); - } - - class SsaPhiNode extends SsaDefinition { - /** Holds if `inp` is an input to the phi node along the edge originating in `bb`. */ - predicate hasInputFromBlock(SsaDefinition inp, BasicBlock bb); - } - - /** - * Holds if `guard` evaluating to `val` ensures that: - * `e <= k` when `upper = true` - * `e >= k` when `upper = false` - */ - default predicate rangeGuard(PreGuard guard, GuardValue val, Expr e, int k, boolean upper) { - none() - } - - /** - * Holds if `guard` evaluating to `val` ensures that: - * `e == null` when `isNull = true` - * `e != null` when `isNull = false` - */ - default predicate additionalNullCheck(PreGuard guard, GuardValue val, Expr e, boolean isNull) { - none() - } - - /** - * Holds if the assumption that `g1` has been evaluated to `v1` implies that - * `g2` has been evaluated to `v2`, that is, the evaluation of `g2` to `v2` - * dominates the evaluation of `g1` to `v1`. - * - * This predicate can be instantiated with `CustomGuard<..>::additionalImpliesStep`. - */ - default predicate additionalImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { - none() - } - } - - /** - * Provides the `Guard` class with suitable 'controls' predicates augmented - * with logical implications based on SSA. - */ - module Logic { - private import LogicInput - - /** - * Holds if `guard` evaluating to `v` directly controls `phi` taking the value - * `inp`. This means that `guard` evaluating to `v` must control all the input - * edges to `phi` that read `inp`. - * - * We also require that `guard` dominates `phi` in order to allow logical inferences - * from the value of `phi` to the value of `guard`. - * - * Trivial cases where `guard` controls `phi` itself are excluded, since that makes - * logical inferences from `phi` to `guard` trivial and irrelevant. - */ - private predicate guardControlsPhiBranch( - Guard guard, GuardValue v, SsaPhiNode phi, SsaDefinition inp - ) { - exists(BasicBlock bbPhi | - phi.hasInputFromBlock(inp, _) and - phi.getBasicBlock() = bbPhi and - guard.getBasicBlock().strictlyDominates(bbPhi) and - not guard.directlyValueControls(bbPhi, _) and - forex(BasicBlock bbInput | phi.hasInputFromBlock(inp, bbInput) | - guard.directlyValueControls(bbInput, v) or - guard.hasValueBranchEdge(bbInput, bbPhi, v) - ) - ) - } - - /** - * Holds if `phi` takes `input` exactly when `guard` is `v`. That is, - * `guard == v` directly controls `input` and `guard == v.getDualValue()` - * directly controls all other inputs to `phi`. - * - * This makes `phi` similar to the conditional `phi = guard==v ? input : ...`. - */ - private predicate guardDeterminesPhiInput(Guard guard, GuardValue v, SsaPhiNode phi, Expr input) { - exists(GuardValue dv, SsaWriteDefinition inp | - guardControlsPhiBranch(guard, v, phi, inp) and - inp.getDefinition() = input and - dv = v.getDualValue() and - forall(SsaDefinition other | phi.hasInputFromBlock(other, _) and other != inp | - guardControlsPhiBranch(guard, dv, phi, other) - ) - ) - } - - pragma[nomagic] - private predicate guardChecksEqualVars( - Guard guard, SsaDefinition v1, SsaDefinition v2, boolean branch - ) { - equalityTestSymmetric(guard, v1.getARead(), v2.getARead(), branch) - } - - private predicate guardReadsSsaVar(Guard guard, SsaDefinition def) { - def.getARead() = guard - or - // A read of `y` can be considered as a read of `x` if guarded by `x == y`. - exists(Guard eqtest, SsaDefinition other, boolean branch | - guardChecksEqualVars(eqtest, def, other, branch) and - other.getARead() = guard and - eqtest.directlyControls(guard.getBasicBlock(), branch) - ) - or - // An expression `x = ...` can be considered as a read of `x`. - guard.(IdExpr).getEqualChildExpr() = def.(SsaWriteDefinition).getDefinition() - } - - private predicate valueStep(Expr e1, Expr e2) { - e2.(ConditionalExpr).getThen() = e1 or - e2.(ConditionalExpr).getElse() = e1 or - e2.(IdExpr).getEqualChildExpr() = e1 - } - - /** - * Gets a sub-expression of `e` whose value can flow to `e` through - * `valueStep`s - */ - private Expr possibleValue(Expr e) { - result = possibleValue(any(Expr e1 | valueStep(e1, e))) - or - result = e and not valueStep(_, e) - } - - /** - * Gets an ultimate definition of `v` that is not itself a phi node. The - * boolean `fromBackEdge` indicates whether the flow from `result` to `v` goes - * through a back edge. - */ - private SsaDefinition getAnUltimateDefinition(SsaDefinition v, boolean fromBackEdge) { - result = v and not v instanceof SsaPhiNode and fromBackEdge = false - or - exists(SsaDefinition inp, BasicBlock bb, boolean fbe | - v.(SsaPhiNode).hasInputFromBlock(inp, bb) and - result = getAnUltimateDefinition(inp, fbe) and - (if v.getBasicBlock().dominates(bb) then fromBackEdge = true else fromBackEdge = fbe) - ) - } - - /** - * Holds if `v` can have a value that is not representable as a `GuardValue`. - */ - private predicate hasPossibleUnknownValue(SsaDefinition v) { - exists(SsaDefinition def | def = getAnUltimateDefinition(v, _) | - not exists(def.(SsaWriteDefinition).getDefinition()) - or - exists(Expr e | e = possibleValue(def.(SsaWriteDefinition).getDefinition()) | - not constantHasValue(e, _) - ) - ) - } - - /** - * Holds if `e` equals `k` and may be assigned to `v`. The boolean - * `fromBackEdge` indicates whether the flow from `e` to `v` goes through a - * back edge. - */ - private predicate possibleValue(SsaDefinition v, boolean fromBackEdge, Expr e, GuardValue k) { - not hasPossibleUnknownValue(v) and - exists(SsaWriteDefinition def | - def = getAnUltimateDefinition(v, fromBackEdge) and - e = possibleValue(def.getDefinition()) and - constantHasValue(e, k) - ) - } - - /** - * Holds if `e` equals `k` and may be assigned to `v` without going through - * back edges, and all other possible ultimate definitions of `v` are different - * from `k`. The trivial case where `v` is an `SsaWriteDefinition` with `e` as - * the only possible value is excluded. - */ - private predicate uniqueValue(SsaDefinition v, Expr e, GuardValue k) { - possibleValue(v, false, e, k) and - not possibleValue(v, true, e, k) and - forex(Expr other, GuardValue otherval | possibleValue(v, _, other, otherval) and other != e | - disjointValues(otherval, k) - ) - } - - /** - * Holds if `phi` has exactly two inputs, `def1` and `e2`, and that `def1` - * does not come from a back-edge into `phi`. - */ - private predicate phiWithTwoInputs(SsaPhiNode phi, SsaDefinition def1, Expr e2) { - exists(SsaWriteDefinition def2, BasicBlock bb1 | - 2 = strictcount(SsaDefinition inp, BasicBlock bb | phi.hasInputFromBlock(inp, bb)) and - phi.hasInputFromBlock(def1, bb1) and - phi.hasInputFromBlock(def2, _) and - def1 != def2 and - not phi.getBasicBlock().dominates(bb1) and - def2.getDefinition() = e2 - ) - } - - /** Holds if `e` may take the value `k` */ - private predicate relevantInt(Expr e, int k) { - e.(ConstantExpr).asIntegerValue() = k - or - relevantInt(any(Expr e1 | valueStep(e1, e)), k) - or - exists(SsaDefinition def | - guardReadsSsaVar(e, def) and - relevantInt(getAnUltimateDefinition(def, _).(SsaWriteDefinition).getDefinition(), k) - ) - } - - private predicate impliesStep1(Guard g1, GuardValue v1, Guard g2, GuardValue v2) { - baseImpliesStep(g1, v1, g2, v2) - or - exists(SsaDefinition def, Expr e | - // If `def = g2 ? v1 : ...` and all other assignments to `def` are different from - // `v1` then a guard proving `def == v1` ensures that `g2` evaluates to `v2`. - uniqueValue(def, e, v1) and - guardReadsSsaVar(g1, def) and - g2.directlyValueControls(e.getBasicBlock(), v2) and - not g2.directlyValueControls(g1.getBasicBlock(), v2) - ) - or - exists(int k1, int k2, boolean upper | - rangeGuard(g1, v1, g2, k1, upper) and - relevantInt(g2, k2) and - v2 = TValue(TValueInt(k2), false) - | - upper = true and k1 < k2 // g2 <= k1 < k2 ==> g2 != k2 - or - upper = false and k1 > k2 // g2 >= k1 > k2 ==> g2 != k2 - ) - or - exists(boolean isNull | - additionalNullCheck(g1, v1, g2, isNull) and - v2.isNullness(isNull) and - not (g2 instanceof NonNullExpr and isNull = false) // disregard trivial guard - ) - } - - /** - * Holds if `g` evaluating to `v` implies that `def` evaluates to `ssaVal`. - * The included set of implications is somewhat restricted to avoid a - * recursive dependency on `exprHasValue`. - */ - private predicate baseSsaValueCheck(SsaDefinition def, GuardValue ssaVal, Guard g, GuardValue v) { - exists(Guard g0, GuardValue v0 | - guardReadsSsaVar(g0, def) and v0 = ssaVal - or - baseSsaValueCheck(def, ssaVal, g0, v0) - | - impliesStep1(g, v, g0, v0) - ) - } - - private predicate exprHasValue(Expr e, GuardValue v) { - constantHasValue(e, v) - or - e instanceof NonNullExpr and v.isNonNullValue() - or - exprHasValue(e.(IdExpr).getEqualChildExpr(), v) - or - exists(SsaDefinition def, Guard g, GuardValue gv | - e = def.getARead() and - g.directlyValueControls(e.getBasicBlock(), gv) and - baseSsaValueCheck(def, v, g, gv) - ) - or - exists(SsaWriteDefinition def | - exprHasValue(def.getDefinition(), v) and - e = def.getARead() - ) - } - - private predicate impliesStep2(Guard g1, GuardValue v1, Guard g2, GuardValue v2) { - impliesStep1(g1, v1, g2, v2) - or - exists(Expr nonnull | - exprHasValue(nonnull, v2) and - equalityTestSymmetric(g1, g2, nonnull, v1.asBooleanValue()) and - v2.isNonNullValue() - ) - } - - bindingset[g1, v1] - pragma[inline_late] - private predicate unboundImpliesStep(Guard g1, GuardValue v1, Guard g2, GuardValue v2) { - g1.(IdExpr).getEqualChildExpr() = g2 and v1 = v2 and not v1 instanceof TException - or - exists(ConditionalExpr cond, boolean branch, Expr e, GuardValue ev | - cond = g1 and - e = getBranchExpr(cond, branch) and - exprHasValue(e, ev) and - disjointValues(v1, ev) - | - // g1 === g2 ? e : ...; - // g1 === g2 ? ... : e; - g2 = cond.getCondition() and - v2.asBooleanValue() = branch.booleanNot() - or - // g1 === ... ? g2 : e - // g1 === ... ? e : g2 - g2 = getBranchExpr(cond, branch.booleanNot()) and - v2 = v1 and - not exprHasValue(g2, v2) // disregard trivial guard - ) - } - - bindingset[def1, v1] - pragma[inline_late] - private predicate impliesStepSsaGuard(SsaDefinition def1, GuardValue v1, Guard g2, GuardValue v2) { - def1.(SsaWriteDefinition).getDefinition() = g2 and - v1 = v2 and - not exprHasValue(g2, v2) // disregard trivial guard - or - exists(Expr e, GuardValue ev | - guardDeterminesPhiInput(g2, v2.getDualValue(), def1, e) and - exprHasValue(e, ev) and - disjointValues(v1, ev) - ) - } - - bindingset[def1, v] - pragma[inline_late] - private predicate impliesStepSsa(SsaDefinition def1, GuardValue v, SsaDefinition def2) { - exists(Expr e, GuardValue ev | - phiWithTwoInputs(def1, def2, e) and - exprHasValue(e, ev) and - disjointValues(v, ev) - ) - } - - private signature predicate baseGuardValueSig(Guard guard, GuardValue v); - - /** - * Calculates the transitive closure of all the guard implication steps - * starting from a given set of base cases. - */ - cached - private module ImpliesTC { - /** - * Holds if `tgtGuard` evaluating to `tgtVal` implies that `guard` - * evaluates to `v`. - */ - pragma[nomagic] - cached - predicate guardControls(Guard guard, GuardValue v, Guard tgtGuard, GuardValue tgtVal) { - baseGuardValue(tgtGuard, tgtVal) and - guard = tgtGuard and - v = tgtVal - or - exists(Guard g0, GuardValue v0 | - guardControls(g0, v0, tgtGuard, tgtVal) and - impliesStep2(g0, v0, guard, v) - ) - or - exists(Guard g0, GuardValue v0 | - guardControls(g0, v0, tgtGuard, tgtVal) and - unboundImpliesStep(g0, v0, guard, v) - ) - or - exists(SsaDefinition def0, GuardValue v0 | - ssaControls(def0, v0, tgtGuard, tgtVal) and - impliesStepSsaGuard(def0, v0, guard, v) - ) - or - exists(Guard g0, GuardValue v0 | - guardControls(g0, v0, tgtGuard, tgtVal) and - additionalImpliesStep(g0, v0, guard, v) - ) - } - - /** - * Holds if `tgtGuard` evaluating to `tgtVal` implies that `def` - * evaluates to `v`. - */ - pragma[nomagic] - cached - predicate ssaControls(SsaDefinition def, GuardValue v, Guard tgtGuard, GuardValue tgtVal) { - exists(Guard g0 | - guardControls(g0, v, tgtGuard, tgtVal) and - guardReadsSsaVar(g0, def) - ) - or - exists(SsaDefinition def0 | - ssaControls(def0, v, tgtGuard, tgtVal) and - impliesStepSsa(def0, v, def) - ) - } - } - - private predicate booleanGuard(Guard guard, GuardValue val) { - exists(guard) and exists(val.asBooleanValue()) - } - - private module BooleanImplies = ImpliesTC; - - /** INTERNAL: Don't use. */ - predicate boolImplies(Guard g1, GuardValue v1, Guard g2, GuardValue v2) { - BooleanImplies::guardControls(g2, v2, g1, v1) and - g2 != g1 - } - - /** - * Holds if `guard` evaluating to `v` implies that `e` is guaranteed to be - * null if `isNull` is true, and non-null if `isNull` is false. - */ - predicate nullGuard(Guard guard, GuardValue v, Expr e, boolean isNull) { - impliesStep2(guard, v, e, any(GuardValue gv | gv.isNullness(isNull))) or - additionalImpliesStep(guard, v, e, any(GuardValue gv | gv.isNullness(isNull))) - } - - private predicate hasAValueBranchEdge(Guard guard, GuardValue v) { - guard.hasValueBranchEdge(_, _, v) - } - - private module BranchImplies = ImpliesTC; - - private predicate guardControlsBranchEdge( - Guard guard, BasicBlock bb1, BasicBlock bb2, GuardValue v - ) { - exists(Guard g0, GuardValue v0 | - g0.hasValueBranchEdge(bb1, bb2, v0) and - BranchImplies::guardControls(guard, v, g0, v0) - ) - } - - /** - * Holds if `def` evaluating to `v` controls the control-flow branch - * edge from `bb1` to `bb2`. That is, following the edge from `bb1` to - * `bb2` implies that `def` evaluated to `v`. - */ - predicate ssaControlsBranchEdge(SsaDefinition def, BasicBlock bb1, BasicBlock bb2, GuardValue v) { - exists(Guard g0, GuardValue v0 | - g0.hasValueBranchEdge(bb1, bb2, v0) and - BranchImplies::ssaControls(def, v, g0, v0) - ) - } - - /** - * Holds if `def` evaluating to `v` controls the basic block `bb`. - * That is, execution of `bb` implies that `def` evaluated to `v`. - */ - predicate ssaControls(SsaDefinition def, BasicBlock bb, GuardValue v) { - exists(BasicBlock guard, BasicBlock succ | - ssaControlsBranchEdge(def, guard, succ, v) and - dominatingEdge(guard, succ) and - succ.dominates(bb) - ) - } - - signature module CustomGuardInputSig { - class ParameterPosition { - /** Gets a textual representation of this element. */ - bindingset[this] - string toString(); - } - - class ArgumentPosition { - /** Gets a textual representation of this element. */ - bindingset[this] - string toString(); - } - - /** - * Holds if the parameter position `ppos` matches the argument position - * `apos`. - */ - predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos); - - /** A non-overridable method with a boolean return value. */ - class BooleanMethod { - SsaDefinition getParameter(ParameterPosition ppos); - - Expr getAReturnExpr(); - } - - class BooleanMethodCall extends Expr { - BooleanMethod getMethod(); - - Expr getArgument(ArgumentPosition apos); - } - } - - /** - * Provides an implementation of guard implication logic for custom - * wrappers. This can be used to instantiate the `additionalImpliesStep` - * predicate. - */ - module CustomGuard { - private import CustomGuardInput - - final private class FinalExpr = Expr; - - private class ReturnExpr extends FinalExpr { - ReturnExpr() { any(BooleanMethod m).getAReturnExpr() = this } - - pragma[nomagic] - BasicBlock getBasicBlock() { result = super.getBasicBlock() } - } - - private predicate booleanReturnGuard(Guard guard, GuardValue val) { - guard instanceof ReturnExpr and exists(val.asBooleanValue()) - } - - private module ReturnImplies = ImpliesTC; - - /** - * Holds if `ret` is a return expression in a non-overridable method that - * on a return value of `retval` allows the conclusion that the `ppos`th - * parameter has the value `val`. - */ - private predicate validReturnInCustomGuard( - ReturnExpr ret, ParameterPosition ppos, boolean retval, GuardValue val - ) { - exists(BooleanMethod m, SsaDefinition param | - m.getAReturnExpr() = ret and - m.getParameter(ppos) = param - | - exists(Guard g0, GuardValue v0 | - g0.directlyValueControls(ret.getBasicBlock(), v0) and - BranchImplies::ssaControls(param, val, g0, v0) and - retval = [true, false] - ) - or - ReturnImplies::ssaControls(param, val, ret, - any(GuardValue r | r.asBooleanValue() = retval)) - ) - } - - /** - * Gets a non-overridable method with a boolean return value that performs a check - * on the `ppos`th parameter. A return value equal to `retval` allows us to conclude - * that the argument has the value `val`. - */ - private BooleanMethod customGuard(ParameterPosition ppos, boolean retval, GuardValue val) { - forex(ReturnExpr ret | - result.getAReturnExpr() = ret and - not ret.(ConstantExpr).asBooleanValue() = retval.booleanNot() - | - validReturnInCustomGuard(ret, ppos, retval, val) - ) - } - - /** - * Holds if the assumption that `g1` has been evaluated to `v1` implies that - * `g2` has been evaluated to `v2`, that is, the evaluation of `g2` to `v2` - * dominates the evaluation of `g1` to `v1`. - * - * This predicate covers the implication steps that arise from calls to - * custom guard wrappers. - */ - predicate additionalImpliesStep(PreGuard g1, GuardValue v1, PreGuard g2, GuardValue v2) { - exists(BooleanMethodCall call, ParameterPosition ppos, ArgumentPosition apos | - g1 = call and - call.getMethod() = customGuard(ppos, v1.asBooleanValue(), v2) and - call.getArgument(apos) = g2 and - parameterMatch(pragma[only_bind_out](ppos), pragma[only_bind_out](apos)) - ) - } - } - - /** - * A guard. This may be any expression whose value determines subsequent - * control flow. It may also be a switch case, which as a guard is considered - * to evaluate to either true or false depending on whether the case matches. - */ - final class Guard extends PreGuard { - /** - * Holds if this guard evaluating to `v` controls the control-flow branch - * edge from `bb1` to `bb2`. That is, following the edge from `bb1` to - * `bb2` implies that this guard evaluated to `v`. - * - * Note that this goes beyond mere control-flow graph dominance, as it - * also considers additional logical reasoning. - */ - predicate valueControlsBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue v) { - guardControlsBranchEdge(this, bb1, bb2, v) - } - - /** - * Holds if this guard evaluating to `v` controls the basic block `bb`. - * That is, execution of `bb` implies that this guard evaluated to `v`. - * - * Note that this goes beyond mere control-flow graph dominance, as it - * also considers additional logical reasoning. - */ - predicate valueControls(BasicBlock bb, GuardValue v) { - exists(BasicBlock guard, BasicBlock succ | - this.valueControlsBranchEdge(guard, succ, v) and - dominatingEdge(guard, succ) and - succ.dominates(bb) - ) - } - - /** - * Holds if this guard evaluating to `branch` controls the control-flow - * branch edge from `bb1` to `bb2`. That is, following the edge from - * `bb1` to `bb2` implies that this guard evaluated to `branch`. - * - * Note that this goes beyond mere control-flow graph dominance, as it - * also considers additional logical reasoning. - */ - predicate controlsBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { - this.valueControlsBranchEdge(bb1, bb2, any(GuardValue gv | gv.asBooleanValue() = branch)) - } - - /** - * Holds if this guard evaluating to `branch` controls the basic block - * `bb`. That is, execution of `bb` implies that this guard evaluated to - * `branch`. - * - * Note that this goes beyond mere control-flow graph dominance, as it - * also considers additional logical reasoning. - */ - predicate controls(BasicBlock bb, boolean branch) { - this.valueControls(bb, any(GuardValue gv | gv.asBooleanValue() = branch)) - } - } - } -} diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index a1020700a1a3..e4a5a8454777 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.11-dev +version: 2.0.10 groups: shared library: true dependencies: diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 3483287e3b39..93327f5ad6a3 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -3,8 +3,6 @@ * adds a global analysis, mainly exposed through the `Global` and `GlobalWithState` * modules. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/dataflow/codeql/dataflow/TaintTracking.qll b/shared/dataflow/codeql/dataflow/TaintTracking.qll index bd4b4ecd6ca5..24aea44320e0 100644 --- a/shared/dataflow/codeql/dataflow/TaintTracking.qll +++ b/shared/dataflow/codeql/dataflow/TaintTracking.qll @@ -2,8 +2,6 @@ * Provides modules for performing local (intra-procedural) and * global (inter-procedural) taint-tracking analyses. */ -overlay[local?] -module; private import DataFlow as DF private import internal.DataFlowImpl diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index 4df415f90ad9..c2c84b7f0f87 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -2,8 +2,6 @@ * Provides a module for synthesizing data-flow nodes and related step relations * for supporting flow through captured variables. */ -overlay[local?] -module; private import codeql.util.Boolean private import codeql.util.Unit diff --git a/shared/dataflow/codeql/dataflow/internal/AccessPathSyntax.qll b/shared/dataflow/codeql/dataflow/internal/AccessPathSyntax.qll index 78b6db4090a5..17b979e42a66 100644 --- a/shared/dataflow/codeql/dataflow/internal/AccessPathSyntax.qll +++ b/shared/dataflow/codeql/dataflow/internal/AccessPathSyntax.qll @@ -5,8 +5,6 @@ * This file is used by the shared data flow library and by the JavaScript libraries * (which does not use the shared data flow libraries). */ -overlay[local?] -module; /** * Convenience-predicate for extracting two capture groups at once. diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index baf473efff16..1eaa84505419 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -22,8 +22,6 @@ * steps, followed by 0 or more stores, with value-preserving steps allowed in * between all other steps. */ -overlay[local?] -module; private import codeql.dataflow.DataFlow private import codeql.util.Boolean diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index a7e0736432ac..a13c71f554cc 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -3,8 +3,6 @@ * * Provides an implementation of global (interprocedural) data flow. */ -overlay[local?] -module; private import codeql.util.Unit private import codeql.util.Option @@ -794,7 +792,6 @@ module MakeImpl Lang> { innercc = getCallContextCall(call, inner) } - overlay[caller?] pragma[inline] predicate fwdFlowIn( Call call, ArgNd arg, Callable inner, ParamNd p, Cc outercc, CcCall innercc, @@ -2324,7 +2321,6 @@ module MakeImpl Lang> { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - overlay[caller?] pragma[inline] deprecated final predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn @@ -2528,7 +2524,6 @@ module MakeImpl Lang> { class ApHeadContent = Unit; - overlay[caller?] pragma[inline] ApHeadContent getHeadContent(Ap ap) { exists(result) and ap = true } diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 288814c4c511..845da27aae7a 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.dataflow.DataFlow private import codeql.typetracking.TypeTracking as Tt private import codeql.util.Location @@ -291,7 +288,6 @@ module MakeImplCommon Lang> { * to `lambdaCall`, if any. That is, `lastCall` is able to target the enclosing * callable of `lambdaCall`. */ - overlay[global] pragma[nomagic] predicate revLambdaFlow( Call lambdaCall, LambdaCallKind kind, Node node, Type t, boolean toReturn, boolean toJump, @@ -678,7 +674,6 @@ module MakeImplCommon Lang> { class CcCall = CallContextCall; - overlay[caller?] pragma[inline] predicate matchesCall(CcCall cc, Call call) { cc = Input2::getSpecificCallContextCall(call, _) or @@ -890,7 +885,6 @@ module MakeImplCommon Lang> { pragma[nomagic] private Callable getEnclosingCallable0() { nodeEnclosingCallable(this.projectToNode(), result) } - overlay[caller?] pragma[inline] Callable getEnclosingCallable() { pragma[only_bind_out](this).getEnclosingCallable0() = pragma[only_bind_into](result) @@ -905,7 +899,6 @@ module MakeImplCommon Lang> { isTopType(result) and this.isImplicitReadNode(_) } - overlay[caller?] pragma[inline] Type getType() { pragma[only_bind_out](this).getType0() = pragma[only_bind_into](result) } @@ -2417,14 +2410,12 @@ module MakeImplCommon Lang> { * predicate ensures that joins go from `n` to the result instead of the other * way around. */ - overlay[caller?] pragma[inline] Callable getNodeEnclosingCallable(Node n) { nodeEnclosingCallable(pragma[only_bind_out](n), pragma[only_bind_into](result)) } /** Gets the type of `n` used for type pruning. */ - overlay[caller?] pragma[inline] Type getNodeDataFlowType(Node n) { nodeType(pragma[only_bind_out](n), pragma[only_bind_into](result)) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll index 83abd41f5e6e..7721a5df0445 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplConsistency.qll @@ -2,8 +2,6 @@ * Provides consistency queries for checking invariants in the language-specific * data-flow classes and predicates. */ -overlay[local?] -module; private import codeql.dataflow.DataFlow as DF private import codeql.dataflow.TaintTracking as TT diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplStage1.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplStage1.qll index c7883df0de18..f9eaea566cd8 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplStage1.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplStage1.qll @@ -4,8 +4,6 @@ * Provides an implementation of a fast initial pruning of global * (interprocedural) data flow reachability (Stage 1). */ -overlay[local?] -module; private import codeql.util.Unit private import codeql.util.Location @@ -1786,7 +1784,6 @@ module MakeImplStage1 Lang> { * For more information, see * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). */ - overlay[caller?] pragma[inline] deprecated predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll index 3eda6709517c..e6da5d3a37f6 100644 --- a/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/FlowSummaryImpl.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for defining flow summaries. */ -overlay[local?] -module; private import codeql.dataflow.DataFlow as DF private import codeql.util.Location diff --git a/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll b/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll index 4a5e92fd5897..2171c9096434 100644 --- a/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll +++ b/shared/dataflow/codeql/dataflow/test/ProvenancePathGraph.qll @@ -5,8 +5,6 @@ * In addition to the `PathGraph`, a `query predicate models` is provided to * list the contents of the referenced MaD rows. */ -overlay[local?] -module; private import codeql.dataflow.DataFlow as DF diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 2064efe3b6b5..146b0bcdc385 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.11-dev +version: 2.0.10 groups: shared library: true dependencies: diff --git a/shared/dataflowstack/codeql/dataflowstack/DataFlowStack.qll b/shared/dataflowstack/codeql/dataflowstack/DataFlowStack.qll index 21926e06be7a..945fa7c05be7 100644 --- a/shared/dataflowstack/codeql/dataflowstack/DataFlowStack.qll +++ b/shared/dataflowstack/codeql/dataflowstack/DataFlowStack.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.dataflow.DataFlow as DF private import codeql.util.Location diff --git a/shared/dataflowstack/codeql/dataflowstack/TaintTrackingStack.qll b/shared/dataflowstack/codeql/dataflowstack/TaintTrackingStack.qll index 202619d75bc9..8b3b152e33c5 100644 --- a/shared/dataflowstack/codeql/dataflowstack/TaintTrackingStack.qll +++ b/shared/dataflowstack/codeql/dataflowstack/TaintTrackingStack.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.dataflow.DataFlow as DF private import codeql.dataflow.TaintTracking as TT private import codeql.util.Location diff --git a/shared/global-controlflow/codeql/globalcontrolflow/ControlFlow.qll b/shared/global-controlflow/codeql/globalcontrolflow/ControlFlow.qll index a39aa4f4d008..0acbda3142a6 100644 --- a/shared/global-controlflow/codeql/globalcontrolflow/ControlFlow.qll +++ b/shared/global-controlflow/codeql/globalcontrolflow/ControlFlow.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.util.Location /** Provides language-specific control flow parameters. */ diff --git a/shared/global-controlflow/codeql/globalcontrolflow/internal/ControlFlowImpl.qll b/shared/global-controlflow/codeql/globalcontrolflow/internal/ControlFlowImpl.qll index b48da19c66c4..ee21eb892ae9 100644 --- a/shared/global-controlflow/codeql/globalcontrolflow/internal/ControlFlowImpl.qll +++ b/shared/global-controlflow/codeql/globalcontrolflow/internal/ControlFlowImpl.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.util.Unit private import codeql.util.Location private import codeql.globalcontrolflow.ControlFlow diff --git a/shared/mad/codeql/mad/ModelValidation.qll b/shared/mad/codeql/mad/ModelValidation.qll index 98b2a212c316..4c1d6793d652 100644 --- a/shared/mad/codeql/mad/ModelValidation.qll +++ b/shared/mad/codeql/mad/ModelValidation.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates related to validating models-as-data rows. */ -overlay[local?] -module; /** Provides predicates for determining if a model exists for a given `kind`. */ signature module KindValidationConfigSig { diff --git a/shared/mad/codeql/mad/dynamic/GraphExport.qll b/shared/mad/codeql/mad/dynamic/GraphExport.qll index b666a96fb67a..e28c82f47ab3 100644 --- a/shared/mad/codeql/mad/dynamic/GraphExport.qll +++ b/shared/mad/codeql/mad/dynamic/GraphExport.qll @@ -1,8 +1,6 @@ /** * Contains predicates for converting an arbitrary graph to a set of `typeModel` rows. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll index 51dafc2cc96a..829bf267c226 100644 --- a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll +++ b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll @@ -4,8 +4,6 @@ * Provides classes and predicates related to capturing summary, source, * and sink models of the Standard or a 3rd party library. */ -overlay[local?] -module; private import codeql.dataflow.DataFlow private import codeql.dataflow.TaintTracking as Tt diff --git a/shared/mad/codeql/mad/modelgenerator/internal/ModelPrinting.qll b/shared/mad/codeql/mad/modelgenerator/internal/ModelPrinting.qll index a5f9145714bf..d4fbd9062b63 100644 --- a/shared/mad/codeql/mad/modelgenerator/internal/ModelPrinting.qll +++ b/shared/mad/codeql/mad/modelgenerator/internal/ModelPrinting.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - signature module ModelPrintingLangSig { /** * A class of callables. diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 6a57f272569e..c1c0f892106b 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true dependencies: diff --git a/shared/quantum/codeql/quantum/experimental/Model.qll b/shared/quantum/codeql/quantum/experimental/Model.qll index d8b1402b5e88..d4a900f9bcac 100644 --- a/shared/quantum/codeql/quantum/experimental/Model.qll +++ b/shared/quantum/codeql/quantum/experimental/Model.qll @@ -1,8 +1,6 @@ /** * A language-independent library for reasoning about cryptography. */ -overlay[local?] -module; import codeql.util.Location @@ -31,8 +29,6 @@ signature module InputSig { } module CryptographyBase Input> { - import Standardization::Types - final class LocatableElement = Input::LocatableElement; final class UnknownLocation = Input::UnknownLocation; @@ -297,8 +293,6 @@ module CryptographyBase Input> { ( exists(KeyCreationOperationInstance op | input = op.getKeySizeConsumer()) or - exists(KeyGenerationOperationInstance op | input = op.getKeyValueConsumer()) - or exists(KeyDerivationOperationInstance op | input = op.getIterationCountConsumer() or input = op.getOutputKeySizeConsumer() @@ -361,7 +355,7 @@ module CryptographyBase Input> { * * An artifact's properties (such as being a nonce) are not necessarily inherent; they are determined by the context in which the artifact is consumed. * The consumer node is therefore essential in defining these properties for inputs. * * This approach reduces ambiguity by avoiding separate notions of "artifact source" and "consumer", as the node itself encapsulates both roles. - * * Instances of nodes do not necessarily have to come from a consumer, allowing additional modeling of an artifact to occur outside of the consumer. + * * Instances of nodes do not necessarily have to come from a consumer, allowing additional modelling of an artifact to occur outside of the consumer. */ abstract class ArtifactConsumer extends ConsumerElement { /** @@ -409,7 +403,7 @@ module CryptographyBase Input> { or exists(KeyDerivationOperationInstance op | inputNode = op.getInputConsumer()) or - exists(MacOperationInstance op | inputNode = op.getMessageConsumer()) + exists(MACOperationInstance op | inputNode = op.getMessageConsumer()) or exists(HashOperationInstance op | inputNode = op.getInputConsumer()) ) and @@ -543,9 +537,7 @@ module CryptographyBase Input> { ( exists(KeyOperationInstance op | inputNode = op.getKeyConsumer()) or - exists(KeyGenerationOperationInstance op | inputNode = op.getKeyValueConsumer()) - or - exists(MacOperationInstance op | inputNode = op.getKeyConsumer()) + exists(MACOperationInstance op | inputNode = op.getKeyConsumer()) or exists(KeyAgreementSecretGenerationOperationInstance op | inputNode = op.getServerKeyConsumer() or @@ -560,6 +552,192 @@ module CryptographyBase Input> { final override ConsumerInputDataFlowNode getInputNode() { result = inputNode } } + /** + * The `KeyOpAlg` module defines key operation algorithms types (e.g., symmetric ciphers, signatures, etc.) + * and provides mapping of those types to string names and structural properties. + */ + module KeyOpAlg { + /** + * An algorithm used in key operations. + */ + newtype TAlgorithm = + TSymmetricCipher(TSymmetricCipherType t) or + TAsymmetricCipher(TAsymmetricCipherType t) or + TSignature(TSignatureAlgorithmType t) or + TKeyEncapsulation(TKEMAlgorithmType t) or + TUnknownKeyOperationAlgorithmType() + + // Parameterized algorithm types + newtype TSymmetricCipherType = + AES() or + ARIA() or + BLOWFISH() or + CAMELLIA() or + CAST5() or + CHACHA20() or + DES() or + DESX() or + GOST() or + IDEA() or + KUZNYECHIK() or + MAGMA() or + TripleDES() or + DoubleDES() or + RC2() or + RC4() or + RC5() or + SEED() or + SM4() or + OtherSymmetricCipherType() + + newtype TAsymmetricCipherType = + RSA() or + OtherAsymmetricCipherType() + + newtype TSignatureAlgorithmType = + DSA() or + ECDSA() or + EDDSA() or // e.g., ED25519 or ED448 + OtherSignatureAlgorithmType() + + newtype TKEMAlgorithmType = + Kyber() or + FrodoKEM() or + OtherKEMAlgorithmType() + + newtype TCipherStructureType = + Block() or + Stream() or + UnknownCipherStructureType() + + class CipherStructureType extends TCipherStructureType { + string toString() { + result = "Block" and this = Block() + or + result = "Stream" and this = Stream() + or + result = "Unknown" and this = UnknownCipherStructureType() + } + } + + predicate fixedImplicitCipherKeySize(TAlgorithm type, int size) { + type = TSymmetricCipher(DES()) and size = 56 + or + type = TSymmetricCipher(DESX()) and size = 184 + or + type = TSymmetricCipher(DoubleDES()) and size = 112 + or + type = TSymmetricCipher(TripleDES()) and size = 168 + or + type = TSymmetricCipher(CHACHA20()) and size = 256 + or + type = TSymmetricCipher(IDEA()) and size = 128 + or + type = TSymmetricCipher(KUZNYECHIK()) and size = 256 + or + type = TSymmetricCipher(MAGMA()) and size = 256 + or + type = TSymmetricCipher(SM4()) and size = 128 + or + type = TSymmetricCipher(SEED()) and size = 128 + } + + predicate symmetric_cipher_to_name_and_structure( + TSymmetricCipherType type, string name, CipherStructureType s + ) { + type = AES() and name = "AES" and s = Block() + or + type = ARIA() and name = "ARIA" and s = Block() + or + type = BLOWFISH() and name = "Blowfish" and s = Block() + or + type = CAMELLIA() and name = "Camellia" and s = Block() + or + type = CAST5() and name = "CAST5" and s = Block() + or + type = CHACHA20() and name = "ChaCha20" and s = Stream() + or + type = DES() and name = "DES" and s = Block() + or + type = DESX() and name = "DESX" and s = Block() + or + type = GOST() and name = "GOST" and s = Block() + or + type = IDEA() and name = "IDEA" and s = Block() + or + type = KUZNYECHIK() and name = "Kuznyechik" and s = Block() + or + type = MAGMA() and name = "Magma" and s = Block() + or + type = TripleDES() and name = "TripleDES" and s = Block() + or + type = DoubleDES() and name = "DoubleDES" and s = Block() + or + type = RC2() and name = "RC2" and s = Block() + or + type = RC4() and name = "RC4" and s = Stream() + or + type = RC5() and name = "RC5" and s = Block() + or + type = SEED() and name = "SEED" and s = Block() + or + type = SM4() and name = "SM4" and s = Block() + or + type = OtherSymmetricCipherType() and + name = "UnknownSymmetricCipher" and + s = UnknownCipherStructureType() + } + + predicate type_to_name(Algorithm type, string name) { + // Symmetric cipher algorithm + symmetric_cipher_to_name_and_structure(type.(SymmetricCipherAlgorithm).getType(), name, _) + or + // Asymmetric cipher algorithms + type = TAsymmetricCipher(RSA()) and name = "RSA" + or + type = TAsymmetricCipher(OtherAsymmetricCipherType()) and name = "UnknownAsymmetricCipher" + or + // Signature algorithms + type = TSignature(DSA()) and name = "DSA" + or + type = TSignature(ECDSA()) and name = "ECDSA" + or + type = TSignature(EDDSA()) and name = "EDSA" + or + type = TSignature(OtherSignatureAlgorithmType()) and name = "UnknownSignature" + or + // Key Encapsulation Mechanisms + type = TKeyEncapsulation(Kyber()) and name = "Kyber" + or + type = TKeyEncapsulation(FrodoKEM()) and name = "FrodoKEM" + or + type = TKeyEncapsulation(OtherKEMAlgorithmType()) and name = "UnknownKEM" + or + // Unknown + type = TUnknownKeyOperationAlgorithmType() and name = "Unknown" + } + + class Algorithm extends TAlgorithm { + string toString() { type_to_name(this, result) } + } + + class SymmetricCipherAlgorithm extends Algorithm, TSymmetricCipher { + TSymmetricCipherType type; + + SymmetricCipherAlgorithm() { this = TSymmetricCipher(type) } + + TSymmetricCipherType getType() { result = type } + } + + class AsymmetricCipherAlgorithm extends Algorithm, TAsymmetricCipher { + TAsymmetricCipherType type; + + AsymmetricCipherAlgorithm() { this = TAsymmetricCipher(type) } + + TAsymmetricCipherType getType() { result = type } + } + } + /** * A key-based cryptographic operation instance, encompassing: * 1. **Ciphers**: Encryption and decryption, both symmetric and asymmetric @@ -658,7 +836,7 @@ module CryptographyBase Input> { * * This predicate should always hold. */ - abstract KeyOpAlg::AlgorithmType getAlgorithmType(); + abstract KeyOpAlg::Algorithm getAlgorithmType(); /** * Gets the mode of operation, such as "CBC", "GCM", or "ECB". @@ -710,6 +888,19 @@ module CryptographyBase Input> { predicate shouldHavePaddingScheme() { any() } } + newtype TBlockCipherModeOfOperationType = + ECB() or // Not secure, widely used + CBC() or // Vulnerable to padding oracle attacks + CFB() or + GCM() or // Widely used AEAD mode (TLS 1.3, SSH, IPsec) + CTR() or // Fast stream-like encryption (SSH, disk encryption) + XTS() or // Standard for full-disk encryption (BitLocker, LUKS, FileVault) + CCM() or // Used in lightweight cryptography (IoT, WPA2) + SIV() or // Misuse-resistant encryption, used in secure storage + OCB() or // Efficient AEAD mode + OFB() or + OtherMode() + abstract class ModeOfOperationAlgorithmInstance extends AlgorithmInstance { /** * Gets the type of this mode of operation, e.g., "ECB" or "CBC". @@ -718,7 +909,7 @@ module CryptographyBase Input> { * * If a type cannot be determined, the result is `OtherMode`. */ - abstract KeyOpAlg::ModeOfOperationType getModeType(); + abstract TBlockCipherModeOfOperationType getModeType(); /** * Gets the isolated name as it appears in source, e.g., "CBC" in "AES/CBC/PKCS7Padding". @@ -743,28 +934,33 @@ module CryptographyBase Input> { * * If a type cannot be determined, the result is `OtherPadding`. */ - abstract KeyOpAlg::PaddingSchemeType getPaddingType(); + abstract TPaddingType getPaddingType(); } - abstract class OaepPaddingAlgorithmInstance extends PaddingAlgorithmInstance { - OaepPaddingAlgorithmInstance() { this.getPaddingType() instanceof KeyOpAlg::OAEP } + abstract class OAEPPaddingAlgorithmInstance extends PaddingAlgorithmInstance { + OAEPPaddingAlgorithmInstance() { this.getPaddingType() instanceof OAEP } /** * Gets the hash algorithm used in this padding scheme. */ - abstract HashAlgorithmInstance getOaepEncodingHashAlgorithm(); + abstract HashAlgorithmInstance getOAEPEncodingHashAlgorithm(); /** * Gets the hash algorithm used by MGF1 (assumption: MGF1 is the only MGF used by OAEP) */ - abstract HashAlgorithmInstance getMgf1HashAlgorithm(); + abstract HashAlgorithmInstance getMGF1HashAlgorithm(); } - abstract class MacAlgorithmInstance extends AlgorithmInstance { + newtype TMACType = + THMAC() or + TCMAC() or + TOtherMACType() + + abstract class MACAlgorithmInstance extends AlgorithmInstance { /** * Gets the type of this MAC algorithm, e.g., "HMAC" or "CMAC". */ - abstract MacType getMacType(); + abstract TMACType getMacType(); /** * Gets the isolated name as it appears in source, e.g., "HMAC-SHA256" in "HMAC-SHA256/UnrelatedInformation". @@ -774,7 +970,7 @@ module CryptographyBase Input> { abstract string getRawMacAlgorithmName(); } - abstract class MacOperationInstance extends OperationInstance { + abstract class MACOperationInstance extends OperationInstance { /** * Gets the message input used in this operation. */ @@ -786,8 +982,8 @@ module CryptographyBase Input> { abstract ConsumerInputDataFlowNode getKeyConsumer(); } - abstract class HmacAlgorithmInstance extends MacAlgorithmInstance { - HmacAlgorithmInstance() { this.getMacType() = HMAC() } + abstract class HMACAlgorithmInstance extends MACAlgorithmInstance { + HMACAlgorithmInstance() { this.getMacType() instanceof THMAC } /** * Gets the hash algorithm used by this HMAC algorithm. @@ -803,7 +999,7 @@ module CryptographyBase Input> { */ abstract string getRawEllipticCurveName(); - abstract TEllipticCurveFamilyType getEllipticCurveFamilyType(); + abstract TEllipticCurveType getEllipticCurveType(); abstract int getKeySize(); @@ -864,10 +1060,8 @@ module CryptographyBase Input> { } /** - * An operation that generates, derives, or loads a cryptographic key. - * - * Library modeling should not extend this class directly but rather extend - * `KeyGenerationOperationInstance`, `KeyDerivationOperationInstance`, or `KeyLoadOperationInstance`. + * Users should not extend this class directly, but instead use + * `KeyCreationOperationInstance` or `KeyDerivationOperationInstance`. */ abstract class KeyCreationOperationInstance extends OperationInstance { abstract string getKeyCreationTypeDescription(); @@ -893,9 +1087,6 @@ module CryptographyBase Input> { } } - /** - * An operation that derives a key from an input password or other data. - */ abstract class KeyDerivationOperationInstance extends KeyCreationOperationInstance { final override KeyArtifactType getOutputKeyType() { result instanceof TSymmetricKeyType } @@ -929,16 +1120,16 @@ module CryptographyBase Input> { /** * Gets the type of this key derivation algorithm, e.g., "PBKDF2" or "HKDF". */ - abstract TKeyDerivationType getKdfType(); + abstract TKeyDerivationType getKDFType(); /** * Gets the isolated name as it appears in source, e.g., "PBKDF2WithHmacSHA256" in "PBKDF2WithHmacSHA256/UnrelatedInformation". */ - abstract string getRawKdfAlgorithmName(); + abstract string getRawKDFAlgorithmName(); } - abstract class Pbkdf2AlgorithmInstance extends KeyDerivationAlgorithmInstance { - Pbkdf2AlgorithmInstance() { this.getKdfType() instanceof PBKDF2 } + abstract class PBKDF2AlgorithmInstance extends KeyDerivationAlgorithmInstance { + PBKDF2AlgorithmInstance() { this.getKDFType() instanceof PBKDF2 } /** * Gets the HMAC algorithm used by this PBKDF2 algorithm. @@ -946,11 +1137,11 @@ module CryptographyBase Input> { * Note: Other PRFs are not supported, as most cryptographic libraries * only support HMAC for PBKDF2's PRF input. */ - abstract AlgorithmValueConsumer getHmacAlgorithmValueConsumer(); + abstract AlgorithmValueConsumer getHMACAlgorithmValueConsumer(); } abstract class ScryptAlgorithmInstance extends KeyDerivationAlgorithmInstance { - ScryptAlgorithmInstance() { this.getKdfType() instanceof SCRYPT } + ScryptAlgorithmInstance() { this.getKDFType() instanceof SCRYPT } /** * Gets the HMAC algorithm used by this PBKDF2 algorithm. @@ -958,39 +1149,35 @@ module CryptographyBase Input> { * Note: Other PRFs are not supported, as most cryptographic libraries * only support HMAC for PBKDF2's PRF input. */ - abstract AlgorithmValueConsumer getHmacAlgorithmValueConsumer(); + abstract AlgorithmValueConsumer getHMACAlgorithmValueConsumer(); } abstract class KeyGenerationOperationInstance extends KeyCreationOperationInstance { final override string getKeyCreationTypeDescription() { result = "KeyGeneration" } - - /** - * Gets the consumer of a key for this key generaiton operation. - * This occurs when a key generation operaiton is based on a raw key value - * or it generates another key or key context from a previously generated key. - */ - abstract ConsumerInputDataFlowNode getKeyValueConsumer(); - - /** - * Holds if the key generation operation has a key consumer - * i.e., an input that is explicitly used for the key value. - * This value should correspond to the value returned by `getKeyValueConsumer()`. - */ - abstract predicate hasKeyValueConsumer(); } abstract class KeyLoadOperationInstance extends KeyCreationOperationInstance { final override string getKeyCreationTypeDescription() { result = "KeyLoad" } } + // Key agreement algorithms + newtype TKeyAgreementType = + DH() or // Diffie-Hellman + EDH() or // Ephemeral Diffie-Hellman + ECDH() or // Elliptic Curve Diffie-Hellman + // NOTE: for now ESDH is considered simply EDH + //ESDH() or // Ephemeral-Static Diffie-Hellman + // Note: x25519 and x448 are applications of ECDH + OtherKeyAgreementType() + abstract class KeyAgreementAlgorithmInstance extends AlgorithmInstance { abstract TKeyAgreementType getKeyAgreementType(); abstract string getRawKeyAgreementAlgorithmName(); } - abstract class EcdhKeyAgreementAlgorithmInstance extends KeyAgreementAlgorithmInstance { - EcdhKeyAgreementAlgorithmInstance() { this.getKeyAgreementType() instanceof ECDH } + abstract class ECDHKeyAgreementAlgorithmInstance extends KeyAgreementAlgorithmInstance { + ECDHKeyAgreementAlgorithmInstance() { this.getKeyAgreementType() instanceof ECDH } /** * Gets the consumer for the elliptic curve used in the key agreement operation. @@ -1029,7 +1216,7 @@ module CryptographyBase Input> { * This concept is used to model consumers that have no known source as an algorithm node. * * The `isCandidateAVCSig` predicate is used to restrict the set of consumers that expect inputs of `AlgorithmInstanceType`. - * These "total unknown" algorithm nodes would otherwise not exist if not modeled as a consumer node. + * These "total unknown" algorithm nodes would otherwise not exist if not modelled as a consumer node. */ module AlgorithmInstanceOrValueConsumer< AlgorithmInstanceType Alg, isCandidateAVCSig/1 isCandidateAVC> @@ -1050,58 +1237,58 @@ module CryptographyBase Input> { Alg asAlg() { result = this } - AlgorithmValueConsumer asAvc() { result = this and not this instanceof Alg } + AlgorithmValueConsumer asAVC() { result = this and not this instanceof Alg } } } - private predicate isHashAvc(AlgorithmValueConsumer avc) { + private predicate isHashAVC(AlgorithmValueConsumer avc) { exists(HashOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) or - exists(HmacAlgorithmInstance alg | avc = alg.getAConsumer()) + exists(HMACAlgorithmInstance alg | avc = alg.getAConsumer()) } - private predicate isKeyOperationAlgorithmAvc(AlgorithmValueConsumer avc) { + private predicate isKeyOperationAlgorithmAVC(AlgorithmValueConsumer avc) { exists(KeyOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) } - private predicate isMacAvc(AlgorithmValueConsumer avc) { - exists(MacOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) or - exists(Pbkdf2AlgorithmInstance alg | avc = alg.getHmacAlgorithmValueConsumer()) + private predicate isMACAVC(AlgorithmValueConsumer avc) { + exists(MACOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) or + exists(PBKDF2AlgorithmInstance alg | avc = alg.getHMACAlgorithmValueConsumer()) } - private predicate isKeyDerivationAvc(AlgorithmValueConsumer avc) { + private predicate isKeyDerivationAVC(AlgorithmValueConsumer avc) { exists(KeyDerivationOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) } - private predicate isEllipticCurveAvc(AlgorithmValueConsumer avc) { - exists(EcdhKeyAgreementAlgorithmInstance alg | + private predicate isEllipticCurveAVC(AlgorithmValueConsumer avc) { + exists(ECDHKeyAgreementAlgorithmInstance alg | avc = alg.getEllipticCurveAlgorithmValueConsumer() ) or exists(KeyGenerationOperationInstance op | op.getAnAlgorithmValueConsumer() = avc) } - private predicate isKeyAgreementAvc(AlgorithmValueConsumer avc) { + private predicate isKeyAgreementAVC(AlgorithmValueConsumer avc) { exists(KeyAgreementSecretGenerationOperationInstance op | op.getAnAlgorithmValueConsumer() = avc ) } final private class KeyOperationAlgorithmInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + AlgorithmInstanceOrValueConsumer::Union; final private class HashAlgorithmInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + AlgorithmInstanceOrValueConsumer::Union; - final private class MacAlgorithmInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + final private class MACAlgorithmInstanceOrValueConsumer = + AlgorithmInstanceOrValueConsumer::Union; final private class KeyDerivationAlgorithmInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + AlgorithmInstanceOrValueConsumer::Union; final private class EllipticCurveInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + AlgorithmInstanceOrValueConsumer::Union; final private class KeyAgreementAlgorithmInstanceOrValueConsumer = - AlgorithmInstanceOrValueConsumer::Union; + AlgorithmInstanceOrValueConsumer::Union; private newtype TNode = // Output artifacts (data that is not an operation or algorithm, e.g., a key) @@ -1128,17 +1315,17 @@ module CryptographyBase Input> { TPaddingAlgorithm(PaddingAlgorithmInstance e) or // All other operations THashOperation(HashOperationInstance e) or - TMacOperation(MacOperationInstance e) or + TMACOperation(MACOperationInstance e) or TKeyAgreementOperation(KeyAgreementSecretGenerationOperationInstance e) or // All other algorithms TEllipticCurve(EllipticCurveInstanceOrValueConsumer e) or THashAlgorithm(HashAlgorithmInstanceOrValueConsumer e) or TKeyDerivationAlgorithm(KeyDerivationAlgorithmInstanceOrValueConsumer e) or - TMacAlgorithm(MacAlgorithmInstanceOrValueConsumer e) or + TMACAlgorithm(MACAlgorithmInstanceOrValueConsumer e) or TKeyAgreementAlgorithm(KeyAgreementAlgorithmInstanceOrValueConsumer e) or // Generic source nodes, i.e., sources of data that are not resolvable to a specific known asset. TGenericSourceNode(GenericSourceInstance e) { - // An element modeled as a `GenericSourceInstance` can also be modeled as a `KnownElement` + // An element modelled as a `GenericSourceInstance` can also be modelled as a `KnownElement` // For example, a string literal "AES" could be a generic constant but also an algorithm instance. // // Therefore, only create generic nodes tied to instances which are not also a `KnownElement`... @@ -1582,17 +1769,17 @@ module CryptographyBase Input> { /** * A MAC operation that produces a MAC value. */ - final class MacOperationNode extends OperationNode, TMacOperation { - MacOperationInstance instance; + final class MACOperationNode extends OperationNode, TMACOperation { + MACOperationInstance instance; - MacOperationNode() { this = TMacOperation(instance) } + MACOperationNode() { this = TMACOperation(instance) } final override string getInternalType() { result = "MACOperation" } override LocatableElement asElement() { result = instance } override predicate isCandidateAlgorithmNode(AlgorithmNode node) { - node instanceof MacAlgorithmNode + node instanceof MACAlgorithmNode } MessageArtifactNode getAMessage() { @@ -1617,10 +1804,10 @@ module CryptographyBase Input> { /** * A MAC algorithm, such as HMAC or CMAC. */ - class MacAlgorithmNode extends AlgorithmNode, TMacAlgorithm { - MacAlgorithmInstanceOrValueConsumer instance; + class MACAlgorithmNode extends AlgorithmNode, TMACAlgorithm { + MACAlgorithmInstanceOrValueConsumer instance; - MacAlgorithmNode() { this = TMacAlgorithm(instance) } + MACAlgorithmNode() { this = TMACAlgorithm(instance) } final override string getInternalType() { result = "MACAlgorithm" } @@ -1630,15 +1817,20 @@ module CryptographyBase Input> { result = instance.asAlg().getRawMacAlgorithmName() } - MacType getMacType() { result = instance.asAlg().getMacType() } + TMACType getMacType() { result = instance.asAlg().getMacType() } + + final private predicate macToNameMapping(TMACType type, string name) { + type instanceof THMAC and + name = "HMAC" + } - override string getAlgorithmName() { result = this.getMacType().toString() } + override string getAlgorithmName() { this.macToNameMapping(this.getMacType(), result) } } - final class HmacAlgorithmNode extends MacAlgorithmNode { - HmacAlgorithmInstance hmacInstance; + final class HMACAlgorithmNode extends MACAlgorithmNode { + HMACAlgorithmInstance hmacInstance; - HmacAlgorithmNode() { hmacInstance = instance.asAlg() } + HMACAlgorithmNode() { hmacInstance = instance.asAlg() } NodeBase getHashAlgorithmOrUnknown() { result.asElement() = hmacInstance.getHashAlgorithmValueConsumer().getASource() @@ -1722,21 +1914,12 @@ module CryptographyBase Input> { node instanceof KeyCreationCandidateAlgorithmNode } - KeyArtifactNode getKeyArtifact() { - result.asElement() = keyGenInstance.getKeyValueConsumer().getConsumer() - } - override NodeBase getChild(string key) { result = super.getChild(key) or // [ALWAYS_KNOWN] key = "Output" and result = this.getOutputKeyArtifact() - or - // [KnOWN_OR_UNKNOWN] only if a raw key is a known input - key = "KeyInput" and - keyGenInstance.hasKeyValueConsumer() and - result = this.getKeyArtifact() } } @@ -1810,22 +1993,22 @@ module CryptographyBase Input> { override LocatableElement asElement() { result = instance } final override string getRawAlgorithmName() { - result = instance.asAlg().getRawKdfAlgorithmName() + result = instance.asAlg().getRawKDFAlgorithmName() } override string getAlgorithmName() { result = this.getRawAlgorithmName() } // TODO: standardize? } /** - * A PBKDF2 (key derivation function) algorithm node. + * PBKDF2 key derivation function */ - class Pbkdf2AlgorithmNode extends KeyDerivationAlgorithmNode { - Pbkdf2AlgorithmInstance pbkdf2Instance; + class PBKDF2AlgorithmNode extends KeyDerivationAlgorithmNode { + PBKDF2AlgorithmInstance pbkdf2Instance; - Pbkdf2AlgorithmNode() { pbkdf2Instance = instance.asAlg() } + PBKDF2AlgorithmNode() { pbkdf2Instance = instance.asAlg() } - HmacAlgorithmNode getHmacAlgorithm() { - result.asElement() = pbkdf2Instance.getHmacAlgorithmValueConsumer().getASource() + HMACAlgorithmNode getHMACAlgorithm() { + result.asElement() = pbkdf2Instance.getHMACAlgorithmValueConsumer().getASource() } override NodeBase getChild(string key) { @@ -1833,12 +2016,12 @@ module CryptographyBase Input> { or // [KNOWN_OR_UNKNOWN] key = "PRF" and - if exists(this.getHmacAlgorithm()) then result = this.getHmacAlgorithm() else result = this + if exists(this.getHMACAlgorithm()) then result = this.getHMACAlgorithm() else result = this } } /** - * An SCRYPT key derivation algorithm node. + * scrypt key derivation function */ class ScryptAlgorithmNode extends KeyDerivationAlgorithmNode { ScryptAlgorithmInstance scryptInstance; @@ -2040,7 +2223,7 @@ module CryptographyBase Input> { } /** - * A block cipher mode of operation algorithm node. + * Block cipher modes of operation algorithms */ class ModeOfOperationAlgorithmNode extends AlgorithmNode, TModeOfOperationAlgorithm { ModeOfOperationAlgorithmInstance instance; @@ -2060,11 +2243,42 @@ module CryptographyBase Input> { * * If a type cannot be determined, the result is `OtherMode`. */ - KeyOpAlg::ModeOfOperationType getModeType() { result = instance.getModeType() } + TBlockCipherModeOfOperationType getModeType() { result = instance.getModeType() } + + final private predicate modeToNameMapping(TBlockCipherModeOfOperationType type, string name) { + type = ECB() and name = "ECB" + or + type = CBC() and name = "CBC" + or + type = GCM() and name = "GCM" + or + type = CTR() and name = "CTR" + or + type = XTS() and name = "XTS" + or + type = CCM() and name = "CCM" + or + type = SIV() and name = "SIV" + or + type = OCB() and name = "OCB" + or + type = CFB() and name = "CFB" + or + type = OFB() and name = "OFB" + } - override string getAlgorithmName() { result = this.getModeType().toString() } + override string getAlgorithmName() { this.modeToNameMapping(this.getModeType(), result) } } + newtype TPaddingType = + PKCS1_v1_5() or // RSA encryption/signing padding + PSS() or + PKCS7() or // Standard block cipher padding (PKCS5 for 8-byte blocks) + ANSI_X9_23() or // Zero-padding except last byte = padding length + NoPadding() or // Explicit no-padding + OAEP() or // RSA OAEP padding + OtherPadding() + class PaddingAlgorithmNode extends AlgorithmNode, TPaddingAlgorithm { PaddingAlgorithmInstance instance; @@ -2074,24 +2288,38 @@ module CryptographyBase Input> { override LocatableElement asElement() { result = instance } - KeyOpAlg::PaddingSchemeType getPaddingType() { result = instance.getPaddingType() } + TPaddingType getPaddingType() { result = instance.getPaddingType() } - override string getAlgorithmName() { result = this.getPaddingType().toString() } + final private predicate paddingToNameMapping(TPaddingType type, string name) { + type = ANSI_X9_23() and name = "ANSI_X9_23" + or + type = NoPadding() and name = "NoPadding" + or + type = OAEP() and name = "OAEP" + or + type = PKCS1_v1_5() and name = "PKCS1_v1_5" + or + type = PKCS7() and name = "PKCS7" + or + type = PSS() and name = "PSS" + } + + override string getAlgorithmName() { this.paddingToNameMapping(this.getPaddingType(), result) } override string getRawAlgorithmName() { result = instance.getRawPaddingAlgorithmName() } } class OAEPPaddingAlgorithmNode extends PaddingAlgorithmNode { - override OaepPaddingAlgorithmInstance instance; + override OAEPPaddingAlgorithmInstance instance; OAEPPaddingAlgorithmNode() { this = TPaddingAlgorithm(instance) } HashAlgorithmNode getOAEPEncodingHashAlgorithm() { - result.asElement() = instance.getOaepEncodingHashAlgorithm() + result.asElement() = instance.getOAEPEncodingHashAlgorithm() } HashAlgorithmNode getMGF1HashAlgorithm() { - result.asElement() = instance.getMgf1HashAlgorithm() + result.asElement() = instance.getMGF1HashAlgorithm() } override NodeBase getChild(string edgeName) { @@ -2121,10 +2349,14 @@ module CryptographyBase Input> { override string getInternalType() { result = "KeyOperationAlgorithm" } final KeyOpAlg::CipherStructureType getSymmetricCipherStructure() { - result = this.getAlgorithmType().(KeyOpAlg::SymmetricCipherAlgorithmType).getStructureType() + KeyOpAlg::symmetric_cipher_to_name_and_structure(this.getAlgorithmType() + .(KeyOpAlg::SymmetricCipherAlgorithm) + .getType(), _, result) } - final override string getAlgorithmName() { result = this.getAlgorithmType().toString() } + final override string getAlgorithmName() { + KeyOpAlg::type_to_name(this.getAlgorithmType(), result) + } final override string getRawAlgorithmName() { result = instance.asAlg().getRawAlgorithmName() } @@ -2134,7 +2366,7 @@ module CryptographyBase Input> { int getKeySizeFixed() { result = instance.asAlg().getKeySizeFixed() or - result = instance.asAlg().getAlgorithmType().getImplicitKeySize() + KeyOpAlg::fixedImplicitCipherKeySize(instance.asAlg().getAlgorithmType(), result) } /** @@ -2147,7 +2379,7 @@ module CryptographyBase Input> { /** * Gets the type of this key operation algorithm, e.g., "SymmetricEncryption(_)" or "" */ - KeyOpAlg::AlgorithmType getAlgorithmType() { result = instance.asAlg().getAlgorithmType() } + KeyOpAlg::Algorithm getAlgorithmType() { result = instance.asAlg().getAlgorithmType() } predicate isAsymmetric() { this.getAlgorithmType() instanceof KeyOpAlg::TAsymmetricCipher @@ -2253,6 +2485,24 @@ module CryptographyBase Input> { } } + newtype THashType = + BLAKE2B() or + BLAKE2S() or + GOSTHash() or + MD2() or + MD4() or + MD5() or + MDC2() or + POLY1305() or + SHA1() or + SHA2() or + SHA3() or + SHAKE() or + SM3() or + RIPEMD160() or + WHIRLPOOL() or + OtherHashType() + /** * A hashing algorithm that transforms variable-length input into a fixed-size hash value. */ @@ -2267,14 +2517,42 @@ module CryptographyBase Input> { override string getRawAlgorithmName() { result = instance.asAlg().getRawHashAlgorithmName() } + final private predicate hashTypeToNameMapping(THashType type, string name) { + type = BLAKE2B() and name = "BLAKE2B" + or + type = BLAKE2S() and name = "BLAKE2S" + or + type = RIPEMD160() and name = "RIPEMD160" + or + type = MD2() and name = "MD2" + or + type = MD4() and name = "MD4" + or + type = MD5() and name = "MD5" + or + type = POLY1305() and name = "POLY1305" + or + type = SHA1() and name = "SHA1" + or + type = SHA2() and name = "SHA2" + or + type = SHA3() and name = "SHA3" + or + type = SHAKE() and name = "SHAKE" + or + type = SM3() and name = "SM3" + or + type = WHIRLPOOL() and name = "WHIRLPOOL" + } + /** * Gets the type of this hashing algorithm, e.g., MD5 or SHA. * * When modeling a new hashing algorithm, use this predicate to specify the type of the algorithm. */ - HashType getHashFamily() { result = instance.asAlg().getHashFamily() } + THashType getHashFamily() { result = instance.asAlg().getHashFamily() } - override string getAlgorithmName() { result = this.getHashFamily().toString() } + override string getAlgorithmName() { this.hashTypeToNameMapping(this.getHashFamily(), result) } int getDigestLength() { result = instance.asAlg().getFixedDigestLength() or @@ -2294,6 +2572,116 @@ module CryptographyBase Input> { } } + /** + * Elliptic curve algorithms + */ + newtype TEllipticCurveType = + NIST() or + SEC() or + NUMS() or + PRIME() or + BRAINPOOL() or + CURVE25519() or + CURVE448() or + C2() or + SM2() or + ES() or + OtherEllipticCurveType() + + private predicate isBrainpoolCurve(string curveName, int keySize) { + // ALL BRAINPOOL CURVES + keySize in [160, 192, 224, 256, 320, 384, 512] and + ( + curveName = "BRAINPOOLP" + keySize + "R1" + or + curveName = "BRAINPOOLP" + keySize + "T1" + ) + } + + private predicate isSecCurve(string curveName, int keySize) { + // ALL SEC CURVES + keySize in [112, 113, 128, 131, 160, 163, 192, 193, 224, 233, 239, 256, 283, 384, 409, 521, 571] and + exists(string suff | suff in ["R1", "R2", "K1"] | + curveName = "SECT" + keySize + suff or + curveName = "SECP" + keySize + suff + ) + } + + private predicate isC2Curve(string curveName, int keySize) { + // ALL C2 CURVES + keySize in [163, 176, 191, 208, 239, 272, 304, 359, 368, 431] and + exists(string pre, string suff | + pre in ["PNB", "ONB", "TNB"] and suff in ["V1", "V2", "V3", "V4", "V5", "W1", "R1"] + | + curveName = "C2" + pre + keySize + suff + ) + } + + private predicate isPrimeCurve(string curveName, int keySize) { + // ALL PRIME CURVES + keySize in [192, 239, 256] and + exists(string suff | suff in ["V1", "V2", "V3"] | curveName = "PRIME" + keySize + suff) + } + + private predicate isNumsCurve(string curveName, int keySize) { + // ALL NUMS CURVES + keySize in [256, 384, 512] and + exists(string suff | suff = "T1" | curveName = "NUMSP" + keySize + suff) + } + + /** + * Holds if `name` corresponds to a known elliptic curve. + * + * Note: As an exception, this predicate may be used for library modelling, as curve names are largely standardized. + * + * When modelling, verify that this predicate offers sufficient coverage for the library and handle edge-cases. + */ + bindingset[curveName] + predicate isEllipticCurveAlgorithmName(string curveName) { + ellipticCurveNameToKeySizeAndFamilyMapping(curveName, _, _) + } + + /** + * Relates elliptic curve names to their key size and family. + * + * Note: As an exception, this predicate may be used for library modelling, as curve names are largely standardized. + * + * When modelling, verify that this predicate offers sufficient coverage for the library and handle edge-cases. + */ + bindingset[rawName] + predicate ellipticCurveNameToKeySizeAndFamilyMapping( + string rawName, int keySize, TEllipticCurveType curveFamily + ) { + exists(string curveName | curveName = rawName.toUpperCase() | + isSecCurve(curveName, keySize) and curveFamily = SEC() + or + isBrainpoolCurve(curveName, keySize) and curveFamily = BRAINPOOL() + or + isC2Curve(curveName, keySize) and curveFamily = C2() + or + isPrimeCurve(curveName, keySize) and curveFamily = PRIME() + or + isNumsCurve(curveName, keySize) and curveFamily = NUMS() + or + curveName = "ES256" and keySize = 256 and curveFamily = ES() + or + curveName = "CURVE25519" and keySize = 255 and curveFamily = CURVE25519() + or + curveName = "CURVE448" and keySize = 448 and curveFamily = CURVE448() + or + // TODO: separate these into key agreement logic or sign/verify (ECDSA / ECDH) + // or + // curveName = "X25519" and keySize = 255 and curveFamily = CURVE25519() + // or + // curveName = "ED25519" and keySize = 255 and curveFamily = CURVE25519() + // or + // curveName = "ED448" and keySize = 448 and curveFamily = CURVE448() + // or + // curveName = "X448" and keySize = 448 and curveFamily = CURVE448() + curveName = "SM2" and keySize in [256, 512] and curveFamily = SM2() + ) + } + final class EllipticCurveNode extends AlgorithmNode, TEllipticCurve { EllipticCurveInstanceOrValueConsumer instance; @@ -2319,9 +2707,7 @@ module CryptographyBase Input> { override string getAlgorithmName() { result = this.getRawAlgorithmName() } - EllipticCurveFamilyType getEllipticCurveFamilyType() { - result = instance.asAlg().getEllipticCurveFamilyType() - } + TEllipticCurveType getEllipticCurveType() { result = instance.asAlg().getEllipticCurveType() } override predicate properties(string key, string value, Location location) { super.properties(key, value, location) diff --git a/shared/quantum/codeql/quantum/experimental/Standardization.qll b/shared/quantum/codeql/quantum/experimental/Standardization.qll deleted file mode 100644 index 29c5b58d343a..000000000000 --- a/shared/quantum/codeql/quantum/experimental/Standardization.qll +++ /dev/null @@ -1,480 +0,0 @@ -overlay[local?] -module; - -/** - * The `KeyOpAlg` module defines key operation algorithms types (e.g., symmetric ciphers, signatures, etc.) - * and provides mapping of those types to string names and structural properties. - */ -module Types { - module KeyOpAlg { - /** - * An algorithm used in key operations. - */ - newtype TAlgorithm = - TSymmetricCipher(TSymmetricCipherType t) or - TAsymmetricCipher(TAsymmetricCipherType t) or - TSignature(TSignatureAlgorithmType t) or - TKeyEncapsulation(TKemAlgorithmType t) or - TUnknownKeyOperationAlgorithmType() - - // Parameterized algorithm types - newtype TSymmetricCipherType = - AES() or - ARIA() or - BLOWFISH() or - CAMELLIA() or - CAST5() or - CHACHA20() or - DES() or - DESX() or - GOST() or - IDEA() or - KUZNYECHIK() or - MAGMA() or - TRIPLE_DES() or - DOUBLE_DES() or - RC2() or - RC4() or - RC5() or - SEED() or - SM4() or - OtherSymmetricCipherType() - - newtype TAsymmetricCipherType = - RSA() or - OtherAsymmetricCipherType() - - newtype TSignatureAlgorithmType = - DSA() or - ECDSA() or - EDDSA() or // e.g., ED25519 or ED448 - OtherSignatureAlgorithmType() - - newtype TKemAlgorithmType = - KYBER() or - FRODO_KEM() or - OtherKemAlgorithmType() - - newtype TCipherStructureType = - Block() or - Stream() or - UnknownCipherStructureType() - - class CipherStructureType extends TCipherStructureType { - string toString() { - result = "Block" and this = Block() - or - result = "Stream" and this = Stream() - or - result = "Unknown" and this = UnknownCipherStructureType() - } - } - - private predicate symmetric_cipher_to_name_and_structure( - TSymmetricCipherType type, string name, CipherStructureType s - ) { - type = AES() and name = "AES" and s = Block() - or - type = ARIA() and name = "ARIA" and s = Block() - or - type = BLOWFISH() and name = "Blowfish" and s = Block() - or - type = CAMELLIA() and name = "Camellia" and s = Block() - or - type = CAST5() and name = "CAST5" and s = Block() - or - type = CHACHA20() and name = "ChaCha20" and s = Stream() - or - type = DES() and name = "DES" and s = Block() - or - type = DESX() and name = "DESX" and s = Block() - or - type = GOST() and name = "GOST" and s = Block() - or - type = IDEA() and name = "IDEA" and s = Block() - or - type = KUZNYECHIK() and name = "Kuznyechik" and s = Block() - or - type = MAGMA() and name = "Magma" and s = Block() - or - type = TRIPLE_DES() and name = "TripleDES" and s = Block() - or - type = DOUBLE_DES() and name = "DoubleDES" and s = Block() - or - type = RC2() and name = "RC2" and s = Block() - or - type = RC4() and name = "RC4" and s = Stream() - or - type = RC5() and name = "RC5" and s = Block() - or - type = SEED() and name = "SEED" and s = Block() - or - type = SM4() and name = "SM4" and s = Block() - or - type = OtherSymmetricCipherType() and - name = "UnknownSymmetricCipher" and - s = UnknownCipherStructureType() - } - - class AlgorithmType extends TAlgorithm { - string toString() { - // Symmetric cipher algorithm - symmetric_cipher_to_name_and_structure(this.(SymmetricCipherAlgorithmType).getType(), - result, _) - or - // Asymmetric cipher algorithms - this = TAsymmetricCipher(RSA()) and result = "RSA" - or - this = TAsymmetricCipher(OtherAsymmetricCipherType()) and result = "UnknownAsymmetricCipher" - or - // Signature algorithms - this = TSignature(DSA()) and result = "DSA" - or - this = TSignature(ECDSA()) and result = "ECDSA" - or - this = TSignature(EDDSA()) and result = "EDSA" - or - this = TSignature(OtherSignatureAlgorithmType()) and result = "UnknownSignature" - or - // Key Encapsulation Mechanisms - this = TKeyEncapsulation(KYBER()) and result = "Kyber" - or - this = TKeyEncapsulation(FRODO_KEM()) and result = "FrodoKEM" - or - this = TKeyEncapsulation(OtherKemAlgorithmType()) and result = "UnknownKEM" - or - // Unknown - this = TUnknownKeyOperationAlgorithmType() and result = "Unknown" - } - - int getImplicitKeySize() { - this = TSymmetricCipher(DES()) and result = 56 - or - this = TSymmetricCipher(DESX()) and result = 184 - or - this = TSymmetricCipher(DOUBLE_DES()) and result = 112 - or - this = TSymmetricCipher(TRIPLE_DES()) and result = 168 - or - this = TSymmetricCipher(CHACHA20()) and result = 256 - or - this = TSymmetricCipher(IDEA()) and result = 128 - or - this = TSymmetricCipher(KUZNYECHIK()) and result = 256 - or - this = TSymmetricCipher(MAGMA()) and result = 256 - or - this = TSymmetricCipher(SM4()) and result = 128 - or - this = TSymmetricCipher(SEED()) and result = 128 - } - } - - class SymmetricCipherAlgorithmType extends AlgorithmType, TSymmetricCipher { - TSymmetricCipherType type; - - SymmetricCipherAlgorithmType() { this = TSymmetricCipher(type) } - - TSymmetricCipherType getType() { result = type } - - TCipherStructureType getStructureType() { - symmetric_cipher_to_name_and_structure(type, _, result) - } - } - - class AsymmetricCipherAlgorithmType extends AlgorithmType, TAsymmetricCipher { - TAsymmetricCipherType type; - - AsymmetricCipherAlgorithmType() { this = TAsymmetricCipher(type) } - - TAsymmetricCipherType getType() { result = type } - } - - newtype TModeOfOperationType = - ECB() or // Not secure, widely used - CBC() or // Vulnerable to padding oracle attacks - CFB() or - GCM() or // Widely used AEAD mode (TLS 1.3, SSH, IPsec) - CTR() or // Fast stream-like encryption (SSH, disk encryption) - XTS() or // Standard for full-disk encryption (BitLocker, LUKS, FileVault) - CCM() or // Used in lightweight cryptography (IoT, WPA2) - SIV() or // Misuse-resistant encryption, used in secure storage - OCB() or // Efficient AEAD mode - OFB() or - OtherMode() - - class ModeOfOperationType extends TModeOfOperationType { - string toString() { - this = ECB() and result = "ECB" - or - this = CBC() and result = "CBC" - or - this = GCM() and result = "GCM" - or - this = CTR() and result = "CTR" - or - this = XTS() and result = "XTS" - or - this = CCM() and result = "CCM" - or - this = SIV() and result = "SIV" - or - this = OCB() and result = "OCB" - or - this = CFB() and result = "CFB" - or - this = OFB() and result = "OFB" - } - } - - newtype TPaddingSchemeType = - PKCS1_V1_5() or // RSA encryption/signing padding - PSS() or - PKCS7() or // Standard block cipher padding (PKCS5 for 8-byte blocks) - ANSI_X9_23() or // Zero-padding except last byte = padding length - NoPadding() or // Explicit no-padding - OAEP() or // RSA OAEP padding - OtherPadding() - - class PaddingSchemeType extends TPaddingSchemeType { - string toString() { - this = ANSI_X9_23() and result = "ANSI_X9_23" - or - this = NoPadding() and result = "NoPadding" - or - this = OAEP() and result = "OAEP" - or - this = PKCS1_V1_5() and result = "PKCS1_v1_5" - or - this = PKCS7() and result = "PKCS7" - or - this = PSS() and result = "PSS" - or - this = OtherPadding() and result = "UnknownPadding" - } - } - } - - newtype THashType = - BLAKE2B() or - BLAKE2S() or - GOST_HASH() or - MD2() or - MD4() or - MD5() or - MDC2() or - POLY1305() or - SHA1() or - SHA2() or - SHA3() or - SHAKE() or - SM3() or - RIPEMD160() or - WHIRLPOOL() or - OtherHashType() - - class HashType extends THashType { - final string toString() { - this = BLAKE2B() and result = "BLAKE2B" - or - this = BLAKE2S() and result = "BLAKE2S" - or - this = RIPEMD160() and result = "RIPEMD160" - or - this = MD2() and result = "MD2" - or - this = MD4() and result = "MD4" - or - this = MD5() and result = "MD5" - or - this = POLY1305() and result = "POLY1305" - or - this = SHA1() and result = "SHA1" - or - this = SHA2() and result = "SHA2" - or - this = SHA3() and result = "SHA3" - or - this = SHAKE() and result = "SHAKE" - or - this = SM3() and result = "SM3" - or - this = WHIRLPOOL() and result = "WHIRLPOOL" - or - this = OtherHashType() and result = "UnknownHash" - } - } - - newtype TMacType = - HMAC() or - CMAC() or - OtherMacType() - - class MacType extends TMacType { - string toString() { - this = HMAC() and result = "HMAC" - or - this = CMAC() and result = "CMAC" - or - this = OtherMacType() and result = "UnknownMacType" - } - } - - // Key agreement algorithms - newtype TKeyAgreementType = - DH() or // Diffie-Hellman - EDH() or // Ephemeral Diffie-Hellman - ECDH() or // Elliptic Curve Diffie-Hellman - // NOTE: for now ESDH is considered simply EDH - //ESDH() or // Ephemeral-Static Diffie-Hellman - // Note: x25519 and x448 are applications of ECDH - OtherKeyAgreementType() - - class KeyAgreementType extends TKeyAgreementType { - string toString() { - this = DH() and result = "DH" - or - this = EDH() and result = "EDH" - or - this = ECDH() and result = "ECDH" - or - this = OtherKeyAgreementType() and result = "UnknownKeyAgreementType" - } - } - - /** - * Elliptic curve algorithms - */ - newtype TEllipticCurveFamilyType = - NIST() or - SEC() or - NUMS() or - PRIME() or - BRAINPOOL() or - CURVE25519() or - CURVE448() or - C2() or - SM2() or - ES() or - OtherEllipticCurveType() - - class EllipticCurveFamilyType extends TEllipticCurveFamilyType { - string toString() { - this = NIST() and result = "NIST" - or - this = SEC() and result = "SEC" - or - this = NUMS() and result = "NUMS" - or - this = PRIME() and result = "PRIME" - or - this = BRAINPOOL() and result = "BRAINPOOL" - or - this = CURVE25519() and result = "CURVE25519" - or - this = CURVE448() and result = "CURVE448" - or - this = C2() and result = "C2" - or - this = SM2() and result = "SM2" - or - this = ES() and result = "ES" - or - this = OtherEllipticCurveType() and result = "UnknownEllipticCurveType" - } - } - - private predicate isBrainpoolCurve(string curveName, int keySize) { - // ALL BRAINPOOL CURVES - keySize in [160, 192, 224, 256, 320, 384, 512] and - ( - curveName = "BRAINPOOLP" + keySize + "R1" - or - curveName = "BRAINPOOLP" + keySize + "T1" - ) - } - - private predicate isSecCurve(string curveName, int keySize) { - // ALL SEC CURVES - keySize in [112, 113, 128, 131, 160, 163, 192, 193, 224, 233, 239, 256, 283, 384, 409, 521, 571] and - exists(string suff | suff in ["R1", "R2", "K1"] | - curveName = "SECT" + keySize + suff or - curveName = "SECP" + keySize + suff - ) - } - - private predicate isC2Curve(string curveName, int keySize) { - // ALL C2 CURVES - keySize in [163, 176, 191, 208, 239, 272, 304, 359, 368, 431] and - exists(string pre, string suff | - pre in ["PNB", "ONB", "TNB"] and suff in ["V1", "V2", "V3", "V4", "V5", "W1", "R1"] - | - curveName = "C2" + pre + keySize + suff - ) - } - - private predicate isPrimeCurve(string curveName, int keySize) { - // ALL PRIME CURVES - keySize in [192, 239, 256] and - exists(string suff | suff in ["V1", "V2", "V3"] | curveName = "PRIME" + keySize + suff) - } - - private predicate isNumsCurve(string curveName, int keySize) { - // ALL NUMS CURVES - keySize in [256, 384, 512] and - exists(string suff | suff = "T1" | curveName = "NUMSP" + keySize + suff) - } - - /** - * Holds if `name` corresponds to a known elliptic curve. - * - * Note: As an exception, this predicate may be used for library modeling, as curve names are largely standardized. - * - * When modeling, verify that this predicate offers sufficient coverage for the library and handle edge-cases. - */ - bindingset[curveName] - predicate isEllipticCurveAlgorithmName(string curveName) { - ellipticCurveNameToKnownKeySizeAndFamilyMapping(curveName, _, _) - } - - /** - * Relates elliptic curve names to their key size and family. - * - * Note: As an exception, this predicate may be used for library modeling, as curve names are largely standardized. - * - * When modeling, verify that this predicate offers sufficient coverage for the library and handle edge-cases. - */ - bindingset[rawName] - predicate ellipticCurveNameToKnownKeySizeAndFamilyMapping( - string rawName, int keySize, TEllipticCurveFamilyType curveFamily - ) { - exists(string curveName | curveName = rawName.toUpperCase() | - isSecCurve(curveName, keySize) and curveFamily = SEC() - or - isBrainpoolCurve(curveName, keySize) and curveFamily = BRAINPOOL() - or - isC2Curve(curveName, keySize) and curveFamily = C2() - or - isPrimeCurve(curveName, keySize) and curveFamily = PRIME() - or - isNumsCurve(curveName, keySize) and curveFamily = NUMS() - or - curveName = "ES256" and keySize = 256 and curveFamily = ES() - or - curveName = "CURVE25519" and keySize = 255 and curveFamily = CURVE25519() - or - curveName = "CURVE448" and keySize = 448 and curveFamily = CURVE448() - or - // TODO: separate these into key agreement logic or sign/verify (ECDSA / ECDH) - // or - // curveName = "X25519" and keySize = 255 and curveFamily = CURVE25519() - // or - // curveName = "ED25519" and keySize = 255 and curveFamily = CURVE25519() - // or - // curveName = "ED448" and keySize = 448 and curveFamily = CURVE448() - // or - // curveName = "X448" and keySize = 448 and curveFamily = CURVE448() - curveName = "SM2" and keySize in [256, 512] and curveFamily = SM2() - ) - } -} diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index f95d9c773b1e..6d08eb0c2b8a 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.5-dev +version: 0.0.4 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/codeql/rangeanalysis/ModulusAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/ModulusAnalysis.qll index f7864a01f446..db3377ff3cc1 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/ModulusAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/ModulusAnalysis.qll @@ -3,8 +3,6 @@ * an expression, `b` is a `Bound` (typically zero or the value of an SSA * variable), and `v` is an integer in the range `[0 .. m-1]`. */ -overlay[local?] -module; /* * The main recursion has base cases in both `ssaModulus` (for guarded reads) and `exprModulus` diff --git a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll index 1d17ad8346c4..445ec9f0b8d3 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/RangeAnalysis.qll @@ -8,8 +8,6 @@ * If an inferred bound relies directly on a condition, then this condition is * reported as the reason for the bound. */ -overlay[local?] -module; /* * This library tackles range analysis as a flow problem. Consider e.g.: diff --git a/shared/rangeanalysis/codeql/rangeanalysis/internal/RangeUtils.qll b/shared/rangeanalysis/codeql/rangeanalysis/internal/RangeUtils.qll index 1592102bc8e6..d6eeb781f391 100644 --- a/shared/rangeanalysis/codeql/rangeanalysis/internal/RangeUtils.qll +++ b/shared/rangeanalysis/codeql/rangeanalysis/internal/RangeUtils.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.rangeanalysis.RangeAnalysis private import codeql.util.Location diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index b2b9dabb75ae..05741c7ad611 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true dependencies: diff --git a/shared/regex/codeql/regex/HostnameRegexp.qll b/shared/regex/codeql/regex/HostnameRegexp.qll index 7d97d71ccef9..fc77b9b56e2e 100644 --- a/shared/regex/codeql/regex/HostnameRegexp.qll +++ b/shared/regex/codeql/regex/HostnameRegexp.qll @@ -2,8 +2,6 @@ * Provides predicates for reasoning about regular expressions * that match URLs and hostname patterns. */ -overlay[local?] -module; private import RegexTreeView diff --git a/shared/regex/codeql/regex/MissingRegExpAnchor.qll b/shared/regex/codeql/regex/MissingRegExpAnchor.qll index 722d1baafd6c..c4fe642b790d 100644 --- a/shared/regex/codeql/regex/MissingRegExpAnchor.qll +++ b/shared/regex/codeql/regex/MissingRegExpAnchor.qll @@ -2,8 +2,6 @@ * Provides predicates for reasoning about regular expressions * without anchors. */ -overlay[local?] -module; private import RegexTreeView import HostnameRegexp as HostnameShared diff --git a/shared/regex/codeql/regex/OverlyLargeRangeQuery.qll b/shared/regex/codeql/regex/OverlyLargeRangeQuery.qll index 88645a2abde1..57d7d365611b 100644 --- a/shared/regex/codeql/regex/OverlyLargeRangeQuery.qll +++ b/shared/regex/codeql/regex/OverlyLargeRangeQuery.qll @@ -1,8 +1,6 @@ /** * Classes and predicates for working with suspicious character ranges. */ -overlay[local?] -module; private import RegexTreeView diff --git a/shared/regex/codeql/regex/RegexTreeView.qll b/shared/regex/codeql/regex/RegexTreeView.qll index 7a37a2eaceb9..03d8fcfcbcd6 100644 --- a/shared/regex/codeql/regex/RegexTreeView.qll +++ b/shared/regex/codeql/regex/RegexTreeView.qll @@ -1,8 +1,6 @@ /** * This file contains a `RegexTreeViewSig` module describing the syntax tree of regular expressions. */ -overlay[local?] -module; /** * A signature describing the syntax tree of regular expressions. diff --git a/shared/regex/codeql/regex/nfa/BadTagFilterQuery.qll b/shared/regex/codeql/regex/nfa/BadTagFilterQuery.qll index a38229da4971..0d040bc6f64c 100644 --- a/shared/regex/codeql/regex/nfa/BadTagFilterQuery.qll +++ b/shared/regex/codeql/regex/nfa/BadTagFilterQuery.qll @@ -1,8 +1,6 @@ /** * Provides predicates for reasoning about bad tag filter vulnerabilities. */ -overlay[local?] -module; private import NfaUtils as NfaUtils private import RegexpMatching as RM diff --git a/shared/regex/codeql/regex/nfa/ExponentialBackTracking.qll b/shared/regex/codeql/regex/nfa/ExponentialBackTracking.qll index 23f764973715..450ee807089d 100644 --- a/shared/regex/codeql/regex/nfa/ExponentialBackTracking.qll +++ b/shared/regex/codeql/regex/nfa/ExponentialBackTracking.qll @@ -61,8 +61,6 @@ * * Lastly we ensure that any state reached by repeating `n` copies of `w` has * a suffix `x` (possible empty) that is most likely __not__ accepted. */ -overlay[local?] -module; private import NfaUtils as NfaUtils private import codeql.regex.RegexTreeView diff --git a/shared/regex/codeql/regex/nfa/NfaUtils.qll b/shared/regex/codeql/regex/nfa/NfaUtils.qll index e1be49796e00..d074081b6ac2 100644 --- a/shared/regex/codeql/regex/nfa/NfaUtils.qll +++ b/shared/regex/codeql/regex/nfa/NfaUtils.qll @@ -1,8 +1,6 @@ /** * A shared library for creating and reasoning about NFA's. */ -overlay[local?] -module; private import codeql.regex.RegexTreeView private import codeql.util.Numbers diff --git a/shared/regex/codeql/regex/nfa/RegexpMatching.qll b/shared/regex/codeql/regex/nfa/RegexpMatching.qll index 85c21b355a4b..fae1cea5f8c1 100644 --- a/shared/regex/codeql/regex/nfa/RegexpMatching.qll +++ b/shared/regex/codeql/regex/nfa/RegexpMatching.qll @@ -2,8 +2,6 @@ * Provides predicates for reasoning about which strings are matched by a regular expression, * and for testing which capture groups are filled when a particular regexp matches a string. */ -overlay[local?] -module; private import NfaUtils as NfaUtils private import codeql.regex.RegexTreeView diff --git a/shared/regex/codeql/regex/nfa/SuperlinearBackTracking.qll b/shared/regex/codeql/regex/nfa/SuperlinearBackTracking.qll index fca1641207d4..6eb18aeeebc9 100644 --- a/shared/regex/codeql/regex/nfa/SuperlinearBackTracking.qll +++ b/shared/regex/codeql/regex/nfa/SuperlinearBackTracking.qll @@ -34,8 +34,6 @@ * It has the same suffix detection issue as the `js/redos` query, which can cause false positives. * It also doesn't find all transitions in the product automaton, which can cause false negatives. */ -overlay[local?] -module; private import NfaUtils as NfaUtils private import codeql.regex.RegexTreeView @@ -101,7 +99,6 @@ module Make { /** * Holds if the tuple `(r1, r2, r3)` might be on path from a start-state to an end-state in the product automaton. */ - overlay[caller?] pragma[inline] predicate isFeasibleTuple(State r1, State r2, State r3) { // The first element is either inside a repetition (or the start state itself) diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 3c478e25f9dc..f6b25b571c3c 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true dependencies: diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index d9a017920171..4734cf7e414b 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -2,8 +2,6 @@ * Provides a language-independent implementation of static single assignment * (SSA) form. */ -overlay[local?] -module; private import codeql.util.Location private import codeql.util.Unit diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 9a9f8759539d..2880b7ada2af 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.3-dev +version: 2.0.2 groups: shared library: true dependencies: diff --git a/shared/threat-models/codeql/threatmodels/ThreatModels.qll b/shared/threat-models/codeql/threatmodels/ThreatModels.qll index dbb220c46e67..19dfd0d1a656 100644 --- a/shared/threat-models/codeql/threatmodels/ThreatModels.qll +++ b/shared/threat-models/codeql/threatmodels/ThreatModels.qll @@ -4,8 +4,6 @@ * This module provides extensible predicates for configuring which kinds of MaD models * are applicable to generic queries. */ -overlay[local?] -module; /** * Holds configuration entries to specify which threat models are enabled. diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index b514f75bb947..0427de7fde89 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.27-dev +version: 1.0.26 library: true groups: shared dataExtensions: diff --git a/shared/tree-sitter-extractor/src/extractor/mod.rs b/shared/tree-sitter-extractor/src/extractor/mod.rs index 0bc489cd5591..18a0cfc94520 100644 --- a/shared/tree-sitter-extractor/src/extractor/mod.rs +++ b/shared/tree-sitter-extractor/src/extractor/mod.rs @@ -67,26 +67,19 @@ pub fn default_subscriber_with_level( ), ) } -pub fn populate_file( - writer: &mut trap::Writer, - absolute_path: &Path, - transformer: Option<&file_paths::PathTransformer>, -) -> trap::Label { +pub fn populate_file(writer: &mut trap::Writer, absolute_path: &Path) -> trap::Label { let (file_label, fresh) = writer.global_id(&trap::full_id_for_file( - &file_paths::normalize_and_transform_path(absolute_path, transformer), + &file_paths::normalize_path(absolute_path), )); if fresh { writer.add_tuple( "files", vec![ trap::Arg::Label(file_label), - trap::Arg::String(file_paths::normalize_and_transform_path( - absolute_path, - transformer, - )), + trap::Arg::String(file_paths::normalize_path(absolute_path)), ], ); - populate_parent_folders(writer, file_label, absolute_path.parent(), transformer); + populate_parent_folders(writer, file_label, absolute_path.parent()); } file_label } @@ -124,7 +117,6 @@ pub fn populate_parent_folders( writer: &mut trap::Writer, child_label: trap::Label, path: Option<&Path>, - transformer: Option<&file_paths::PathTransformer>, ) { let mut path = path; let mut child_label = child_label; @@ -132,9 +124,9 @@ pub fn populate_parent_folders( match path { None => break, Some(folder) => { - let parent = folder.parent(); - let folder = file_paths::normalize_and_transform_path(folder, transformer); - let (folder_label, fresh) = writer.global_id(&trap::full_id_for_folder(&folder)); + let (folder_label, fresh) = writer.global_id(&trap::full_id_for_folder( + &file_paths::normalize_path(folder), + )); writer.add_tuple( "containerparent", vec![ @@ -145,9 +137,12 @@ pub fn populate_parent_folders( if fresh { writer.add_tuple( "folders", - vec![trap::Arg::Label(folder_label), trap::Arg::String(folder)], + vec![ + trap::Arg::Label(folder_label), + trap::Arg::String(file_paths::normalize_path(folder)), + ], ); - path = parent; + path = folder.parent(); child_label = folder_label; } else { break; @@ -210,12 +205,11 @@ pub fn extract( schema: &NodeTypeMap, diagnostics_writer: &mut diagnostics::LogWriter, trap_writer: &mut trap::Writer, - transformer: Option<&file_paths::PathTransformer>, path: &Path, source: &[u8], ranges: &[Range], ) { - let path_str = file_paths::normalize_and_transform_path(path, transformer); + let path_str = file_paths::normalize_path(path); let span = tracing::span!( tracing::Level::TRACE, "extract", @@ -231,7 +225,7 @@ pub fn extract( parser.set_included_ranges(ranges).unwrap(); let tree = parser.parse(source, None).expect("Failed to parse file"); trap_writer.comment(format!("Auto-generated TRAP file for {}", path_str)); - let file_label = populate_file(trap_writer, path, transformer); + let file_label = populate_file(trap_writer, path); let mut visitor = Visitor::new( source, diagnostics_writer, diff --git a/shared/tree-sitter-extractor/src/extractor/simple.rs b/shared/tree-sitter-extractor/src/extractor/simple.rs index 10414a7665bf..eb1232a8ef2e 100644 --- a/shared/tree-sitter-extractor/src/extractor/simple.rs +++ b/shared/tree-sitter-extractor/src/extractor/simple.rs @@ -1,4 +1,4 @@ -use crate::{file_paths, trap}; +use crate::trap; use globset::{GlobBuilder, GlobSetBuilder}; use rayon::prelude::*; use std::fs::File; @@ -111,8 +111,6 @@ impl Extractor { ) }; - let path_transformer = file_paths::load_path_transformer()?; - let lines: std::io::Result> = file_lists .iter() .flat_map(|file_list| std::io::BufReader::new(file_list).lines()) @@ -124,12 +122,8 @@ impl Extractor { .try_for_each(|line| { let mut diagnostics_writer = diagnostics.logger(); let path = PathBuf::from(line).canonicalize()?; - let src_archive_file = crate::file_paths::path_for( - &self.source_archive_dir, - &path, - "", - path_transformer.as_ref(), - ); + let src_archive_file = + crate::file_paths::path_for(&self.source_archive_dir, &path, ""); let source = std::fs::read(&path)?; let mut trap_writer = trap::Writer::new(); @@ -158,7 +152,6 @@ impl Extractor { &schemas[i], &mut diagnostics_writer, &mut trap_writer, - None, &path, &source, &[], @@ -190,7 +183,7 @@ fn write_trap( trap_writer: &trap::Writer, trap_compression: trap::Compression, ) -> std::io::Result<()> { - let trap_file = crate::file_paths::path_for(trap_dir, path, trap_compression.extension(), None); + let trap_file = crate::file_paths::path_for(trap_dir, path, trap_compression.extension()); std::fs::create_dir_all(trap_file.parent().unwrap())?; trap_writer.write_to_file(&trap_file, trap_compression) } diff --git a/shared/tree-sitter-extractor/src/file_paths.rs b/shared/tree-sitter-extractor/src/file_paths.rs index bdb9dd035f06..917a2fb63227 100644 --- a/shared/tree-sitter-extractor/src/file_paths.rs +++ b/shared/tree-sitter-extractor/src/file_paths.rs @@ -1,81 +1,8 @@ -use std::{ - fs, - path::{Path, PathBuf}, -}; +use std::path::{Path, PathBuf}; -/// This represents the minimum supported path transformation that is needed to support extracting -/// overlay databases. Specifically, it represents a transformer where one path prefix is replaced -/// with a different prefix. -pub struct PathTransformer { - pub original: String, - pub replacement: String, -} - -/// Normalizes the path according to the common CodeQL specification, and, applies the given path -/// transformer, if any. Assumes that `path` has already been canonicalized using -/// `std::fs::canonicalize`. -pub fn normalize_and_transform_path(path: &Path, transformer: Option<&PathTransformer>) -> String { - let path = normalize_path(path); - match transformer { - Some(transformer) => match path.strip_prefix(&transformer.original) { - Some(suffix) => format!("{}{}", transformer.replacement, suffix), - None => path, - }, - None => path, - } -} - -/** - * Attempts to load a path transformer. - * - * If the `CODEQL_PATH_TRANSFORMER` environment variable is not set, no transformer has been - * specified and the function returns `Ok(None)`. - * - * If the environment variable is set, the function attempts to load the transformer from the file - * at the specified path. If this is successful, it returns `Ok(Some(PathTransformer))`. - * - * If the file cannot be read, or if it does not match the minimal subset of the path-transformer - * syntax supported by this extractor, the function returns an error. - */ -pub fn load_path_transformer() -> std::io::Result> { - let path = match std::env::var("CODEQL_PATH_TRANSFORMER") { - Ok(p) => p, - Err(_) => return Ok(None), - }; - let file_content = fs::read_to_string(path)?; - let lines = file_content - .lines() - .map(|line| line.trim().to_owned()) - .filter(|line| !line.is_empty()) - .collect::>(); - - if lines.len() != 2 { - return Err(unsupported_transformer_error()); - } - let replacement = lines[0] - .strip_prefix('#') - .ok_or(unsupported_transformer_error())?; - let original = lines[1] - .strip_suffix("//") - .ok_or(unsupported_transformer_error())?; - - Ok(Some(PathTransformer { - original: original.to_owned(), - replacement: replacement.to_owned(), - })) -} - -fn unsupported_transformer_error() -> std::io::Error { - std::io::Error::new( - std::io::ErrorKind::InvalidData, - "This extractor only supports path transformers specifying a single path-prefix rewrite, \ - with the first line starting with a # and the second line ending with //.", - ) -} - -/// Normalizes the path according to the common CodeQL specification. Assumes that `path` has -/// already been canonicalized using `std::fs::canonicalize`. -fn normalize_path(path: &Path) -> String { +/// Normalizes the path according the common CodeQL specification. Assumes that +/// `path` has already been canonicalized using `std::fs::canonicalize`. +pub fn normalize_path(path: &Path) -> String { if cfg!(windows) { // The way Rust canonicalizes paths doesn't match the CodeQL spec, so we // have to do a bit of work removing certain prefixes and replacing @@ -166,18 +93,7 @@ pub fn path_from_string(path: &str) -> PathBuf { result } -pub fn path_for( - dir: &Path, - path: &Path, - ext: &str, - transformer: Option<&PathTransformer>, -) -> PathBuf { - let path = if transformer.is_some() { - let transformed = normalize_and_transform_path(path, transformer); - PathBuf::from(transformed) - } else { - path.to_path_buf() - }; +pub fn path_for(dir: &Path, path: &Path, ext: &str) -> PathBuf { let mut result = PathBuf::from(dir); for component in path.components() { match component { diff --git a/shared/tree-sitter-extractor/src/generator/mod.rs b/shared/tree-sitter-extractor/src/generator/mod.rs index e4bd1ac4eb0d..d972e9fb128d 100644 --- a/shared/tree-sitter-extractor/src/generator/mod.rs +++ b/shared/tree-sitter-extractor/src/generator/mod.rs @@ -49,13 +49,6 @@ pub fn generate( })], )?; - ql::write( - &mut ql_writer, - &[ql::TopLevel::Predicate( - ql_gen::create_is_overlay_predicate(), - )], - )?; - for language in languages { let prefix = node_types::to_snake_case(&language.name); let ast_node_name = format!("{}_ast_node", &prefix); @@ -99,21 +92,6 @@ pub fn generate( ql::TopLevel::Class(ql_gen::create_token_class(&token_name, &tokeninfo_name)), ql::TopLevel::Class(ql_gen::create_reserved_word_class(&reserved_word_name)), ]; - - // Overlay discard predicates - body.push(ql::TopLevel::Predicate( - ql_gen::create_get_node_file_predicate(&ast_node_name, &node_location_table_name), - )); - body.push(ql::TopLevel::Predicate( - ql_gen::create_discard_file_predicate(), - )); - body.push(ql::TopLevel::Predicate( - ql_gen::create_discardable_ast_node_predicate(&ast_node_name), - )); - body.push(ql::TopLevel::Predicate( - ql_gen::create_discard_ast_node_predicate(&ast_node_name), - )); - body.append(&mut ql_gen::convert_nodes(&nodes)); ql::write( &mut ql_writer, diff --git a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme index 16921105a720..96c7feaaf192 100644 --- a/shared/tree-sitter-extractor/src/generator/prefix.dbscheme +++ b/shared/tree-sitter-extractor/src/generator/prefix.dbscheme @@ -104,9 +104,3 @@ yaml_locations(unique int locatable: @yaml_locatable ref, int location: @location_default ref); @yaml_locatable = @yaml_node | @yaml_error; - -/*- Database metadata -*/ -databaseMetadata( - string metadataKey: string ref, - string value: string ref -); diff --git a/shared/tree-sitter-extractor/src/generator/ql.rs b/shared/tree-sitter-extractor/src/generator/ql.rs index e4c87b61bdb8..8e899462ac39 100644 --- a/shared/tree-sitter-extractor/src/generator/ql.rs +++ b/shared/tree-sitter-extractor/src/generator/ql.rs @@ -6,7 +6,6 @@ pub enum TopLevel<'a> { Class(Class<'a>), Import(Import<'a>), Module(Module<'a>), - Predicate(Predicate<'a>), } impl fmt::Display for TopLevel<'_> { @@ -15,7 +14,6 @@ impl fmt::Display for TopLevel<'_> { TopLevel::Import(imp) => write!(f, "{}", imp), TopLevel::Class(cls) => write!(f, "{}", cls), TopLevel::Module(m) => write!(f, "{}", m), - TopLevel::Predicate(pred) => write!(f, "{}", pred), } } } @@ -70,12 +68,10 @@ impl fmt::Display for Class<'_> { qldoc: None, name: self.name, overridden: false, - is_private: false, is_final: false, return_type: None, formal_parameters: vec![], body: charpred.clone(), - overlay: None, } )?; } @@ -154,7 +150,6 @@ pub enum Expression<'a> { expr: Box>, second_expr: Option>>, }, - Negation(Box>), } impl fmt::Display for Expression<'_> { @@ -236,28 +231,19 @@ impl fmt::Display for Expression<'_> { } write!(f, ")") } - Expression::Negation(e) => write!(f, "not ({})", e), } } } -#[derive(Clone, Eq, PartialEq, Hash)] -pub enum OverlayAnnotation { - Local, - DiscardEntity, -} - #[derive(Clone, Eq, PartialEq, Hash)] pub struct Predicate<'a> { pub qldoc: Option, pub name: &'a str, pub overridden: bool, - pub is_private: bool, pub is_final: bool, pub return_type: Option>, pub formal_parameters: Vec>, pub body: Expression<'a>, - pub overlay: Option, } impl fmt::Display for Predicate<'_> { @@ -265,17 +251,6 @@ impl fmt::Display for Predicate<'_> { if let Some(qldoc) = &self.qldoc { write!(f, "/** {} */", qldoc)?; } - if let Some(overlay_annotation) = &self.overlay { - write!(f, "overlay[")?; - match overlay_annotation { - OverlayAnnotation::Local => write!(f, "local")?, - OverlayAnnotation::DiscardEntity => write!(f, "discard_entity")?, - } - write!(f, "] ")?; - } - if self.is_private { - write!(f, "private ")?; - } if self.is_final { write!(f, "final ")?; } diff --git a/shared/tree-sitter-extractor/src/generator/ql_gen.rs b/shared/tree-sitter-extractor/src/generator/ql_gen.rs index b5853410c1d9..919ff43af428 100644 --- a/shared/tree-sitter-extractor/src/generator/ql_gen.rs +++ b/shared/tree-sitter-extractor/src/generator/ql_gen.rs @@ -16,7 +16,6 @@ pub fn create_ast_node_class<'a>( )), name: "toString", overridden: false, - is_private: false, is_final: false, return_type: Some(ql::Type::String), formal_parameters: vec![], @@ -28,13 +27,11 @@ pub fn create_ast_node_class<'a>( vec![], )), ), - overlay: None, }; let get_location = ql::Predicate { name: "getLocation", qldoc: Some(String::from("Gets the location of this element.")), overridden: false, - is_private: false, is_final: true, return_type: Some(ql::Type::Normal("L::Location")), formal_parameters: vec![], @@ -42,7 +39,6 @@ pub fn create_ast_node_class<'a>( node_location_table, vec![ql::Expression::Var("this"), ql::Expression::Var("result")], ), - overlay: None, }; let get_a_field_or_child = create_none_predicate( Some(String::from("Gets a field or child node of this node.")), @@ -54,7 +50,6 @@ pub fn create_ast_node_class<'a>( qldoc: Some(String::from("Gets the parent of this element.")), name: "getParent", overridden: false, - is_private: false, is_final: true, return_type: Some(ql::Type::Normal("AstNode")), formal_parameters: vec![], @@ -66,7 +61,6 @@ pub fn create_ast_node_class<'a>( ql::Expression::Var("_"), ], ), - overlay: None, }; let get_parent_index = ql::Predicate { qldoc: Some(String::from( @@ -74,7 +68,6 @@ pub fn create_ast_node_class<'a>( )), name: "getParentIndex", overridden: false, - is_private: false, is_final: true, return_type: Some(ql::Type::Int), formal_parameters: vec![], @@ -86,7 +79,6 @@ pub fn create_ast_node_class<'a>( ql::Expression::Var("result"), ], ), - overlay: None, }; let get_a_primary_ql_class = ql::Predicate { qldoc: Some(String::from( @@ -94,7 +86,6 @@ pub fn create_ast_node_class<'a>( )), name: "getAPrimaryQlClass", overridden: false, - is_private: false, is_final: false, return_type: Some(ql::Type::String), formal_parameters: vec![], @@ -102,7 +93,6 @@ pub fn create_ast_node_class<'a>( Box::new(ql::Expression::Var("result")), Box::new(ql::Expression::String("???")), ), - overlay: None, }; let get_primary_ql_classes = ql::Predicate { qldoc: Some( @@ -112,7 +102,6 @@ pub fn create_ast_node_class<'a>( ), name: "getPrimaryQlClasses", overridden: false, - is_private: false, is_final: false, return_type: Some(ql::Type::String), formal_parameters: vec![], @@ -130,7 +119,6 @@ pub fn create_ast_node_class<'a>( second_expr: Some(Box::new(ql::Expression::String(","))), }), ), - overlay: None, }; ql::Class { qldoc: Some(String::from("The base class for all AST nodes")), @@ -156,12 +144,10 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl qldoc: Some(String::from("Gets the value of this token.")), name: "getValue", overridden: false, - is_private: false, is_final: true, return_type: Some(ql::Type::String), formal_parameters: vec![], body: create_get_field_expr_for_column_storage("result", tokeninfo, 1, tokeninfo_arity), - overlay: None, }; let to_string = ql::Predicate { qldoc: Some(String::from( @@ -169,7 +155,6 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl )), name: "toString", overridden: true, - is_private: false, is_final: true, return_type: Some(ql::Type::String), formal_parameters: vec![], @@ -181,7 +166,6 @@ pub fn create_token_class<'a>(token_type: &'a str, tokeninfo: &'a str) -> ql::Cl vec![], )), ), - overlay: None, }; ql::Class { qldoc: Some(String::from("A token.")), @@ -226,12 +210,10 @@ fn create_none_predicate<'a>( qldoc, name, overridden, - is_private: false, is_final: false, return_type, formal_parameters: Vec::new(), body: ql::Expression::Pred("none", vec![]), - overlay: None, } } @@ -244,7 +226,6 @@ fn create_get_a_primary_ql_class(class_name: &str, is_final: bool) -> ql::Predic )), name: "getAPrimaryQlClass", overridden: true, - is_private: false, is_final, return_type: Some(ql::Type::String), formal_parameters: vec![], @@ -252,166 +233,6 @@ fn create_get_a_primary_ql_class(class_name: &str, is_final: bool) -> ql::Predic Box::new(ql::Expression::Var("result")), Box::new(ql::Expression::String(class_name)), ), - overlay: None, - } -} - -pub fn create_is_overlay_predicate() -> ql::Predicate<'static> { - ql::Predicate { - name: "isOverlay", - qldoc: Some(String::from("Holds if the database is an overlay.")), - overridden: false, - is_private: true, - is_final: false, - return_type: None, - overlay: Some(ql::OverlayAnnotation::Local), - formal_parameters: vec![], - body: ql::Expression::Pred( - "databaseMetadata", - vec![ - ql::Expression::String("isOverlay"), - ql::Expression::String("true"), - ], - ), - } -} - -pub fn create_get_node_file_predicate<'a>( - ast_node_name: &'a str, - node_location_table_name: &'a str, -) -> ql::Predicate<'a> { - ql::Predicate { - name: "getNodeFile", - qldoc: Some(String::from("Gets the file containing the given `node`.")), - overridden: false, - is_private: true, - is_final: false, - overlay: Some(ql::OverlayAnnotation::Local), - return_type: Some(ql::Type::At("file")), - formal_parameters: vec![ql::FormalParameter { - name: "node", - param_type: ql::Type::At(ast_node_name), - }], - body: ql::Expression::Aggregate { - name: "exists", - vars: vec![ql::FormalParameter { - name: "loc", - param_type: ql::Type::At("location_default"), - }], - range: Some(Box::new(ql::Expression::Pred( - node_location_table_name, - vec![ql::Expression::Var("node"), ql::Expression::Var("loc")], - ))), - expr: Box::new(ql::Expression::Pred( - "locations_default", - vec![ - ql::Expression::Var("loc"), - ql::Expression::Var("result"), - ql::Expression::Var("_"), - ql::Expression::Var("_"), - ql::Expression::Var("_"), - ql::Expression::Var("_"), - ], - )), - second_expr: None, - }, - } -} - -pub fn create_discard_file_predicate<'a>() -> ql::Predicate<'a> { - ql::Predicate { - name: "discardFile", - qldoc: Some(String::from( - "Holds if `file` was extracted as part of the overlay database.", - )), - overridden: false, - is_private: true, - is_final: false, - overlay: Some(ql::OverlayAnnotation::Local), - return_type: None, - formal_parameters: vec![ql::FormalParameter { - name: "file", - param_type: ql::Type::At("file"), - }], - body: ql::Expression::And(vec![ - ql::Expression::Pred("isOverlay", vec![]), - ql::Expression::Equals( - Box::new(ql::Expression::Var("file")), - Box::new(ql::Expression::Pred( - "getNodeFile", - vec![ql::Expression::Var("_")], - )), - ), - ]), - } -} - -pub fn create_discardable_ast_node_predicate(ast_node_name: &str) -> ql::Predicate { - ql::Predicate { - name: "discardableAstNode", - qldoc: Some(String::from( - "Holds if `node` is in the `file` and is part of the overlay base database.", - )), - overridden: false, - is_private: true, - is_final: false, - overlay: Some(ql::OverlayAnnotation::Local), - return_type: None, - formal_parameters: vec![ - ql::FormalParameter { - name: "file", - param_type: ql::Type::At("file"), - }, - ql::FormalParameter { - name: "node", - param_type: ql::Type::At(ast_node_name), - }, - ], - body: ql::Expression::And(vec![ - ql::Expression::Negation(Box::new(ql::Expression::Pred("isOverlay", vec![]))), - ql::Expression::Equals( - Box::new(ql::Expression::Var("file")), - Box::new(ql::Expression::Pred( - "getNodeFile", - vec![ql::Expression::Var("node")], - )), - ), - ]), - } -} - -pub fn create_discard_ast_node_predicate(ast_node_name: &str) -> ql::Predicate { - ql::Predicate { - name: "discardAstNode", - qldoc: Some(String::from( - "Holds if `node` should be discarded, because it is part of the overlay base \ - and is in a file that was also extracted as part of the overlay database.", - )), - overridden: false, - is_private: true, - is_final: false, - overlay: Some(ql::OverlayAnnotation::DiscardEntity), - return_type: None, - formal_parameters: vec![ql::FormalParameter { - name: "node", - param_type: ql::Type::At(ast_node_name), - }], - body: ql::Expression::Aggregate { - name: "exists", - vars: vec![ql::FormalParameter { - name: "file", - param_type: ql::Type::At("file"), - }], - range: None, - expr: Box::new(ql::Expression::And(vec![ - ql::Expression::Pred( - "discardableAstNode", - vec![ql::Expression::Var("file"), ql::Expression::Var("node")], - ), - ql::Expression::Pred("discardFile", vec![ql::Expression::Var("file")]), - ])), - second_expr: None, - }, } } @@ -614,12 +435,10 @@ fn create_field_getters<'a>( qldoc: Some(qldoc), name: &field.getter_name, overridden: false, - is_private: false, is_final: true, return_type, formal_parameters, body, - overlay: None, }, optional_expr, ) @@ -729,12 +548,10 @@ pub fn convert_nodes(nodes: &node_types::NodeTypeMap) -> Vec { qldoc: Some(String::from("Gets a field or child node of this node.")), name: "getAFieldOrChild", overridden: true, - is_private: false, is_final: true, return_type: Some(ql::Type::Normal("AstNode")), formal_parameters: vec![], body: ql::Expression::Or(get_child_exprs), - overlay: None, }); classes.push(ql::TopLevel::Class(main_class)); diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 017db79a8233..62664382a225 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.27-dev +version: 1.0.26 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/codeql/typeflow/TypeFlow.qll b/shared/typeflow/codeql/typeflow/TypeFlow.qll index 52a911974091..a2ae213ecb7f 100644 --- a/shared/typeflow/codeql/typeflow/TypeFlow.qll +++ b/shared/typeflow/codeql/typeflow/TypeFlow.qll @@ -7,8 +7,6 @@ * type has a subtype or if an inferred upper bound passed through at least one * explicit or implicit cast that lost type information. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/typeflow/codeql/typeflow/UniversalFlow.qll b/shared/typeflow/codeql/typeflow/UniversalFlow.qll index e5f07690a183..75b210f8cebb 100644 --- a/shared/typeflow/codeql/typeflow/UniversalFlow.qll +++ b/shared/typeflow/codeql/typeflow/UniversalFlow.qll @@ -25,8 +25,6 @@ * that subsequently calculated properties hold under the assumption that the * value is not null. */ -overlay[local?] -module; private import codeql.util.Location private import codeql.util.Unit diff --git a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll index 437e1ab31992..f17b809ca32d 100644 --- a/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll +++ b/shared/typeflow/codeql/typeflow/internal/TypeFlowImpl.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import codeql.typeflow.TypeFlow private import codeql.typeflow.UniversalFlow as UniversalFlow private import codeql.util.Location diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 74b59ee1f745..b3793d6d29e5 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true dependencies: diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 0234d42e5e19..108f4d40be28 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -122,8 +122,6 @@ * } * ``` */ -overlay[local?] -module; private import codeql.util.Location @@ -649,7 +647,6 @@ module Make1 Input1> { * - `Pair` is _not_ an instantiation of `Pair` * - `Pair` is _not_ an instantiation of `Pair` */ - pragma[nomagic] predicate isInstantiationOf(App app, TypeAbstraction abs, TypeMention tm) { // We only need to check equality if the concrete types are satisfied. satisfiesConcreteTypes(app, abs, tm) and @@ -667,27 +664,6 @@ module Make1 Input1> { ) ) } - - /** - * Holds if `app` is _not_ a possible instantiation of `tm`. - */ - pragma[nomagic] - predicate isNotInstantiationOf(App app, TypeAbstraction abs, TypeMention tm) { - // `app` and `tm` differ on a concrete type - exists(Type t, TypePath path | - t = resolveNthTypeAt(app, abs, tm, _, path) and - not t = abs.getATypeParameter() and - not path.isEmpty() and - app.getTypeAt(path) != t - ) - or - // `app` uses inconsistent type parameter instantiations - exists(TypeParameter tp | - potentialInstantiationOf(app, abs, tm) and - app.getTypeAt(getNthTypeParameterPath(tm, tp, _)) != - app.getTypeAt(getNthTypeParameterPath(tm, tp, _)) - ) - } } /** Provides logic related to base types. */ @@ -873,7 +849,6 @@ module Make1 Input1> { ) } - overlay[caller?] pragma[inline] predicate baseTypeMentionHasNonTypeParameterAt( Type sub, TypeMention baseMention, TypePath path, Type t @@ -881,7 +856,6 @@ module Make1 Input1> { not t = sub.getATypeParameter() and baseTypeMentionHasTypeAt(sub, baseMention, path, t) } - overlay[caller?] pragma[inline] predicate baseTypeMentionHasTypeParameterAt( Type sub, TypeMention baseMention, TypePath path, TypeParameter tp diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index 2b9a8d3ee2d3..24d2c4a200a1 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.8-dev +version: 0.0.7 groups: shared library: true dependencies: diff --git a/shared/typetracking/codeql/typetracking/TypeTracking.qll b/shared/typetracking/codeql/typetracking/TypeTracking.qll index da5b129241a7..7a411adb6333 100644 --- a/shared/typetracking/codeql/typetracking/TypeTracking.qll +++ b/shared/typetracking/codeql/typetracking/TypeTracking.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for simple data-flow reachability suitable * for tracking types. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll index 36dce0d081e4..b942446d43ba 100644 --- a/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll +++ b/shared/typetracking/codeql/typetracking/internal/SummaryTypeTracker.qll @@ -3,8 +3,6 @@ * To use this, you must implement the `Input` signature. You can then use the predicates in the `Output` * signature to implement the predicates of the same names inside `TypeTrackerSpecific.qll`. */ -overlay[local?] -module; /** The classes and predicates needed to generate type-tracking steps from summaries. */ signature module Input { diff --git a/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll b/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll index fcfcfe9ecd1d..b36edca04e7c 100644 --- a/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll +++ b/shared/typetracking/codeql/typetracking/internal/TypeTrackingImpl.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for simple data-flow reachability suitable * for tracking types. */ -overlay[local?] -module; private import codeql.util.Boolean private import codeql.util.Option @@ -512,7 +510,6 @@ module TypeTracking I> { * } * ``` */ - overlay[caller?] pragma[inline] TypeTracker smallstep(Node nodeFrom, Node nodeTo) { result = this.smallstepNoSimpleLocalFlowStep(nodeFrom, nodeTo) @@ -657,7 +654,6 @@ module TypeTracking I> { * } * ``` */ - overlay[caller?] pragma[inline] TypeBackTracker smallstep(Node nodeFrom, Node nodeTo) { result = this.smallstepNoSimpleLocalFlowStep(nodeFrom, nodeTo) diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a0fbd70f8932..23c2d2f59957 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.11-dev +version: 2.0.10 groups: shared library: true dependencies: diff --git a/shared/typos/codeql/typos/TypoDatabase.qll b/shared/typos/codeql/typos/TypoDatabase.qll index 7f1a8c2a3e73..a41f003a8c0c 100644 --- a/shared/typos/codeql/typos/TypoDatabase.qll +++ b/shared/typos/codeql/typos/TypoDatabase.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - /** * Holds if `wrong` is a common misspelling of `right`. * diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 2abd19685629..0af8ef23422f 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/codeql/util/AlertFiltering.qll b/shared/util/codeql/util/AlertFiltering.qll index 1bc366c0416d..97acd803f01e 100644 --- a/shared/util/codeql/util/AlertFiltering.qll +++ b/shared/util/codeql/util/AlertFiltering.qll @@ -2,8 +2,6 @@ * Provides the `restrictAlertsTo` extensible predicate to restrict alerts to specific source * locations, and the `AlertFilteringImpl` parameterized module to apply the filtering. */ -overlay[local?] -module; private import codeql.util.Location diff --git a/shared/util/codeql/util/Boolean.qll b/shared/util/codeql/util/Boolean.qll index 0f35421c408a..b58dc9a308f3 100644 --- a/shared/util/codeql/util/Boolean.qll +++ b/shared/util/codeql/util/Boolean.qll @@ -1,6 +1,4 @@ /** Provides the `Boolean` class. */ -overlay[local?] -module; /** * A utility class that is equivalent to `boolean`. diff --git a/shared/util/codeql/util/DenseRank.qll b/shared/util/codeql/util/DenseRank.qll index 89ab865e9595..0dccbbd48803 100644 --- a/shared/util/codeql/util/DenseRank.qll +++ b/shared/util/codeql/util/DenseRank.qll @@ -2,8 +2,6 @@ * Provides modules for computing dense `rank`s. See the `DenseRank` module * below for a more detailed explanation. */ -overlay[local?] -module; /** Provides the input to `DenseRank`. */ signature module DenseRankInputSig { diff --git a/shared/util/codeql/util/Either.qll b/shared/util/codeql/util/Either.qll index a6796f99f38b..d514b9eaed58 100644 --- a/shared/util/codeql/util/Either.qll +++ b/shared/util/codeql/util/Either.qll @@ -1,6 +1,4 @@ /** Provides a module for constructing a union `Either` type. */ -overlay[local?] -module; /** A type with `toString`. */ private signature class TypeWithToString { diff --git a/shared/util/codeql/util/FilePath.qll b/shared/util/codeql/util/FilePath.qll index ff62ce6ee5e3..1b047f3c91ce 100644 --- a/shared/util/codeql/util/FilePath.qll +++ b/shared/util/codeql/util/FilePath.qll @@ -1,6 +1,4 @@ /** Provides a utility for normalizing filepaths. */ -overlay[local?] -module; /** * A filepath that should be normalized. diff --git a/shared/util/codeql/util/FileSystem.qll b/shared/util/codeql/util/FileSystem.qll index fe724190f746..2b120faaacea 100644 --- a/shared/util/codeql/util/FileSystem.qll +++ b/shared/util/codeql/util/FileSystem.qll @@ -1,6 +1,4 @@ /** Provides classes for working with files and folders. */ -overlay[local?] -module; /** Provides the input specification of the files and folders implementation. */ signature module InputSig { diff --git a/shared/util/codeql/util/Location.qll b/shared/util/codeql/util/Location.qll index c592f2c55564..8faa1ee4eeb9 100644 --- a/shared/util/codeql/util/Location.qll +++ b/shared/util/codeql/util/Location.qll @@ -1,6 +1,4 @@ /** Provides classes for working with locations. */ -overlay[local?] -module; /** * A location as given by a file, a start line, a start column, diff --git a/shared/util/codeql/util/Numbers.qll b/shared/util/codeql/util/Numbers.qll index 126307d41b4e..050f3c023f11 100644 --- a/shared/util/codeql/util/Numbers.qll +++ b/shared/util/codeql/util/Numbers.qll @@ -2,8 +2,6 @@ * Provides predicates for working with numeric values and their string * representations. */ -overlay[local?] -module; /** * Gets the integer value of `binary` when interpreted as binary. `binary` must diff --git a/shared/util/codeql/util/Option.qll b/shared/util/codeql/util/Option.qll index 65a5e8724526..8ba4d8e840bc 100644 --- a/shared/util/codeql/util/Option.qll +++ b/shared/util/codeql/util/Option.qll @@ -1,6 +1,4 @@ /** Provides a module for constructing optional versions of types. */ -overlay[local?] -module; /** A type with `toString`. */ private signature class TypeWithToString { diff --git a/shared/util/codeql/util/ReportStats.qll b/shared/util/codeql/util/ReportStats.qll index 947eff548e75..03f381b5b9b3 100644 --- a/shared/util/codeql/util/ReportStats.qll +++ b/shared/util/codeql/util/ReportStats.qll @@ -1,7 +1,6 @@ /** * Provides the `ReportStats` module for reporting database quality statistics. */ -overlay[local?] module; signature module StatsSig { diff --git a/shared/util/codeql/util/Strings.qll b/shared/util/codeql/util/Strings.qll index c82c23a9988b..6b8b6f2fb1d0 100644 --- a/shared/util/codeql/util/Strings.qll +++ b/shared/util/codeql/util/Strings.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - private import Numbers /** diff --git a/shared/util/codeql/util/Unit.qll b/shared/util/codeql/util/Unit.qll index 27e890788ff9..a0db9d7030f7 100644 --- a/shared/util/codeql/util/Unit.qll +++ b/shared/util/codeql/util/Unit.qll @@ -1,6 +1,4 @@ /** Provides the `Unit` class. */ -overlay[local?] -module; /** The unit type. */ private newtype TUnit = TMkUnit() diff --git a/shared/util/codeql/util/Void.qll b/shared/util/codeql/util/Void.qll index 28501cb9aca6..886687b54602 100644 --- a/shared/util/codeql/util/Void.qll +++ b/shared/util/codeql/util/Void.qll @@ -1,6 +1,4 @@ /** Provides the empty `Void` class. */ -overlay[local?] -module; /** The empty void type. */ private newtype TVoid = TMkVoid() { none() } diff --git a/shared/util/codeql/util/suppression/AlertSuppression.qll b/shared/util/codeql/util/suppression/AlertSuppression.qll index 722791148679..fad8d96566c0 100644 --- a/shared/util/codeql/util/suppression/AlertSuppression.qll +++ b/shared/util/codeql/util/suppression/AlertSuppression.qll @@ -1,6 +1,3 @@ -overlay[local?] -module; - signature class AstNode { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn diff --git a/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll b/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll index 4515bdabc79a..2ebd2b452828 100644 --- a/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll +++ b/shared/util/codeql/util/test/ExternalLocationPostProcessing.qll @@ -6,7 +6,6 @@ * VS Code, but prevents the "Location is outside of test directory" warning * when executed through `codeql test run`. */ -overlay[local?] module; external private predicate queryResults(string relation, int row, int column, string data); diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 6bebbd01336a..19c7e5b61ddc 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.14-dev +version: 2.0.13 groups: shared library: true dependencies: null diff --git a/shared/xml/codeql/xml/Xml.qll b/shared/xml/codeql/xml/Xml.qll index 9620b156719e..02d0ffc66fda 100644 --- a/shared/xml/codeql/xml/Xml.qll +++ b/shared/xml/codeql/xml/Xml.qll @@ -1,8 +1,6 @@ /** * Provides classes and predicates for working with XML files and their content. */ -overlay[local?] -module; private import codeql.util.Location private import codeql.util.FileSystem diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index d0e1fc1af1f3..9e6cdf576139 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true dependencies: diff --git a/shared/yaml/codeql/serverless/ServerLess.qll b/shared/yaml/codeql/serverless/ServerLess.qll index 009b50c7d1ca..a0322ad47a12 100644 --- a/shared/yaml/codeql/serverless/ServerLess.qll +++ b/shared/yaml/codeql/serverless/ServerLess.qll @@ -2,8 +2,6 @@ * Provides classes and predicates for working with serverless handlers. * E.g. [AWS](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html) or [serverless](https://npmjs.com/package/serverless) */ -overlay[local?] -module; /** * Provides the input for the `ServerLess` module. diff --git a/shared/yaml/codeql/yaml/Yaml.qll b/shared/yaml/codeql/yaml/Yaml.qll index 153ff5979c8e..1467fd09d137 100644 --- a/shared/yaml/codeql/yaml/Yaml.qll +++ b/shared/yaml/codeql/yaml/Yaml.qll @@ -4,8 +4,6 @@ * YAML documents are represented as abstract syntax trees whose nodes * are either YAML values or alias nodes referring to another YAML value. */ -overlay[local?] -module; /** Provides the input specification of YAML implementation. */ signature module InputSig { diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 258719e31932..08e295a1b69c 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.27-dev +version: 1.0.26 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index 261705596d28..f693ce9e9fc5 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -733,7 +733,7 @@ lib/codeql/swift/generated/Locatable.qll 1d37fa20de71c0b9986bfd7a7c0cb82ab7bf3fd lib/codeql/swift/generated/Location.qll 5e20316c3e480ddfe632b7e88e016c19f10a67df1f6ae9c8f128755a6907d6f5 5a0af2d070bcb2ed53d6d0282bf9c60dc64c2dce89c21fdd485e9c7893c1c8fa lib/codeql/swift/generated/MacroRole.qll facf907e75490d69cd401c491215e4719324d751f40ea46c86ccf24cf3663c1f 969d8d4b44e3f1a9c193a152a4d83a303e56d2dbb871fc920c47a33f699cf018 lib/codeql/swift/generated/OtherAvailabilitySpec.qll d9feaa2a71acff3184ca389045b0a49d09156210df0e034923d715b432ad594b 046737621a8bcf69bf805afb0cff476bd15259f12f0d77fce3206dd01b31518f -lib/codeql/swift/generated/ParentChild.qll 86a6c9ba4c79d72bf7a0786274f6fba49e6f37cf82de0451a6dad0d319224ebd f7b99ceb052a23d7c25d1615d1453d421b5ddddcec60b7d8d6f956d0d3fd7a2d +lib/codeql/swift/generated/ParentChild.qll d66e5c28e93a3085fbae0ada238a96577ad21fd64a37ce967032bf5df8bdfb1d 2d440ad9c0304f658d54c6c53a8b1db1d3e032ee5522b51c46116413d0cf5dbb lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll dc17b49a90a18a8f7607adf2433bc8f0c194fa3e803aa3822f809d4d4fbd6793 be48ea9f8ae17354c8508aaed24337a9e57ce01f288fece3dcecd99776cabcec lib/codeql/swift/generated/PureSynthConstructors.qll bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4 bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4 lib/codeql/swift/generated/Raw.qll 96d5f8778f25cd396b5cc56c38dce597c5a9a5c2b1e9ed8b9a4d2eca89e49323 d65072b5c508dad1dd813e19f7431087d8bfc0e5d85aa3d19beffbcbbec585ec @@ -1032,37 +1032,111 @@ lib/codeql/swift/generated/type/UnownedStorageType.qll bbab372902a625c16b2d9a058 lib/codeql/swift/generated/type/UnresolvedType.qll 3b99e19ca7177619fb79e6e8511df915811b7b9078c0bc9ae47cf3b79e923407 b715e01583738b5e8fb2f6640d8f390bad8f5ad6d8c25ad771dfabbe5736bfaa lib/codeql/swift/generated/type/VariadicSequenceType.qll 7ece2c953e24d1c51715610f2813bd97f6d9fc6e58e5df0aacadad31e1fd1d8f be0005d973fd7c4c937fc340711fafe7ceba592ac407b88731bc35a1c2800aeb lib/codeql/swift/generated/type/WeakStorageType.qll d46b67f2b7bcc8aa7599e38506e91c219f894df4668ff1f0b5b66c1858040f5b c8e34ec9df085d938e36492d172fbf84ca56fc9d805713b8ada92e1b4c7bef54 -test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql 0bb0cfe3f8c38af3b870f8c404c16a5715e80d5ea8fd7939cc13032d7b824809 142ae1e76138b287aa66e091683aae545d139ef2971624e2dfdd3ea454bc2d05 +test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql f174aa20e00010baed0000eddee62f7b70d4ce950e5f9c0cb0bd5b6f1d8dc908 170049771ebcf54ceb603e089f93516749322dd6d7bf89e4636e3b4eedd773e0 +test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql 6ee83b1f24d961c736a1579c0282ca560a2a916ffe73bb9eb2c6d14b3cddcdb0 fee90d8b1c1379bd2f7443387a3a1eb3afd7e3e7f65d39b665cc08e9f83f362f test/extractor-tests/generated/Comment/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/Diagnostics/Diagnostics.ql c1f8be2c283e13c1a4dadaa008e42f660ea09d9ee1de22b0e8493ef76384546e d84efa40eaecbce6b928a5b235e10bf1e4409a9d0778c365ec19d2fade7ab3ab -test/extractor-tests/generated/File/File.ql a1385ef2080e04e8757f61b8e1d0129df9f955edf03fbb3b83cc9cb5498b4e95 0364d8c7f108d01b2641f996efedab7084956307e875e6bc078ea677d04267e0 -test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql 3fa617f8ed1b308d0c56f429ee8abe6d33ef60bf57d87f6dc89fdc8fe969a102 c2fa3153077dbe9e0fc608524dc03c82ff4ed460364d341ee6a817b0d75291c3 +test/extractor-tests/generated/Diagnostics/Diagnostics.ql ee50220080a1a5df7772ab043e8aae30e3d83e45b69aa40bda12c7d272d33568 c1b41b0cfa03a0431b8a2d23dde2f194e5b9262f5a317103818b595e4f00fee0 +test/extractor-tests/generated/File/File.ql c0af919359546affceeff4f0152b8bfffe430b647016da803d6650acbb142920 e6441061e0eb14577a4e00e8e25c38219ab749b49dc66b26fe786ab5e080a8e5 +test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql fa80af728ad8ca6da700925ada7f166324de6691acef51e01a29b10387312f76 9314cda502475b1fee74903c9fd8f1e2c930f5b16a824d9f3f5a2fbb1730ef6e +test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.ql 40442888d4673d92b7d4a20cbb487f887fee1dc8674d98b68fc4ab0837f9c5de 7612174b502524749c26800599d6a332a4022ef544c39fc86733193a18d6811d +test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.ql 8c33add02f42abcd9814b7e138bee9d650f6f6360ce792fb0b5d49552513d7bf 16efaf1af88c67c64e0c7a88dbf2c5c6c259a40115cb520e5d2e9545e0ea20e0 +test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.ql c55da7366086c0a927e23fbaf5cb2ebab50ac4eafde206b59efad96edd0545ff dc1cd851d68fd307a1f101a4cd94ec971475bdd2b26fb82a8566b4a99d0aa505 test/extractor-tests/generated/OtherAvailabilitySpec/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/PlatformVersionAvailabilitySpec/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/decl/Accessor/Accessor.ql 7e50dd3c4119162bbfa3e2461300d876c60321d4b6473ddd35e0cb992108570e eb81ed8db92bff46974079e0f1100cf94bd639191a36db45ee9e65467abb6e38 -test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql 55a78a6b96a17532178a39bd39aa4df23295f98019bb00de041ba15dfd4f84d9 51dbcd86203d5d031d748f77943a81c2c50de4ff559af20a4a1a682a19978d4f -test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql fd62be6c38d39f371c20e8c2f233e37a9da5aa234588920634f5db67e8beb3bd d51d35d4fd6a21cd596e064e0221d0c86e36312412a9bd4e64f431c123f3019a -test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql d5fa7f68307e2e3e7ad060a125bda148e4a28f6acbef08a1a975bbf9ba947641 46d1e4f801414f1c869601dc706e41393e5fcd399e51da593c1e58737f6ff427 -test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql 936ac4aa52a55bd5bb4c75c117fffcc00208b9f502ff7ee05acbaad7d48a52fb d80346fe34d40910f5ecdb33d7266b6e4d1ec79f8d767c7da5e2ab780f201457 +test/extractor-tests/generated/decl/Accessor/Accessor.ql fb3e3b8096ed6f9de299f73383194520bcd0a96f4e215e1945456e0c2beaa2a0 cc66788194840b4c5c57e9cbd8f7072655fa9947f2da36cf9f59463ea070d409 +test/extractor-tests/generated/decl/Accessor/Accessor_getBody.ql 89660097038fe210b72373ed6ea4d6e6cc6505a45d8e0892b53e265bb1d2c398 9abec75977ca2f5328ff6730b3b40c264cc385961c2685351c869a359c5afeb4 +test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.ql 15011012186c6111d5eace2f5ad34747adaa5e84d044a98bb7da17b08695c69d 60411e7886e5cfc211c10881b6e061e02597690eccd714fff2a51874e4088d27 +test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.ql 92b13b69f0b64abd16eecbf38eae4ff1a7006617639b80c0f22b651caeb40da6 06113682dda3ff88688b6689953e21b0b8ead5d019fc56ff7752b19b46711a4d +test/extractor-tests/generated/decl/Accessor/Accessor_getMember.ql 84b36dc43f829791db6407df98e563ea4a87b42f69aad41358e175bf3f352afa 854e6bc7f0fe1dc4d3a9f069e2eb8921ea176874c44ad153dca03c2aa46d8c69 +test/extractor-tests/generated/decl/Accessor/Accessor_getName.ql df32edf0b05ade5f99508182473d2bf0ee3c69d8a58db2741d13c65d16c2ea52 0d4feea5683ca76b614a7e3da6f48ba9aefc188b77dc5bf3fa9234289f38f638 +test/extractor-tests/generated/decl/Accessor/Accessor_getParam.ql f1ab4808a4222ea6b1e649a5009f2667b7b2be471cea87b26a2cf91751555bcb 519e608cba95a9a20bcfee3049bb89b61b1b4ffec042ba5f15e554712187a809 +test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.ql 8d4a1d9ad69b5b227b9b6a6ba546ad15c4b948b32f5871d18db17c24a8f94454 812a80f1670d4ce5392da523d53007910df3de71a43ee34da852a543dd5a9f92 +test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql 9a22cd6a43fb6b46df471bd544b3330d5118e64cca3aef2c5ce3b0ba7fd9b8fa 30dd927155853ac2374752c5713605afe925f40547fbe9314159e343837c7e00 +test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.ql 7c399b5b1f763df5a92fe9e7258e1bca0bd57b4854865bd2f1b03154cc1e5bb4 f89a5913baa4c530bad70218660be764608e59608a104d6a219e980f2e6f1625 +test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql 778ef3e569f5774ae3bce286fb47342cb6cda9b47b8074942b542a1c8f18b169 2aec4012a21cf0ee4f1a7c5c726c233d61a2051210e13b2028a2ae7457609e88 +test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql 2730b05c8835a78815f97e0be1dfe38140a32ed81b3bd660428265fb898efbbd 3837a2cf9436aeb730f18a144934af75e6f9343b72e331200c53a64d02a0c3af +test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql c0ec9ec2677d30a3ffe9ed4e02a0a104fdb1245467c38dbb218a672a6996db7d 4b7e83d64879c63a234a7f66e0dd455b2fbd31ba0d718ec8eb32c35eef867496 +test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql ef3bb618dc93fe6862ab2fdf05067ee59946b6ae12af5709ea66892a6806dd2d 5d2c42b3517826ed3fac5d06f15e54cd20abf72e980c7397251fecf79176fd40 +test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql bf372b6dd01a22ff4705a9bba5ab8524081eb586c17201dcad257cff5b3fc159 06c9ead259d50321db18e259b32734a473b070c40eb76c9bdf11b1f8f72cd57b +test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.ql da903d8cd38e725a0ad9d754c4d65aa576d906da930628b4d1351a0760e8c5b6 6b4d68db4f2aa2053b700b96171504f7c5dde433397987356b001d198a847331 +test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.ql a34a907c3b0809e2a24cdba315a20993eff60c0d7cf2e015e26f70f240357f93 b12262cf6b27973375e623e221f9ff1084376cb5266289b2728f29095671cb7c +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql baf497f323a7aea6966f0ad475a238dddd1162a18fccde12c7fe62559f07b97b 8ce68bab8901b911459d4a61fe23abe6c70670137670867a466af3a31238c691 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.ql aa3777eeb59781b9f0a48e6d077f60704c73752fd348e66a4cdaaf1f18990c0b b59c2621b2147723ff1055f35dba143e3a7c464f27ebcdb4627d6bf399195f3e +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.ql 98829d2dfd0a0f268b116f377f8956e18afe8ef293b30870bc6fca1a6abd1ad9 c080da788925c79302d2f8d0a731d6e8dc6bc03362176f1a64a55bdbbb544025 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.ql dd014d28ef8542a220461740b02268331f8b3d2118a09276d4d3fc47060e82d0 c4b8748d4a8a6f95d4e65c69c6b4833b1bf7e7444eeb494ede8ac34367f15445 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.ql bfea99ccd17bf2b8bf32efc7ce9889b2075a009f2dc8a3eead69b793deed5a54 6b3b87195b0cb19f48c7a28bc6eb167dc98b09d169587d31b1c2b12216826ab8 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.ql fc806a2fe3e41463fb1e89d03e33ad1fd5adb75614c1fe0698a8f8f587f6745d 35f470623dc23b5f8c2839f305e3881181a16a06ab15c2fe8adb39c41d84a527 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.ql bee0520be50b0b2567a31e204a23c5ee95ee8d96e2644661915ac87cd4308df7 d755aaedf1255fc29235fcbeac49c01b889443573ef3e653708f058dc9bc3cde +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.ql 9aea239684dc11eb93a6b43a0ffba5a24c2be2d870a086189d87625d803f1f95 ccad85fe6eb6f42b85c43c881746f2bd25687d142aaba7e3bc7b34740645ffc4 +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.ql 6ab6f45c518af82b5c96767c83bb11fd20e9ea82c6c334f88584f06d082a5c23 56e71de6ab53cd24532cfd441d1c05e863dd200db23448d9d35ea6be2e54472b +test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.ql 61a3ff69ca5833184f6f43aeb676734f2ef4d62cd30a122f6749e6dbf139e531 100ee61c1977e441d0bee9dd45753541312bf51e530dd3e1d9486b78b3d63170 test/extractor-tests/generated/decl/Deinitializer/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql 7436bb7dfaa471f5a21ea2e3faba97d61bf53f930720999abdcc6745a65f0a1a 0241b2bb07c17136f6099185f65ea1266cd912296dfe481dce30eb9e3d1dd23f -test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql 47f20279f49388a4850df4f5ee61634e30beed58567eff891688c09942862ec2 8e11af1ceb07cab9738ffb25ac877ced712d1883a6514de5e8895cd1809a7bd8 -test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql 16caf5b014dea42a36b23eee6932c0818d94b1416e151ce46ba06a1fd2fb73ba cac704575b50613c8f8f297ce37c6d09ef943c94df4289643a4496103ac8388e -test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql 04529ad447b7b0c529a54b0e0d009183c00cb1dcd7eb16378a7c4c7bc86bca4d 86379270a15fa014dc127607b720bb4d39b24b70d1c0f72ef8563c4144423ced +test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql 8c7faa72f99cbd02360f3a0ac37059952fbf58d54ad79dc5b81dff209953c433 631836e15e8cd7530fdcb4470ad82ff759b61086a50139d7d91ab8dd26bb6938 +test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.ql bb20d76f377bc895884e0830990291e721d9a0f6570e6d0e8fcc67419aaf1712 2888b9a300a946461886337670acd028f018d1cfbc826910c173308ba79bfe3b +test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.ql 9351d7a2595a431f1f9a52fe1fddc64acdf8923b708e8dcece6a8e00c3895c58 855c122ca985bf9cb7ee439f212912187bc13789e968e46ff6536e712ba1a6b0 +test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql 8a7ba0cd48fdf52f229ea1679c5828d79df9e800f76df8dfe9a878992f034f88 dfdede262a1323b1db2618721b01a5fd4b30c172bf8a374fe48a0d9f6b21bd39 +test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql b70205b500419d71909a8899d9f2099b2b8340978a0ec4e275f2007bfa610f8d b5009c8c3efba9e96bbcf15eb61644d8e77a95d1b955dabcbfc75c6c084d7ca0 +test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.ql f55ba6b8a76621fc899eceab6bbeaba3619a1a4382c318369fc3dc17bc806082 ea0cff9bc7fd87efbec16bec998d672ab5b5a8f1f4e93c10dd87ac254076887c +test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql 5a4de48886bd8fd05b9e730aefcffbba28a090ed2d8d1aa331277820ab836b7f 999c92856eff3b34839adfe9daece97834ce9ede7fad1cfe0c2055e0f019f7ab +test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql bd00c56cf1d05707f29c4f31defc6a3ff25f41928688c2be992a92d4c5624859 3bd69b639f883e164fa6d1d4a3ad18aed86f88b93358636c5e118f1ca96eb878 +test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.ql e40260a5689d26c9bf2dfe17617e8a1480c720523e47f50273aeb7160a69f244 7ee294373de5bd22fc2c64a7acae4a94e9bdebf808c8e73a16a57b0dc3c295ac +test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.ql a507e55efcc13544d93c91c343a3df14b79114f259cb4dbec56d6f56e804d4e8 587bf774b4c4451ff873506624ccd379dd2fd7689460b4e24af96fbccadc0e6d +test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql 11a15a67f7b19e3d1fb5a2616420c23fde400848c8dbfcadb8e52a40130b92ad 502831fd3465ff06eba1dc6be365bee5fc2fcec96be44967a6579bbbdd395a32 +test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql bc57c794b106df3b9da47432ef3241849145d5e86ebf601cec08729f05e15956 bce4e2150ca2efe495e544a3a074c7ebc81f68bd2f3280a76f565d31acb091e2 +test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql 0883fcc244e06329738f242a36d0c33ee5228500e8f9d4508e4b5b32d863edfe 4fa99729397085d19b25415ed40e62dc2a555d7581c6c98895e635f7d502689b +test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql 040731ade8fb6cfe989fb62874c405a24256ca3947251d6799c8f53e144d2ce9 d5b37f663a19fba137735b85c070405d687d3e84c1850d93f43b50f77524357f test/extractor-tests/generated/decl/GenericTypeParamDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql b33916c742a97ea687a46aa337738666a4cf4854b394e3296582be0e8f0b7fb3 d1b4caf8bf04af0f11685f6381e52ca62dffbb6a50256be78dd686bf0a53df1d -test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql d5d5475363155fad37fd3f60a8eb22c324b8af52a91c065ee5fffe0f855a3b03 ac642144ecd2c5fbdfe628a88394646e5047d0db284d83b6a449654545456286 +test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql 5ae0037ea3fbe733ee57d4c9a77c6dbb9da7c2675f29e5c3222a01b000e950fc c3445704a6c19ba1ea0972538512d1bab4d754dadecb377266053bba33ceb368 +test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql f8696eac357db4c69919baf49ab48a2ce972032414e6cac4af17cc8b45cfde18 fda5ce16fa25c68b10fb03817b0b62b759c85c4276bb9c71ccf94d53caf48820 +test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.ql d6cc4bf47ccd2886030480d979ca22b9eae294243bccf58e60a8d8cf3a9746fa 0e1b6be4f315efdd1680b11c48dbe35e38ad2831c09d904862f1e090891f3515 +test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql e35450ce046e77b9f52bf57a0560f5a1b5a2d009d2f91eb7373d6f0f6e97796b 1d4a4fb376d8f07cf21081867a5b8698f71b7fb911d42e6457e790a08ff39f51 +test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.ql 5333ed76c38fcab69269778e8c7df40ef48470cda50b2f239c1b563976b241c2 d0e0b472c777b386c8c4c83ff6a18093ec9237eef2e96adcb8c7e8c7055a8f7a +test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql 40e7c9d069e0c0e3d949c6de07c11fe5fffc45b37f0bfb5980c6b2941f007f6f 564c883c4e353b6bcf63a7bb89d6814f48ca39c170b624c0f87ae0c481e88729 +test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql e9960f040d3824e1398858433e90a22924bed3a3a83d59ced742a8db123edb69 9d4ca7ea49b9c2e3987b5b94ff68fbf76b68aa0eb50a2290fc69d534bebc777c test/extractor-tests/generated/decl/InfixOperatorDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/Initializer/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql 61f092d4ed5972283b3eb0eeec81c8f299496dc548a98dca56a1aadaf8248d1d b9cd637cb0f6f34d8d0a4473f2c212a0534d49891d55593758bb03f8d225f32a -test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql 7ab0dc211663c1b09a54ccbee7d6be94ffa45f420b383d2e2f22b7ccfb8d7a48 92296b89fccf6aebe877e67796885bedd809ebb470f23f48f98b27c2922c4ba2 -test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql 63a41a3b393b29d19752379fe29f26fe649dad2927836e24832e07c503d092a6 927fa4056a5d7c65803f7baa1216e6bef9b3b6a223c4a2bb50f2a6a31580db6a -test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql c6be4c1314ffed2a8a91af2e08ea14ce721195ec993d18ebd4d7b90f4a60dac3 767fc36b64291ab7ecccd63bf74856983830267c992d1347236da314fca73d57 -test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql 85b041e1f791b40ff3d3c58c79e017cebf9ef535ea3d576984b7c093f25aa95b 9fcf314b02ac95fbd2c0e5fc95dc48c16522c74def57f5647dd5ad7e80f7c2c1 -test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql cc9d89731f7a5ecc2267923268e2d8046aa3f0eb9556c6a12e53b541347f45a4 6d06279172ff2c04be0f39293a2e9a9de5e41ff1efffd41a67d5a921e1afe9ea +test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql eb4881d91d1e690c636c66fd4b99f2080ad9be9107a4c037217cfd6bf55f7262 9d6abf1cf95fa591c3b091ebaaa723fb45540f6ef183353b5467f7e8539cb09f +test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql 6e48f56b27dd9722722af0297bc7e4b09bf553eedf3878d1ba381cf7b7cfe7ff 4438b07be12663dbd3652c365fe7cd5bcd8441829e5123fa450cd1645886e306 +test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql 38958bd32f98f921a163bccd5586c50298b4ea7ca3a4cd4d8c77741ad104df41 852b70f1fb3f623ef533df2be321c58a7d83ec60096717d0fb946288d1bd33b9 +test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql a18f48ca9d1b9e2bd153e0b53d199eb24fa4a3fc57fd4089c1d6422cef8aa33c e20f1f8bea29b486a622825c3b86709a0c820c5e2497d48dfa765b142c1dd3ac +test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql ae3ed80e2847f2ee948eaa5969f11a974a149191a86d5f547a4ee3ddfba718ac 7ecd29a5088000aafaa782b550fe050911ee7ed84b5adcdbc6de0d8db0987e36 +test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql 3b4446673db0e3efff7941bbf849cbb7c2e0700db0c41ab3fd7372e9aa3b0795 fd3b4ca3ea7f6ec98535e94ce00c336097d4603dd17af1d7652508775d9d7ea2 +test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql 3528a1dafa45e79b6fe25f6fcf9a2970afef8aeba482080fd9abc237ccfc3b0c 3d8773c7fc18e048ea735f4caf690a6b17d7ba0b398f5e68b205c73b9b77bdd7 +test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql 56bc7324c16dd4dc5bba987cefdb0741c9d0d636304d71db67e13463236ad463 7804da20b8ace3e6bdce2739fda4329536c5e846a1b53f9cb543925bc5443cda +test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql 00a8664146a134eb7d238a34b879c5db6ea86c842d18f0ea9ea53684a94fd889 9fee72637869bc2aa52d60eff2cf524e087dbf35d0764011754e9b84e95c8d97 +test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql e80e2594595d646f857807a719575c5588778e2d116a60d8f222bb58e72148c5 f2d5dcd5a63e4ead11f8f93c0e17ed09a0cb0fd8aa1023d91ef725c848fca590 +test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql d85c12bc7fe2732594ca27cf85de1649ab3ecb64c49439b48a18353386e250ea ed58651f5d1c767dcb17a679a780d4248d5de779d7fb1ffff13675867071ef6f +test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.ql 624711472413d1bbcdcd01a805667bdebce7f4959f39016a5b4df60610eed019 e30f3e09e160784ae6170e05075b10cc03df7d3e44b9647be193abd7733e19e9 +test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.ql 2e6fad621c4a301b124336977ba5a6489e143d37e33deb330b993a06bf263069 c4622cd12ecf94fa1e413413ee3e5d38625d8c8ea6694473baf6b6e05d222ad9 +test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql bf58ac96d6fbc3294c5780000539486d52b7ed9ff797647b83c5914ee9c12cf2 5294555db2567fd78e7580ff899819ed4bb3000c8046a806828ae67098b3e743 +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.ql 365c3f2bcf802880455e0523bc6d992740d08119cc307751f6accb031f60a8b9 0f0b9ff9c0dbebb0b7b177e01d9082647f5544fa4cb9fd4c2ac228538f37cd87 +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.ql 25d10d0d28cdf5eb73dc2be56eaefed13ccd9bf5808480a950f9d91a26db93e9 fcb2af9a0032c60d08a2025688886905c5f3792a6d017f0552bdfbb8c736c118 +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.ql 60873ee0c149f7a66572c79a7e86e2c15e7b13bae618988e6a70b7f62ea01b65 be346e023edd258cd050645b6bcb2b1dfbab8a3012b473abd33ea1386471a4ea +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.ql ab250e09cb289eacd7914ecdc45e9a7eafe6f95390fa2dee6257ab3083cc86a8 2adaeb858591ee6e94b36d53c4433fe6c0a88a4543c0857db0cd1d27d8d83372 +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.ql 7583b5d08f9a3809afb50b44c5bc9afa57ba23359080f132f25f21ef2bf41c73 4d89e13890f86e754389f21ecf75153d7c65abcce2b00a08a4911b49f3e5288d +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.ql ae14b7e9c8dacc609056669a5670f6bd8008ac3a2406873c665a43f41703a987 06442212a80ba6c6122fd6301fb817389abf37afb607e77c4c1ebeb4cc57cdfa +test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.ql 7865a28cc038cf79f7e9d024f33d8ce17e40ab209bfec99771177a1d77819ba4 ab31689af637c6ffa77abe59adfe24a4635be937ef65d1933f5f84c3ba544fa0 +test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql 0e0261995e03922dd427815c2619c85671dc604a953d80d8494e59678a3be8be a428d7835bad44c0599a5235011d981ca99c0f30b3a07fa6c68087563ebb835d +test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.ql 374c83dc94491225480d8d89cb5c84714eec5f0b690e2cba2d1417b1c4f54710 eb1190d2521ec51ecfdb7ad0fa9809e11a5a8a862dbd6e6a5084a686021be491 +test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.ql 68981db766e452118ef9c7dec3e98cd4747c5feaf5659f91a599efc010450c86 af6a67a8b08b26636da566e69d983888cb3bf33bae7165ee486e4faf94b287b7 +test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.ql 7bca8500dc892ad210f12d1152a833d4403d6fecf24d3e4dde513c614d631664 e1e1e41c05c92eb56ff2ef5c53764af290fba40ecbb56f92435930c47a7759a8 +test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.ql f6d173a46cec223774ee8ac91333b522f14ac132cfe844ef2b2a9aeb2e526835 7e2fab576df939d919ccb176c3b06bc5c0055a74088ffac1cb56775684549620 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql 4d6ebd63d1f4ba2754223d12ac3663dd287844d18d270764f5b36a02b5f135a9 ff388dad1c27b80fe07d26061e25b75483932e7ee9e4172662c5d1c022f7f7d7 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.ql 2a382b42cbad2ebda489ff33fab56e667cee5257eae5f81d5adbdbd29ef3de9d e807c59dc5c946046ec455147a828c0417578879727eec96c65c13454f40f49d +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.ql 7a0b15bda897a0ab8ab6a96166835e558da3cf7d828bf3cc89d57c01b9447349 ddc401516f880131dea231933fafc440f7ca6bc8948318969f657c0f163146d7 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.ql eb1956b4b3ba60e9bd2f81b96ff8adf64f362648f7fdcecd59deaae2e0171d0a fef83c7a3417cd2bdcc4c62afc601bc12689cc1912c806eb633c120a98b4eb0a +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.ql 76a598f7252807b1e6cfd58753da8286701697694071838c601b012bdd3d1158 c0939d1c1ed5d9d44cb410a7c9103d7fcb8f6f97071b59db00183262d117a8e3 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.ql 7b7b7a0c2b9da446896ec089bfbbfc4d9b469f55d6ff0156ea2346309a9aff73 d0e2de47ccb6e16bd3ec43f6627fa6d5886f0b097deec25ac1fc9ac99625cf47 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.ql d6914b0aa2cf831aa4cb41389dbd5686ae9b16182630384ca1fec54e8c19473a 89dd7c0441c73916cc144a7d09477e64738343bde064f818c37a7ed3f3c3efaf +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.ql 846f8c0c12bb8b98e76275b16cec4978c957ca2948e914af81c7f738275997cc b25efe315ca330ddcee3486e4db9b313879328af819b940d95891805b3db5676 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.ql b55800ca26b39c12aa59076863030ed5d9ed9e6b80cc89aa40959165dca68018 ff90f5597344b68bcf66290b870d567128721c7e69555310882dab8fb26f6d5b +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.ql ba01112d11cc89bb75f71480799cecea66f64e4a9ed43dc15a692dcba79ccf44 20176bc553075971d6811fd8dc928e8c9142b60b262cf16da14d7e84b402ec22 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.ql ff7b6dc6bc37dee3c7ba1731d0ac251b3d839195bbb67e00dc5d58a172b4079a 73c37603fe51f4cc3dfe009fa0c5a7a22d6fd73f4dcac1fc29c680b14759c695 +test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.ql c72bffe648b6f914a08858ccfb065980cd79e177d27a4e685bd3961886edc156 4cff3c7a6314619699349fc61922ef85371c3a854b3eba1935385ac4ea50f9c2 test/extractor-tests/generated/decl/PatternBindingDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/PostfixOperatorDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql bf730c1d84c4f6ac67f46962849bf38c4442bddb1dd70c379735ba889171d097 d58ce712bfd18d470f00c8ab7c023285fa651ab8f4f8dc6bc6c5f33df4de577b +test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql 5e11a8fef0037610e695e82a9dca7d172d9e622cf675c92159e45780658f0ba1 ba0bd5706e5ac9bb7ee312043ac2dbf26119e84a177ace1b526fc0f025abee0a +test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.ql a0e0e7271ab731c5fafab59779b5d09fa9ef97329867a8f35ddfcf6cfca5650c 3ebb0c8d3ca9c07e2d2422a17a9dc3f3ae3941ffce81efbf01bfbb0f28266a33 test/extractor-tests/generated/decl/PrecedenceGroupDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/PrefixOperatorDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/ProtocolDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d @@ -1070,7 +1144,8 @@ test/extractor-tests/generated/decl/StructDecl/MISSING_SOURCE.txt 35fb32ea539315 test/extractor-tests/generated/decl/SubscriptDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/TopLevelCodeDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/decl/TypeAliasDecl/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql 612ed1b62baed51cb74ea682512de8042c71cc14c99f966f8de33c65c8be7cdf 390197357690dd42d23ee5f0670f1183139cfbdd63f67c7430dd62c51e5d9426 +test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql db909e46bbe481831ed1ee3e2dd234e497cbc8ed938a68e5a1c5c6c4a1093e00 76ee36cb8403e6363300fac336719a16fd797b9f83dfe4b581c0a8e3d21b91a9 +test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.ql 9c646eefbd283a23df8ed8e55eb685afa25c0b2e0921eb602b178de62f0baa44 45016066204a86f2c262d083d4a7477d141f5052841347a0298ab65819aa4085 test/extractor-tests/generated/expr/Argument/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/ArrayExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/AssignExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d @@ -1082,57 +1157,85 @@ test/extractor-tests/generated/expr/CallExpr/MISSING_SOURCE.txt 35fb32ea5393152e test/extractor-tests/generated/expr/CaptureListExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/CoerceExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/ConditionalCheckedCastExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql bb2fc1efbc7ff3abe7cd812f2c906607307c30d160412e1c8be4b6162c12566c ac8a2623b7dfa1b5b406cb6e47d022e341ec3400fa22ab3017692a88cb497c51 -test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql 423e4b23c2a0b7166fd53457fcad656391f09c6a06e9a9f865ecebdf5b227ff1 9a55d96e7665cfac9adf0477119cb532645645f0a3181c5c5a16bf99f3b84ebc +test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql 03b2c373c44b17f1c4bb2e59ae6498d8606edcaa2b867967db0be145347308d2 6a5b9c123a7ba66562a86b38f200a1234bbe8381f59af4b6b4c6640c4bb2badd +test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql dea6fd74bdcb23ed6ede61f151345ee871d303c00c72c1952c3d5f850c0a9b42 14f535828aefcc522bbbbcb63a9911ef562cb78f67bd5aee1bb630b627b5646a +test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql ad3cd8aff3f63ed4617ae0776f26a86a13cf0b14f90b1d94e4d0fc561ae9ff4f 569353ba4ae3f1e454d465de47bf9faafbce7eb5f9c4a3a5a4d1b9a6741cf739 +test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql a6e83955f0379973d46a753075e048dcb387981ba1a7a1b80b710296f034bada ced53e5dc099e6ed8bb70219893ea12658df5b6b90bc98f51054376d70412a94 test/extractor-tests/generated/expr/DeclRefExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/DefaultArgumentExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/DictionaryExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/DiscardAssignmentExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/DotSyntaxBaseIgnoredExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql 55a98af29e0f0ddc8b57b8e5a4c31bd83cd3c00effe096081f0ad842c909ad72 3d6122bd86461e28aa4712d3733d0fa6836554abed51cc2017d6569fd6c08103 -test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql d8c376e073a24922a0f5b41def0832813771dd20f2ff57af334120d8b685914e a3a5a93f213f3212545dde703b163aa61894f0c2c59b39aa1ad57ccf203471ac +test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql c164e54f841680d6609b6430201f649bfa54c71ee91cd9f45f1c93d0623ed758 2638c431e5260404852ef30e136a7329a60a086c2388fad913f021e0fad14a14 +test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.ql d14112baba2b31b4036f5b476233894e531d2fca6e5a6441474e04bdf5d6fcbe e7d4143006444d16d800eb1fabece36e3d66241684c3d8bfe2fb5848d569e1d0 +test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.ql 9a79c9596f098aa6055fea72e096181ecc11ddcf2acf93fa42d7e40f97993e55 594720e72f010c6f897a2b9c8c7ce3faa0495c600c15fb74f99cc03666f402b9 +test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql 858c8801041988b038d126e416a4e79a546a8bf91225f1190b46c44eef0382e9 7de40ed3b8dcbfeef8cb6ad7f98f477a2dd2eda630c2ed02ad224de5f0bedb1e +test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.ql 3aa9fdfc5cc4a9c95c7a9271d94f531d1491827cb31171491cf939578da901e8 10223bd610359bafefcad20651312b7a821ea9e744fde934ef8dc4db0eca5791 +test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.ql c21ae7f270755000dfb03d15aff39736de4c94441f4a1839475a5eccbb58ccce 65993d85c154fe74e4a79b6ff3798b176e3f8d408c42b03955260d333ca3d349 test/extractor-tests/generated/expr/DynamicTypeExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql 7e9942e6cf4bbd72405b4f1dff3c5bc0f66940117e992bce151e1fa2fca2237a b033e79c3b2d9a776c95ca0ea8adc7d78601cf825eace86fdfea74cd52755413 +test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql 426837e6acd80fd5c4f79f756919c99df132f6666aae9d07274c4b95711123bd 451393b79359a46070db84d8d35ad3c7f14cc20eddd3df2a70126575d2200297 +test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.ql 9deff1a2a2271c2dbe44b2aeef42f9adadd73b0e09eb6d71c68ac5bd8d315447 bdc07aec1fa2ced3f8b4c2dcede0354b8943488acf13e559f882f01161172318 test/extractor-tests/generated/expr/ExplicitClosureExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql b48618adfe1eb5fb2f71def3a786a00c1e8c7a6c3ca98a6223a9eaefa2df9b93 10ff1649b73698e2b89a56ba2ce950e5ce32c56eb50ee03151261ed11d20cd85 +test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql 7c4666a86e962726a505e76c57196483c6eb5259463a1cbdb6239f5ccbb33a13 2b5acd61e85a46b1c565104ba6f58b58813ffeba3548dacd776f72db552d5d65 +test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.ql 487c727c721ff925861b265d9a4f78029f04dba3b94e064529d89c7ee55ac343 3bfdadc09b8672b9030f43c2f0cab6395af803e79ddc17089c43c3da93d69979 test/extractor-tests/generated/expr/FloatLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/ForceTryExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/ForceValueExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/ForcedCheckedCastExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql 2e27b79f73c73d3950b1ac356e83b40e791c6a4dd5e88a425fea4b6158aa3ae7 7bd02c429e4dcbe3d40f139b07e74c409656b9dcfb6e996a7d0be24bb96e779b +test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql c873205fc042fedf96692e2ff20158f76d355342d97f4a76ebe14cf7c08457be 23a554131367a46fa1629c4779de47fd3dc972ed0e7237cd5ccaa0a7ec264296 +test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.ql 0ebcaed85409f23969ab4abde51a1c23a46ea76d48c7c82abc179b9f0cd85cfe 34f21b1dc5a189df88f0ea8e897a360240a93bed3399663517e3734fafa1b489 test/extractor-tests/generated/expr/IfExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql 846effaf47a53401f3cf13e5c58d169fa34ffd9abc8f746c65ad9f0da1edebca 37fa3a12598862abb2dd534861de5778638263173f87a8454f09a2f4173a7962 +test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql 35496181655b08d872e6d670053515f591c844250c4da987d22d9eae549b5eaf 3f9f1cf0d50da0d76653e3fa93129b7bc87f7751f8d952e8cc1fea554c24eeb8 +test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.ql a2bd400ee044596059299fe75eb51467bcd368b747eb9eb221f81fabc5e2b95d 3908c24e5dfd15faa592eafe7f8ab4f458dde29b7bf3121912ea493b5dd020ab test/extractor-tests/generated/expr/InOutExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql a34bcbeb9a03bd0c88055bb347407f5099104d2d2bbc6c10cada8ac63cccdf7c a553ffd8f71ca792235e306a82e3a8e19bf2cc9ab8fd288c71e2b1c01e3f51d6 +test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql aee0658164807f3b04ef6c0f628e7f8cb72e8e2b8af00d79bf22ce3cb409dca0 e023826e691d3c3ba781c6e0be802dfebf65b2f169b3f8e028f8e8f8f81b427d +test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.ql 11ab14e77000bb67fd0276b26c1b535c696984975bb6cfdf96db2a003fd0d4bd a4d17e6b22b7f03a34b11249b9092af991efa9b06db5ec9f1020c706c618a075 +test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.ql cc48d5a0b2caacfc7ff12f45cabaa170200721506ddd688c26619c1c6a685ae0 97ac2e6232e7369891ee9c4bd9f2f874df4d6a177bb8705446713b28cab20086 test/extractor-tests/generated/expr/IntegerLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/InterpolatedStringLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/IsExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/KeyPathApplicationExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/KeyPathDotExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql db48f476e6d7a1b179d90eca624351232fd6cf08db87e06e4967256839da47c5 6aaa88e54d2a58a867223d5c964da83d3e7fd2d943f3f3b9b9f2caa4bb72b7b5 +test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql f52a9003e106bf86082ed0fddfa809dd253746a01b2eb400d8dd11940f89e75a 072424ddeeda48d348cdc847da0467836a9921eb12e9f4133a1da4d75191b1e1 +test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.ql ccd6b01bfc67abbab5d2f9a64e7d042c2bb47d85bd7c844418f0eda37188c307 d5f2119ae5d153a36eea5d82aa7fd2c2628827a110dfc539e04629f0a5ebd82e +test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.ql f73fbce049d8918d6fd4001c75fdd32ae4cb4cc54d48d8a3681ee213b00b3c59 147c93af7c138ddade5542ba43cc6317a91cff4eabf5d2e2175bb4899f8ea77b +test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.ql c7e20412261a1a2df5bc55e6fafaebe27c33b76ebac7a74a2c5d24df4744aee2 b91c4498d52bcc618a1af70c41f8084368dc7f46c132c8428bc9f94dbf9d0f8c test/extractor-tests/generated/expr/LazyInitializationExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/MagicIdentifierLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/MakeTemporarilyEscapableExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/MemberRefExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql ea84ba5e032d499a4ef941fcf22bf268bc3dcbe8777d27583456540ba2b3f77c c9cdeda32de8b7ac8b8cccb259458d9015d1564fae35773c041f8b48a899dec1 +test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql d424b72dc8d3a443f7d0c90d3efa660fd98dce68aec971afc62f99f5243080b7 d0cc33345c0aeb00cb88c1e952897ef896ce02edeb9d2d9785aea1ea68fdfc6a +test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.ql 9b7ea8241e213758e11c9954d912200641d723302cc3f9be53deeab50b8fbd06 ddb041799a2c025c2ab2d5dcdb263fc9b4eee610dae377efff08a15d6c7701d8 +test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.ql 52f2a341d784146bde524b06a96dba2b5a15190f8a56288355282693635a9224 bef08f3ee3f2d33ef027329827382eee57a4889eb03ac73717d86675a7934d02 test/extractor-tests/generated/expr/NilLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql 620878a3c2f8dd25cfb1dc400b22fa20d549793a27edd419df0693bfd1d7b987 0af15ca80f025dad9e343e392e15f40b348b2efe670cbce230f4ebe1863ec45d +test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql bfd0654446bb5ac4326cbc637024f68fd3dd3314ed104d93db4a818cebe1c0a6 2fec0d977e211b154b8c90233be05730fd71d66489ed2c384e916befd8816e2f +test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.ql 2357a88c0b80b702e26afc7ddff51c564136682949a456ede1287fca37bbe117 aaa956a55f895e979948b44df3c401cd02cef67184d41004534df12ee8a19212 +test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.ql f6ea109525c2f41bcfc15a96246d70acce844510ae72d8f04dd4e03e6573e733 c6ba2f99c977616a62abeb7cd4138a9e9748c92715163f4238a2f0e4c456d560 test/extractor-tests/generated/expr/OneWayExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/OpaqueValueExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql 5486acdbada57e8b99e129b41fe7f674f42aa5cb1c1f01d7e3d39ddeac838db2 849a5378784006c65b8806582a8c5aa98642623a13a17e4d879ade4f682ff733 +test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql 9657d2a968de2bcac5839701c6102f87f6d6947c50b1b3eef27729cc5af4b9ba 99f1b3a0f0186242a5517fef226c4d7c1a3ef5f9660844aee608b3918727db5a +test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.ql 37411aa9c53dbbc5f1c32ec9e24a8a5bf152ce11d15b1d78078e0fce41b3a8ec e043f9f86417efb480815cb04ef7dd2b22340f849be203935d523d9f2e8589f0 test/extractor-tests/generated/expr/OptionalEvaluationExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/OptionalTryExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/OtherInitializerRefExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql fbcec327377a2f349824b82ba9d17556010cce52ce60d28ca4efee045d0d4225 2155d566e460db6b6693b3bdf93e304ed762abf5edf5072c1b4cc3b4cf3d18d1 -test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql fbf8f8ee6411c1c4bf241710eac37dde39efeae70a06f4bc7ac16dd941b52937 63e2ba99385a135a5503db87db98ad16eabf9297178baee42a9d4109511c08fd -test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql cf89d8c42bcb31ffb33283655823ac7afb086a44ba0245887cf4cef108f71ed8 1d7bc7969aae39435178177cb0494baa20e93b3195de5ccc05a05db123cd2708 -test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql 0fde7c56085ede00a4e5bd33c00f51cf7bd3cf678312610b12a52399d43700eb 1d469792c22b20fe7e317d46c40b533756e279a6c2acffdfa9b1faa156d43c24 +test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql cf429544725932933dcd3b0ce2e53ef8d63aeae6ba64db3b65c307c03243fa10 0e0f52920d0c9277b6d673115314df7e7f76434964e2200ca6245cfc0ae5cf10 +test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.ql 09c403da048393b3b0b82432991104267c4e6c7daa5793641faabb572c09f129 b6ac95f43a761937dc9f50bdd57a7d5e02296ea4d337e2b566af534e4c217137 +test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql f969396327b9b93d936513bdf036f9e6fac523318ea03e03b4064a33525d36bc 452527d074d72182f3e1898fea8d5679ccfccb2ff73af70f7927850d49d652e4 +test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.ql 23458a971238804f43baab06090ab3a281134db112b4908771c23d91c06b0b18 c5a6c792977304ed6e87aaf5e4e983055d00227e92ba661ff87adcefed0532a4 +test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql 8f7d3eae5fa5e3e210b8357ced549944a064ec3193de695b415f1cf62d25eb0c a17bca0032f9747d12a789774a19d3beaff35b911ceeebae3484ae3d8824e153 +test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.ql db1ed61c2b644e73200d719565d8e0183b2dcad0b11e65050315c38cf82a693c 961611d2055ff1defc060f117cdb7790c63cd0c8a45d182b8592de54862a6192 +test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql 33e6a49d0ae7773a1c70e765d216de1b68c8df5ed69fe16f8a44c1ba39323059 b6889eb338629a3615f09c89db2d146af84c40d9915b1390167175ec50721099 +test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.ql d5eb8c28926a1a22df7880b311f9e91aa80e69ffb978fdd4ed431ab4e368ad84 744413eec3114687e0b0f9d0fc7b8118b0938117789aedf1dcd6d8f046b254c1 +test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.ql 49b0bd3f1048c6ceb904a16b084a6646ed587f55578c70ae8c57b2fb3c78ed68 a46e8af5368774166a73357c2e245decb677d81791c355f2fe74e41a430d55ad test/extractor-tests/generated/expr/PrefixUnaryExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql 9d5ed8460a0c906a44f7693fec6288313cc3ee73cdb09c1a54af525093f2ff10 c0fe8a5a88ce747e6f7977a2edd6123759725b6fbbed7f81e94fb1a5550d22fe +test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql 21122074264476b5edae71790e7fb6627e747f8c5d44c8d1176a1767cc17605f 68d6d79312fcf229b0eaa7be69f0cc9403143d128c3058678d73b9a1f6b4e41f +test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.ql 6ccc25288e4aba93066a8b8cdbe5c5d82d346107836f2d1748fc38b43b8d01ce ee6afc9d0c6dee117fb96923874a19f3dee9d8e617c023c24daec567c272b364 +test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.ql bc827e88b77cce3f0f0df3a5dbca2cdc35199a3f566dc25b8f23edcb2f56e26d 68d9e91f44bd9e75f115aba6353d38979ca5b37f284b6357c67d5cf21630462d test/extractor-tests/generated/expr/RebindSelfInInitializerExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql 5414253ffcd24b16a2725d7e1f8b543dac9458e32d610a7722ddcafd00d31048 3bdd13684344dae067612345cef43b4a4b13ebad3157e3dd76edce4a40895df6 -test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql 5dea0a19b45feedee2808d81cda006b94c15d253ea80ef66dfc67d199bfec29b 49b07c7695a47935f1fdabbb547c6508360bd5269fbcd4743a486a6f9029d6c2 +test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql 57837f6c123a5e89266b81feb7250f917d14b4899b426984304b9e970da7c4bc 338720ee352398436a054f46bc69425ffecebb8c9f7d2cb04b1a26638c2c9e7b +test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql cf99bc20cdbdafc77bc574ea0c96b47b04941cc108864db8e36b82a106c00bd7 3fa585eb56d89c252f399be3f46787e3b31c69b419d88c0c9acf1a9aecf85791 +test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql 95598451a0ffaa0f2aeb1e478a507efcc380c30d10aa90efefb6cbc14a9167a9 f511a9a527c68b76d8591c15c5e63decd56d9ef7b12d470889ebf4518bddf6d0 test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/SuperRefExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d @@ -1141,7 +1244,8 @@ test/extractor-tests/generated/expr/TryExpr/MISSING_SOURCE.txt 35fb32ea5393152eb test/extractor-tests/generated/expr/TupleElementExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/TupleExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/expr/TypeExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql e4f1cd638a06cfd32e987e560777fc94d016944f4c87847c4bb059bfbba48dde 3864ad30240bdccff665f77621f361e192612c95a690b6f7b31ba62652bf6b00 +test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql 93ebaff4938dd18f3626533cbf23094c4d7eac7ce84325b743f78dd36d8831e5 c3bc6b6f7a18ca5a32084207fac2468f6306b81cd6a7af1ecf117b1a37147266 +test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.ql da07880497965cf7f7e28fb3c3a8e8223368685fdacb62d7e562757f01fd521c 9be644216f6adf12adf102ecfac5b3820c2fe7916a86586744ae71d1c11d9704 test/extractor-tests/generated/expr/VarargExpansionExpr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/pattern/AnyPattern/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/pattern/BindingPattern/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d @@ -1159,21 +1263,31 @@ test/extractor-tests/generated/stmt/BreakStmt/MISSING_SOURCE.txt 35fb32ea5393152 test/extractor-tests/generated/stmt/ConditionElement/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/ContinueStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/DeferStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql 0f4ce5a2ea261ad66f7d9aa9fb4c2917d0ecc627c1d660f203c0b3e62550f463 6dc9e5e3d83c5b94fd0a72a06fc3046883f1766dcfc91b7e7063bf1c66582f69 +test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql 0170171a2b75ba6beab62726a2b6a1530b11fb4b5d9b95b645a07f1671d3dad4 ef8fad038be90f35930fab0c374137e200557051cedaa89ef1cbbcaf41850530 test/extractor-tests/generated/stmt/DoCatchStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/DoStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql 70eb21a0717e68bcf59ba9861d474aaa5f7791c39fccea4015bca47fc8d082f1 18eaafd230e4eaaeb114466db17bb480591af6357d5ed7bafe74a3352b806690 +test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql db2d21fe1b01949180ff11416f2dc0a6a561f9ac9e6a5654156f947c584971de 2cf787b54819077dd2b4da870b722396ebf953e05bf0b1c393affef2b1fe11ba test/extractor-tests/generated/stmt/FallthroughStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql 72fc91069e68f975006d6d49a54ff92a23a27706a6d5d15acdcfef09cafa2f69 38a4c56c7ed6ec47b990ee79ae2fe45cf287db474b6dbf13b4e781205894e27f +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql 093a6619940636974e2a59f085937f9fa8645a134199c130ee99babfd2c1f1a0 068daffb2da1be9135eb818190926af3958d503c3c61de2659c0c0e167b2d11c +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.ql 1b8689dda5defd45c8bb743b30d723ed7b0c80ca54b81fb0f5fcf76620ec4ef4 1e48e40cff37194e0ea2b69997177237145fa1070e84c8f701a03d71416652b5 +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.ql 1cf0663cd16886d4361bedad93759ab84fcaf54d5fbf16d7d2f4108f74c38683 129778f5f36d10e8a10452f333304fef9b95919cfe367ce6ff7309e2d3f3ab3b +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.ql 503106f20025ec479ffe46daf13ff80f5d824b657c43da8185ae2d74af8740a3 551e33f70028268e3b3790c17907101be768c42811b62978ed10ffc0a65e25d0 +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.ql 749149b5164f493bb49726e1d54cdd1c85607566c0ba7adfc3514ea953b1f40e 1695a631aeeb47e6a0d22ec18d713f1fe2f730684269fc6e50c70020a78fbf3c +test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.ql 536af56264054a7af626a5ca4bb5bcc5b8f13299d11c499a110e4f12e2c166b6 bfd8b355342b0a03ced022b31d39e9adc6d7820a28394315392a9e2fc7647555 test/extractor-tests/generated/stmt/GuardStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/IfStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql dbe340f6f2468a6c5ff42785101d3529ca11ce49d28cc607cbc842678b9f0b61 96aea7859f0a606ea032850339d78907406dcdcc2d3ac5b15ea8c7bd2cd36eb1 +test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql 46b702865ef1dc4d9d8332a3d68ba295a1f8ce9737dbcb07a5ef4c701c021789 07eaec1abc763a4f2339466fd0f06d12c4ca21d9eeb21ab1f7366916dafc4854 test/extractor-tests/generated/stmt/RepeatWhileStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/ReturnStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/StmtCondition/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql 5119caff56f18954f8d01f21d7a381de9aa7c35cc8a7515205542574f9b161c1 5e122758bc0cdc44ad0d292dc5bfcfc36717ab5db3b363202659d0da5c6469a6 -test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql 1460fc714ab50c56afd608934a9a1081104b99c032b6d77954cb6e9dd7fa33a8 c15d9755ffbe45d447d55c5408d897cbff647ec97a458090c0ad9cf597e62859 -test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql 1d010c5ad6ece987163696d629ef073b6476d37794cc080ad5fcc4980dc9f64b 4b39d3945ef7419b277fa94eb15878b20e46811a5bedb03217577f507145734b +test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql a1e1e34aa999175017c4dfefe91086d2ebd6b9b95c1680c95f2f43df39ab9487 421c8bc1b3ea40f67790c11bb414e7aa9025465a690421a23448842805f5f759 +test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.ql 1bca85242d8513b9300673f666938ed59ef7f610854d97a820a09b3bab661188 1f15e6b2a29eeca1b9186e5bfd61225dadd6632bf727c79f1611653031c27de9 +test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql e7faadfde4c2da17c06cb2cbe9d8c7dee6b2641eca0cd13374f8ad5ed6f33e14 a96d1b1e169f296b2a9ea959fcde417521e04391e58372ed04bd717928548a02 +test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.ql 287245a6c6770c1d3a780baf6d93ff7a012720095a770f2699a344032a2fa146 d3ad9559c06fd3c22c50ecdb92118a94860ce4d872eb7ce53c47b3053e47e716 +test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.ql 6da5d7afa12c5de2a9e012aa2867d97c563945ebc2cc05961934070486b4c70b 546b7cbe145302b90cc3377c81be06d47248e7fe4e64af2ac455ffee8033aba4 +test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql d779d040e0d7aa77a2445c0217c5e5057b42b18b431fb2a785c0f0248ed98baf 281be139df50e84a8d390e0fd80a7d6e2ac07855f488288511b4ebe2d6ab187e +test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.ql 7df55f86cd90358245ba360160e41ab990f530ec2717a0b99438f248d879e289 f1ef8e30efe60d0ed7c312a83a789f1dd113e201bc5caff339daed1317500667 +test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.ql 5b6a5916ad1a04f23fb79923f4df5543c55cf187d7d6e1cc7161cad717d3ff15 27eede6ded0c4d446f63c10c232afff9d5241014bba5c9a6e6c52c25231f3c13 test/extractor-tests/generated/stmt/ThrowStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/WhileStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/stmt/YieldStmt/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d @@ -1181,42 +1295,58 @@ test/extractor-tests/generated/type/ArraySliceType/MISSING_SOURCE.txt 35fb32ea53 test/extractor-tests/generated/type/BoundGenericClassType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/BoundGenericEnumType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/BoundGenericStructType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql 78d10029fa696ec4bcc48ea666923b98aa120a4a66004c491314f4abf283eac4 d23455d2ec38a1bba726d2e8fb349dfa2cdc52b8751d9caabb438d0dcdff6ab7 -test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql 83a861b3ad63bed272f892031adc5bc651ed244cfcd53fc3090a2cea3f9d6a8d 197689774e28406b4bd798059fc57078695b43ca0833a7a4ef9dabd519e62d0d +test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql 5838694bf4d035aa764e25c9bd768f63ddea7b9b1cbd0386401c24f33b7fab17 cdeedab8f8b4e28a98ee6d2775e77cf359df541827d1ea592c46ed43ec76cdb6 +test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.ql 4f32fdf145ee62a4bb9e29175356b7f9f47bceceb7ee20a4fc93445d99f33117 a1454fa426f528d5ed8d98a84454d1e8118a4f1bb745d4ad4fffa69e5c798180 +test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql 0c50885643a7b460bd7da1610f404a983085f8022adc4dc02c337f84a06385fc 2f6e9d85c2a8d7f0d3f248619a9025c33f907028e132f8b67056719a3808f771 test/extractor-tests/generated/type/ClassType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/DependentMemberType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/DictionaryType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql 62da270e23b080f8ceb9ec5c130f84ccd779c43cf30c88db526ef061269c5ce9 390cb48fd7873210f5f5b4e8f275347348336a1e8161c72d3fafa5f7fee90f93 +test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql 3214d8a7fcc076c880988b3ab2079ad0d77834e7dedcb063c6640b2d92ad2a41 3306c659f68b132941b5d013b2414122f81bfff6c7cbbabf6fce4328df38a9f9 test/extractor-tests/generated/type/EnumType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/ExistentialMetatypeType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql 7e09bbea166a4f269ecef1113229e98dfd7ea68ea5d4025af492fcce48698420 a4d00ff4100138020af51e8264d1d243156e52ab417bb150d33e9e1cc8cb0a69 +test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql 5f5c1e44519519eca7bb8bee28e58d79317c1b972549bbbdc135da11cba9a62f 3cc92fa9fb139485aa53e5c13b411360ba3cd1185ca497d84251e5b9212db676 test/extractor-tests/generated/type/FunctionType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/GenericFunctionType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/GenericTypeParamType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/InOutType/InOutType.ql 611aea3776fbcd3763d798b58eba36522db9d4f8ae95dad133562abc6b9d0a9c 184e35f8ef3aa77b52d7d6dbd784fe4749793c50f0484195bd91f49bc2838509 -test/extractor-tests/generated/type/IntegerType/IntegerType.ql 6f18b3b5b4c53ca5d5302a78b04fea929bce478fa5c342f01951379a405b4c8a 486c1ceef03d02b064381ba514ad19eeca250c83ce54354a08c3a7c94bd4fd11 +test/extractor-tests/generated/type/InOutType/InOutType.ql a3591003defc284ba9c1c8492ccea5f46ff1de2d86a2240da3a501598d236f8e 4915db95b101c199dcf194e8b974a3c7c94f8ac1d4d9dbf6144822beb4ec0b66 +test/extractor-tests/generated/type/IntegerType/IntegerType.ql 7c911b67a801d8a4f0fe695c66318f6a08278b632adacb58bb10578474a43d49 9590080054ad1280eecb97d2f5265de8c2d2eeca03af24654cac5e2818240e85 test/extractor-tests/generated/type/LValueType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/MetatypeType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/ModuleType/ModuleType.ql 7d78142dc82b06e454b9875a47890d5c2364e51f6e496640d6c4d20327f535b7 cecd45f6a4b0f137cdd7e694259044016ab01da6a42e73c3a361b4d00b594133 -test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql 86bc4823c19da17cbcebe3a4634eccff0a96cbebd174d8d4b1610e3fda3f8bdb 82179cb6e188a3a271428de4631c2a6fa4cec2e65a628fb56c2cbcff8a6a13d3 -test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql fdbbc1cffb209097480596d3be405188d045758da03a7980511d56874690b9c4 9ba8ffc028988a21cd751d25f0c363c3c37dfc0a13629379c8ca94b6b066bb7d +test/extractor-tests/generated/type/ModuleType/ModuleType.ql a65f7a166068b3bc622864b4b7464a25e41cd8a02f2bdce214ae59475acb9893 89a165e1c0f5b1de549d6c73e893cbc520832d534f801ba5d9144ac2ae3a9b8a +test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql be3663ab96b8c566ca07b72a40c08822dda7feaac65f9e0a27fee0b139dcac22 d031a8f27d4a57248c3b9edbbbbc9bbfeac8bd4507406ad3c21fa2bb241e7a8c +test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.ql e14e32f950cc38b2b47210d44391c619ae14ed9a836a9a9882e26e6981b32926 b0f4988b72f2146ddb71d28227aa3f67fd6c6de1f754c4d95d4847a1b5fb7ef2 +test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.ql 4a7b5fd2a764d8fa50b9408e055d34160064dfaeb90fa64b1854fda1f39e3385 0d70b14dab911499c2275476355332f1b5048150016e978c2835cb9f7a8244f9 +test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql 8f3ccc86bac852ec6d6a4e9522aa07ca66ff410b586b8275e35b7c0745726f05 8b3224c86f29b22a927f4c2ea90b120732eff7bac6c96d431bcc0cd3bcd7c1a4 +test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.ql f3da83a9a32d0945ade1015103eb911a6d8a5420980fb3c2ee9b6884ab4d0be4 8d5025b9432df8b0b3d3a27f9228befbbb95f550528c4e4219ca4e6d942e1e4b +test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.ql f64968fc58d977e5c867010fdda3fa40162a2203f65067082b2d6608e3a31af8 f5ef6bb98c1f7a280fe5b84f19884dff3a8d073a410b81905307a8f41e757761 test/extractor-tests/generated/type/OptionalType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql d4d695dcd0e723cdc9f196d828e22a3650ac751f0488e257f3bc2e2afbc343ec ff20bf849e18621b6193699bf58b3d6d127c29113dc996100bc18938fdf4658c -test/extractor-tests/generated/type/PackType/PackArchetypeType.ql 56e7f72a2d6f03e394a5e7103e337aee06b8e1fa9198d8f6123c44c4e33d5b57 e7259313ade883242bffb8e812da64c77108b55acbf39d7b8cda47251ee5f5d3 -test/extractor-tests/generated/type/PackType/PackElementType.ql 8f78e329812bb16d0ab644944c3dffba9701dffcd980018accf22c4540828315 adf4b155e1d5ba0c54177b9a296e0e5d06d2566dafcb43d60403fcf94a009009 -test/extractor-tests/generated/type/PackType/PackExpansionType.ql 4ae76353b2312ca356a11191b3b8c235fc5a394b91c9a1de48da1fbc9986f14c c676192e609e434c1c617d9c32752f39d2aa7119a9c00bd092f30734099c89dc -test/extractor-tests/generated/type/PackType/PackType.ql 9d235d6c608da8a3f2eaf3f1bc32a130cc36565c27d60f62654a2b4f3c95dfb4 760d5daf96ec4a903fa09b6ed3687f8a3e59525b1d621b6866cc7506ebe20888 -test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql d72a5ea146d99b43e0446f7e2c5b6999383de7b6962bce2f14c616a28c75a6be 0892b65674289bc7d1bdac0b7ab6da267876765641679ee2821aba258de563f2 +test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql 961338f1919320b6ba8f597f7c92b715a56a411b03fd6911a008f9d842a01298 cce7edb034f5257c7df3bc193dc972a5d95be55c51a1e76143566dc8bf003323 +test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.ql 5f86e39a8332e5f5cefc38498cb5cc88a226e48921ade2f1541aa9b0ed58f1cb 7f46a7c01a47a7386363960dd865c564927898327ff3677d1239be1e051b4728 +test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.ql 1ff8e6414c03eb1c2a989febcf470b659d93b99d82df3dd8da52e300ae9f6a1f f4bed98c9e1c379eb013a44486bba66d523bae22ce2001afcbeae4b7dda96e29 +test/extractor-tests/generated/type/PackType/PackArchetypeType.ql b518d42787b5bdc1cdfd902c2823cc900c288f238403dd9592c102c7f59929fd ea53016b56c25734f4ef88c907183b438becfd000f181ea1f22545e200f9e175 +test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.ql 624112c36fb26ccb9954b30ca843c8a626e263ccf5823a6d7deb24393fa9b452 dfd5f27860addc7d9385f36b50dfa72790f212eec6a40de0a9cb81a0327cdcb3 +test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.ql 9afe056468a5042cf36437dd96badeeeef0019e06ed562d75349ae142ce4fe12 c8f8fbe02636bb8397d6b8f69eff540a386e8bbc977cabcaeaa0aaa90148526c +test/extractor-tests/generated/type/PackType/PackElementType.ql a26d73996f04ddb5c4e8f89c5e5587cafb0c147669f9bd77e66971f89f708c89 ba9c89e450666411b6ff3c09916de794099676f935706adb9c216c8b79f643df +test/extractor-tests/generated/type/PackType/PackExpansionType.ql 6f0c75a1edcb627b7589a68767da5146d09fdc428ebb80a6ab81704035f19a11 71580fbfc27f2e8b1b94c687692b29e1199a61b06eeec2a264a3e702ff637f29 +test/extractor-tests/generated/type/PackType/PackType.ql cc1d69305a72720566ee10d55e0248c99f7b78ade0334905c4efa20f940df451 94b3dafd5fc037fd2ee5433c4d731f9fe9c0e1d6220298949fa45735647ac01c +test/extractor-tests/generated/type/PackType/PackType_getElement.ql ab01262c3c6b8d29c89d83463b0c9d58640d9fbfa705dfeadb458380a7f17d50 290458051bb49dda441c3f8f0c397c874c4022ffcb58b5a803f138b0f17fe2bf +test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql 74b52173c4d39d74497d8e2d3d3dbbae8a1e84190642af2ab786464e804bbfa7 9a6a77b65c345430c768c660ae66755671d034f73c96a88b2935fed66d96b592 +test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.ql d51d20195b1ad8d31a3b2d165b81b90883d9e55a96b1b421419814964bb05519 f354fe8f23507e094a2d8ec75cb9d3ab6426c009bac02b7a96dae6970b0377db test/extractor-tests/generated/type/ParenType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql 4355fd06fe5e9c775ce58c025f3a8383d94e48fd8461b69325905da551001e5a 8f200f8517191b6db86c65cbd7ef4efa537eb9b26d6a417112d25af5aa9632fd -test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql 5e9d97fb048d108fe3d52a69da929f93cb52afd694993cb2ed66155cb668ed0a 40888e1af510016ad7843f0e5194e4af10f6929567b63532f66667f466dcfb9e +test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql aa737251785d2467ed77f4a6710ff81a1affcc93fb974faf28244ab2b70cfc0d e6622799754179ba47e0a278f914980c3c7f51529cff97eb93e2759675e957ec +test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.ql 96af09aefc45241d7d732cee7cfa91ff814f83a40544ec0835e2ecdbd05dcff6 45f06c1395f5f17430b7bed1d2c8f43c7380b027e41b4fe5046a8f3aa37e7dc6 +test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.ql a3877509c52ef4c9212bb4e266be6cc4945cde0fe99319a61a871661eeafbadc a476de7749334b20d2547971d8646662e125c3d0435bbbb8001fa4e88635e373 +test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql 91a151f8ffa2050bc9434cd02929c3ddadad589e85e102d1904cd41417bbdd8b c68994e8101b9392a704de138780152c30f91882bec9587b6a6359e7a37116f9 +test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.ql 08856a749fa3bebb09364b47d63d1524672572e1c26c525879af24d34920a68f 7764540b5fd98a6540045c6fa91027ff9344f603d77251c2d803afb966bdab2a test/extractor-tests/generated/type/ProtocolType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/StructType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/TupleType/TupleType.ql 4b7c7db3decc5d901658e1a72943c48d661f5a69f0f1c36972bee2200d0532f5 2539d830cb6dd71789072bd87bd35a260e31dbe7ca7208e84f087f13fd7c9561 +test/extractor-tests/generated/type/TupleType/TupleType.ql 265690da7f0733ca88d20efbcf07c0c452f4d44b49488f624f2673670cac56c6 2da4185f0a870c38297b58a61b295531a140b50db9be31a0c298df7921adb3ba +test/extractor-tests/generated/type/TupleType/TupleType_getName.ql 79dfaf4d6aa52572f4b43e89079876249949b1b335168cb30b6c6f6db00423ac 17a35226afc2392bd4c69eaf9cf896e0556d28a2d9086c33b5686985959798bf +test/extractor-tests/generated/type/TupleType/TupleType_getType.ql a402d5c07829ccfde5521fb5b8c5d6846126e2bc8ae0a0254a8353babdc2f2e5 ccdcf490e4ec3c2fcd3c7b1b9ffddcd0b85229b25db8ab5c1802866c8e3e03af test/extractor-tests/generated/type/TypeAliasType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/TypeRepr/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d test/extractor-tests/generated/type/UnboundGenericType/MISSING_SOURCE.txt 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d 35fb32ea5393152eb7a875b20b4e3e4b8c7a997a8959c32417140d57a16a052d -test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql c66172a8fd9c0e9efea6db0d05beee176b02cc65d838c95f2b4f995dfdd89035 57b1e46011eaaa91472d6c58f15587eadd44341ddf8d500a0886ebe6962fa431 -test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql 678e0cb7fdb9ddf6cdde9a68b6f6b8e3ff915681e1a5caeb49b3f1da5dfa9edd 49e2214c32edcfdd7a867a6a490dc37de654b1cc61ca0a39270bd71daaafc2c0 -test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql b10c35a7500d8e5847a55fd076b0a6bfb3b6ef8b53a13a706dc5c9925727d7fc f288b3bfc5c64fcb14d2fd92f88b1abd406786c78bd22980128301599ed1937c -test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql a5d4d46ed3162dda95fae4ba8b21150370329a3454c7854a5340f9b948e1f6ac 429a7f9a9eb69b5e6e87a5d666f0ab974380bd2bd9c79f7a4654850aa9006161 +test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql 841cc663df467772d7af7fdfe88dbc4f588e4f6781ce1f3cb2d4f3f75444bd95 4a64c07f3bf06792e052b154b5a0a6fb62575562935603ad63ca6d81de5dd04f +test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql 6369df2814fffb6f83135bfaa610d9dfec106459470b552e8d875d74d2fae8dd 56fba1c55bd6d1f149a5a92d98b3dded158898dcdcfdd617e7537a435508a6eb +test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql d52a0248c8f0a0cfb2ff01d470d66d11a38fcd6a12314d8e6eb752e6aa1f9b1c ceb3cb90ca6f5e5b4724890ede6179675d3ec5d834b7067a80c99e7951ef3d3f +test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql 2b37d5fa22a78747c9ec3f924e9992f7083d3e8a3372a0c9aeed6211f47930cd d20ba54dada2388064f060967bd8577605baa30d19bb696339b7449a14fc1dbd diff --git a/swift/ql/.gitattributes b/swift/ql/.gitattributes index 068b42749676..761b2efeb7cd 100644 --- a/swift/ql/.gitattributes +++ b/swift/ql/.gitattributes @@ -1035,36 +1035,110 @@ /lib/codeql/swift/generated/type/VariadicSequenceType.qll linguist-generated /lib/codeql/swift/generated/type/WeakStorageType.qll linguist-generated /test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql linguist-generated +/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql linguist-generated /test/extractor-tests/generated/Comment/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/Diagnostics/Diagnostics.ql linguist-generated /test/extractor-tests/generated/File/File.ql linguist-generated /test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql linguist-generated +/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.ql linguist-generated +/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.ql linguist-generated +/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.ql linguist-generated /test/extractor-tests/generated/OtherAvailabilitySpec/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/PlatformVersionAvailabilitySpec/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/Accessor/Accessor.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getName.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.ql linguist-generated +/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.ql linguist-generated /test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql linguist-generated +/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.ql linguist-generated +/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql linguist-generated +/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.ql linguist-generated +/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.ql linguist-generated +/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.ql linguist-generated /test/extractor-tests/generated/decl/Deinitializer/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.ql linguist-generated /test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql linguist-generated /test/extractor-tests/generated/decl/GenericTypeParamDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql linguist-generated +/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql linguist-generated +/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.ql linguist-generated +/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql linguist-generated +/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/InfixOperatorDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/Initializer/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql linguist-generated /test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql linguist-generated +/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql linguist-generated /test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql linguist-generated +/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql linguist-generated +/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.ql linguist-generated +/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.ql linguist-generated +/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.ql linguist-generated /test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql linguist-generated +/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.ql linguist-generated +/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.ql linguist-generated +/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.ql linguist-generated /test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.ql linguist-generated +/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.ql linguist-generated /test/extractor-tests/generated/decl/PatternBindingDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/PostfixOperatorDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql linguist-generated +/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.ql linguist-generated /test/extractor-tests/generated/decl/PrecedenceGroupDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/PrefixOperatorDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/ProtocolDecl/MISSING_SOURCE.txt linguist-generated @@ -1073,6 +1147,7 @@ /test/extractor-tests/generated/decl/TopLevelCodeDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/decl/TypeAliasDecl/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql linguist-generated +/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/Argument/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ArrayExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/AssignExpr/MISSING_SOURCE.txt linguist-generated @@ -1085,55 +1160,83 @@ /test/extractor-tests/generated/expr/CoerceExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ConditionalCheckedCastExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql linguist-generated +/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql linguist-generated +/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/DeclRefExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/DefaultArgumentExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/DictionaryExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/DiscardAssignmentExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/DotSyntaxBaseIgnoredExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql linguist-generated +/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.ql linguist-generated +/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql linguist-generated +/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.ql linguist-generated +/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/DynamicTypeExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql linguist-generated +/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/ExplicitClosureExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql linguist-generated +/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/FloatLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ForceTryExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ForceValueExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ForcedCheckedCastExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql linguist-generated +/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/IfExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql linguist-generated +/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/InOutExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql linguist-generated +/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.ql linguist-generated +/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/IntegerLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/InterpolatedStringLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/IsExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/KeyPathApplicationExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/KeyPathDotExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql linguist-generated +/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.ql linguist-generated +/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.ql linguist-generated +/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/LazyInitializationExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/MagicIdentifierLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/MakeTemporarilyEscapableExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/MemberRefExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql linguist-generated +/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.ql linguist-generated +/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/NilLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql linguist-generated +/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.ql linguist-generated +/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/OneWayExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/OpaqueValueExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql linguist-generated +/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/OptionalEvaluationExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/OptionalTryExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/OtherInitializerRefExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql linguist-generated +/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql linguist-generated +/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql linguist-generated +/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql linguist-generated +/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.ql linguist-generated +/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/PrefixUnaryExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql linguist-generated +/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.ql linguist-generated +/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.ql linguist-generated /test/extractor-tests/generated/expr/RebindSelfInInitializerExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/RegexLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql linguist-generated +/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql linguist-generated /test/extractor-tests/generated/expr/StringLiteralExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/SubscriptExpr/MISSING_SOURCE.txt linguist-generated @@ -1144,6 +1247,7 @@ /test/extractor-tests/generated/expr/TupleExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/TypeExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql linguist-generated +/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.ql linguist-generated /test/extractor-tests/generated/expr/VarargExpansionExpr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/pattern/AnyPattern/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/pattern/BindingPattern/MISSING_SOURCE.txt linguist-generated @@ -1167,6 +1271,11 @@ /test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql linguist-generated /test/extractor-tests/generated/stmt/FallthroughStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql linguist-generated +/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.ql linguist-generated +/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.ql linguist-generated +/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.ql linguist-generated +/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.ql linguist-generated +/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.ql linguist-generated /test/extractor-tests/generated/stmt/GuardStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/IfStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql linguist-generated @@ -1174,8 +1283,13 @@ /test/extractor-tests/generated/stmt/ReturnStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/StmtCondition/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql linguist-generated +/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.ql linguist-generated /test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql linguist-generated +/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.ql linguist-generated +/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.ql linguist-generated /test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql linguist-generated +/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.ql linguist-generated +/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.ql linguist-generated /test/extractor-tests/generated/stmt/ThrowStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/WhileStmt/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/stmt/YieldStmt/MISSING_SOURCE.txt linguist-generated @@ -1184,6 +1298,7 @@ /test/extractor-tests/generated/type/BoundGenericEnumType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/BoundGenericStructType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql linguist-generated +/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.ql linguist-generated /test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql linguist-generated /test/extractor-tests/generated/type/ClassType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/DependentMemberType/MISSING_SOURCE.txt linguist-generated @@ -1201,20 +1316,35 @@ /test/extractor-tests/generated/type/MetatypeType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/ModuleType/ModuleType.ql linguist-generated /test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql linguist-generated +/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.ql linguist-generated +/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.ql linguist-generated /test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql linguist-generated +/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.ql linguist-generated +/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.ql linguist-generated /test/extractor-tests/generated/type/OptionalType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql linguist-generated +/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.ql linguist-generated +/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.ql linguist-generated /test/extractor-tests/generated/type/PackType/PackArchetypeType.ql linguist-generated +/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.ql linguist-generated +/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.ql linguist-generated /test/extractor-tests/generated/type/PackType/PackElementType.ql linguist-generated /test/extractor-tests/generated/type/PackType/PackExpansionType.ql linguist-generated /test/extractor-tests/generated/type/PackType/PackType.ql linguist-generated +/test/extractor-tests/generated/type/PackType/PackType_getElement.ql linguist-generated /test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql linguist-generated +/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.ql linguist-generated /test/extractor-tests/generated/type/ParenType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql linguist-generated +/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.ql linguist-generated +/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.ql linguist-generated /test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql linguist-generated +/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.ql linguist-generated /test/extractor-tests/generated/type/ProtocolType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/StructType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/TupleType/TupleType.ql linguist-generated +/test/extractor-tests/generated/type/TupleType/TupleType_getName.ql linguist-generated +/test/extractor-tests/generated/type/TupleType/TupleType_getType.ql linguist-generated /test/extractor-tests/generated/type/TypeAliasType/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/TypeRepr/MISSING_SOURCE.txt linguist-generated /test/extractor-tests/generated/type/UnboundGenericType/MISSING_SOURCE.txt linguist-generated diff --git a/swift/ql/lib/codeql/swift/generated/ParentChild.qll b/swift/ql/lib/codeql/swift/generated/ParentChild.qll index 4185644abe17..49ffc37a473c 100644 --- a/swift/ql/lib/codeql/swift/generated/ParentChild.qll +++ b/swift/ql/lib/codeql/swift/generated/ParentChild.qll @@ -10,60 +10,235 @@ import codeql.swift.elements.expr.internal.InitializerRefCallExpr import codeql.swift.elements.expr.internal.SelfApplyExpr private module Impl { - private Element getImmediateChildOfComment(Comment e, int index, string partialPredicateCall) { + private Element getImmediateChildOfElement(Element e, int index, string partialPredicateCall) { none() } + private Element getImmediateChildOfFile(File e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLocatable(Locatable e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLocation(Location e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAstNode(AstNode e, int index, string partialPredicateCall) { + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfComment(Comment e, int index, string partialPredicateCall) { + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfDbFile(DbFile e, int index, string partialPredicateCall) { - none() + exists(int b, int bFile, int n | + b = 0 and + bFile = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFile(e, i, _)) | i) and + n = bFile and + ( + none() + or + result = getImmediateChildOfFile(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDbLocation(DbLocation e, int index, string partialPredicateCall) { - none() + exists(int b, int bLocation, int n | + b = 0 and + bLocation = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocation(e, i, _)) | i) and + n = bLocation and + ( + none() + or + result = getImmediateChildOfLocation(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDiagnostics( Diagnostics e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfErrorElement( + ErrorElement e, int index, string partialPredicateCall + ) { + exists(int b, int bLocatable, int n | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and + ( + none() + or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnknownFile( UnknownFile e, int index, string partialPredicateCall ) { - none() + exists(int b, int bFile, int n | + b = 0 and + bFile = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFile(e, i, _)) | i) and + n = bFile and + ( + none() + or + result = getImmediateChildOfFile(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnknownLocation( UnknownLocation e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLocation, int n | + b = 0 and + bLocation = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocation(e, i, _)) | i) and + n = bLocation and + ( + none() + or + result = getImmediateChildOfLocation(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfAvailabilityInfo( AvailabilityInfo e, int index, string partialPredicateCall ) { - exists(int n, int nSpec | - n = 0 and + exists(int b, int bAstNode, int n, int nSpec | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nSpec = n + 1 + max(int i | i = -1 or exists(e.getSpec(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getSpec(index - n) and partialPredicateCall = "Spec(" + (index - n).toString() + ")" ) ) } + private Element getImmediateChildOfAvailabilitySpec( + AvailabilitySpec e, int index, string partialPredicateCall + ) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfCallable(Callable e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nSelfParam, int nParam, int nBody, int nCapture | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + nSelfParam = n + 1 and + nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and + nBody = nParam + 1 and + nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or + index = n and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" + or + result = e.getParam(index - nSelfParam) and + partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" + or + index = nParam and result = e.getBody() and partialPredicateCall = "Body()" + or + result = e.getCapture(index - nBody) and + partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + ) + ) + } + private Element getImmediateChildOfKeyPathComponent( KeyPathComponent e, int index, string partialPredicateCall ) { - exists(int n, int nSubscriptArgument | - n = 0 and + exists(int b, int bAstNode, int n, int nSubscriptArgument | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nSubscriptArgument = n + 1 + max(int i | i = -1 or exists(e.getSubscriptArgument(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getSubscriptArgument(index - n) and partialPredicateCall = "SubscriptArgument(" + (index - n).toString() + ")" ) @@ -71,18 +246,32 @@ private module Impl { } private Element getImmediateChildOfMacroRole(MacroRole e, int index, string partialPredicateCall) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnspecifiedElement( UnspecifiedElement e, int index, string partialPredicateCall ) { - exists(int n, int nChild | - n = 0 and + exists(int b, int bErrorElement, int n, int nChild | + b = 0 and + bErrorElement = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and nChild = n + 1 + max(int i | i = -1 or exists(e.getImmediateChild(i)) | i) and ( none() or + result = getImmediateChildOfErrorElement(e, index - b, partialPredicateCall) + or result = e.getImmediateChild(index - n) and partialPredicateCall = "Child(" + (index - n).toString() + ")" ) @@ -92,41 +281,97 @@ private module Impl { private Element getImmediateChildOfOtherAvailabilitySpec( OtherAvailabilitySpec e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAvailabilitySpec, int n | + b = 0 and + bAvailabilitySpec = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAvailabilitySpec(e, i, _)) | i) and + n = bAvailabilitySpec and + ( + none() + or + result = getImmediateChildOfAvailabilitySpec(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPlatformVersionAvailabilitySpec( PlatformVersionAvailabilitySpec e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAvailabilitySpec, int n | + b = 0 and + bAvailabilitySpec = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAvailabilitySpec(e, i, _)) | i) and + n = bAvailabilitySpec and + ( + none() + or + result = getImmediateChildOfAvailabilitySpec(e, index - b, partialPredicateCall) + ) + ) } - private Element getImmediateChildOfCapturedDecl( - CapturedDecl e, int index, string partialPredicateCall - ) { - exists(int n, int nMember | - n = 0 and + private Element getImmediateChildOfDecl(Decl e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n, int nMember | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getMember(index - n) and partialPredicateCall = "Member(" + (index - n).toString() + ")" ) ) } + private Element getImmediateChildOfGenericContext( + GenericContext e, int index, string partialPredicateCall + ) { + exists(int b, int bElement, int n, int nGenericTypeParam | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) + or + result = e.getGenericTypeParam(index - n) and + partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" + ) + ) + } + + private Element getImmediateChildOfCapturedDecl( + CapturedDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + ( + none() + or + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfEnumCaseDecl( EnumCaseDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) ) ) } @@ -134,18 +379,19 @@ private module Impl { private Element getImmediateChildOfExtensionDecl( ExtensionDecl e, int index, string partialPredicateCall ) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bGenericContext, int bDecl, int n | + b = 0 and + bGenericContext = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and + bDecl = + bGenericContext + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" + result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall) or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfDecl(e, index - bGenericContext, partialPredicateCall) ) ) } @@ -153,27 +399,27 @@ private module Impl { private Element getImmediateChildOfIfConfigDecl( IfConfigDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfImportDecl(ImportDecl e, int index, string partialPredicateCall) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) ) ) } @@ -181,14 +427,29 @@ private module Impl { private Element getImmediateChildOfMissingMemberDecl( MissingMemberDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfOperatorDecl( + OperatorDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + ( + none() + or + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) ) ) } @@ -196,19 +457,19 @@ private module Impl { private Element getImmediateChildOfPatternBindingDecl( PatternBindingDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember, int nInit, int nPattern | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nInit = nMember + 1 + max(int i | i = -1 or exists(e.getImmediateInit(i)) | i) and + exists(int b, int bDecl, int n, int nInit, int nPattern | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + nInit = n + 1 + max(int i | i = -1 or exists(e.getImmediateInit(i)) | i) and nPattern = nInit + 1 + max(int i | i = -1 or exists(e.getImmediatePattern(i)) | i) and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) or - result = e.getImmediateInit(index - nMember) and - partialPredicateCall = "Init(" + (index - nMember).toString() + ")" + result = e.getImmediateInit(index - n) and + partialPredicateCall = "Init(" + (index - n).toString() + ")" or result = e.getImmediatePattern(index - nInit) and partialPredicateCall = "Pattern(" + (index - nInit).toString() + ")" @@ -219,17 +480,17 @@ private module Impl { private Element getImmediateChildOfPoundDiagnosticDecl( PoundDiagnosticDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember, int nMessage | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nMessage = nMember + 1 and + exists(int b, int bDecl, int n, int nMessage | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + nMessage = n + 1 and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) or - index = nMember and result = e.getImmediateMessage() and partialPredicateCall = "Message()" + index = n and result = e.getImmediateMessage() and partialPredicateCall = "Message()" ) ) } @@ -237,14 +498,14 @@ private module Impl { private Element getImmediateChildOfPrecedenceGroupDecl( PrecedenceGroupDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) ) ) } @@ -252,17 +513,49 @@ private module Impl { private Element getImmediateChildOfTopLevelCodeDecl( TopLevelCodeDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember, int nBody | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nBody = nMember + 1 and + exists(int b, int bDecl, int n, int nBody | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + nBody = n + 1 and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) + or + index = n and result = e.getBody() and partialPredicateCall = "Body()" + ) + ) + } + + private Element getImmediateChildOfValueDecl(ValueDecl e, int index, string partialPredicateCall) { + exists(int b, int bDecl, int n | + b = 0 and + bDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDecl(e, i, _)) | i) and + n = bDecl and + ( + none() + or + result = getImmediateChildOfDecl(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAbstractStorageDecl( + AbstractStorageDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bValueDecl, int n, int nAccessor | + b = 0 and + bValueDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and + n = bValueDecl and + nAccessor = n + 1 + max(int i | i = -1 or exists(e.getAccessor(i)) | i) and + ( + none() + or + result = getImmediateChildOfValueDecl(e, index - b, partialPredicateCall) or - index = nMember and result = e.getBody() and partialPredicateCall = "Body()" + result = e.getAccessor(index - n) and + partialPredicateCall = "Accessor(" + (index - n).toString() + ")" ) ) } @@ -270,18 +563,41 @@ private module Impl { private Element getImmediateChildOfEnumElementDecl( EnumElementDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember, int nParam | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nParam = nMember + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and + exists(int b, int bValueDecl, int n, int nParam | + b = 0 and + bValueDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and + n = bValueDecl and + nParam = n + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfValueDecl(e, index - b, partialPredicateCall) + or + result = e.getParam(index - n) and + partialPredicateCall = "Param(" + (index - n).toString() + ")" + ) + ) + } + + private Element getImmediateChildOfFunction(Function e, int index, string partialPredicateCall) { + exists(int b, int bGenericContext, int bValueDecl, int bCallable, int n | + b = 0 and + bGenericContext = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and + bValueDecl = + bGenericContext + 1 + + max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and + bCallable = + bValueDecl + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and + n = bCallable and + ( + none() + or + result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfValueDecl(e, index - bGenericContext, partialPredicateCall) or - result = e.getParam(index - nMember) and - partialPredicateCall = "Param(" + (index - nMember).toString() + ")" + result = getImmediateChildOfCallable(e, index - bValueDecl, partialPredicateCall) ) ) } @@ -289,31 +605,34 @@ private module Impl { private Element getImmediateChildOfInfixOperatorDecl( InfixOperatorDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bOperatorDecl, int n | + b = 0 and + bOperatorDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfOperatorDecl(e, i, _)) | i) and + n = bOperatorDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfOperatorDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfMacroDecl(MacroDecl e, int index, string partialPredicateCall) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bGenericContext, int bValueDecl, int n | + b = 0 and + bGenericContext = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and + bValueDecl = + bGenericContext + 1 + + max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and + n = bValueDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" + result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall) or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfValueDecl(e, index - bGenericContext, partialPredicateCall) ) ) } @@ -321,14 +640,15 @@ private module Impl { private Element getImmediateChildOfPostfixOperatorDecl( PostfixOperatorDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bOperatorDecl, int n | + b = 0 and + bOperatorDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfOperatorDecl(e, i, _)) | i) and + n = bOperatorDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfOperatorDecl(e, index - b, partialPredicateCall) ) ) } @@ -336,202 +656,172 @@ private module Impl { private Element getImmediateChildOfPrefixOperatorDecl( PrefixOperatorDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bOperatorDecl, int n | + b = 0 and + bOperatorDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfOperatorDecl(e, i, _)) | i) and + n = bOperatorDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfOperatorDecl(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfDeinitializer( - Deinitializer e, int index, string partialPredicateCall - ) { - exists( - int n, int nGenericTypeParam, int nMember, int nSelfParam, int nParam, int nBody, int nCapture - | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nSelfParam = nMember + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + private Element getImmediateChildOfTypeDecl(TypeDecl e, int index, string partialPredicateCall) { + exists(int b, int bValueDecl, int n | + b = 0 and + bValueDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and + n = bValueDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" - or - index = nMember and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" - or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" - or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" - or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfValueDecl(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfInitializer( - Initializer e, int index, string partialPredicateCall + private Element getImmediateChildOfAbstractTypeParamDecl( + AbstractTypeParamDecl e, int index, string partialPredicateCall ) { - exists( - int n, int nGenericTypeParam, int nMember, int nSelfParam, int nParam, int nBody, int nCapture - | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nSelfParam = nMember + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + exists(int b, int bTypeDecl, int n | + b = 0 and + bTypeDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeDecl(e, i, _)) | i) and + n = bTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" - or - index = nMember and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" - or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" - or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" - or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfTypeDecl(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfModuleDecl(ModuleDecl e, int index, string partialPredicateCall) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + private Element getImmediateChildOfAccessorOrNamedFunction( + AccessorOrNamedFunction e, int index, string partialPredicateCall + ) { + exists(int b, int bFunction, int n | + b = 0 and + bFunction = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFunction(e, i, _)) | i) and + n = bFunction and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfFunction(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfSubscriptDecl( - SubscriptDecl e, int index, string partialPredicateCall + private Element getImmediateChildOfDeinitializer( + Deinitializer e, int index, string partialPredicateCall ) { - exists(int n, int nMember, int nAccessor, int nGenericTypeParam, int nParam | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nAccessor = nMember + 1 + max(int i | i = -1 or exists(e.getAccessor(i)) | i) and - nGenericTypeParam = - nAccessor + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nParam = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and + exists(int b, int bFunction, int n | + b = 0 and + bFunction = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFunction(e, i, _)) | i) and + n = bFunction and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" - or - result = e.getAccessor(index - nMember) and - partialPredicateCall = "Accessor(" + (index - nMember).toString() + ")" - or - result = e.getGenericTypeParam(index - nAccessor) and - partialPredicateCall = "GenericTypeParam(" + (index - nAccessor).toString() + ")" - or - result = e.getParam(index - nGenericTypeParam) and - partialPredicateCall = "Param(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfFunction(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfAccessor(Accessor e, int index, string partialPredicateCall) { - exists( - int n, int nGenericTypeParam, int nMember, int nSelfParam, int nParam, int nBody, int nCapture - | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nSelfParam = nMember + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + private Element getImmediateChildOfGenericTypeDecl( + GenericTypeDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bGenericContext, int bTypeDecl, int n | + b = 0 and + bGenericContext = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and + bTypeDecl = + bGenericContext + 1 + + max(int i | i = -1 or exists(getImmediateChildOfTypeDecl(e, i, _)) | i) and + n = bTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" - or - index = nMember and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" + result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall) or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" + result = getImmediateChildOfTypeDecl(e, index - bGenericContext, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfInitializer( + Initializer e, int index, string partialPredicateCall + ) { + exists(int b, int bFunction, int n | + b = 0 and + bFunction = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFunction(e, i, _)) | i) and + n = bFunction and + ( + none() or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" + result = getImmediateChildOfFunction(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfModuleDecl(ModuleDecl e, int index, string partialPredicateCall) { + exists(int b, int bTypeDecl, int n | + b = 0 and + bTypeDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfTypeDecl(e, i, _)) | i) and + n = bTypeDecl and + ( + none() or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfTypeDecl(e, index - b, partialPredicateCall) ) ) } - private Element getImmediateChildOfAssociatedTypeDecl( - AssociatedTypeDecl e, int index, string partialPredicateCall + private Element getImmediateChildOfSubscriptDecl( + SubscriptDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bAbstractStorageDecl, int bGenericContext, int n, int nParam | + b = 0 and + bAbstractStorageDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAbstractStorageDecl(e, i, _)) | i) and + bGenericContext = + bAbstractStorageDecl + 1 + + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and + n = bGenericContext and + nParam = n + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfAbstractStorageDecl(e, index - b, partialPredicateCall) + or + result = + getImmediateChildOfGenericContext(e, index - bAbstractStorageDecl, partialPredicateCall) + or + result = e.getParam(index - n) and + partialPredicateCall = "Param(" + (index - n).toString() + ")" ) ) } - private Element getImmediateChildOfConcreteVarDecl( - ConcreteVarDecl e, int index, string partialPredicateCall - ) { + private Element getImmediateChildOfVarDecl(VarDecl e, int index, string partialPredicateCall) { exists( - int n, int nMember, int nAccessor, int nPropertyWrapperBackingVarBinding, + int b, int bAbstractStorageDecl, int n, int nPropertyWrapperBackingVarBinding, int nPropertyWrapperBackingVar, int nPropertyWrapperProjectionVarBinding, int nPropertyWrapperProjectionVar | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nAccessor = nMember + 1 + max(int i | i = -1 or exists(e.getAccessor(i)) | i) and - nPropertyWrapperBackingVarBinding = nAccessor + 1 and + b = 0 and + bAbstractStorageDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAbstractStorageDecl(e, i, _)) | i) and + n = bAbstractStorageDecl and + nPropertyWrapperBackingVarBinding = n + 1 and nPropertyWrapperBackingVar = nPropertyWrapperBackingVarBinding + 1 and nPropertyWrapperProjectionVarBinding = nPropertyWrapperBackingVar + 1 and nPropertyWrapperProjectionVar = nPropertyWrapperProjectionVarBinding + 1 and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" - or - result = e.getAccessor(index - nMember) and - partialPredicateCall = "Accessor(" + (index - nMember).toString() + ")" + result = getImmediateChildOfAbstractStorageDecl(e, index - b, partialPredicateCall) or - index = nAccessor and + index = n and result = e.getPropertyWrapperBackingVarBinding() and partialPredicateCall = "PropertyWrapperBackingVarBinding()" or @@ -550,17 +840,64 @@ private module Impl { ) } + private Element getImmediateChildOfAccessor(Accessor e, int index, string partialPredicateCall) { + exists(int b, int bAccessorOrNamedFunction, int n | + b = 0 and + bAccessorOrNamedFunction = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfAccessorOrNamedFunction(e, i, _)) | i) and + n = bAccessorOrNamedFunction and + ( + none() + or + result = getImmediateChildOfAccessorOrNamedFunction(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAssociatedTypeDecl( + AssociatedTypeDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bAbstractTypeParamDecl, int n | + b = 0 and + bAbstractTypeParamDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAbstractTypeParamDecl(e, i, _)) | i) and + n = bAbstractTypeParamDecl and + ( + none() + or + result = getImmediateChildOfAbstractTypeParamDecl(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfConcreteVarDecl( + ConcreteVarDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bVarDecl, int n | + b = 0 and + bVarDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfVarDecl(e, i, _)) | i) and + n = bVarDecl and + ( + none() + or + result = getImmediateChildOfVarDecl(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfGenericTypeParamDecl( GenericTypeParamDecl e, int index, string partialPredicateCall ) { - exists(int n, int nMember | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bAbstractTypeParamDecl, int n | + b = 0 and + bAbstractTypeParamDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAbstractTypeParamDecl(e, i, _)) | i) and + n = bAbstractTypeParamDecl and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" + result = getImmediateChildOfAbstractTypeParamDecl(e, index - b, partialPredicateCall) ) ) } @@ -568,34 +905,32 @@ private module Impl { private Element getImmediateChildOfNamedFunction( NamedFunction e, int index, string partialPredicateCall ) { - exists( - int n, int nGenericTypeParam, int nMember, int nSelfParam, int nParam, int nBody, int nCapture - | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nSelfParam = nMember + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + exists(int b, int bAccessorOrNamedFunction, int n | + b = 0 and + bAccessorOrNamedFunction = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfAccessorOrNamedFunction(e, i, _)) | i) and + n = bAccessorOrNamedFunction and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" - or - index = nMember and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" - or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" - or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" + result = getImmediateChildOfAccessorOrNamedFunction(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfNominalTypeDecl( + NominalTypeDecl e, int index, string partialPredicateCall + ) { + exists(int b, int bGenericTypeDecl, int n | + b = 0 and + bGenericTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericTypeDecl(e, i, _)) | i) and + n = bGenericTypeDecl and + ( + none() or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfGenericTypeDecl(e, index - b, partialPredicateCall) ) ) } @@ -603,64 +938,35 @@ private module Impl { private Element getImmediateChildOfOpaqueTypeDecl( OpaqueTypeDecl e, int index, string partialPredicateCall ) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bGenericTypeDecl, int n | + b = 0 and + bGenericTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericTypeDecl(e, i, _)) | i) and + n = bGenericTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfGenericTypeDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfParamDecl(ParamDecl e, int index, string partialPredicateCall) { exists( - int n, int nMember, int nAccessor, int nPropertyWrapperBackingVarBinding, - int nPropertyWrapperBackingVar, int nPropertyWrapperProjectionVarBinding, - int nPropertyWrapperProjectionVar, int nPropertyWrapperLocalWrappedVarBinding, + int b, int bVarDecl, int n, int nPropertyWrapperLocalWrappedVarBinding, int nPropertyWrapperLocalWrappedVar | - n = 0 and - nMember = n + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and - nAccessor = nMember + 1 + max(int i | i = -1 or exists(e.getAccessor(i)) | i) and - nPropertyWrapperBackingVarBinding = nAccessor + 1 and - nPropertyWrapperBackingVar = nPropertyWrapperBackingVarBinding + 1 and - nPropertyWrapperProjectionVarBinding = nPropertyWrapperBackingVar + 1 and - nPropertyWrapperProjectionVar = nPropertyWrapperProjectionVarBinding + 1 and - nPropertyWrapperLocalWrappedVarBinding = nPropertyWrapperProjectionVar + 1 and + b = 0 and + bVarDecl = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfVarDecl(e, i, _)) | i) and + n = bVarDecl and + nPropertyWrapperLocalWrappedVarBinding = n + 1 and nPropertyWrapperLocalWrappedVar = nPropertyWrapperLocalWrappedVarBinding + 1 and ( none() or - result = e.getMember(index - n) and - partialPredicateCall = "Member(" + (index - n).toString() + ")" - or - result = e.getAccessor(index - nMember) and - partialPredicateCall = "Accessor(" + (index - nMember).toString() + ")" - or - index = nAccessor and - result = e.getPropertyWrapperBackingVarBinding() and - partialPredicateCall = "PropertyWrapperBackingVarBinding()" - or - index = nPropertyWrapperBackingVarBinding and - result = e.getPropertyWrapperBackingVar() and - partialPredicateCall = "PropertyWrapperBackingVar()" - or - index = nPropertyWrapperBackingVar and - result = e.getPropertyWrapperProjectionVarBinding() and - partialPredicateCall = "PropertyWrapperProjectionVarBinding()" - or - index = nPropertyWrapperProjectionVarBinding and - result = e.getPropertyWrapperProjectionVar() and - partialPredicateCall = "PropertyWrapperProjectionVar()" + result = getImmediateChildOfVarDecl(e, index - b, partialPredicateCall) or - index = nPropertyWrapperProjectionVar and + index = n and result = e.getPropertyWrapperLocalWrappedVarBinding() and partialPredicateCall = "PropertyWrapperLocalWrappedVarBinding()" or @@ -674,52 +980,43 @@ private module Impl { private Element getImmediateChildOfTypeAliasDecl( TypeAliasDecl e, int index, string partialPredicateCall ) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bGenericTypeDecl, int n | + b = 0 and + bGenericTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericTypeDecl(e, i, _)) | i) and + n = bGenericTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfGenericTypeDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfClassDecl(ClassDecl e, int index, string partialPredicateCall) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bNominalTypeDecl, int n | + b = 0 and + bNominalTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalTypeDecl(e, i, _)) | i) and + n = bNominalTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfNominalTypeDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfEnumDecl(EnumDecl e, int index, string partialPredicateCall) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bNominalTypeDecl, int n | + b = 0 and + bNominalTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalTypeDecl(e, i, _)) | i) and + n = bNominalTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfNominalTypeDecl(e, index - b, partialPredicateCall) ) ) } @@ -727,73 +1024,128 @@ private module Impl { private Element getImmediateChildOfProtocolDecl( ProtocolDecl e, int index, string partialPredicateCall ) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bNominalTypeDecl, int n | + b = 0 and + bNominalTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalTypeDecl(e, i, _)) | i) and + n = bNominalTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfNominalTypeDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfStructDecl(StructDecl e, int index, string partialPredicateCall) { - exists(int n, int nGenericTypeParam, int nMember | - n = 0 and - nGenericTypeParam = n + 1 + max(int i | i = -1 or exists(e.getGenericTypeParam(i)) | i) and - nMember = nGenericTypeParam + 1 + max(int i | i = -1 or exists(e.getMember(i)) | i) and + exists(int b, int bNominalTypeDecl, int n | + b = 0 and + bNominalTypeDecl = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalTypeDecl(e, i, _)) | i) and + n = bNominalTypeDecl and ( none() or - result = e.getGenericTypeParam(index - n) and - partialPredicateCall = "GenericTypeParam(" + (index - n).toString() + ")" - or - result = e.getMember(index - nGenericTypeParam) and - partialPredicateCall = "Member(" + (index - nGenericTypeParam).toString() + ")" + result = getImmediateChildOfNominalTypeDecl(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfArgument(Argument e, int index, string partialPredicateCall) { - exists(int n, int nExpr | - n = 0 and + exists(int b, int bLocatable, int n, int nExpr | + b = 0 and + bLocatable = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocatable(e, i, _)) | i) and + n = bLocatable and nExpr = n + 1 and ( none() or + result = getImmediateChildOfLocatable(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateExpr() and partialPredicateCall = "Expr()" ) ) } + private Element getImmediateChildOfExpr(Expr e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAnyTryExpr(AnyTryExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nSubExpr = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + ) + ) + } + private Element getImmediateChildOfAppliedPropertyWrapperExpr( AppliedPropertyWrapperExpr e, int index, string partialPredicateCall ) { - exists(int n, int nValue | - n = 0 and + exists(int b, int bExpr, int n, int nValue | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nValue = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateValue() and partialPredicateCall = "Value()" ) ) } + private Element getImmediateChildOfApplyExpr(ApplyExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int n, int nFunction, int nArgument | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nFunction = n + 1 and + nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" + or + result = e.getArgument(index - nFunction) and + partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + ) + ) + } + private Element getImmediateChildOfAssignExpr(AssignExpr e, int index, string partialPredicateCall) { - exists(int n, int nDest, int nSource | - n = 0 and + exists(int b, int bExpr, int n, int nDest, int nSource | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nDest = n + 1 and nSource = nDest + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateDest() and partialPredicateCall = "Dest()" or index = nDest and result = e.getImmediateSource() and partialPredicateCall = "Source()" @@ -804,12 +1156,16 @@ private module Impl { private Element getImmediateChildOfBindOptionalExpr( BindOptionalExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -818,14 +1174,18 @@ private module Impl { private Element getImmediateChildOfCaptureListExpr( CaptureListExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBindingDecl, int nVariable, int nClosureBody | - n = 0 and + exists(int b, int bExpr, int n, int nBindingDecl, int nVariable, int nClosureBody | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nBindingDecl = n + 1 + max(int i | i = -1 or exists(e.getBindingDecl(i)) | i) and nVariable = nBindingDecl + 1 + max(int i | i = -1 or exists(e.getVariable(i)) | i) and nClosureBody = nVariable + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getBindingDecl(index - n) and partialPredicateCall = "BindingDecl(" + (index - n).toString() + ")" or @@ -839,27 +1199,69 @@ private module Impl { ) } + private Element getImmediateChildOfClosureExpr( + ClosureExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int bCallable, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bCallable = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfCallable(e, i, _)) | i) and + n = bCallable and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfCallable(e, index - bExpr, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfCollectionExpr( + CollectionExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfConsumeExpr( ConsumeExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfCopyExpr(CopyExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -868,37 +1270,77 @@ private module Impl { private Element getImmediateChildOfCurrentContextIsolationExpr( CurrentContextIsolationExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDeclRefExpr( DeclRefExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDefaultArgumentExpr( DefaultArgumentExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDiscardAssignmentExpr( DiscardAssignmentExpr e, int index, string partialPredicateCall ) { - none() - } + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) + } private Element getImmediateChildOfDotSyntaxBaseIgnoredExpr( DotSyntaxBaseIgnoredExpr e, int index, string partialPredicateCall ) { - exists(int n, int nQualifier, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nQualifier, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nQualifier = n + 1 and nSubExpr = nQualifier + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateQualifier() and partialPredicateCall = "Qualifier()" or index = nQualifier and @@ -911,12 +1353,16 @@ private module Impl { private Element getImmediateChildOfDynamicTypeExpr( DynamicTypeExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase | - n = 0 and + exists(int b, int bExpr, int n, int nBase | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nBase = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" ) ) @@ -925,30 +1371,69 @@ private module Impl { private Element getImmediateChildOfEnumIsCaseExpr( EnumIsCaseExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfErrorExpr(ErrorExpr e, int index, string partialPredicateCall) { - none() + exists(int b, int bExpr, int bErrorElement, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfExplicitCastExpr( + ExplicitCastExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nSubExpr = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + ) + ) } private Element getImmediateChildOfExtractFunctionIsolationExpr( ExtractFunctionIsolationExpr e, int index, string partialPredicateCall ) { - exists(int n, int nFunctionExpr | - n = 0 and + exists(int b, int bExpr, int n, int nFunctionExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nFunctionExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateFunctionExpr() and partialPredicateCall = "FunctionExpr()" @@ -959,26 +1444,52 @@ private module Impl { private Element getImmediateChildOfForceValueExpr( ForceValueExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nSubExpr = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + ) + ) + } + + private Element getImmediateChildOfIdentityExpr( + IdentityExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfIfExpr(IfExpr e, int index, string partialPredicateCall) { - exists(int n, int nCondition, int nThenExpr, int nElseExpr | - n = 0 and + exists(int b, int bExpr, int n, int nCondition, int nThenExpr, int nElseExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nCondition = n + 1 and nThenExpr = nCondition + 1 and nElseExpr = nThenExpr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateCondition() and partialPredicateCall = "Condition()" or index = nCondition and @@ -992,13 +1503,35 @@ private module Impl { ) } + private Element getImmediateChildOfImplicitConversionExpr( + ImplicitConversionExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nSubExpr = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + ) + ) + } + private Element getImmediateChildOfInOutExpr(InOutExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1007,13 +1540,17 @@ private module Impl { private Element getImmediateChildOfKeyPathApplicationExpr( KeyPathApplicationExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase, int nKeyPath | - n = 0 and + exists(int b, int bExpr, int n, int nBase, int nKeyPath | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nBase = n + 1 and nKeyPath = nBase + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" or index = nBase and result = e.getImmediateKeyPath() and partialPredicateCall = "KeyPath()" @@ -1024,19 +1561,32 @@ private module Impl { private Element getImmediateChildOfKeyPathDotExpr( KeyPathDotExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfKeyPathExpr( KeyPathExpr e, int index, string partialPredicateCall ) { - exists(int n, int nRoot, int nComponent | - n = 0 and + exists(int b, int bExpr, int n, int nRoot, int nComponent | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nRoot = n + 1 and nComponent = nRoot + 1 + max(int i | i = -1 or exists(e.getComponent(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getRoot() and partialPredicateCall = "Root()" or result = e.getComponent(index - nRoot) and @@ -1048,28 +1598,67 @@ private module Impl { private Element getImmediateChildOfLazyInitializationExpr( LazyInitializationExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } + private Element getImmediateChildOfLiteralExpr( + LiteralExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLookupExpr(LookupExpr e, int index, string partialPredicateCall) { + exists(int b, int bExpr, int n, int nBase | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + nBase = n + 1 and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + ) + ) + } + private Element getImmediateChildOfMakeTemporarilyEscapableExpr( MakeTemporarilyEscapableExpr e, int index, string partialPredicateCall ) { - exists(int n, int nEscapingClosure, int nNonescapingClosure, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nEscapingClosure, int nNonescapingClosure, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nEscapingClosure = n + 1 and nNonescapingClosure = nEscapingClosure + 1 and nSubExpr = nNonescapingClosure + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateEscapingClosure() and partialPredicateCall = "EscapingClosure()" @@ -1088,12 +1677,16 @@ private module Impl { private Element getImmediateChildOfMaterializePackExpr( MaterializePackExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1102,24 +1695,32 @@ private module Impl { private Element getImmediateChildOfObjCSelectorExpr( ObjCSelectorExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfOneWayExpr(OneWayExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1128,19 +1729,32 @@ private module Impl { private Element getImmediateChildOfOpaqueValueExpr( OpaqueValueExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOpenExistentialExpr( OpenExistentialExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr, int nExistential | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr, int nExistential | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and nExistential = nSubExpr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" or index = nSubExpr and @@ -1153,12 +1767,16 @@ private module Impl { private Element getImmediateChildOfOptionalEvaluationExpr( OptionalEvaluationExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1167,24 +1785,50 @@ private module Impl { private Element getImmediateChildOfOtherInitializerRefExpr( OtherInitializerRefExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOverloadedDeclRefExpr( OverloadedDeclRefExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int bErrorElement, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPackElementExpr( PackElementExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1193,12 +1837,16 @@ private module Impl { private Element getImmediateChildOfPackExpansionExpr( PackExpansionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nPatternExpr | - n = 0 and + exists(int b, int bExpr, int n, int nPatternExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nPatternExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediatePatternExpr() and partialPredicateCall = "PatternExpr()" @@ -1209,18 +1857,31 @@ private module Impl { private Element getImmediateChildOfPropertyWrapperValuePlaceholderExpr( PropertyWrapperValuePlaceholderExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfRebindSelfInInitializerExpr( RebindSelfInInitializerExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1229,12 +1890,16 @@ private module Impl { private Element getImmediateChildOfSequenceExpr( SequenceExpr e, int index, string partialPredicateCall ) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bExpr, int n, int nElement | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getImmediateElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -1244,12 +1909,16 @@ private module Impl { private Element getImmediateChildOfSingleValueStmtExpr( SingleValueStmtExpr e, int index, string partialPredicateCall ) { - exists(int n, int nStmt | - n = 0 and + exists(int b, int bExpr, int n, int nStmt | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nStmt = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getStmt() and partialPredicateCall = "Stmt()" ) ) @@ -1258,17 +1927,30 @@ private module Impl { private Element getImmediateChildOfSuperRefExpr( SuperRefExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfTapExpr(TapExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr, int nBody | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr, int nBody | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and nBody = nSubExpr + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" or index = nSubExpr and result = e.getBody() and partialPredicateCall = "Body()" @@ -1279,24 +1961,32 @@ private module Impl { private Element getImmediateChildOfTupleElementExpr( TupleElementExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfTupleExpr(TupleExpr e, int index, string partialPredicateCall) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bExpr, int n, int nElement | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or result = e.getImmediateElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -1304,12 +1994,16 @@ private module Impl { } private Element getImmediateChildOfTypeExpr(TypeExpr e, int index, string partialPredicateCall) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bExpr, int n, int nTypeRepr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) @@ -1318,12 +2012,16 @@ private module Impl { private Element getImmediateChildOfTypeValueExpr( TypeValueExpr e, int index, string partialPredicateCall ) { - exists(int n, int nTypeRepr | - n = 0 and + exists(int b, int bExpr, int n, int nTypeRepr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nTypeRepr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" ) ) @@ -1332,18 +2030,39 @@ private module Impl { private Element getImmediateChildOfUnresolvedDeclRefExpr( UnresolvedDeclRefExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int bErrorElement, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnresolvedDotExpr( UnresolvedDotExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase | - n = 0 and + exists(int b, int bExpr, int bErrorElement, int n, int nBase | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and nBase = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + or index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" ) ) @@ -1352,18 +2071,39 @@ private module Impl { private Element getImmediateChildOfUnresolvedMemberExpr( UnresolvedMemberExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bExpr, int bErrorElement, int n | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnresolvedPatternExpr( UnresolvedPatternExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern | - n = 0 and + exists(int b, int bExpr, int bErrorElement, int n, int nSubPattern | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and nSubPattern = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" ) ) @@ -1372,12 +2112,20 @@ private module Impl { private Element getImmediateChildOfUnresolvedSpecializeExpr( UnresolvedSpecializeExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int bErrorElement, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + bErrorElement = + bExpr + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bExpr, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1386,12 +2134,16 @@ private module Impl { private Element getImmediateChildOfVarargExpansionExpr( VarargExpansionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bExpr, int n, int nSubExpr | + b = 0 and + bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and + n = bExpr and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) @@ -1400,13 +2152,16 @@ private module Impl { private Element getImmediateChildOfAbiSafeConversionExpr( AbiSafeConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1414,13 +2169,16 @@ private module Impl { private Element getImmediateChildOfActorIsolationErasureExpr( ActorIsolationErasureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1428,13 +2186,16 @@ private module Impl { private Element getImmediateChildOfAnyHashableErasureExpr( AnyHashableErasureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1442,24 +2203,32 @@ private module Impl { private Element getImmediateChildOfArchetypeToSuperExpr( ArchetypeToSuperExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfArrayExpr(ArrayExpr e, int index, string partialPredicateCall) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bCollectionExpr, int n, int nElement | + b = 0 and + bCollectionExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCollectionExpr(e, i, _)) | i) and + n = bCollectionExpr and nElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfCollectionExpr(e, index - b, partialPredicateCall) + or result = e.getImmediateElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -1469,13 +2238,16 @@ private module Impl { private Element getImmediateChildOfArrayToPointerExpr( ArrayToPointerExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1483,64 +2255,56 @@ private module Impl { private Element getImmediateChildOfAutoClosureExpr( AutoClosureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSelfParam, int nParam, int nBody, int nCapture | - n = 0 and - nSelfParam = n + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + exists(int b, int bClosureExpr, int n | + b = 0 and + bClosureExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfClosureExpr(e, i, _)) | i) and + n = bClosureExpr and ( none() or - index = n and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" - or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" - or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" - or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfClosureExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfAwaitExpr(AwaitExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bIdentityExpr, int n | + b = 0 and + bIdentityExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and + n = bIdentityExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfBinaryExpr(BinaryExpr e, int index, string partialPredicateCall) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bApplyExpr, int n | + b = 0 and + bApplyExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfApplyExpr(e, i, _)) | i) and + n = bApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" - or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfApplyExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfBorrowExpr(BorrowExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bIdentityExpr, int n | + b = 0 and + bIdentityExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and + n = bIdentityExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall) ) ) } @@ -1548,13 +2312,16 @@ private module Impl { private Element getImmediateChildOfBridgeFromObjCExpr( BridgeFromObjCExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1562,29 +2329,61 @@ private module Impl { private Element getImmediateChildOfBridgeToObjCExpr( BridgeToObjCExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfBuiltinLiteralExpr( + BuiltinLiteralExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bLiteralExpr, int n | + b = 0 and + bLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLiteralExpr(e, i, _)) | i) and + n = bLiteralExpr and + ( + none() + or + result = getImmediateChildOfLiteralExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfCallExpr(CallExpr e, int index, string partialPredicateCall) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bApplyExpr, int n | + b = 0 and + bApplyExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfApplyExpr(e, i, _)) | i) and + n = bApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" + result = getImmediateChildOfApplyExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfCheckedCastExpr( + CheckedCastExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bExplicitCastExpr, int n | + b = 0 and + bExplicitCastExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExplicitCastExpr(e, i, _)) | i) and + n = bExplicitCastExpr and + ( + none() or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfExplicitCastExpr(e, index - b, partialPredicateCall) ) ) } @@ -1592,25 +2391,30 @@ private module Impl { private Element getImmediateChildOfClassMetatypeToObjectExpr( ClassMetatypeToObjectExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfCoerceExpr(CoerceExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bExplicitCastExpr, int n | + b = 0 and + bExplicitCastExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExplicitCastExpr(e, i, _)) | i) and + n = bExplicitCastExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfExplicitCastExpr(e, index - b, partialPredicateCall) ) ) } @@ -1618,13 +2422,16 @@ private module Impl { private Element getImmediateChildOfCollectionUpcastConversionExpr( CollectionUpcastConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1632,13 +2439,16 @@ private module Impl { private Element getImmediateChildOfConditionalBridgeFromObjCExpr( ConditionalBridgeFromObjCExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1646,13 +2456,16 @@ private module Impl { private Element getImmediateChildOfCovariantFunctionConversionExpr( CovariantFunctionConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1660,13 +2473,16 @@ private module Impl { private Element getImmediateChildOfCovariantReturnConversionExpr( CovariantReturnConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1674,13 +2490,16 @@ private module Impl { private Element getImmediateChildOfDerivedToBaseExpr( DerivedToBaseExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1688,13 +2507,16 @@ private module Impl { private Element getImmediateChildOfDestructureTupleExpr( DestructureTupleExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1702,12 +2524,17 @@ private module Impl { private Element getImmediateChildOfDictionaryExpr( DictionaryExpr e, int index, string partialPredicateCall ) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bCollectionExpr, int n, int nElement | + b = 0 and + bCollectionExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCollectionExpr(e, i, _)) | i) and + n = bCollectionExpr and nElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfCollectionExpr(e, index - b, partialPredicateCall) + or result = e.getImmediateElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -1717,13 +2544,16 @@ private module Impl { private Element getImmediateChildOfDifferentiableFunctionExpr( DifferentiableFunctionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1731,13 +2561,16 @@ private module Impl { private Element getImmediateChildOfDifferentiableFunctionExtractOriginalExpr( DifferentiableFunctionExtractOriginalExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1745,13 +2578,31 @@ private module Impl { private Element getImmediateChildOfDotSelfExpr( DotSelfExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bIdentityExpr, int n | + b = 0 and + bIdentityExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and + n = bIdentityExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfDynamicLookupExpr( + DynamicLookupExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bLookupExpr, int n | + b = 0 and + bLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLookupExpr(e, i, _)) | i) and + n = bLookupExpr and + ( + none() + or + result = getImmediateChildOfLookupExpr(e, index - b, partialPredicateCall) ) ) } @@ -1759,13 +2610,16 @@ private module Impl { private Element getImmediateChildOfErasureExpr( ErasureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1773,13 +2627,16 @@ private module Impl { private Element getImmediateChildOfExistentialMetatypeToObjectExpr( ExistentialMetatypeToObjectExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1787,24 +2644,15 @@ private module Impl { private Element getImmediateChildOfExplicitClosureExpr( ExplicitClosureExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSelfParam, int nParam, int nBody, int nCapture | - n = 0 and - nSelfParam = n + 1 and - nParam = nSelfParam + 1 + max(int i | i = -1 or exists(e.getParam(i)) | i) and - nBody = nParam + 1 and - nCapture = nBody + 1 + max(int i | i = -1 or exists(e.getCapture(i)) | i) and + exists(int b, int bClosureExpr, int n | + b = 0 and + bClosureExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfClosureExpr(e, i, _)) | i) and + n = bClosureExpr and ( none() or - index = n and result = e.getSelfParam() and partialPredicateCall = "SelfParam()" - or - result = e.getParam(index - nSelfParam) and - partialPredicateCall = "Param(" + (index - nSelfParam).toString() + ")" - or - index = nParam and result = e.getBody() and partialPredicateCall = "Body()" - or - result = e.getCapture(index - nBody) and - partialPredicateCall = "Capture(" + (index - nBody).toString() + ")" + result = getImmediateChildOfClosureExpr(e, index - b, partialPredicateCall) ) ) } @@ -1812,13 +2660,15 @@ private module Impl { private Element getImmediateChildOfForceTryExpr( ForceTryExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bAnyTryExpr, int n | + b = 0 and + bAnyTryExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyTryExpr(e, i, _)) | i) and + n = bAnyTryExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfAnyTryExpr(e, index - b, partialPredicateCall) ) ) } @@ -1826,13 +2676,16 @@ private module Impl { private Element getImmediateChildOfForeignObjectConversionExpr( ForeignObjectConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1840,13 +2693,16 @@ private module Impl { private Element getImmediateChildOfFunctionConversionExpr( FunctionConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1854,13 +2710,16 @@ private module Impl { private Element getImmediateChildOfInOutToPointerExpr( InOutToPointerExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1868,13 +2727,16 @@ private module Impl { private Element getImmediateChildOfInjectIntoOptionalExpr( InjectIntoOptionalExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1882,12 +2744,17 @@ private module Impl { private Element getImmediateChildOfInterpolatedStringLiteralExpr( InterpolatedStringLiteralExpr e, int index, string partialPredicateCall ) { - exists(int n, int nAppendingExpr | - n = 0 and + exists(int b, int bLiteralExpr, int n, int nAppendingExpr | + b = 0 and + bLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLiteralExpr(e, i, _)) | i) and + n = bLiteralExpr and nAppendingExpr = n + 1 and ( none() or + result = getImmediateChildOfLiteralExpr(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateAppendingExpr() and partialPredicateCall = "AppendingExpr()" @@ -1898,13 +2765,16 @@ private module Impl { private Element getImmediateChildOfLinearFunctionExpr( LinearFunctionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1912,13 +2782,16 @@ private module Impl { private Element getImmediateChildOfLinearFunctionExtractOriginalExpr( LinearFunctionExtractOriginalExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1926,25 +2799,31 @@ private module Impl { private Element getImmediateChildOfLinearToDifferentiableFunctionExpr( LinearToDifferentiableFunctionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfLoadExpr(LoadExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1952,13 +2831,15 @@ private module Impl { private Element getImmediateChildOfMemberRefExpr( MemberRefExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase | - n = 0 and - nBase = n + 1 and + exists(int b, int bLookupExpr, int n | + b = 0 and + bLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLookupExpr(e, i, _)) | i) and + n = bLookupExpr and ( none() or - index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + result = getImmediateChildOfLookupExpr(e, index - b, partialPredicateCall) ) ) } @@ -1966,13 +2847,16 @@ private module Impl { private Element getImmediateChildOfMetatypeConversionExpr( MetatypeConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -1980,18 +2864,18 @@ private module Impl { private Element getImmediateChildOfMethodLookupExpr( MethodLookupExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase, int nMethodRef | - n = 0 and - nBase = n + 1 and - nMethodRef = nBase + 1 and + exists(int b, int bLookupExpr, int n, int nMethodRef | + b = 0 and + bLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLookupExpr(e, i, _)) | i) and + n = bLookupExpr and + nMethodRef = n + 1 and ( none() or - index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + result = getImmediateChildOfLookupExpr(e, index - b, partialPredicateCall) or - index = nBase and - result = e.getImmediateMethodRef() and - partialPredicateCall = "MethodRef()" + index = n and result = e.getImmediateMethodRef() and partialPredicateCall = "MethodRef()" ) ) } @@ -1999,18 +2883,33 @@ private module Impl { private Element getImmediateChildOfNilLiteralExpr( NilLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLiteralExpr, int n | + b = 0 and + bLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLiteralExpr(e, i, _)) | i) and + n = bLiteralExpr and + ( + none() + or + result = getImmediateChildOfLiteralExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfObjectLiteralExpr( ObjectLiteralExpr e, int index, string partialPredicateCall ) { - exists(int n, int nArgument | - n = 0 and + exists(int b, int bLiteralExpr, int n, int nArgument | + b = 0 and + bLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLiteralExpr(e, i, _)) | i) and + n = bLiteralExpr and nArgument = n + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and ( none() or + result = getImmediateChildOfLiteralExpr(e, index - b, partialPredicateCall) + or result = e.getArgument(index - n) and partialPredicateCall = "Argument(" + (index - n).toString() + ")" ) @@ -2020,25 +2919,29 @@ private module Impl { private Element getImmediateChildOfOptionalTryExpr( OptionalTryExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bAnyTryExpr, int n | + b = 0 and + bAnyTryExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyTryExpr(e, i, _)) | i) and + n = bAnyTryExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfAnyTryExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfParenExpr(ParenExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bIdentityExpr, int n | + b = 0 and + bIdentityExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and + n = bIdentityExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall) ) ) } @@ -2046,13 +2949,16 @@ private module Impl { private Element getImmediateChildOfPointerToPointerExpr( PointerToPointerExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2060,17 +2966,14 @@ private module Impl { private Element getImmediateChildOfPostfixUnaryExpr( PostfixUnaryExpr e, int index, string partialPredicateCall ) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bApplyExpr, int n | + b = 0 and + bApplyExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfApplyExpr(e, i, _)) | i) and + n = bApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" - or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfApplyExpr(e, index - b, partialPredicateCall) ) ) } @@ -2078,17 +2981,14 @@ private module Impl { private Element getImmediateChildOfPrefixUnaryExpr( PrefixUnaryExpr e, int index, string partialPredicateCall ) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bApplyExpr, int n | + b = 0 and + bApplyExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfApplyExpr(e, i, _)) | i) and + n = bApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" - or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfApplyExpr(e, index - b, partialPredicateCall) ) ) } @@ -2096,13 +2996,16 @@ private module Impl { private Element getImmediateChildOfProtocolMetatypeToObjectExpr( ProtocolMetatypeToObjectExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2110,19 +3013,47 @@ private module Impl { private Element getImmediateChildOfRegexLiteralExpr( RegexLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLiteralExpr, int n | + b = 0 and + bLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLiteralExpr(e, i, _)) | i) and + n = bLiteralExpr and + ( + none() + or + result = getImmediateChildOfLiteralExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfSelfApplyExpr( + SelfApplyExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bApplyExpr, int n | + b = 0 and + bApplyExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfApplyExpr(e, i, _)) | i) and + n = bApplyExpr and + ( + none() + or + result = getImmediateChildOfApplyExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfStringToPointerExpr( StringToPointerExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2130,29 +3061,33 @@ private module Impl { private Element getImmediateChildOfSubscriptExpr( SubscriptExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase, int nArgument | - n = 0 and - nBase = n + 1 and - nArgument = nBase + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bLookupExpr, int n, int nArgument | + b = 0 and + bLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLookupExpr(e, i, _)) | i) and + n = bLookupExpr and + nArgument = n + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and ( none() or - index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + result = getImmediateChildOfLookupExpr(e, index - b, partialPredicateCall) or - result = e.getArgument(index - nBase) and - partialPredicateCall = "Argument(" + (index - nBase).toString() + ")" + result = e.getArgument(index - n) and + partialPredicateCall = "Argument(" + (index - n).toString() + ")" ) ) } private Element getImmediateChildOfTryExpr(TryExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bAnyTryExpr, int n | + b = 0 and + bAnyTryExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyTryExpr(e, i, _)) | i) and + n = bAnyTryExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfAnyTryExpr(e, index - b, partialPredicateCall) ) ) } @@ -2160,13 +3095,16 @@ private module Impl { private Element getImmediateChildOfUnderlyingToOpaqueExpr( UnderlyingToOpaqueExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2174,13 +3112,16 @@ private module Impl { private Element getImmediateChildOfUnevaluatedInstanceExpr( UnevaluatedInstanceExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2188,13 +3129,16 @@ private module Impl { private Element getImmediateChildOfUnreachableExpr( UnreachableExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2202,13 +3146,20 @@ private module Impl { private Element getImmediateChildOfUnresolvedMemberChainResultExpr( UnresolvedMemberChainResultExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bIdentityExpr, int bErrorElement, int n | + b = 0 and + bIdentityExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfIdentityExpr(e, i, _)) | i) and + bErrorElement = + bIdentityExpr + 1 + + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfIdentityExpr(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bIdentityExpr, partialPredicateCall) ) ) } @@ -2216,13 +3167,22 @@ private module Impl { private Element getImmediateChildOfUnresolvedTypeConversionExpr( UnresolvedTypeConversionExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int bErrorElement, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + bErrorElement = + bImplicitConversionExpr + 1 + + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) + or + result = + getImmediateChildOfErrorElement(e, index - bImplicitConversionExpr, partialPredicateCall) ) ) } @@ -2230,13 +3190,16 @@ private module Impl { private Element getImmediateChildOfUnsafeCastExpr( UnsafeCastExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bImplicitConversionExpr, int n | + b = 0 and + bImplicitConversionExpr = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfImplicitConversionExpr(e, i, _)) | i) and + n = bImplicitConversionExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfImplicitConversionExpr(e, index - b, partialPredicateCall) ) ) } @@ -2244,19 +3207,31 @@ private module Impl { private Element getImmediateChildOfBooleanLiteralExpr( BooleanLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinLiteralExpr, int n | + b = 0 and + bBuiltinLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinLiteralExpr(e, i, _)) | i) and + n = bBuiltinLiteralExpr and + ( + none() + or + result = getImmediateChildOfBuiltinLiteralExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfConditionalCheckedCastExpr( ConditionalCheckedCastExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bCheckedCastExpr, int n | + b = 0 and + bCheckedCastExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCheckedCastExpr(e, i, _)) | i) and + n = bCheckedCastExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfCheckedCastExpr(e, index - b, partialPredicateCall) ) ) } @@ -2264,17 +3239,15 @@ private module Impl { private Element getImmediateChildOfDotSyntaxCallExpr( DotSyntaxCallExpr e, int index, string partialPredicateCall ) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bSelfApplyExpr, int n | + b = 0 and + bSelfApplyExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSelfApplyExpr(e, i, _)) | i) and + n = bSelfApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" - or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfSelfApplyExpr(e, index - b, partialPredicateCall) ) ) } @@ -2282,13 +3255,15 @@ private module Impl { private Element getImmediateChildOfDynamicMemberRefExpr( DynamicMemberRefExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase | - n = 0 and - nBase = n + 1 and + exists(int b, int bDynamicLookupExpr, int n | + b = 0 and + bDynamicLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDynamicLookupExpr(e, i, _)) | i) and + n = bDynamicLookupExpr and ( none() or - index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + result = getImmediateChildOfDynamicLookupExpr(e, index - b, partialPredicateCall) ) ) } @@ -2296,13 +3271,15 @@ private module Impl { private Element getImmediateChildOfDynamicSubscriptExpr( DynamicSubscriptExpr e, int index, string partialPredicateCall ) { - exists(int n, int nBase | - n = 0 and - nBase = n + 1 and + exists(int b, int bDynamicLookupExpr, int n | + b = 0 and + bDynamicLookupExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfDynamicLookupExpr(e, i, _)) | i) and + n = bDynamicLookupExpr and ( none() or - index = n and result = e.getImmediateBase() and partialPredicateCall = "Base()" + result = getImmediateChildOfDynamicLookupExpr(e, index - b, partialPredicateCall) ) ) } @@ -2310,13 +3287,15 @@ private module Impl { private Element getImmediateChildOfForcedCheckedCastExpr( ForcedCheckedCastExpr e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bCheckedCastExpr, int n | + b = 0 and + bCheckedCastExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCheckedCastExpr(e, i, _)) | i) and + n = bCheckedCastExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfCheckedCastExpr(e, index - b, partialPredicateCall) ) ) } @@ -2324,29 +3303,29 @@ private module Impl { private Element getImmediateChildOfInitializerRefCallExpr( InitializerRefCallExpr e, int index, string partialPredicateCall ) { - exists(int n, int nFunction, int nArgument | - n = 0 and - nFunction = n + 1 and - nArgument = nFunction + 1 + max(int i | i = -1 or exists(e.getArgument(i)) | i) and + exists(int b, int bSelfApplyExpr, int n | + b = 0 and + bSelfApplyExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSelfApplyExpr(e, i, _)) | i) and + n = bSelfApplyExpr and ( none() or - index = n and result = e.getImmediateFunction() and partialPredicateCall = "Function()" - or - result = e.getArgument(index - nFunction) and - partialPredicateCall = "Argument(" + (index - nFunction).toString() + ")" + result = getImmediateChildOfSelfApplyExpr(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfIsExpr(IsExpr e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and - nSubExpr = n + 1 and + exists(int b, int bCheckedCastExpr, int n | + b = 0 and + bCheckedCastExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfCheckedCastExpr(e, i, _)) | i) and + n = bCheckedCastExpr and ( none() or - index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" + result = getImmediateChildOfCheckedCastExpr(e, index - b, partialPredicateCall) ) ) } @@ -2354,40 +3333,122 @@ private module Impl { private Element getImmediateChildOfMagicIdentifierLiteralExpr( MagicIdentifierLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinLiteralExpr, int n | + b = 0 and + bBuiltinLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinLiteralExpr(e, i, _)) | i) and + n = bBuiltinLiteralExpr and + ( + none() + or + result = getImmediateChildOfBuiltinLiteralExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfNumberLiteralExpr( + NumberLiteralExpr e, int index, string partialPredicateCall + ) { + exists(int b, int bBuiltinLiteralExpr, int n | + b = 0 and + bBuiltinLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinLiteralExpr(e, i, _)) | i) and + n = bBuiltinLiteralExpr and + ( + none() + or + result = getImmediateChildOfBuiltinLiteralExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfStringLiteralExpr( StringLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinLiteralExpr, int n | + b = 0 and + bBuiltinLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinLiteralExpr(e, i, _)) | i) and + n = bBuiltinLiteralExpr and + ( + none() + or + result = getImmediateChildOfBuiltinLiteralExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfFloatLiteralExpr( FloatLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bNumberLiteralExpr, int n | + b = 0 and + bNumberLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNumberLiteralExpr(e, i, _)) | i) and + n = bNumberLiteralExpr and + ( + none() + or + result = getImmediateChildOfNumberLiteralExpr(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfIntegerLiteralExpr( IntegerLiteralExpr e, int index, string partialPredicateCall ) { - none() + exists(int b, int bNumberLiteralExpr, int n | + b = 0 and + bNumberLiteralExpr = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNumberLiteralExpr(e, i, _)) | i) and + n = bNumberLiteralExpr and + ( + none() + or + result = getImmediateChildOfNumberLiteralExpr(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfPattern(Pattern e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfAnyPattern(AnyPattern e, int index, string partialPredicateCall) { - none() + exists(int b, int bPattern, int n | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and + ( + none() + or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBindingPattern( BindingPattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern | - n = 0 and + exists(int b, int bPattern, int n, int nSubPattern | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubPattern = n + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" ) ) @@ -2396,18 +3457,31 @@ private module Impl { private Element getImmediateChildOfBoolPattern( BoolPattern e, int index, string partialPredicateCall ) { - none() + exists(int b, int bPattern, int n | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and + ( + none() + or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfEnumElementPattern( EnumElementPattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern | - n = 0 and + exists(int b, int bPattern, int n, int nSubPattern | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubPattern = n + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" ) ) @@ -2416,25 +3490,33 @@ private module Impl { private Element getImmediateChildOfExprPattern( ExprPattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bPattern, int n, int nSubExpr | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfIsPattern(IsPattern e, int index, string partialPredicateCall) { - exists(int n, int nCastTypeRepr, int nSubPattern | - n = 0 and + exists(int b, int bPattern, int n, int nCastTypeRepr, int nSubPattern | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nCastTypeRepr = n + 1 and nSubPattern = nCastTypeRepr + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getCastTypeRepr() and partialPredicateCall = "CastTypeRepr()" or index = nCastTypeRepr and @@ -2447,18 +3529,31 @@ private module Impl { private Element getImmediateChildOfNamedPattern( NamedPattern e, int index, string partialPredicateCall ) { - none() + exists(int b, int bPattern, int n | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and + ( + none() + or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOptionalSomePattern( OptionalSomePattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern | - n = 0 and + exists(int b, int bPattern, int n, int nSubPattern | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubPattern = n + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" ) ) @@ -2467,12 +3562,16 @@ private module Impl { private Element getImmediateChildOfParenPattern( ParenPattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern | - n = 0 and + exists(int b, int bPattern, int n, int nSubPattern | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubPattern = n + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" ) ) @@ -2481,12 +3580,16 @@ private module Impl { private Element getImmediateChildOfTuplePattern( TuplePattern e, int index, string partialPredicateCall ) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bPattern, int n, int nElement | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nElement = n + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or result = e.getImmediateElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -2496,13 +3599,17 @@ private module Impl { private Element getImmediateChildOfTypedPattern( TypedPattern e, int index, string partialPredicateCall ) { - exists(int n, int nSubPattern, int nTypeRepr | - n = 0 and + exists(int b, int bPattern, int n, int nSubPattern, int nTypeRepr | + b = 0 and + bPattern = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfPattern(e, i, _)) | i) and + n = bPattern and nSubPattern = n + 1 and nTypeRepr = nSubPattern + 1 and ( none() or + result = getImmediateChildOfPattern(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubPattern() and partialPredicateCall = "SubPattern()" or index = nSubPattern and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" @@ -2513,13 +3620,17 @@ private module Impl { private Element getImmediateChildOfCaseLabelItem( CaseLabelItem e, int index, string partialPredicateCall ) { - exists(int n, int nPattern, int nGuard | - n = 0 and + exists(int b, int bAstNode, int n, int nPattern, int nGuard | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nPattern = n + 1 and nGuard = nPattern + 1 and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediatePattern() and partialPredicateCall = "Pattern()" or index = nPattern and result = e.getImmediateGuard() and partialPredicateCall = "Guard()" @@ -2530,8 +3641,12 @@ private module Impl { private Element getImmediateChildOfConditionElement( ConditionElement e, int index, string partialPredicateCall ) { - exists(int n, int nBoolean, int nPattern, int nInitializer, int nAvailability | - n = 0 and + exists( + int b, int bAstNode, int n, int nBoolean, int nPattern, int nInitializer, int nAvailability + | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nBoolean = n + 1 and nPattern = nBoolean + 1 and nInitializer = nPattern + 1 and @@ -2539,6 +3654,8 @@ private module Impl { ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateBoolean() and partialPredicateCall = "Boolean()" or index = nBoolean and result = e.getImmediatePattern() and partialPredicateCall = "Pattern()" @@ -2554,15 +3671,32 @@ private module Impl { ) } + private Element getImmediateChildOfStmt(Stmt e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfStmtCondition( StmtCondition e, int index, string partialPredicateCall ) { - exists(int n, int nElement | - n = 0 and + exists(int b, int bAstNode, int n, int nElement | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and nElement = n + 1 + max(int i | i = -1 or exists(e.getElement(i)) | i) and ( none() or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + or result = e.getElement(index - n) and partialPredicateCall = "Element(" + (index - n).toString() + ")" ) @@ -2570,13 +3704,17 @@ private module Impl { } private Element getImmediateChildOfBraceStmt(BraceStmt e, int index, string partialPredicateCall) { - exists(int n, int nVariable, int nElement | - n = 0 and + exists(int b, int bStmt, int n, int nVariable, int nElement | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nVariable = n + 1 + max(int i | i = -1 or exists(e.getVariable(i)) | i) and nElement = nVariable + 1 + max(int i | i = -1 or exists(e.getImmediateElement(i)) | i) and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or result = e.getVariable(index - n) and partialPredicateCall = "Variable(" + (index - n).toString() + ")" or @@ -2587,18 +3725,31 @@ private module Impl { } private Element getImmediateChildOfBreakStmt(BreakStmt e, int index, string partialPredicateCall) { - none() + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfCaseStmt(CaseStmt e, int index, string partialPredicateCall) { - exists(int n, int nLabel, int nVariable, int nBody | - n = 0 and + exists(int b, int bStmt, int n, int nLabel, int nVariable, int nBody | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nLabel = n + 1 + max(int i | i = -1 or exists(e.getLabel(i)) | i) and nVariable = nLabel + 1 + max(int i | i = -1 or exists(e.getVariable(i)) | i) and nBody = nVariable + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or result = e.getLabel(index - n) and partialPredicateCall = "Label(" + (index - n).toString() + ")" or @@ -2613,16 +3764,29 @@ private module Impl { private Element getImmediateChildOfContinueStmt( ContinueStmt e, int index, string partialPredicateCall ) { - none() + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDeferStmt(DeferStmt e, int index, string partialPredicateCall) { - exists(int n, int nBody | - n = 0 and + exists(int b, int bStmt, int n, int nBody | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nBody = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getBody() and partialPredicateCall = "Body()" ) ) @@ -2631,76 +3795,138 @@ private module Impl { private Element getImmediateChildOfDiscardStmt( DiscardStmt e, int index, string partialPredicateCall ) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bStmt, int n, int nSubExpr | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfFailStmt(FailStmt e, int index, string partialPredicateCall) { - none() + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfFallthroughStmt( FallthroughStmt e, int index, string partialPredicateCall ) { - none() + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLabeledStmt( + LabeledStmt e, int index, string partialPredicateCall + ) { + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPoundAssertStmt( PoundAssertStmt e, int index, string partialPredicateCall ) { - none() + exists(int b, int bStmt, int n | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and + ( + none() + or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfReturnStmt(ReturnStmt e, int index, string partialPredicateCall) { - exists(int n, int nResult | - n = 0 and + exists(int b, int bStmt, int n, int nResult | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nResult = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateResult() and partialPredicateCall = "Result()" ) ) } private Element getImmediateChildOfThenStmt(ThenStmt e, int index, string partialPredicateCall) { - exists(int n, int nResult | - n = 0 and + exists(int b, int bStmt, int n, int nResult | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nResult = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateResult() and partialPredicateCall = "Result()" ) ) } private Element getImmediateChildOfThrowStmt(ThrowStmt e, int index, string partialPredicateCall) { - exists(int n, int nSubExpr | - n = 0 and + exists(int b, int bStmt, int n, int nSubExpr | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nSubExpr = n + 1 and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateSubExpr() and partialPredicateCall = "SubExpr()" ) ) } private Element getImmediateChildOfYieldStmt(YieldStmt e, int index, string partialPredicateCall) { - exists(int n, int nResult | - n = 0 and + exists(int b, int bStmt, int n, int nResult | + b = 0 and + bStmt = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfStmt(e, i, _)) | i) and + n = bStmt and nResult = n + 1 + max(int i | i = -1 or exists(e.getImmediateResult(i)) | i) and ( none() or + result = getImmediateChildOfStmt(e, index - b, partialPredicateCall) + or result = e.getImmediateResult(index - n) and partialPredicateCall = "Result(" + (index - n).toString() + ")" ) @@ -2710,13 +3936,18 @@ private module Impl { private Element getImmediateChildOfDoCatchStmt( DoCatchStmt e, int index, string partialPredicateCall ) { - exists(int n, int nBody, int nCatch | - n = 0 and + exists(int b, int bLabeledStmt, int n, int nBody, int nCatch | + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and nBody = n + 1 and nCatch = nBody + 1 + max(int i | i = -1 or exists(e.getCatch(i)) | i) and ( none() or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getBody() and partialPredicateCall = "Body()" or result = e.getCatch(index - nBody) and @@ -2726,12 +3957,17 @@ private module Impl { } private Element getImmediateChildOfDoStmt(DoStmt e, int index, string partialPredicateCall) { - exists(int n, int nBody | - n = 0 and + exists(int b, int bLabeledStmt, int n, int nBody | + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and nBody = n + 1 and ( none() or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getBody() and partialPredicateCall = "Body()" ) ) @@ -2741,9 +3977,13 @@ private module Impl { ForEachStmt e, int index, string partialPredicateCall ) { exists( - int n, int nVariable, int nPattern, int nWhere, int nIteratorVar, int nNextCall, int nBody + int b, int bLabeledStmt, int n, int nVariable, int nPattern, int nWhere, int nIteratorVar, + int nNextCall, int nBody | - n = 0 and + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and nVariable = n + 1 + max(int i | i = -1 or exists(e.getVariable(i)) | i) and nPattern = nVariable + 1 and nWhere = nPattern + 1 and @@ -2753,6 +3993,8 @@ private module Impl { ( none() or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or result = e.getVariable(index - n) and partialPredicateCall = "Variable(" + (index - n).toString() + ")" or @@ -2773,16 +4015,40 @@ private module Impl { ) } + private Element getImmediateChildOfLabeledConditionalStmt( + LabeledConditionalStmt e, int index, string partialPredicateCall + ) { + exists(int b, int bLabeledStmt, int n, int nCondition | + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and + nCondition = n + 1 and + ( + none() + or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or + index = n and result = e.getCondition() and partialPredicateCall = "Condition()" + ) + ) + } + private Element getImmediateChildOfRepeatWhileStmt( RepeatWhileStmt e, int index, string partialPredicateCall ) { - exists(int n, int nCondition, int nBody | - n = 0 and + exists(int b, int bLabeledStmt, int n, int nCondition, int nBody | + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and nCondition = n + 1 and nBody = nCondition + 1 and ( none() or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateCondition() and partialPredicateCall = "Condition()" or index = nCondition and result = e.getBody() and partialPredicateCall = "Body()" @@ -2791,13 +4057,18 @@ private module Impl { } private Element getImmediateChildOfSwitchStmt(SwitchStmt e, int index, string partialPredicateCall) { - exists(int n, int nExpr, int nCase | - n = 0 and + exists(int b, int bLabeledStmt, int n, int nExpr, int nCase | + b = 0 and + bLabeledStmt = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLabeledStmt(e, i, _)) | i) and + n = bLabeledStmt and nExpr = n + 1 and nCase = nExpr + 1 + max(int i | i = -1 or exists(e.getCase(i)) | i) and ( none() or + result = getImmediateChildOfLabeledStmt(e, index - b, partialPredicateCall) + or index = n and result = e.getImmediateExpr() and partialPredicateCall = "Expr()" or result = e.getCase(index - nExpr) and @@ -2807,32 +4078,38 @@ private module Impl { } private Element getImmediateChildOfGuardStmt(GuardStmt e, int index, string partialPredicateCall) { - exists(int n, int nCondition, int nBody | - n = 0 and - nCondition = n + 1 and - nBody = nCondition + 1 and + exists(int b, int bLabeledConditionalStmt, int n, int nBody | + b = 0 and + bLabeledConditionalStmt = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfLabeledConditionalStmt(e, i, _)) | i) and + n = bLabeledConditionalStmt and + nBody = n + 1 and ( none() or - index = n and result = e.getCondition() and partialPredicateCall = "Condition()" + result = getImmediateChildOfLabeledConditionalStmt(e, index - b, partialPredicateCall) or - index = nCondition and result = e.getBody() and partialPredicateCall = "Body()" + index = n and result = e.getBody() and partialPredicateCall = "Body()" ) ) } private Element getImmediateChildOfIfStmt(IfStmt e, int index, string partialPredicateCall) { - exists(int n, int nCondition, int nThen, int nElse | - n = 0 and - nCondition = n + 1 and - nThen = nCondition + 1 and + exists(int b, int bLabeledConditionalStmt, int n, int nThen, int nElse | + b = 0 and + bLabeledConditionalStmt = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfLabeledConditionalStmt(e, i, _)) | i) and + n = bLabeledConditionalStmt and + nThen = n + 1 and nElse = nThen + 1 and ( none() or - index = n and result = e.getCondition() and partialPredicateCall = "Condition()" + result = getImmediateChildOfLabeledConditionalStmt(e, index - b, partialPredicateCall) or - index = nCondition and result = e.getThen() and partialPredicateCall = "Then()" + index = n and result = e.getThen() and partialPredicateCall = "Then()" or index = nThen and result = e.getElse() and partialPredicateCall = "Else()" ) @@ -2840,332 +4117,1140 @@ private module Impl { } private Element getImmediateChildOfWhileStmt(WhileStmt e, int index, string partialPredicateCall) { - exists(int n, int nCondition, int nBody | - n = 0 and - nCondition = n + 1 and - nBody = nCondition + 1 and + exists(int b, int bLabeledConditionalStmt, int n, int nBody | + b = 0 and + bLabeledConditionalStmt = + b + 1 + + max(int i | i = -1 or exists(getImmediateChildOfLabeledConditionalStmt(e, i, _)) | i) and + n = bLabeledConditionalStmt and + nBody = n + 1 and ( none() or - index = n and result = e.getCondition() and partialPredicateCall = "Condition()" + result = getImmediateChildOfLabeledConditionalStmt(e, index - b, partialPredicateCall) or - index = nCondition and result = e.getBody() and partialPredicateCall = "Body()" + index = n and result = e.getBody() and partialPredicateCall = "Body()" + ) + ) + } + + private Element getImmediateChildOfType(Type e, int index, string partialPredicateCall) { + exists(int b, int bElement, int n | + b = 0 and + bElement = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfElement(e, i, _)) | i) and + n = bElement and + ( + none() + or + result = getImmediateChildOfElement(e, index - b, partialPredicateCall) ) ) } private Element getImmediateChildOfTypeRepr(TypeRepr e, int index, string partialPredicateCall) { - none() + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAnyFunctionType( + AnyFunctionType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAnyGenericType( + AnyGenericType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAnyMetatypeType( + AnyMetatypeType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfBuiltinType( + BuiltinType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDependentMemberType( DependentMemberType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDynamicSelfType( DynamicSelfType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfErrorType(ErrorType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int bErrorElement, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + bErrorElement = + bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bType, partialPredicateCall) + ) + ) } private Element getImmediateChildOfExistentialType( ExistentialType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfInOutType(InOutType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfIntegerType( IntegerType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfLValueType(LValueType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfModuleType(ModuleType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPackElementType( PackElementType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPackExpansionType( PackExpansionType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPackType(PackType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfParameterizedProtocolType( ParameterizedProtocolType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfProtocolCompositionType( ProtocolCompositionType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfReferenceStorageType( + ReferenceStorageType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfSubstitutableType( + SubstitutableType e, int index, string partialPredicateCall + ) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfSugarType(SugarType e, int index, string partialPredicateCall) { + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfTupleType(TupleType e, int index, string partialPredicateCall) { - none() + exists(int b, int bType, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + n = bType and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnresolvedType( UnresolvedType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bType, int bErrorElement, int n | + b = 0 and + bType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfType(e, i, _)) | i) and + bErrorElement = + bType + 1 + max(int i | i = -1 or exists(getImmediateChildOfErrorElement(e, i, _)) | i) and + n = bErrorElement and + ( + none() + or + result = getImmediateChildOfType(e, index - b, partialPredicateCall) + or + result = getImmediateChildOfErrorElement(e, index - bType, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfAnyBuiltinIntegerType( + AnyBuiltinIntegerType e, int index, string partialPredicateCall + ) { + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfArchetypeType( + ArchetypeType e, int index, string partialPredicateCall + ) { + exists(int b, int bSubstitutableType, int n | + b = 0 and + bSubstitutableType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSubstitutableType(e, i, _)) | i) and + n = bSubstitutableType and + ( + none() + or + result = getImmediateChildOfSubstitutableType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinBridgeObjectType( BuiltinBridgeObjectType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinDefaultActorStorageType( BuiltinDefaultActorStorageType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinExecutorType( BuiltinExecutorType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinFixedArrayType( BuiltinFixedArrayType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinFloatType( BuiltinFloatType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinJobType( BuiltinJobType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinNativeObjectType( BuiltinNativeObjectType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinRawPointerType( BuiltinRawPointerType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinRawUnsafeContinuationType( BuiltinRawUnsafeContinuationType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinUnsafeValueBufferType( BuiltinUnsafeValueBufferType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinVectorType( BuiltinVectorType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBuiltinType, int n | + b = 0 and + bBuiltinType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBuiltinType(e, i, _)) | i) and + n = bBuiltinType and + ( + none() + or + result = getImmediateChildOfBuiltinType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfExistentialMetatypeType( ExistentialMetatypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyMetatypeType, int n | + b = 0 and + bAnyMetatypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyMetatypeType(e, i, _)) | i) and + n = bAnyMetatypeType and + ( + none() + or + result = getImmediateChildOfAnyMetatypeType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfFunctionType( FunctionType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyFunctionType, int n | + b = 0 and + bAnyFunctionType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyFunctionType(e, i, _)) | i) and + n = bAnyFunctionType and + ( + none() + or + result = getImmediateChildOfAnyFunctionType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfGenericFunctionType( GenericFunctionType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyFunctionType, int n | + b = 0 and + bAnyFunctionType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyFunctionType(e, i, _)) | i) and + n = bAnyFunctionType and + ( + none() + or + result = getImmediateChildOfAnyFunctionType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfGenericTypeParamType( GenericTypeParamType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bSubstitutableType, int n | + b = 0 and + bSubstitutableType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSubstitutableType(e, i, _)) | i) and + n = bSubstitutableType and + ( + none() + or + result = getImmediateChildOfSubstitutableType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfMetatypeType( MetatypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyMetatypeType, int n | + b = 0 and + bAnyMetatypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyMetatypeType(e, i, _)) | i) and + n = bAnyMetatypeType and + ( + none() + or + result = getImmediateChildOfAnyMetatypeType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfNominalOrBoundGenericNominalType( + NominalOrBoundGenericNominalType e, int index, string partialPredicateCall + ) { + exists(int b, int bAnyGenericType, int n | + b = 0 and + bAnyGenericType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyGenericType(e, i, _)) | i) and + n = bAnyGenericType and + ( + none() + or + result = getImmediateChildOfAnyGenericType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfParenType(ParenType e, int index, string partialPredicateCall) { - none() + exists(int b, int bSugarType, int n | + b = 0 and + bSugarType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSugarType(e, i, _)) | i) and + n = bSugarType and + ( + none() + or + result = getImmediateChildOfSugarType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfSyntaxSugarType( + SyntaxSugarType e, int index, string partialPredicateCall + ) { + exists(int b, int bSugarType, int n | + b = 0 and + bSugarType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSugarType(e, i, _)) | i) and + n = bSugarType and + ( + none() + or + result = getImmediateChildOfSugarType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfTypeAliasType( TypeAliasType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bSugarType, int n | + b = 0 and + bSugarType = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSugarType(e, i, _)) | i) and + n = bSugarType and + ( + none() + or + result = getImmediateChildOfSugarType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnboundGenericType( UnboundGenericType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyGenericType, int n | + b = 0 and + bAnyGenericType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyGenericType(e, i, _)) | i) and + n = bAnyGenericType and + ( + none() + or + result = getImmediateChildOfAnyGenericType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnmanagedStorageType( UnmanagedStorageType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bReferenceStorageType, int n | + b = 0 and + bReferenceStorageType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfReferenceStorageType(e, i, _)) | i) and + n = bReferenceStorageType and + ( + none() + or + result = getImmediateChildOfReferenceStorageType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfUnownedStorageType( UnownedStorageType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bReferenceStorageType, int n | + b = 0 and + bReferenceStorageType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfReferenceStorageType(e, i, _)) | i) and + n = bReferenceStorageType and + ( + none() + or + result = getImmediateChildOfReferenceStorageType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfWeakStorageType( WeakStorageType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bReferenceStorageType, int n | + b = 0 and + bReferenceStorageType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfReferenceStorageType(e, i, _)) | i) and + n = bReferenceStorageType and + ( + none() + or + result = getImmediateChildOfReferenceStorageType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfBoundGenericType( + BoundGenericType e, int index, string partialPredicateCall + ) { + exists(int b, int bNominalOrBoundGenericNominalType, int n | + b = 0 and + bNominalOrBoundGenericNominalType = + b + 1 + + max(int i | + i = -1 or exists(getImmediateChildOfNominalOrBoundGenericNominalType(e, i, _)) + | + i + ) and + n = bNominalOrBoundGenericNominalType and + ( + none() + or + result = + getImmediateChildOfNominalOrBoundGenericNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinIntegerLiteralType( BuiltinIntegerLiteralType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyBuiltinIntegerType, int n | + b = 0 and + bAnyBuiltinIntegerType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyBuiltinIntegerType(e, i, _)) | i) and + n = bAnyBuiltinIntegerType and + ( + none() + or + result = getImmediateChildOfAnyBuiltinIntegerType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBuiltinIntegerType( BuiltinIntegerType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bAnyBuiltinIntegerType, int n | + b = 0 and + bAnyBuiltinIntegerType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAnyBuiltinIntegerType(e, i, _)) | i) and + n = bAnyBuiltinIntegerType and + ( + none() + or + result = getImmediateChildOfAnyBuiltinIntegerType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfDictionaryType( DictionaryType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bSyntaxSugarType, int n | + b = 0 and + bSyntaxSugarType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSyntaxSugarType(e, i, _)) | i) and + n = bSyntaxSugarType and + ( + none() + or + result = getImmediateChildOfSyntaxSugarType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfLocalArchetypeType( + LocalArchetypeType e, int index, string partialPredicateCall + ) { + exists(int b, int bArchetypeType, int n | + b = 0 and + bArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArchetypeType(e, i, _)) | i) and + n = bArchetypeType and + ( + none() + or + result = getImmediateChildOfArchetypeType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfNominalType( + NominalType e, int index, string partialPredicateCall + ) { + exists(int b, int bNominalOrBoundGenericNominalType, int n | + b = 0 and + bNominalOrBoundGenericNominalType = + b + 1 + + max(int i | + i = -1 or exists(getImmediateChildOfNominalOrBoundGenericNominalType(e, i, _)) + | + i + ) and + n = bNominalOrBoundGenericNominalType and + ( + none() + or + result = + getImmediateChildOfNominalOrBoundGenericNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOpaqueTypeArchetypeType( OpaqueTypeArchetypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bArchetypeType, int n | + b = 0 and + bArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArchetypeType(e, i, _)) | i) and + n = bArchetypeType and + ( + none() + or + result = getImmediateChildOfArchetypeType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPackArchetypeType( PackArchetypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bArchetypeType, int n | + b = 0 and + bArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArchetypeType(e, i, _)) | i) and + n = bArchetypeType and + ( + none() + or + result = getImmediateChildOfArchetypeType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfPrimaryArchetypeType( PrimaryArchetypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bArchetypeType, int n | + b = 0 and + bArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfArchetypeType(e, i, _)) | i) and + n = bArchetypeType and + ( + none() + or + result = getImmediateChildOfArchetypeType(e, index - b, partialPredicateCall) + ) + ) + } + + private Element getImmediateChildOfUnarySyntaxSugarType( + UnarySyntaxSugarType e, int index, string partialPredicateCall + ) { + exists(int b, int bSyntaxSugarType, int n | + b = 0 and + bSyntaxSugarType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfSyntaxSugarType(e, i, _)) | i) and + n = bSyntaxSugarType and + ( + none() + or + result = getImmediateChildOfSyntaxSugarType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfArraySliceType( ArraySliceType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bUnarySyntaxSugarType, int n | + b = 0 and + bUnarySyntaxSugarType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnarySyntaxSugarType(e, i, _)) | i) and + n = bUnarySyntaxSugarType and + ( + none() + or + result = getImmediateChildOfUnarySyntaxSugarType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBoundGenericClassType( BoundGenericClassType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBoundGenericType, int n | + b = 0 and + bBoundGenericType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBoundGenericType(e, i, _)) | i) and + n = bBoundGenericType and + ( + none() + or + result = getImmediateChildOfBoundGenericType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBoundGenericEnumType( BoundGenericEnumType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBoundGenericType, int n | + b = 0 and + bBoundGenericType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBoundGenericType(e, i, _)) | i) and + n = bBoundGenericType and + ( + none() + or + result = getImmediateChildOfBoundGenericType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfBoundGenericStructType( BoundGenericStructType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bBoundGenericType, int n | + b = 0 and + bBoundGenericType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfBoundGenericType(e, i, _)) | i) and + n = bBoundGenericType and + ( + none() + or + result = getImmediateChildOfBoundGenericType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfClassType(ClassType e, int index, string partialPredicateCall) { - none() + exists(int b, int bNominalType, int n | + b = 0 and + bNominalType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalType(e, i, _)) | i) and + n = bNominalType and + ( + none() + or + result = getImmediateChildOfNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfElementArchetypeType( ElementArchetypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLocalArchetypeType, int n | + b = 0 and + bLocalArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocalArchetypeType(e, i, _)) | i) and + n = bLocalArchetypeType and + ( + none() + or + result = getImmediateChildOfLocalArchetypeType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfEnumType(EnumType e, int index, string partialPredicateCall) { - none() + exists(int b, int bNominalType, int n | + b = 0 and + bNominalType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalType(e, i, _)) | i) and + n = bNominalType and + ( + none() + or + result = getImmediateChildOfNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOpenedArchetypeType( OpenedArchetypeType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bLocalArchetypeType, int n | + b = 0 and + bLocalArchetypeType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfLocalArchetypeType(e, i, _)) | i) and + n = bLocalArchetypeType and + ( + none() + or + result = getImmediateChildOfLocalArchetypeType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfOptionalType( OptionalType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bUnarySyntaxSugarType, int n | + b = 0 and + bUnarySyntaxSugarType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnarySyntaxSugarType(e, i, _)) | i) and + n = bUnarySyntaxSugarType and + ( + none() + or + result = getImmediateChildOfUnarySyntaxSugarType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfProtocolType( ProtocolType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bNominalType, int n | + b = 0 and + bNominalType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalType(e, i, _)) | i) and + n = bNominalType and + ( + none() + or + result = getImmediateChildOfNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfStructType(StructType e, int index, string partialPredicateCall) { - none() + exists(int b, int bNominalType, int n | + b = 0 and + bNominalType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfNominalType(e, i, _)) | i) and + n = bNominalType and + ( + none() + or + result = getImmediateChildOfNominalType(e, index - b, partialPredicateCall) + ) + ) } private Element getImmediateChildOfVariadicSequenceType( VariadicSequenceType e, int index, string partialPredicateCall ) { - none() + exists(int b, int bUnarySyntaxSugarType, int n | + b = 0 and + bUnarySyntaxSugarType = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfUnarySyntaxSugarType(e, i, _)) | i) and + n = bUnarySyntaxSugarType and + ( + none() + or + result = getImmediateChildOfUnarySyntaxSugarType(e, index - b, partialPredicateCall) + ) + ) } cached diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index bd0816247ca6..639dcd6ec401 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 5.0.3-dev +version: 5.0.2 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index b24d4fbd5a77..562310fcbe3c 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.1-dev +version: 1.2.0 groups: - swift - queries diff --git a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.expected b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.expected index e6b02e7a01b1..9f56de5ccdb9 100644 --- a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.expected +++ b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.expected @@ -1,9 +1,2 @@ -instances -| test.swift:1:4:1:27 | #available | isUnavailable: | no | -| test.swift:5:4:5:45 | #unavailable | isUnavailable: | yes | -getSpec -| test.swift:1:4:1:27 | #available | 0 | test.swift:1:15:1:21 | macOS 142 | -| test.swift:1:4:1:27 | #available | 1 | test.swift:1:26:1:26 | * | -| test.swift:5:4:5:45 | #unavailable | 0 | test.swift:5:17:5:21 | iOS 10 | -| test.swift:5:4:5:45 | #unavailable | 1 | test.swift:5:25:5:33 | watchOS 10 | -| test.swift:5:4:5:45 | #unavailable | 2 | test.swift:5:37:5:43 | macOS 10 | +| test.swift:1:4:1:27 | #available | isUnavailable: | no | getNumberOfSpecs: | 2 | +| test.swift:5:4:5:45 | #unavailable | isUnavailable: | yes | getNumberOfSpecs: | 3 | diff --git a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql index 50d7addece8f..ae10b4bb767c 100644 --- a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql +++ b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(AvailabilityInfo x, string isUnavailable__label, string isUnavailable) { +from AvailabilityInfo x, string isUnavailable, int getNumberOfSpecs +where toBeTested(x) and not x.isUnknown() and - isUnavailable__label = "isUnavailable:" and - if x.isUnavailable() then isUnavailable = "yes" else isUnavailable = "no" -} - -query predicate getSpec(AvailabilityInfo x, int index, AvailabilitySpec getSpec) { - toBeTested(x) and not x.isUnknown() and getSpec = x.getSpec(index) -} + (if x.isUnavailable() then isUnavailable = "yes" else isUnavailable = "no") and + getNumberOfSpecs = x.getNumberOfSpecs() +select x, "isUnavailable:", isUnavailable, "getNumberOfSpecs:", getNumberOfSpecs diff --git a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.expected b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.expected new file mode 100644 index 000000000000..83e9450d76b1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.expected @@ -0,0 +1,5 @@ +| test.swift:1:4:1:27 | #available | 0 | test.swift:1:15:1:21 | macOS 142 | +| test.swift:1:4:1:27 | #available | 1 | test.swift:1:26:1:26 | * | +| test.swift:5:4:5:45 | #unavailable | 0 | test.swift:5:17:5:21 | iOS 10 | +| test.swift:5:4:5:45 | #unavailable | 1 | test.swift:5:25:5:33 | watchOS 10 | +| test.swift:5:4:5:45 | #unavailable | 2 | test.swift:5:37:5:43 | macOS 10 | diff --git a/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql new file mode 100644 index 000000000000..418f5251effe --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/AvailabilityInfo/AvailabilityInfo_getSpec.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from AvailabilityInfo x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getSpec(index) diff --git a/swift/ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql b/swift/ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql index ef370f93d92f..18e302cfaa63 100644 --- a/swift/ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql +++ b/swift/ql/test/extractor-tests/generated/Diagnostics/Diagnostics.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - Diagnostics x, string getText__label, string getText, string getKind__label, int getKind -) { +from Diagnostics x, string getText, int getKind +where toBeTested(x) and not x.isUnknown() and - getText__label = "getText:" and getText = x.getText() and - getKind__label = "getKind:" and getKind = x.getKind() -} +select x, "getText:", getText, "getKind:", getKind diff --git a/swift/ql/test/extractor-tests/generated/File/File.ql b/swift/ql/test/extractor-tests/generated/File/File.ql index 75690caf90fc..3614bcc50733 100644 --- a/swift/ql/test/extractor-tests/generated/File/File.ql +++ b/swift/ql/test/extractor-tests/generated/File/File.ql @@ -2,17 +2,13 @@ import codeql.swift.elements import TestUtils -query predicate instances( - File x, string primaryQlClasses, string getName__label, string getName, - string isSuccessfullyExtracted__label, string isSuccessfullyExtracted -) { +from File x, string getName, string isSuccessfullyExtracted +where toBeTested(x) and not x.isUnknown() and - primaryQlClasses = x.getPrimaryQlClasses() and - getName__label = "getName:" and getName = x.getName() and - isSuccessfullyExtracted__label = "isSuccessfullyExtracted:" and if x.isSuccessfullyExtracted() then isSuccessfullyExtracted = "yes" else isSuccessfullyExtracted = "no" -} +select x, x.getPrimaryQlClasses(), "getName:", getName, "isSuccessfullyExtracted:", + isSuccessfullyExtracted diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.expected b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.expected index 9d51a6ed8d5d..90bfc4f4f2af 100644 --- a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.expected +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.expected @@ -1,28 +1,14 @@ -instances -| file://:0:0:0:0 | KeyPathComponent | getKind: | 7 | getComponentType: | Int? | -| key_path_expr.swift:11:17:11:17 | KeyPathComponent | getKind: | 3 | getComponentType: | Int | -| key_path_expr.swift:12:24:12:26 | KeyPathComponent | getKind: | 4 | getComponentType: | Int | -| key_path_expr.swift:13:34:13:38 | KeyPathComponent | getKind: | 4 | getComponentType: | Int? | -| key_path_expr.swift:14:31:14:31 | KeyPathComponent | getKind: | 5 | getComponentType: | Int | -| key_path_expr.swift:14:31:14:31 | KeyPathComponent | getKind: | 8 | getComponentType: | Int? | -| key_path_expr.swift:15:21:15:21 | KeyPathComponent | getKind: | 3 | getComponentType: | Bar? | -| key_path_expr.swift:15:24:15:24 | KeyPathComponent | getKind: | 6 | getComponentType: | Bar | -| key_path_expr.swift:15:26:15:26 | KeyPathComponent | getKind: | 3 | getComponentType: | Int? | -| key_path_expr.swift:16:25:16:25 | KeyPathComponent | getKind: | 3 | getComponentType: | Bar? | -| key_path_expr.swift:16:28:16:28 | KeyPathComponent | getKind: | 6 | getComponentType: | Bar | -| key_path_expr.swift:16:30:16:30 | KeyPathComponent | getKind: | 3 | getComponentType: | Int | -| key_path_expr.swift:17:16:17:16 | KeyPathComponent | getKind: | 8 | getComponentType: | Int | -| key_path_expr.swift:18:32:18:32 | KeyPathComponent | getKind: | 9 | getComponentType: | Int | -getSubscriptArgument -| key_path_expr.swift:12:24:12:26 | KeyPathComponent | 0 | key_path_expr.swift:12:25:12:25 | : 0 | -| key_path_expr.swift:13:34:13:38 | KeyPathComponent | 0 | key_path_expr.swift:13:35:13:35 | : a | -getTupleIndex -| key_path_expr.swift:18:32:18:32 | KeyPathComponent | 0 | -getDeclRef -| key_path_expr.swift:11:17:11:17 | KeyPathComponent | key_path_expr.swift:7:9:7:9 | value | -| key_path_expr.swift:12:24:12:26 | KeyPathComponent | file://:0:0:0:0 | subscript ... | -| key_path_expr.swift:13:34:13:38 | KeyPathComponent | file://:0:0:0:0 | subscript ... | -| key_path_expr.swift:15:21:15:21 | KeyPathComponent | key_path_expr.swift:8:9:8:9 | opt | -| key_path_expr.swift:15:26:15:26 | KeyPathComponent | key_path_expr.swift:3:9:3:9 | opt | -| key_path_expr.swift:16:25:16:25 | KeyPathComponent | key_path_expr.swift:8:9:8:9 | opt | -| key_path_expr.swift:16:30:16:30 | KeyPathComponent | key_path_expr.swift:2:9:2:9 | value | +| file://:0:0:0:0 | KeyPathComponent | getKind: | 7 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Int? | +| key_path_expr.swift:11:17:11:17 | KeyPathComponent | getKind: | 3 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Int | +| key_path_expr.swift:12:24:12:26 | KeyPathComponent | getKind: | 4 | getNumberOfSubscriptArguments: | 1 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Int | +| key_path_expr.swift:13:34:13:38 | KeyPathComponent | getKind: | 4 | getNumberOfSubscriptArguments: | 1 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Int? | +| key_path_expr.swift:14:31:14:31 | KeyPathComponent | getKind: | 5 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Int | +| key_path_expr.swift:14:31:14:31 | KeyPathComponent | getKind: | 8 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Int? | +| key_path_expr.swift:15:21:15:21 | KeyPathComponent | getKind: | 3 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Bar? | +| key_path_expr.swift:15:24:15:24 | KeyPathComponent | getKind: | 6 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Bar | +| key_path_expr.swift:15:26:15:26 | KeyPathComponent | getKind: | 3 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Int? | +| key_path_expr.swift:16:25:16:25 | KeyPathComponent | getKind: | 3 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Bar? | +| key_path_expr.swift:16:28:16:28 | KeyPathComponent | getKind: | 6 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Bar | +| key_path_expr.swift:16:30:16:30 | KeyPathComponent | getKind: | 3 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | yes | getComponentType: | Int | +| key_path_expr.swift:17:16:17:16 | KeyPathComponent | getKind: | 8 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | no | hasDeclRef: | no | getComponentType: | Int | +| key_path_expr.swift:18:32:18:32 | KeyPathComponent | getKind: | 9 | getNumberOfSubscriptArguments: | 0 | hasTupleIndex: | yes | hasDeclRef: | no | getComponentType: | Int | diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql index a81df30d4651..06d9851feb66 100644 --- a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql @@ -2,26 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - KeyPathComponent x, string getKind__label, int getKind, string getComponentType__label, - Type getComponentType -) { +from + KeyPathComponent x, int getKind, int getNumberOfSubscriptArguments, string hasTupleIndex, + string hasDeclRef, Type getComponentType +where toBeTested(x) and not x.isUnknown() and - getKind__label = "getKind:" and getKind = x.getKind() and - getComponentType__label = "getComponentType:" and + getNumberOfSubscriptArguments = x.getNumberOfSubscriptArguments() and + (if x.hasTupleIndex() then hasTupleIndex = "yes" else hasTupleIndex = "no") and + (if x.hasDeclRef() then hasDeclRef = "yes" else hasDeclRef = "no") and getComponentType = x.getComponentType() -} - -query predicate getSubscriptArgument(KeyPathComponent x, int index, Argument getSubscriptArgument) { - toBeTested(x) and not x.isUnknown() and getSubscriptArgument = x.getSubscriptArgument(index) -} - -query predicate getTupleIndex(KeyPathComponent x, int getTupleIndex) { - toBeTested(x) and not x.isUnknown() and getTupleIndex = x.getTupleIndex() -} - -query predicate getDeclRef(KeyPathComponent x, ValueDecl getDeclRef) { - toBeTested(x) and not x.isUnknown() and getDeclRef = x.getDeclRef() -} +select x, "getKind:", getKind, "getNumberOfSubscriptArguments:", getNumberOfSubscriptArguments, + "hasTupleIndex:", hasTupleIndex, "hasDeclRef:", hasDeclRef, "getComponentType:", getComponentType diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.expected b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.expected new file mode 100644 index 000000000000..74dc644cb80b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.expected @@ -0,0 +1,7 @@ +| key_path_expr.swift:11:17:11:17 | KeyPathComponent | key_path_expr.swift:7:9:7:9 | value | +| key_path_expr.swift:12:24:12:26 | KeyPathComponent | file://:0:0:0:0 | subscript ... | +| key_path_expr.swift:13:34:13:38 | KeyPathComponent | file://:0:0:0:0 | subscript ... | +| key_path_expr.swift:15:21:15:21 | KeyPathComponent | key_path_expr.swift:8:9:8:9 | opt | +| key_path_expr.swift:15:26:15:26 | KeyPathComponent | key_path_expr.swift:3:9:3:9 | opt | +| key_path_expr.swift:16:25:16:25 | KeyPathComponent | key_path_expr.swift:8:9:8:9 | opt | +| key_path_expr.swift:16:30:16:30 | KeyPathComponent | key_path_expr.swift:2:9:2:9 | value | diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.ql b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.ql new file mode 100644 index 000000000000..74174fd4bd2f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getDeclRef.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathComponent x +where toBeTested(x) and not x.isUnknown() +select x, x.getDeclRef() diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.expected b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.expected new file mode 100644 index 000000000000..c86fff6a006a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.expected @@ -0,0 +1,2 @@ +| key_path_expr.swift:12:24:12:26 | KeyPathComponent | 0 | key_path_expr.swift:12:25:12:25 | : 0 | +| key_path_expr.swift:13:34:13:38 | KeyPathComponent | 0 | key_path_expr.swift:13:35:13:35 | : a | diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.ql b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.ql new file mode 100644 index 000000000000..30b149e82044 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getSubscriptArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathComponent x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getSubscriptArgument(index) diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.expected b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.expected new file mode 100644 index 000000000000..d4563136606a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.expected @@ -0,0 +1 @@ +| key_path_expr.swift:18:32:18:32 | KeyPathComponent | 0 | diff --git a/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.ql b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.ql new file mode 100644 index 000000000000..40e2e8924a82 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/KeyPathComponent/KeyPathComponent_getTupleIndex.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathComponent x +where toBeTested(x) and not x.isUnknown() +select x, x.getTupleIndex() diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.expected index 7512cce37122..15b05916e441 100644 --- a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.expected +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.expected @@ -1,165 +1,36 @@ -instances -| accessors.swift:2:9:2:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:2:9:2:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:2:9:2:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:3:9:3:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:4:9:4:28 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:5:9:5:42 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:7:9:7:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:7:9:7:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:7:9:7:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:8:9:8:29 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:11:9:11:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:11:9:11:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:11:9:11:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:12:9:12:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:15:9:15:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:15:9:15:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:15:9:15:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:16:9:16:28 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:19:9:19:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:19:9:19:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:19:9:19:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:20:9:20:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:23:9:23:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:23:9:23:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:23:9:23:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:24:9:24:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:26:9:26:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:29:9:29:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:29:9:29:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:30:9:32:9 | _read | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | yes | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:33:9:35:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:38:9:38:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:38:9:38:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:38:9:38:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | -| accessors.swift:39:9:41:9 | unsafeAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> UnsafePointer | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | yes | isUnsafeMutableAddress: | no | -| accessors.swift:42:9:44:9 | unsafeMutableAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> UnsafeMutablePointer | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | yes | -getGenericTypeParam -getMember -getName -| accessors.swift:2:9:2:9 | _modify | (unnamed function decl) | -| accessors.swift:2:9:2:9 | get | (unnamed function decl) | -| accessors.swift:2:9:2:9 | set | (unnamed function decl) | -| accessors.swift:3:9:3:9 | _modify | (unnamed function decl) | -| accessors.swift:4:9:4:28 | get | (unnamed function decl) | -| accessors.swift:5:9:5:42 | set | (unnamed function decl) | -| accessors.swift:7:9:7:9 | _modify | (unnamed function decl) | -| accessors.swift:7:9:7:9 | get | (unnamed function decl) | -| accessors.swift:7:9:7:9 | set | (unnamed function decl) | -| accessors.swift:8:9:8:29 | willSet | (unnamed function decl) | -| accessors.swift:11:9:11:9 | _modify | (unnamed function decl) | -| accessors.swift:11:9:11:9 | get | (unnamed function decl) | -| accessors.swift:11:9:11:9 | set | (unnamed function decl) | -| accessors.swift:12:9:12:19 | willSet | (unnamed function decl) | -| accessors.swift:15:9:15:9 | _modify | (unnamed function decl) | -| accessors.swift:15:9:15:9 | get | (unnamed function decl) | -| accessors.swift:15:9:15:9 | set | (unnamed function decl) | -| accessors.swift:16:9:16:28 | didSet | (unnamed function decl) | -| accessors.swift:19:9:19:9 | _modify | (unnamed function decl) | -| accessors.swift:19:9:19:9 | get | (unnamed function decl) | -| accessors.swift:19:9:19:9 | set | (unnamed function decl) | -| accessors.swift:20:9:20:18 | didSet | (unnamed function decl) | -| accessors.swift:23:9:23:9 | _modify | (unnamed function decl) | -| accessors.swift:23:9:23:9 | get | (unnamed function decl) | -| accessors.swift:23:9:23:9 | set | (unnamed function decl) | -| accessors.swift:24:9:24:19 | willSet | (unnamed function decl) | -| accessors.swift:26:9:26:18 | didSet | (unnamed function decl) | -| accessors.swift:29:9:29:9 | get | (unnamed function decl) | -| accessors.swift:29:9:29:9 | set | (unnamed function decl) | -| accessors.swift:30:9:32:9 | _read | (unnamed function decl) | -| accessors.swift:33:9:35:9 | _modify | (unnamed function decl) | -| accessors.swift:38:9:38:9 | _modify | (unnamed function decl) | -| accessors.swift:38:9:38:9 | get | (unnamed function decl) | -| accessors.swift:38:9:38:9 | set | (unnamed function decl) | -| accessors.swift:39:9:41:9 | unsafeAddress | (unnamed function decl) | -| accessors.swift:42:9:44:9 | unsafeMutableAddress | (unnamed function decl) | -getSelfParam -| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | self | -| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | self | -| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | self | -| accessors.swift:3:9:3:9 | _modify | accessors.swift:3:9:3:9 | self | -| accessors.swift:4:9:4:28 | get | accessors.swift:4:9:4:9 | self | -| accessors.swift:5:9:5:42 | set | accessors.swift:5:9:5:9 | self | -| accessors.swift:7:9:7:9 | _modify | accessors.swift:7:9:7:9 | self | -| accessors.swift:7:9:7:9 | get | accessors.swift:7:9:7:9 | self | -| accessors.swift:7:9:7:9 | set | accessors.swift:7:9:7:9 | self | -| accessors.swift:8:9:8:29 | willSet | accessors.swift:8:9:8:9 | self | -| accessors.swift:11:9:11:9 | _modify | accessors.swift:11:9:11:9 | self | -| accessors.swift:11:9:11:9 | get | accessors.swift:11:9:11:9 | self | -| accessors.swift:11:9:11:9 | set | accessors.swift:11:9:11:9 | self | -| accessors.swift:12:9:12:19 | willSet | accessors.swift:12:9:12:9 | self | -| accessors.swift:15:9:15:9 | _modify | accessors.swift:15:9:15:9 | self | -| accessors.swift:15:9:15:9 | get | accessors.swift:15:9:15:9 | self | -| accessors.swift:15:9:15:9 | set | accessors.swift:15:9:15:9 | self | -| accessors.swift:16:9:16:28 | didSet | accessors.swift:16:9:16:9 | self | -| accessors.swift:19:9:19:9 | _modify | accessors.swift:19:9:19:9 | self | -| accessors.swift:19:9:19:9 | get | accessors.swift:19:9:19:9 | self | -| accessors.swift:19:9:19:9 | set | accessors.swift:19:9:19:9 | self | -| accessors.swift:20:9:20:18 | didSet | accessors.swift:20:9:20:9 | self | -| accessors.swift:23:9:23:9 | _modify | accessors.swift:23:9:23:9 | self | -| accessors.swift:23:9:23:9 | get | accessors.swift:23:9:23:9 | self | -| accessors.swift:23:9:23:9 | set | accessors.swift:23:9:23:9 | self | -| accessors.swift:24:9:24:19 | willSet | accessors.swift:24:9:24:9 | self | -| accessors.swift:26:9:26:18 | didSet | accessors.swift:26:9:26:9 | self | -| accessors.swift:29:9:29:9 | get | accessors.swift:29:9:29:9 | self | -| accessors.swift:29:9:29:9 | set | accessors.swift:29:9:29:9 | self | -| accessors.swift:30:9:32:9 | _read | accessors.swift:30:9:30:9 | self | -| accessors.swift:33:9:35:9 | _modify | accessors.swift:33:9:33:9 | self | -| accessors.swift:38:9:38:9 | _modify | accessors.swift:38:9:38:9 | self | -| accessors.swift:38:9:38:9 | get | accessors.swift:38:9:38:9 | self | -| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | self | -| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:9:39:9 | self | -| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:9:42:9 | self | -getParam -| accessors.swift:2:9:2:9 | set | 0 | accessors.swift:2:9:2:9 | value | -| accessors.swift:5:9:5:42 | set | 0 | accessors.swift:5:13:5:13 | newValue | -| accessors.swift:7:9:7:9 | set | 0 | accessors.swift:7:9:7:9 | value | -| accessors.swift:8:9:8:29 | willSet | 0 | accessors.swift:8:17:8:17 | newValue | -| accessors.swift:11:9:11:9 | set | 0 | accessors.swift:11:9:11:9 | value | -| accessors.swift:12:9:12:19 | willSet | 0 | accessors.swift:12:9:12:9 | newValue | -| accessors.swift:15:9:15:9 | set | 0 | accessors.swift:15:9:15:9 | value | -| accessors.swift:16:9:16:28 | didSet | 0 | accessors.swift:16:16:16:16 | oldValue | -| accessors.swift:19:9:19:9 | set | 0 | accessors.swift:19:9:19:9 | value | -| accessors.swift:23:9:23:9 | set | 0 | accessors.swift:23:9:23:9 | value | -| accessors.swift:24:9:24:19 | willSet | 0 | accessors.swift:24:9:24:9 | newValue | -| accessors.swift:29:9:29:9 | set | 0 | accessors.swift:29:9:29:9 | value | -| accessors.swift:38:9:38:9 | set | 0 | accessors.swift:38:9:38:9 | value | -getBody -| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | { ... } | -| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | { ... } | -| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | { ... } | -| accessors.swift:3:9:3:9 | _modify | accessors.swift:3:9:3:9 | { ... } | -| accessors.swift:4:9:4:28 | get | accessors.swift:4:13:4:28 | { ... } | -| accessors.swift:5:9:5:42 | set | accessors.swift:5:23:5:42 | { ... } | -| accessors.swift:7:9:7:9 | _modify | accessors.swift:7:9:7:9 | { ... } | -| accessors.swift:7:9:7:9 | get | accessors.swift:7:9:7:9 | { ... } | -| accessors.swift:7:9:7:9 | set | accessors.swift:7:9:7:9 | { ... } | -| accessors.swift:8:9:8:29 | willSet | accessors.swift:8:27:8:29 | { ... } | -| accessors.swift:11:9:11:9 | _modify | accessors.swift:11:9:11:9 | { ... } | -| accessors.swift:11:9:11:9 | get | accessors.swift:11:9:11:9 | { ... } | -| accessors.swift:11:9:11:9 | set | accessors.swift:11:9:11:9 | { ... } | -| accessors.swift:12:9:12:19 | willSet | accessors.swift:12:17:12:19 | { ... } | -| accessors.swift:15:9:15:9 | _modify | accessors.swift:15:9:15:9 | { ... } | -| accessors.swift:15:9:15:9 | get | accessors.swift:15:9:15:9 | { ... } | -| accessors.swift:15:9:15:9 | set | accessors.swift:15:9:15:9 | { ... } | -| accessors.swift:16:9:16:28 | didSet | accessors.swift:16:26:16:28 | { ... } | -| accessors.swift:19:9:19:9 | _modify | accessors.swift:19:9:19:9 | { ... } | -| accessors.swift:19:9:19:9 | get | accessors.swift:19:9:19:9 | { ... } | -| accessors.swift:19:9:19:9 | set | accessors.swift:19:9:19:9 | { ... } | -| accessors.swift:20:9:20:18 | didSet | accessors.swift:20:16:20:18 | { ... } | -| accessors.swift:23:9:23:9 | _modify | accessors.swift:23:9:23:9 | { ... } | -| accessors.swift:23:9:23:9 | get | accessors.swift:23:9:23:9 | { ... } | -| accessors.swift:23:9:23:9 | set | accessors.swift:23:9:23:9 | { ... } | -| accessors.swift:24:9:24:19 | willSet | accessors.swift:24:17:24:19 | { ... } | -| accessors.swift:26:9:26:18 | didSet | accessors.swift:26:16:26:18 | { ... } | -| accessors.swift:29:9:29:9 | get | accessors.swift:29:9:29:9 | { ... } | -| accessors.swift:29:9:29:9 | set | accessors.swift:29:9:29:9 | { ... } | -| accessors.swift:30:9:32:9 | _read | accessors.swift:30:15:32:9 | { ... } | -| accessors.swift:33:9:35:9 | _modify | accessors.swift:33:17:35:9 | { ... } | -| accessors.swift:38:9:38:9 | _modify | accessors.swift:38:9:38:9 | { ... } | -| accessors.swift:38:9:38:9 | get | accessors.swift:38:9:38:9 | { ... } | -| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | { ... } | -| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:23:41:9 | { ... } | -| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:30:44:9 | { ... } | -getCapture +| accessors.swift:2:9:2:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:2:9:2:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:2:9:2:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:3:9:3:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:4:9:4:28 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:5:9:5:42 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:7:9:7:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:7:9:7:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:7:9:7:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:8:9:8:29 | willSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:11:9:11:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:11:9:11:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:11:9:11:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:12:9:12:19 | willSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:15:9:15:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:15:9:15:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:15:9:15:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:16:9:16:28 | didSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:19:9:19:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:19:9:19:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:19:9:19:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:20:9:20:18 | didSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:23:9:23:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:23:9:23:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:23:9:23:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:24:9:24:19 | willSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:26:9:26:18 | didSet | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:29:9:29:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:29:9:29:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:30:9:32:9 | _read | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | yes | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:33:9:35:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:38:9:38:9 | _modify | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:38:9:38:9 | get | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:38:9:38:9 | set | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | +| accessors.swift:39:9:41:9 | unsafeAddress | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (Foo) -> () -> UnsafePointer | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | yes | isUnsafeMutableAddress: | no | +| accessors.swift:42:9:44:9 | unsafeMutableAddress | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | accessors | getNumberOfMembers: | 0 | getInterfaceType: | (inout Foo) -> () -> UnsafeMutablePointer | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | yes | diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.ql index f05c5d94bba8..f4e231c7671d 100644 --- a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.ql +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor.ql @@ -2,64 +2,38 @@ import codeql.swift.elements import TestUtils -query predicate instances( - Accessor x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string isGetter__label, string isGetter, string isSetter__label, - string isSetter, string isWillSet__label, string isWillSet, string isDidSet__label, - string isDidSet, string isRead__label, string isRead, string isModify__label, string isModify, - string isUnsafeAddress__label, string isUnsafeAddress, string isUnsafeMutableAddress__label, +from + Accessor x, string hasName, string hasSelfParam, int getNumberOfParams, string hasBody, + int getNumberOfCaptures, int getNumberOfGenericTypeParams, ModuleDecl getModule, + int getNumberOfMembers, Type getInterfaceType, string isGetter, string isSetter, string isWillSet, + string isDidSet, string isRead, string isModify, string isUnsafeAddress, string isUnsafeMutableAddress -) { +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasSelfParam() then hasSelfParam = "yes" else hasSelfParam = "no") and + getNumberOfParams = x.getNumberOfParams() and + (if x.hasBody() then hasBody = "yes" else hasBody = "no") and + getNumberOfCaptures = x.getNumberOfCaptures() and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - isGetter__label = "isGetter:" and (if x.isGetter() then isGetter = "yes" else isGetter = "no") and - isSetter__label = "isSetter:" and (if x.isSetter() then isSetter = "yes" else isSetter = "no") and - isWillSet__label = "isWillSet:" and (if x.isWillSet() then isWillSet = "yes" else isWillSet = "no") and - isDidSet__label = "isDidSet:" and (if x.isDidSet() then isDidSet = "yes" else isDidSet = "no") and - isRead__label = "isRead:" and (if x.isRead() then isRead = "yes" else isRead = "no") and - isModify__label = "isModify:" and (if x.isModify() then isModify = "yes" else isModify = "no") and - isUnsafeAddress__label = "isUnsafeAddress:" and (if x.isUnsafeAddress() then isUnsafeAddress = "yes" else isUnsafeAddress = "no") and - isUnsafeMutableAddress__label = "isUnsafeMutableAddress:" and if x.isUnsafeMutableAddress() then isUnsafeMutableAddress = "yes" else isUnsafeMutableAddress = "no" -} - -query predicate getGenericTypeParam(Accessor x, int index, GenericTypeParamDecl getGenericTypeParam) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(Accessor x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getName(Accessor x, string getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getSelfParam(Accessor x, ParamDecl getSelfParam) { - toBeTested(x) and not x.isUnknown() and getSelfParam = x.getSelfParam() -} - -query predicate getParam(Accessor x, int index, ParamDecl getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} - -query predicate getBody(Accessor x, BraceStmt getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getCapture(Accessor x, int index, CapturedDecl getCapture) { - toBeTested(x) and not x.isUnknown() and getCapture = x.getCapture(index) -} +select x, "hasName:", hasName, "hasSelfParam:", hasSelfParam, "getNumberOfParams:", + getNumberOfParams, "hasBody:", hasBody, "getNumberOfCaptures:", getNumberOfCaptures, + "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "isGetter:", + isGetter, "isSetter:", isSetter, "isWillSet:", isWillSet, "isDidSet:", isDidSet, "isRead:", + isRead, "isModify:", isModify, "isUnsafeAddress:", isUnsafeAddress, "isUnsafeMutableAddress:", + isUnsafeMutableAddress diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.expected new file mode 100644 index 000000000000..7eccbae719f2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.expected @@ -0,0 +1,36 @@ +| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | { ... } | +| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | { ... } | +| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | { ... } | +| accessors.swift:3:9:3:9 | _modify | accessors.swift:3:9:3:9 | { ... } | +| accessors.swift:4:9:4:28 | get | accessors.swift:4:13:4:28 | { ... } | +| accessors.swift:5:9:5:42 | set | accessors.swift:5:23:5:42 | { ... } | +| accessors.swift:7:9:7:9 | _modify | accessors.swift:7:9:7:9 | { ... } | +| accessors.swift:7:9:7:9 | get | accessors.swift:7:9:7:9 | { ... } | +| accessors.swift:7:9:7:9 | set | accessors.swift:7:9:7:9 | { ... } | +| accessors.swift:8:9:8:29 | willSet | accessors.swift:8:27:8:29 | { ... } | +| accessors.swift:11:9:11:9 | _modify | accessors.swift:11:9:11:9 | { ... } | +| accessors.swift:11:9:11:9 | get | accessors.swift:11:9:11:9 | { ... } | +| accessors.swift:11:9:11:9 | set | accessors.swift:11:9:11:9 | { ... } | +| accessors.swift:12:9:12:19 | willSet | accessors.swift:12:17:12:19 | { ... } | +| accessors.swift:15:9:15:9 | _modify | accessors.swift:15:9:15:9 | { ... } | +| accessors.swift:15:9:15:9 | get | accessors.swift:15:9:15:9 | { ... } | +| accessors.swift:15:9:15:9 | set | accessors.swift:15:9:15:9 | { ... } | +| accessors.swift:16:9:16:28 | didSet | accessors.swift:16:26:16:28 | { ... } | +| accessors.swift:19:9:19:9 | _modify | accessors.swift:19:9:19:9 | { ... } | +| accessors.swift:19:9:19:9 | get | accessors.swift:19:9:19:9 | { ... } | +| accessors.swift:19:9:19:9 | set | accessors.swift:19:9:19:9 | { ... } | +| accessors.swift:20:9:20:18 | didSet | accessors.swift:20:16:20:18 | { ... } | +| accessors.swift:23:9:23:9 | _modify | accessors.swift:23:9:23:9 | { ... } | +| accessors.swift:23:9:23:9 | get | accessors.swift:23:9:23:9 | { ... } | +| accessors.swift:23:9:23:9 | set | accessors.swift:23:9:23:9 | { ... } | +| accessors.swift:24:9:24:19 | willSet | accessors.swift:24:17:24:19 | { ... } | +| accessors.swift:26:9:26:18 | didSet | accessors.swift:26:16:26:18 | { ... } | +| accessors.swift:29:9:29:9 | get | accessors.swift:29:9:29:9 | { ... } | +| accessors.swift:29:9:29:9 | set | accessors.swift:29:9:29:9 | { ... } | +| accessors.swift:30:9:32:9 | _read | accessors.swift:30:15:32:9 | { ... } | +| accessors.swift:33:9:35:9 | _modify | accessors.swift:33:17:35:9 | { ... } | +| accessors.swift:38:9:38:9 | _modify | accessors.swift:38:9:38:9 | { ... } | +| accessors.swift:38:9:38:9 | get | accessors.swift:38:9:38:9 | { ... } | +| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | { ... } | +| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:23:41:9 | { ... } | +| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:30:44:9 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.ql new file mode 100644 index 000000000000..ad96f239082f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.ql new file mode 100644 index 000000000000..173f3067c0c3 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getCapture.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getCapture(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.ql new file mode 100644 index 000000000000..2c4d348c5500 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.ql new file mode 100644 index 000000000000..3d4fe6d29722 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.expected new file mode 100644 index 000000000000..929255a57edc --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.expected @@ -0,0 +1,36 @@ +| accessors.swift:2:9:2:9 | _modify | (unnamed function decl) | +| accessors.swift:2:9:2:9 | get | (unnamed function decl) | +| accessors.swift:2:9:2:9 | set | (unnamed function decl) | +| accessors.swift:3:9:3:9 | _modify | (unnamed function decl) | +| accessors.swift:4:9:4:28 | get | (unnamed function decl) | +| accessors.swift:5:9:5:42 | set | (unnamed function decl) | +| accessors.swift:7:9:7:9 | _modify | (unnamed function decl) | +| accessors.swift:7:9:7:9 | get | (unnamed function decl) | +| accessors.swift:7:9:7:9 | set | (unnamed function decl) | +| accessors.swift:8:9:8:29 | willSet | (unnamed function decl) | +| accessors.swift:11:9:11:9 | _modify | (unnamed function decl) | +| accessors.swift:11:9:11:9 | get | (unnamed function decl) | +| accessors.swift:11:9:11:9 | set | (unnamed function decl) | +| accessors.swift:12:9:12:19 | willSet | (unnamed function decl) | +| accessors.swift:15:9:15:9 | _modify | (unnamed function decl) | +| accessors.swift:15:9:15:9 | get | (unnamed function decl) | +| accessors.swift:15:9:15:9 | set | (unnamed function decl) | +| accessors.swift:16:9:16:28 | didSet | (unnamed function decl) | +| accessors.swift:19:9:19:9 | _modify | (unnamed function decl) | +| accessors.swift:19:9:19:9 | get | (unnamed function decl) | +| accessors.swift:19:9:19:9 | set | (unnamed function decl) | +| accessors.swift:20:9:20:18 | didSet | (unnamed function decl) | +| accessors.swift:23:9:23:9 | _modify | (unnamed function decl) | +| accessors.swift:23:9:23:9 | get | (unnamed function decl) | +| accessors.swift:23:9:23:9 | set | (unnamed function decl) | +| accessors.swift:24:9:24:19 | willSet | (unnamed function decl) | +| accessors.swift:26:9:26:18 | didSet | (unnamed function decl) | +| accessors.swift:29:9:29:9 | get | (unnamed function decl) | +| accessors.swift:29:9:29:9 | set | (unnamed function decl) | +| accessors.swift:30:9:32:9 | _read | (unnamed function decl) | +| accessors.swift:33:9:35:9 | _modify | (unnamed function decl) | +| accessors.swift:38:9:38:9 | _modify | (unnamed function decl) | +| accessors.swift:38:9:38:9 | get | (unnamed function decl) | +| accessors.swift:38:9:38:9 | set | (unnamed function decl) | +| accessors.swift:39:9:41:9 | unsafeAddress | (unnamed function decl) | +| accessors.swift:42:9:44:9 | unsafeMutableAddress | (unnamed function decl) | diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.ql new file mode 100644 index 000000000000..9d29b101bdc2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.expected new file mode 100644 index 000000000000..e0544b5d4f5f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.expected @@ -0,0 +1,13 @@ +| accessors.swift:2:9:2:9 | set | 0 | accessors.swift:2:9:2:9 | value | +| accessors.swift:5:9:5:42 | set | 0 | accessors.swift:5:13:5:13 | newValue | +| accessors.swift:7:9:7:9 | set | 0 | accessors.swift:7:9:7:9 | value | +| accessors.swift:8:9:8:29 | willSet | 0 | accessors.swift:8:17:8:17 | newValue | +| accessors.swift:11:9:11:9 | set | 0 | accessors.swift:11:9:11:9 | value | +| accessors.swift:12:9:12:19 | willSet | 0 | accessors.swift:12:9:12:9 | newValue | +| accessors.swift:15:9:15:9 | set | 0 | accessors.swift:15:9:15:9 | value | +| accessors.swift:16:9:16:28 | didSet | 0 | accessors.swift:16:16:16:16 | oldValue | +| accessors.swift:19:9:19:9 | set | 0 | accessors.swift:19:9:19:9 | value | +| accessors.swift:23:9:23:9 | set | 0 | accessors.swift:23:9:23:9 | value | +| accessors.swift:24:9:24:19 | willSet | 0 | accessors.swift:24:9:24:9 | newValue | +| accessors.swift:29:9:29:9 | set | 0 | accessors.swift:29:9:29:9 | value | +| accessors.swift:38:9:38:9 | set | 0 | accessors.swift:38:9:38:9 | value | diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.ql new file mode 100644 index 000000000000..0640648bf1be --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.expected b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.expected new file mode 100644 index 000000000000..62143cca406d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.expected @@ -0,0 +1,36 @@ +| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | self | +| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | self | +| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | self | +| accessors.swift:3:9:3:9 | _modify | accessors.swift:3:9:3:9 | self | +| accessors.swift:4:9:4:28 | get | accessors.swift:4:9:4:9 | self | +| accessors.swift:5:9:5:42 | set | accessors.swift:5:9:5:9 | self | +| accessors.swift:7:9:7:9 | _modify | accessors.swift:7:9:7:9 | self | +| accessors.swift:7:9:7:9 | get | accessors.swift:7:9:7:9 | self | +| accessors.swift:7:9:7:9 | set | accessors.swift:7:9:7:9 | self | +| accessors.swift:8:9:8:29 | willSet | accessors.swift:8:9:8:9 | self | +| accessors.swift:11:9:11:9 | _modify | accessors.swift:11:9:11:9 | self | +| accessors.swift:11:9:11:9 | get | accessors.swift:11:9:11:9 | self | +| accessors.swift:11:9:11:9 | set | accessors.swift:11:9:11:9 | self | +| accessors.swift:12:9:12:19 | willSet | accessors.swift:12:9:12:9 | self | +| accessors.swift:15:9:15:9 | _modify | accessors.swift:15:9:15:9 | self | +| accessors.swift:15:9:15:9 | get | accessors.swift:15:9:15:9 | self | +| accessors.swift:15:9:15:9 | set | accessors.swift:15:9:15:9 | self | +| accessors.swift:16:9:16:28 | didSet | accessors.swift:16:9:16:9 | self | +| accessors.swift:19:9:19:9 | _modify | accessors.swift:19:9:19:9 | self | +| accessors.swift:19:9:19:9 | get | accessors.swift:19:9:19:9 | self | +| accessors.swift:19:9:19:9 | set | accessors.swift:19:9:19:9 | self | +| accessors.swift:20:9:20:18 | didSet | accessors.swift:20:9:20:9 | self | +| accessors.swift:23:9:23:9 | _modify | accessors.swift:23:9:23:9 | self | +| accessors.swift:23:9:23:9 | get | accessors.swift:23:9:23:9 | self | +| accessors.swift:23:9:23:9 | set | accessors.swift:23:9:23:9 | self | +| accessors.swift:24:9:24:19 | willSet | accessors.swift:24:9:24:9 | self | +| accessors.swift:26:9:26:18 | didSet | accessors.swift:26:9:26:9 | self | +| accessors.swift:29:9:29:9 | get | accessors.swift:29:9:29:9 | self | +| accessors.swift:29:9:29:9 | set | accessors.swift:29:9:29:9 | self | +| accessors.swift:30:9:32:9 | _read | accessors.swift:30:9:30:9 | self | +| accessors.swift:33:9:35:9 | _modify | accessors.swift:33:9:33:9 | self | +| accessors.swift:38:9:38:9 | _modify | accessors.swift:38:9:38:9 | self | +| accessors.swift:38:9:38:9 | get | accessors.swift:38:9:38:9 | self | +| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | self | +| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:9:39:9 | self | +| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:9:42:9 | self | diff --git a/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.ql b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.ql new file mode 100644 index 000000000000..2e98f9d74cbc --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/Accessor/Accessor_getSelfParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from Accessor x +where toBeTested(x) and not x.isUnknown() +select x, x.getSelfParam() diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.expected b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.expected index 9daa87b09ccd..ee463332f1d3 100644 --- a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.expected @@ -1,6 +1,2 @@ -instances -| associated_type.swift:2:5:2:20 | Bar | getModule: | file://:0:0:0:0 | associated_type | getInterfaceType: | Self.Bar.Type | getName: | Bar | -| associated_type.swift:3:5:3:25 | Baz | getModule: | file://:0:0:0:0 | associated_type | getInterfaceType: | Self.Baz.Type | getName: | Baz | -getMember -getInheritedType -| associated_type.swift:3:5:3:25 | Baz | 0 | Equatable | +| associated_type.swift:2:5:2:20 | Bar | getModule: | file://:0:0:0:0 | associated_type | getNumberOfMembers: | 0 | getInterfaceType: | Self.Bar.Type | getName: | Bar | getNumberOfInheritedTypes: | 0 | +| associated_type.swift:3:5:3:25 | Baz | getModule: | file://:0:0:0:0 | associated_type | getNumberOfMembers: | 0 | getInterfaceType: | Self.Baz.Type | getName: | Baz | getNumberOfInheritedTypes: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql index 41cc9d349a43..057981c23644 100644 --- a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - AssociatedTypeDecl x, string getModule__label, ModuleDecl getModule, - string getInterfaceType__label, Type getInterfaceType, string getName__label, string getName -) { +from + AssociatedTypeDecl x, ModuleDecl getModule, int getNumberOfMembers, Type getInterfaceType, + string getName, int getNumberOfInheritedTypes +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and - getName = x.getName() -} - -query predicate getMember(AssociatedTypeDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getInheritedType(AssociatedTypeDecl x, int index, Type getInheritedType) { - toBeTested(x) and not x.isUnknown() and getInheritedType = x.getInheritedType(index) -} + getName = x.getName() and + getNumberOfInheritedTypes = x.getNumberOfInheritedTypes() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", + getInterfaceType, "getName:", getName, "getNumberOfInheritedTypes:", getNumberOfInheritedTypes diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.expected b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.expected new file mode 100644 index 000000000000..6cd068031f60 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.expected @@ -0,0 +1 @@ +| associated_type.swift:3:5:3:25 | Baz | 0 | Equatable | diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.ql b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.ql new file mode 100644 index 000000000000..2c0f23a876ae --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getInheritedType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from AssociatedTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getInheritedType(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql new file mode 100644 index 000000000000..c36cb6ef4f9e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from AssociatedTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.expected b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.expected index cbf62d5bd64f..371312cb6cb5 100644 --- a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.expected @@ -1,43 +1,41 @@ -instances -| closures.swift:8:12:8:12 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:7:6:7:6 | x | isDirect: | yes | isEscaping: | no | -| closures.swift:9:12:9:12 | y | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:6:7:6:7 | y | isDirect: | yes | isEscaping: | no | -| closures.swift:16:3:16:3 | escape | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:12:5:12:5 | escape | isDirect: | yes | isEscaping: | yes | -| closures.swift:17:5:17:5 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:15:7:15:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:24:3:24:3 | escape | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:12:5:12:5 | escape | isDirect: | yes | isEscaping: | yes | -| closures.swift:31:11:31:11 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:29:7:29:7 | x | isDirect: | no | isEscaping: | no | -| closures.swift:32:14:32:14 | f | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:28:7:28:7 | f | isDirect: | no | isEscaping: | no | -| closures.swift:32:14:32:14 | f | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:28:7:28:7 | f | isDirect: | yes | isEscaping: | no | -| closures.swift:32:17:32:17 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:29:7:29:7 | x | isDirect: | yes | isEscaping: | no | -| closures.swift:39:20:39:20 | callback | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:36:21:36:58 | callback | isDirect: | yes | isEscaping: | yes | -| closures.swift:42:35:42:35 | wrapper(_:) | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:38:5:40:5 | wrapper(_:) | isDirect: | no | isEscaping: | yes | -| closures.swift:52:18:52:18 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:51:7:51:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:54:13:54:13 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:51:7:51:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:61:18:61:18 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:60:7:60:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:63:13:63:13 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:60:7:60:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:71:3:71:3 | g | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:68:5:68:5 | g | isDirect: | yes | isEscaping: | yes | -| closures.swift:71:14:71:14 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:70:7:70:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:73:13:73:13 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:70:7:70:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:85:7:85:7 | y | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | no | isEscaping: | yes | -| closures.swift:85:7:85:7 | y | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | yes | isEscaping: | yes | -| closures.swift:85:18:85:18 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:82:9:82:9 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:88:9:88:9 | b() | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:92:5:98:5 | b() | isDirect: | no | isEscaping: | yes | -| closures.swift:93:7:93:7 | y | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | yes | isEscaping: | yes | -| closures.swift:93:20:93:20 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:82:9:82:9 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:96:9:96:9 | a() | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:84:5:90:5 | a() | isDirect: | no | isEscaping: | yes | -| closures.swift:111:15:111:15 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:110:9:110:9 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:111:27:111:27 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:110:9:110:9 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:115:5:115:5 | incrX | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:109:8:109:8 | incrX | isDirect: | yes | isEscaping: | yes | -| closures.swift:130:25:130:25 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:133:20:133:20 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | no | isEscaping: | yes | -| closures.swift:133:20:133:20 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:133:24:133:24 | y | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:132:22:132:22 | y | isDirect: | yes | isEscaping: | yes | -| closures.swift:151:21:151:21 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:149:10:149:15 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:154:16:154:16 | g(_:) | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:158:3:165:3 | g(_:) | isDirect: | no | isEscaping: | yes | -| closures.swift:155:21:155:21 | next | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:154:9:154:9 | next | isDirect: | yes | isEscaping: | yes | -| closures.swift:155:34:155:34 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:149:10:149:15 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:160:21:160:21 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:158:10:158:15 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:163:16:163:16 | f(_:) | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:149:3:156:3 | f(_:) | isDirect: | no | isEscaping: | yes | -| closures.swift:164:21:164:21 | next | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:163:9:163:9 | next | isDirect: | yes | isEscaping: | yes | -| closures.swift:164:36:164:36 | x | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:158:10:158:15 | x | isDirect: | yes | isEscaping: | yes | -| closures.swift:195:3:195:3 | g | getModule: | file://:0:0:0:0 | closures | getDecl: | closures.swift:68:5:68:5 | g | isDirect: | yes | isEscaping: | yes | -getMember +| closures.swift:8:12:8:12 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:7:6:7:6 | x | isDirect: | yes | isEscaping: | no | +| closures.swift:9:12:9:12 | y | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:6:7:6:7 | y | isDirect: | yes | isEscaping: | no | +| closures.swift:16:3:16:3 | escape | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:12:5:12:5 | escape | isDirect: | yes | isEscaping: | yes | +| closures.swift:17:5:17:5 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:15:7:15:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:24:3:24:3 | escape | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:12:5:12:5 | escape | isDirect: | yes | isEscaping: | yes | +| closures.swift:31:11:31:11 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:29:7:29:7 | x | isDirect: | no | isEscaping: | no | +| closures.swift:32:14:32:14 | f | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:28:7:28:7 | f | isDirect: | no | isEscaping: | no | +| closures.swift:32:14:32:14 | f | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:28:7:28:7 | f | isDirect: | yes | isEscaping: | no | +| closures.swift:32:17:32:17 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:29:7:29:7 | x | isDirect: | yes | isEscaping: | no | +| closures.swift:39:20:39:20 | callback | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:36:21:36:58 | callback | isDirect: | yes | isEscaping: | yes | +| closures.swift:42:35:42:35 | wrapper(_:) | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:38:5:40:5 | wrapper(_:) | isDirect: | no | isEscaping: | yes | +| closures.swift:52:18:52:18 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:51:7:51:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:54:13:54:13 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:51:7:51:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:61:18:61:18 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:60:7:60:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:63:13:63:13 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:60:7:60:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:71:3:71:3 | g | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:68:5:68:5 | g | isDirect: | yes | isEscaping: | yes | +| closures.swift:71:14:71:14 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:70:7:70:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:73:13:73:13 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:70:7:70:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:85:7:85:7 | y | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | no | isEscaping: | yes | +| closures.swift:85:7:85:7 | y | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | yes | isEscaping: | yes | +| closures.swift:85:18:85:18 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:82:9:82:9 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:88:9:88:9 | b() | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:92:5:98:5 | b() | isDirect: | no | isEscaping: | yes | +| closures.swift:93:7:93:7 | y | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:79:7:79:7 | y | isDirect: | yes | isEscaping: | yes | +| closures.swift:93:20:93:20 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:82:9:82:9 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:96:9:96:9 | a() | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:84:5:90:5 | a() | isDirect: | no | isEscaping: | yes | +| closures.swift:111:15:111:15 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:110:9:110:9 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:111:27:111:27 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:110:9:110:9 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:115:5:115:5 | incrX | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:109:8:109:8 | incrX | isDirect: | yes | isEscaping: | yes | +| closures.swift:130:25:130:25 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:133:20:133:20 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | no | isEscaping: | yes | +| closures.swift:133:20:133:20 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:128:7:128:7 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:133:24:133:24 | y | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:132:22:132:22 | y | isDirect: | yes | isEscaping: | yes | +| closures.swift:151:21:151:21 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:149:10:149:15 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:154:16:154:16 | g(_:) | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:158:3:165:3 | g(_:) | isDirect: | no | isEscaping: | yes | +| closures.swift:155:21:155:21 | next | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:154:9:154:9 | next | isDirect: | yes | isEscaping: | yes | +| closures.swift:155:34:155:34 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:149:10:149:15 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:160:21:160:21 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:158:10:158:15 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:163:16:163:16 | f(_:) | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:149:3:156:3 | f(_:) | isDirect: | no | isEscaping: | yes | +| closures.swift:164:21:164:21 | next | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:163:9:163:9 | next | isDirect: | yes | isEscaping: | yes | +| closures.swift:164:36:164:36 | x | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:158:10:158:15 | x | isDirect: | yes | isEscaping: | yes | +| closures.swift:195:3:195:3 | g | getModule: | file://:0:0:0:0 | closures | getNumberOfMembers: | 0 | getDecl: | closures.swift:68:5:68:5 | g | isDirect: | yes | isEscaping: | yes | diff --git a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql index d4f39d659bce..189558f37677 100644 --- a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql @@ -2,23 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - CapturedDecl x, string getModule__label, ModuleDecl getModule, string getDecl__label, - ValueDecl getDecl, string isDirect__label, string isDirect, string isEscaping__label, +from + CapturedDecl x, ModuleDecl getModule, int getNumberOfMembers, ValueDecl getDecl, string isDirect, string isEscaping -) { +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getDecl__label = "getDecl:" and + getNumberOfMembers = x.getNumberOfMembers() and getDecl = x.getDecl() and - isDirect__label = "isDirect:" and (if x.isDirect() then isDirect = "yes" else isDirect = "no") and - isEscaping__label = "isEscaping:" and if x.isEscaping() then isEscaping = "yes" else isEscaping = "no" -} - -query predicate getMember(CapturedDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getDecl:", getDecl, + "isDirect:", isDirect, "isEscaping:", isEscaping diff --git a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql new file mode 100644 index 000000000000..2709cc86f6f2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from CapturedDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.expected index b15a1cc649df..c09b98045cf0 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.expected @@ -1,23 +1,3 @@ -instances -| class.swift:1:1:7:1 | Foo | getModule: | file://:0:0:0:0 | class | getInterfaceType: | Foo.Type | getName: | Foo | getType: | Foo | -| class.swift:11:1:14:1 | Generic | getModule: | file://:0:0:0:0 | class | getInterfaceType: | Generic.Type | getName: | Generic | getType: | Generic | -| class.swift:16:1:17:1 | Baz | getModule: | file://:0:0:0:0 | class | getInterfaceType: | Baz.Type | getName: | Baz | getType: | Baz | -getGenericTypeParam -| class.swift:11:1:14:1 | Generic | 0 | class.swift:11:15:11:15 | X | -| class.swift:11:1:14:1 | Generic | 1 | class.swift:11:18:11:18 | Y | -getMember -| class.swift:1:1:7:1 | Foo | 0 | class.swift:2:5:2:16 | var ... = ... | -| class.swift:1:1:7:1 | Foo | 1 | class.swift:2:9:2:9 | field | -| class.swift:1:1:7:1 | Foo | 2 | class.swift:4:5:6:5 | Foo.init() | -| class.swift:1:1:7:1 | Foo | 3 | class.swift:1:7:1:7 | Foo.deinit() | -| class.swift:11:1:14:1 | Generic | 0 | class.swift:12:5:12:13 | var ... = ... | -| class.swift:11:1:14:1 | Generic | 1 | class.swift:12:9:12:9 | x | -| class.swift:11:1:14:1 | Generic | 2 | class.swift:13:5:13:13 | var ... = ... | -| class.swift:11:1:14:1 | Generic | 3 | class.swift:13:9:13:9 | y | -| class.swift:11:1:14:1 | Generic | 4 | class.swift:11:7:11:7 | Generic.deinit() | -| class.swift:11:1:14:1 | Generic | 5 | class.swift:11:7:11:7 | Generic.init() | -| class.swift:16:1:17:1 | Baz | 0 | class.swift:16:7:16:7 | Baz.deinit() | -| class.swift:16:1:17:1 | Baz | 1 | class.swift:16:21:16:21 | Baz.init() | -getInheritedType -| class.swift:16:1:17:1 | Baz | 0 | Foo | -| class.swift:16:1:17:1 | Baz | 1 | Bar | +| class.swift:1:1:7:1 | Foo | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | class | getNumberOfMembers: | 4 | getInterfaceType: | Foo.Type | getName: | Foo | getNumberOfInheritedTypes: | 0 | getType: | Foo | +| class.swift:11:1:14:1 | Generic | getNumberOfGenericTypeParams: | 2 | getModule: | file://:0:0:0:0 | class | getNumberOfMembers: | 6 | getInterfaceType: | Generic.Type | getName: | Generic | getNumberOfInheritedTypes: | 0 | getType: | Generic | +| class.swift:16:1:17:1 | Baz | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | class | getNumberOfMembers: | 2 | getInterfaceType: | Baz.Type | getName: | Baz | getNumberOfInheritedTypes: | 2 | getType: | Baz | diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql index e32a98ca2bc0..31cec2c9f7ce 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql @@ -2,30 +2,19 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ClassDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string getType__label, Type getType -) { +from + ClassDecl x, int getNumberOfGenericTypeParams, ModuleDecl getModule, int getNumberOfMembers, + Type getInterfaceType, string getName, int getNumberOfInheritedTypes, Type getType +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and getName = x.getName() and - getType__label = "getType:" and + getNumberOfInheritedTypes = x.getNumberOfInheritedTypes() and getType = x.getType() -} - -query predicate getGenericTypeParam(ClassDecl x, int index, GenericTypeParamDecl getGenericTypeParam) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(ClassDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getInheritedType(ClassDecl x, int index, Type getInheritedType) { - toBeTested(x) and not x.isUnknown() and getInheritedType = x.getInheritedType(index) -} +select x, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "getName:", + getName, "getNumberOfInheritedTypes:", getNumberOfInheritedTypes, "getType:", getType diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.expected new file mode 100644 index 000000000000..8dd0e061d970 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.expected @@ -0,0 +1,2 @@ +| class.swift:11:1:14:1 | Generic | 0 | class.swift:11:15:11:15 | X | +| class.swift:11:1:14:1 | Generic | 1 | class.swift:11:18:11:18 | Y | diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql new file mode 100644 index 000000000000..382d756d5842 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ClassDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.expected b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.expected new file mode 100644 index 000000000000..8d0be1c0267d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.expected @@ -0,0 +1,2 @@ +| class.swift:16:1:17:1 | Baz | 0 | Foo | +| class.swift:16:1:17:1 | Baz | 1 | Bar | diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.ql b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.ql new file mode 100644 index 000000000000..92e9fc52b7a1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getInheritedType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ClassDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getInheritedType(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.expected new file mode 100644 index 000000000000..6c7b4ce0130e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.expected @@ -0,0 +1,12 @@ +| class.swift:1:1:7:1 | Foo | 0 | class.swift:2:5:2:16 | var ... = ... | +| class.swift:1:1:7:1 | Foo | 1 | class.swift:2:9:2:9 | field | +| class.swift:1:1:7:1 | Foo | 2 | class.swift:4:5:6:5 | Foo.init() | +| class.swift:1:1:7:1 | Foo | 3 | class.swift:1:7:1:7 | Foo.deinit() | +| class.swift:11:1:14:1 | Generic | 0 | class.swift:12:5:12:13 | var ... = ... | +| class.swift:11:1:14:1 | Generic | 1 | class.swift:12:9:12:9 | x | +| class.swift:11:1:14:1 | Generic | 2 | class.swift:13:5:13:13 | var ... = ... | +| class.swift:11:1:14:1 | Generic | 3 | class.swift:13:9:13:9 | y | +| class.swift:11:1:14:1 | Generic | 4 | class.swift:11:7:11:7 | Generic.deinit() | +| class.swift:11:1:14:1 | Generic | 5 | class.swift:11:7:11:7 | Generic.init() | +| class.swift:16:1:17:1 | Baz | 0 | class.swift:16:7:16:7 | Baz.deinit() | +| class.swift:16:1:17:1 | Baz | 1 | class.swift:16:21:16:21 | Baz.init() | diff --git a/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.ql new file mode 100644 index 000000000000..c7651a702b23 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ClassDecl/ClassDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ClassDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.expected index 85fef3f52ca5..9e05b623dd76 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.expected @@ -1,137 +1,28 @@ -instances -| var_decls.swift:2:7:2:7 | i | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | i | getType: | Int | getIntroducerInt: | 0 | -| var_decls.swift:2:12:2:12 | $i$generator | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | IndexingIterator> | getName: | $i$generator | getType: | IndexingIterator> | getIntroducerInt: | 1 | -| var_decls.swift:4:7:4:7 | i | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | i | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:7:5:7:5 | numbers | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | [Int] | getName: | numbers | getType: | [Int] | getIntroducerInt: | 1 | -| var_decls.swift:10:12:10:12 | numbers | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | [Int] | getName: | numbers | getType: | [Int] | getIntroducerInt: | 0 | -| var_decls.swift:15:7:15:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | T | getName: | wrappedValue | getType: | T | getIntroducerInt: | 1 | -| var_decls.swift:20:7:20:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:24:15:24:15 | _wrapped | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | X | getName: | _wrapped | getType: | X | getIntroducerInt: | 1 | -| var_decls.swift:24:15:24:15 | wrapped | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | wrapped | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:28:7:28:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:34:7:34:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:35:7:35:7 | projectedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Bool | getName: | projectedValue | getType: | Bool | getIntroducerInt: | 1 | -| var_decls.swift:39:7:39:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:40:7:40:7 | projectedValue | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Bool | getName: | projectedValue | getType: | Bool | getIntroducerInt: | 1 | -| var_decls.swift:54:10:54:10 | _w1 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | X | getName: | _w1 | getType: | X | getIntroducerInt: | 1 | -| var_decls.swift:54:10:54:10 | w1 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | w1 | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:55:24:55:24 | _w2 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | WrapperWithInit | getName: | _w2 | getType: | WrapperWithInit | getIntroducerInt: | 1 | -| var_decls.swift:55:24:55:24 | w2 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | w2 | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:56:29:56:29 | $w3 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Bool | getName: | $w3 | getType: | Bool | getIntroducerInt: | 1 | -| var_decls.swift:56:29:56:29 | _w3 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | WrapperWithProjected | getName: | _w3 | getType: | WrapperWithProjected | getIntroducerInt: | 1 | -| var_decls.swift:56:29:56:29 | w3 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | w3 | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:57:36:57:36 | $w4 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Bool | getName: | $w4 | getType: | Bool | getIntroducerInt: | 1 | -| var_decls.swift:57:36:57:36 | _w4 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | _w4 | getType: | WrapperWithProjectedAndInit | getIntroducerInt: | 1 | -| var_decls.swift:57:36:57:36 | w4 | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | w4 | getType: | Int | getIntroducerInt: | 1 | -| var_decls.swift:65:19:65:19 | case_variable | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | case_variable | getType: | Int | getIntroducerInt: | 0 | -| var_decls.swift:65:34:65:34 | $match | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | $match | getType: | Int | getIntroducerInt: | 0 | -| var_decls.swift:67:15:67:15 | $match | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | $match | getType: | Int | getIntroducerInt: | 0 | -| var_decls.swift:67:22:67:22 | unused_case_variable | getModule: | file://:0:0:0:0 | var_decls | getInterfaceType: | Int | getName: | unused_case_variable | getType: | Int | getIntroducerInt: | 0 | -getMember -getAccessor -| var_decls.swift:10:12:10:12 | numbers | 0 | var_decls.swift:10:12:10:12 | get | -| var_decls.swift:15:7:15:7 | wrappedValue | 0 | var_decls.swift:15:7:15:7 | get | -| var_decls.swift:15:7:15:7 | wrappedValue | 1 | var_decls.swift:15:7:15:7 | set | -| var_decls.swift:15:7:15:7 | wrappedValue | 2 | var_decls.swift:15:7:15:7 | _modify | -| var_decls.swift:20:7:20:7 | wrappedValue | 0 | var_decls.swift:20:7:20:7 | get | -| var_decls.swift:20:7:20:7 | wrappedValue | 1 | var_decls.swift:20:7:20:7 | set | -| var_decls.swift:20:7:20:7 | wrappedValue | 2 | var_decls.swift:20:7:20:7 | _modify | -| var_decls.swift:24:15:24:15 | _wrapped | 0 | var_decls.swift:24:15:24:15 | get | -| var_decls.swift:24:15:24:15 | _wrapped | 1 | var_decls.swift:24:15:24:15 | set | -| var_decls.swift:24:15:24:15 | _wrapped | 2 | var_decls.swift:24:15:24:15 | _modify | -| var_decls.swift:24:15:24:15 | wrapped | 0 | var_decls.swift:24:15:24:15 | get | -| var_decls.swift:24:15:24:15 | wrapped | 1 | var_decls.swift:24:15:24:15 | set | -| var_decls.swift:24:15:24:15 | wrapped | 2 | var_decls.swift:24:15:24:15 | _modify | -| var_decls.swift:28:7:28:7 | wrappedValue | 0 | var_decls.swift:28:7:28:7 | get | -| var_decls.swift:28:7:28:7 | wrappedValue | 1 | var_decls.swift:28:7:28:7 | set | -| var_decls.swift:28:7:28:7 | wrappedValue | 2 | var_decls.swift:28:7:28:7 | _modify | -| var_decls.swift:34:7:34:7 | wrappedValue | 0 | var_decls.swift:34:7:34:7 | get | -| var_decls.swift:34:7:34:7 | wrappedValue | 1 | var_decls.swift:34:7:34:7 | set | -| var_decls.swift:34:7:34:7 | wrappedValue | 2 | var_decls.swift:34:7:34:7 | _modify | -| var_decls.swift:35:7:35:7 | projectedValue | 0 | var_decls.swift:35:7:35:7 | get | -| var_decls.swift:35:7:35:7 | projectedValue | 1 | var_decls.swift:35:7:35:7 | set | -| var_decls.swift:35:7:35:7 | projectedValue | 2 | var_decls.swift:35:7:35:7 | _modify | -| var_decls.swift:39:7:39:7 | wrappedValue | 0 | var_decls.swift:39:7:39:7 | get | -| var_decls.swift:39:7:39:7 | wrappedValue | 1 | var_decls.swift:39:7:39:7 | set | -| var_decls.swift:39:7:39:7 | wrappedValue | 2 | var_decls.swift:39:7:39:7 | _modify | -| var_decls.swift:40:7:40:7 | projectedValue | 0 | var_decls.swift:40:7:40:7 | get | -| var_decls.swift:40:7:40:7 | projectedValue | 1 | var_decls.swift:40:7:40:7 | set | -| var_decls.swift:40:7:40:7 | projectedValue | 2 | var_decls.swift:40:7:40:7 | _modify | -| var_decls.swift:54:10:54:10 | w1 | 0 | var_decls.swift:54:10:54:10 | get | -| var_decls.swift:54:10:54:10 | w1 | 1 | var_decls.swift:54:10:54:10 | set | -| var_decls.swift:55:24:55:24 | w2 | 0 | var_decls.swift:55:24:55:24 | get | -| var_decls.swift:55:24:55:24 | w2 | 1 | var_decls.swift:55:24:55:24 | set | -| var_decls.swift:56:29:56:29 | $w3 | 0 | var_decls.swift:56:29:56:29 | get | -| var_decls.swift:56:29:56:29 | $w3 | 1 | var_decls.swift:56:29:56:29 | set | -| var_decls.swift:56:29:56:29 | w3 | 0 | var_decls.swift:56:29:56:29 | get | -| var_decls.swift:56:29:56:29 | w3 | 1 | var_decls.swift:56:29:56:29 | set | -| var_decls.swift:57:36:57:36 | $w4 | 0 | var_decls.swift:57:36:57:36 | get | -| var_decls.swift:57:36:57:36 | $w4 | 1 | var_decls.swift:57:36:57:36 | set | -| var_decls.swift:57:36:57:36 | w4 | 0 | var_decls.swift:57:36:57:36 | get | -| var_decls.swift:57:36:57:36 | w4 | 1 | var_decls.swift:57:36:57:36 | set | -getAttachedPropertyWrapperType -| var_decls.swift:24:15:24:15 | wrapped | X | -| var_decls.swift:54:10:54:10 | w1 | X | -| var_decls.swift:55:24:55:24 | w2 | WrapperWithInit | -| var_decls.swift:56:29:56:29 | w3 | WrapperWithProjected | -| var_decls.swift:57:36:57:36 | w4 | WrapperWithProjectedAndInit | -getParentPattern -| var_decls.swift:2:7:2:7 | i | var_decls.swift:2:7:2:7 | i | -| var_decls.swift:2:12:2:12 | $i$generator | var_decls.swift:2:12:2:12 | $i$generator | -| var_decls.swift:4:7:4:7 | i | var_decls.swift:4:7:4:7 | i | -| var_decls.swift:7:5:7:5 | numbers | var_decls.swift:7:5:7:5 | numbers | -| var_decls.swift:10:12:10:12 | numbers | var_decls.swift:10:12:10:12 | numbers | -| var_decls.swift:15:7:15:7 | wrappedValue | var_decls.swift:15:7:15:21 | ... as ... | -| var_decls.swift:20:7:20:7 | wrappedValue | var_decls.swift:20:7:20:21 | ... as ... | -| var_decls.swift:24:15:24:15 | _wrapped | var_decls.swift:24:15:24:15 | ... as ... | -| var_decls.swift:24:15:24:15 | wrapped | var_decls.swift:24:15:24:25 | ... as ... | -| var_decls.swift:28:7:28:7 | wrappedValue | var_decls.swift:28:7:28:22 | ... as ... | -| var_decls.swift:34:7:34:7 | wrappedValue | var_decls.swift:34:7:34:22 | ... as ... | -| var_decls.swift:35:7:35:7 | projectedValue | var_decls.swift:35:7:35:24 | ... as ... | -| var_decls.swift:39:7:39:7 | wrappedValue | var_decls.swift:39:7:39:22 | ... as ... | -| var_decls.swift:40:7:40:7 | projectedValue | var_decls.swift:40:7:40:24 | ... as ... | -| var_decls.swift:54:10:54:10 | _w1 | var_decls.swift:54:10:54:10 | ... as ... | -| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:10:54:10 | w1 | -| var_decls.swift:55:24:55:24 | _w2 | var_decls.swift:55:24:55:24 | ... as ... | -| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:24:55:24 | w2 | -| var_decls.swift:56:29:56:29 | $w3 | var_decls.swift:56:29:56:29 | ... as ... | -| var_decls.swift:56:29:56:29 | _w3 | var_decls.swift:56:29:56:29 | ... as ... | -| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | w3 | -| var_decls.swift:57:36:57:36 | $w4 | var_decls.swift:57:36:57:36 | ... as ... | -| var_decls.swift:57:36:57:36 | _w4 | var_decls.swift:57:36:57:36 | ... as ... | -| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | w4 | -| var_decls.swift:65:19:65:19 | case_variable | var_decls.swift:65:8:65:35 | .value(...) | -| var_decls.swift:67:22:67:22 | unused_case_variable | var_decls.swift:67:8:67:42 | .value(...) | -getParentInitializer -| var_decls.swift:2:12:2:12 | $i$generator | var_decls.swift:2:12:2:16 | call to makeIterator() | -| var_decls.swift:4:7:4:7 | i | var_decls.swift:4:11:4:11 | 0 | -| var_decls.swift:7:5:7:5 | numbers | var_decls.swift:7:15:7:18 | [...] | -| var_decls.swift:10:12:10:12 | numbers | var_decls.swift:10:22:10:35 | [...] | -| var_decls.swift:34:7:34:7 | wrappedValue | var_decls.swift:34:28:34:28 | 42 | -| var_decls.swift:35:7:35:7 | projectedValue | var_decls.swift:35:31:35:31 | false | -| var_decls.swift:54:10:54:10 | _w1 | var_decls.swift:54:4:54:15 | call to X.init(wrappedValue:) | -| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:4:54:15 | call to X.init(wrappedValue:) | -| var_decls.swift:55:24:55:24 | _w2 | var_decls.swift:55:4:55:29 | call to WrapperWithInit.init(wrappedValue:) | -| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:4:55:29 | call to WrapperWithInit.init(wrappedValue:) | -| var_decls.swift:56:29:56:29 | _w3 | var_decls.swift:56:4:56:34 | call to WrapperWithProjected.init(wrappedValue:projectedValue:) | -| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:4:56:34 | call to WrapperWithProjected.init(wrappedValue:projectedValue:) | -| var_decls.swift:57:36:57:36 | _w4 | var_decls.swift:57:4:57:41 | call to WrapperWithProjectedAndInit.init(wrappedValue:) | -| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:4:57:41 | call to WrapperWithProjectedAndInit.init(wrappedValue:) | -getPropertyWrapperBackingVarBinding -| var_decls.swift:24:15:24:15 | wrapped | file://:0:0:0:0 | var ... = ... | -| var_decls.swift:54:10:54:10 | w1 | file://:0:0:0:0 | var ... = ... | -| var_decls.swift:55:24:55:24 | w2 | file://:0:0:0:0 | var ... = ... | -| var_decls.swift:56:29:56:29 | w3 | file://:0:0:0:0 | var ... = ... | -| var_decls.swift:57:36:57:36 | w4 | file://:0:0:0:0 | var ... = ... | -getPropertyWrapperBackingVar -| var_decls.swift:24:15:24:15 | wrapped | var_decls.swift:24:15:24:15 | _wrapped | -| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:10:54:10 | _w1 | -| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:24:55:24 | _w2 | -| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | _w3 | -| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | _w4 | -getPropertyWrapperProjectionVarBinding -| var_decls.swift:56:29:56:29 | w3 | file://:0:0:0:0 | var ... = ... | -| var_decls.swift:57:36:57:36 | w4 | file://:0:0:0:0 | var ... = ... | -getPropertyWrapperProjectionVar -| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | $w3 | -| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | $w4 | +| var_decls.swift:2:7:2:7 | i | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | i | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | +| var_decls.swift:2:12:2:12 | $i$generator | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | IndexingIterator> | getNumberOfAccessors: | 0 | getName: | $i$generator | getType: | IndexingIterator> | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:4:7:4:7 | i | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | i | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:7:5:7:5 | numbers | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | [Int] | getNumberOfAccessors: | 0 | getName: | numbers | getType: | [Int] | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:10:12:10:12 | numbers | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | [Int] | getNumberOfAccessors: | 1 | getName: | numbers | getType: | [Int] | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | +| var_decls.swift:15:7:15:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | T | getNumberOfAccessors: | 3 | getName: | wrappedValue | getType: | T | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:20:7:20:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 3 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:24:15:24:15 | _wrapped | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | X | getNumberOfAccessors: | 3 | getName: | _wrapped | getType: | X | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:24:15:24:15 | wrapped | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 3 | getName: | wrapped | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:28:7:28:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 3 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:34:7:34:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 3 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:35:7:35:7 | projectedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 3 | getName: | projectedValue | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:39:7:39:7 | wrappedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 3 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:40:7:40:7 | projectedValue | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 3 | getName: | projectedValue | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:54:10:54:10 | _w1 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | X | getNumberOfAccessors: | 0 | getName: | _w1 | getType: | X | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:54:10:54:10 | w1 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 2 | getName: | w1 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:55:24:55:24 | _w2 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithInit | getNumberOfAccessors: | 0 | getName: | _w2 | getType: | WrapperWithInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:55:24:55:24 | w2 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 2 | getName: | w2 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:56:29:56:29 | $w3 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 2 | getName: | $w3 | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:56:29:56:29 | _w3 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | _w3 | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:56:29:56:29 | w3 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 2 | getName: | w3 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | yes | hasPropertyWrapperProjectionVar: | yes | getIntroducerInt: | 1 | +| var_decls.swift:57:36:57:36 | $w4 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 2 | getName: | $w4 | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:57:36:57:36 | _w4 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | _w4 | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 1 | +| var_decls.swift:57:36:57:36 | w4 | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 2 | getName: | w4 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | yes | hasParentInitializer: | yes | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | yes | hasPropertyWrapperProjectionVar: | yes | getIntroducerInt: | 1 | +| var_decls.swift:65:19:65:19 | case_variable | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | case_variable | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | +| var_decls.swift:65:34:65:34 | $match | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | $match | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | +| var_decls.swift:67:15:67:15 | $match | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | $match | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | +| var_decls.swift:67:22:67:22 | unused_case_variable | getModule: | file://:0:0:0:0 | var_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | unused_case_variable | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | yes | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | getIntroducerInt: | 0 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql index f6c7b5541436..2dd21cf6a170 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl.ql @@ -2,75 +2,55 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ConcreteVarDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string getType__label, Type getType, - string getIntroducerInt__label, int getIntroducerInt -) { +from + ConcreteVarDecl x, ModuleDecl getModule, int getNumberOfMembers, Type getInterfaceType, + int getNumberOfAccessors, string getName, Type getType, string hasAttachedPropertyWrapperType, + string hasParentPattern, string hasParentInitializer, string hasPropertyWrapperBackingVarBinding, + string hasPropertyWrapperBackingVar, string hasPropertyWrapperProjectionVarBinding, + string hasPropertyWrapperProjectionVar, int getIntroducerInt +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and + getNumberOfAccessors = x.getNumberOfAccessors() and getName = x.getName() and - getType__label = "getType:" and getType = x.getType() and - getIntroducerInt__label = "getIntroducerInt:" and + ( + if x.hasAttachedPropertyWrapperType() + then hasAttachedPropertyWrapperType = "yes" + else hasAttachedPropertyWrapperType = "no" + ) and + (if x.hasParentPattern() then hasParentPattern = "yes" else hasParentPattern = "no") and + (if x.hasParentInitializer() then hasParentInitializer = "yes" else hasParentInitializer = "no") and + ( + if x.hasPropertyWrapperBackingVarBinding() + then hasPropertyWrapperBackingVarBinding = "yes" + else hasPropertyWrapperBackingVarBinding = "no" + ) and + ( + if x.hasPropertyWrapperBackingVar() + then hasPropertyWrapperBackingVar = "yes" + else hasPropertyWrapperBackingVar = "no" + ) and + ( + if x.hasPropertyWrapperProjectionVarBinding() + then hasPropertyWrapperProjectionVarBinding = "yes" + else hasPropertyWrapperProjectionVarBinding = "no" + ) and + ( + if x.hasPropertyWrapperProjectionVar() + then hasPropertyWrapperProjectionVar = "yes" + else hasPropertyWrapperProjectionVar = "no" + ) and getIntroducerInt = x.getIntroducerInt() -} - -query predicate getMember(ConcreteVarDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getAccessor(ConcreteVarDecl x, int index, Accessor getAccessor) { - toBeTested(x) and not x.isUnknown() and getAccessor = x.getAccessor(index) -} - -query predicate getAttachedPropertyWrapperType( - ConcreteVarDecl x, Type getAttachedPropertyWrapperType -) { - toBeTested(x) and - not x.isUnknown() and - getAttachedPropertyWrapperType = x.getAttachedPropertyWrapperType() -} - -query predicate getParentPattern(ConcreteVarDecl x, Pattern getParentPattern) { - toBeTested(x) and not x.isUnknown() and getParentPattern = x.getParentPattern() -} - -query predicate getParentInitializer(ConcreteVarDecl x, Expr getParentInitializer) { - toBeTested(x) and not x.isUnknown() and getParentInitializer = x.getParentInitializer() -} - -query predicate getPropertyWrapperBackingVarBinding( - ConcreteVarDecl x, PatternBindingDecl getPropertyWrapperBackingVarBinding -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperBackingVarBinding = x.getPropertyWrapperBackingVarBinding() -} - -query predicate getPropertyWrapperBackingVar(ConcreteVarDecl x, VarDecl getPropertyWrapperBackingVar) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperBackingVar = x.getPropertyWrapperBackingVar() -} - -query predicate getPropertyWrapperProjectionVarBinding( - ConcreteVarDecl x, PatternBindingDecl getPropertyWrapperProjectionVarBinding -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperProjectionVarBinding = x.getPropertyWrapperProjectionVarBinding() -} - -query predicate getPropertyWrapperProjectionVar( - ConcreteVarDecl x, VarDecl getPropertyWrapperProjectionVar -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperProjectionVar = x.getPropertyWrapperProjectionVar() -} +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", + getInterfaceType, "getNumberOfAccessors:", getNumberOfAccessors, "getName:", getName, "getType:", + getType, "hasAttachedPropertyWrapperType:", hasAttachedPropertyWrapperType, "hasParentPattern:", + hasParentPattern, "hasParentInitializer:", hasParentInitializer, + "hasPropertyWrapperBackingVarBinding:", hasPropertyWrapperBackingVarBinding, + "hasPropertyWrapperBackingVar:", hasPropertyWrapperBackingVar, + "hasPropertyWrapperProjectionVarBinding:", hasPropertyWrapperProjectionVarBinding, + "hasPropertyWrapperProjectionVar:", hasPropertyWrapperProjectionVar, "getIntroducerInt:", + getIntroducerInt diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.expected new file mode 100644 index 000000000000..956ca097bd16 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.expected @@ -0,0 +1,40 @@ +| var_decls.swift:10:12:10:12 | numbers | 0 | var_decls.swift:10:12:10:12 | get | +| var_decls.swift:15:7:15:7 | wrappedValue | 0 | var_decls.swift:15:7:15:7 | get | +| var_decls.swift:15:7:15:7 | wrappedValue | 1 | var_decls.swift:15:7:15:7 | set | +| var_decls.swift:15:7:15:7 | wrappedValue | 2 | var_decls.swift:15:7:15:7 | _modify | +| var_decls.swift:20:7:20:7 | wrappedValue | 0 | var_decls.swift:20:7:20:7 | get | +| var_decls.swift:20:7:20:7 | wrappedValue | 1 | var_decls.swift:20:7:20:7 | set | +| var_decls.swift:20:7:20:7 | wrappedValue | 2 | var_decls.swift:20:7:20:7 | _modify | +| var_decls.swift:24:15:24:15 | _wrapped | 0 | var_decls.swift:24:15:24:15 | get | +| var_decls.swift:24:15:24:15 | _wrapped | 1 | var_decls.swift:24:15:24:15 | set | +| var_decls.swift:24:15:24:15 | _wrapped | 2 | var_decls.swift:24:15:24:15 | _modify | +| var_decls.swift:24:15:24:15 | wrapped | 0 | var_decls.swift:24:15:24:15 | get | +| var_decls.swift:24:15:24:15 | wrapped | 1 | var_decls.swift:24:15:24:15 | set | +| var_decls.swift:24:15:24:15 | wrapped | 2 | var_decls.swift:24:15:24:15 | _modify | +| var_decls.swift:28:7:28:7 | wrappedValue | 0 | var_decls.swift:28:7:28:7 | get | +| var_decls.swift:28:7:28:7 | wrappedValue | 1 | var_decls.swift:28:7:28:7 | set | +| var_decls.swift:28:7:28:7 | wrappedValue | 2 | var_decls.swift:28:7:28:7 | _modify | +| var_decls.swift:34:7:34:7 | wrappedValue | 0 | var_decls.swift:34:7:34:7 | get | +| var_decls.swift:34:7:34:7 | wrappedValue | 1 | var_decls.swift:34:7:34:7 | set | +| var_decls.swift:34:7:34:7 | wrappedValue | 2 | var_decls.swift:34:7:34:7 | _modify | +| var_decls.swift:35:7:35:7 | projectedValue | 0 | var_decls.swift:35:7:35:7 | get | +| var_decls.swift:35:7:35:7 | projectedValue | 1 | var_decls.swift:35:7:35:7 | set | +| var_decls.swift:35:7:35:7 | projectedValue | 2 | var_decls.swift:35:7:35:7 | _modify | +| var_decls.swift:39:7:39:7 | wrappedValue | 0 | var_decls.swift:39:7:39:7 | get | +| var_decls.swift:39:7:39:7 | wrappedValue | 1 | var_decls.swift:39:7:39:7 | set | +| var_decls.swift:39:7:39:7 | wrappedValue | 2 | var_decls.swift:39:7:39:7 | _modify | +| var_decls.swift:40:7:40:7 | projectedValue | 0 | var_decls.swift:40:7:40:7 | get | +| var_decls.swift:40:7:40:7 | projectedValue | 1 | var_decls.swift:40:7:40:7 | set | +| var_decls.swift:40:7:40:7 | projectedValue | 2 | var_decls.swift:40:7:40:7 | _modify | +| var_decls.swift:54:10:54:10 | w1 | 0 | var_decls.swift:54:10:54:10 | get | +| var_decls.swift:54:10:54:10 | w1 | 1 | var_decls.swift:54:10:54:10 | set | +| var_decls.swift:55:24:55:24 | w2 | 0 | var_decls.swift:55:24:55:24 | get | +| var_decls.swift:55:24:55:24 | w2 | 1 | var_decls.swift:55:24:55:24 | set | +| var_decls.swift:56:29:56:29 | $w3 | 0 | var_decls.swift:56:29:56:29 | get | +| var_decls.swift:56:29:56:29 | $w3 | 1 | var_decls.swift:56:29:56:29 | set | +| var_decls.swift:56:29:56:29 | w3 | 0 | var_decls.swift:56:29:56:29 | get | +| var_decls.swift:56:29:56:29 | w3 | 1 | var_decls.swift:56:29:56:29 | set | +| var_decls.swift:57:36:57:36 | $w4 | 0 | var_decls.swift:57:36:57:36 | get | +| var_decls.swift:57:36:57:36 | $w4 | 1 | var_decls.swift:57:36:57:36 | set | +| var_decls.swift:57:36:57:36 | w4 | 0 | var_decls.swift:57:36:57:36 | get | +| var_decls.swift:57:36:57:36 | w4 | 1 | var_decls.swift:57:36:57:36 | set | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.ql new file mode 100644 index 000000000000..d169f10c812b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAccessor.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAccessor(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.expected new file mode 100644 index 000000000000..0212cc38f14f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.expected @@ -0,0 +1,5 @@ +| var_decls.swift:24:15:24:15 | wrapped | X | +| var_decls.swift:54:10:54:10 | w1 | X | +| var_decls.swift:55:24:55:24 | w2 | WrapperWithInit | +| var_decls.swift:56:29:56:29 | w3 | WrapperWithProjected | +| var_decls.swift:57:36:57:36 | w4 | WrapperWithProjectedAndInit | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.ql new file mode 100644 index 000000000000..ef8e58e63712 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getAttachedPropertyWrapperType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttachedPropertyWrapperType() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.ql new file mode 100644 index 000000000000..e559cfeae78d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.expected new file mode 100644 index 000000000000..913adec2f2ba --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.expected @@ -0,0 +1,14 @@ +| var_decls.swift:2:12:2:12 | $i$generator | var_decls.swift:2:12:2:16 | call to makeIterator() | +| var_decls.swift:4:7:4:7 | i | var_decls.swift:4:11:4:11 | 0 | +| var_decls.swift:7:5:7:5 | numbers | var_decls.swift:7:15:7:18 | [...] | +| var_decls.swift:10:12:10:12 | numbers | var_decls.swift:10:22:10:35 | [...] | +| var_decls.swift:34:7:34:7 | wrappedValue | var_decls.swift:34:28:34:28 | 42 | +| var_decls.swift:35:7:35:7 | projectedValue | var_decls.swift:35:31:35:31 | false | +| var_decls.swift:54:10:54:10 | _w1 | var_decls.swift:54:4:54:15 | call to X.init(wrappedValue:) | +| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:4:54:15 | call to X.init(wrappedValue:) | +| var_decls.swift:55:24:55:24 | _w2 | var_decls.swift:55:4:55:29 | call to WrapperWithInit.init(wrappedValue:) | +| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:4:55:29 | call to WrapperWithInit.init(wrappedValue:) | +| var_decls.swift:56:29:56:29 | _w3 | var_decls.swift:56:4:56:34 | call to WrapperWithProjected.init(wrappedValue:projectedValue:) | +| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:4:56:34 | call to WrapperWithProjected.init(wrappedValue:projectedValue:) | +| var_decls.swift:57:36:57:36 | _w4 | var_decls.swift:57:4:57:41 | call to WrapperWithProjectedAndInit.init(wrappedValue:) | +| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:4:57:41 | call to WrapperWithProjectedAndInit.init(wrappedValue:) | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.ql new file mode 100644 index 000000000000..cc09f9a38afd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentInitializer.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getParentInitializer() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.expected new file mode 100644 index 000000000000..e59322e36c1b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.expected @@ -0,0 +1,26 @@ +| var_decls.swift:2:7:2:7 | i | var_decls.swift:2:7:2:7 | i | +| var_decls.swift:2:12:2:12 | $i$generator | var_decls.swift:2:12:2:12 | $i$generator | +| var_decls.swift:4:7:4:7 | i | var_decls.swift:4:7:4:7 | i | +| var_decls.swift:7:5:7:5 | numbers | var_decls.swift:7:5:7:5 | numbers | +| var_decls.swift:10:12:10:12 | numbers | var_decls.swift:10:12:10:12 | numbers | +| var_decls.swift:15:7:15:7 | wrappedValue | var_decls.swift:15:7:15:21 | ... as ... | +| var_decls.swift:20:7:20:7 | wrappedValue | var_decls.swift:20:7:20:21 | ... as ... | +| var_decls.swift:24:15:24:15 | _wrapped | var_decls.swift:24:15:24:15 | ... as ... | +| var_decls.swift:24:15:24:15 | wrapped | var_decls.swift:24:15:24:25 | ... as ... | +| var_decls.swift:28:7:28:7 | wrappedValue | var_decls.swift:28:7:28:22 | ... as ... | +| var_decls.swift:34:7:34:7 | wrappedValue | var_decls.swift:34:7:34:22 | ... as ... | +| var_decls.swift:35:7:35:7 | projectedValue | var_decls.swift:35:7:35:24 | ... as ... | +| var_decls.swift:39:7:39:7 | wrappedValue | var_decls.swift:39:7:39:22 | ... as ... | +| var_decls.swift:40:7:40:7 | projectedValue | var_decls.swift:40:7:40:24 | ... as ... | +| var_decls.swift:54:10:54:10 | _w1 | var_decls.swift:54:10:54:10 | ... as ... | +| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:10:54:10 | w1 | +| var_decls.swift:55:24:55:24 | _w2 | var_decls.swift:55:24:55:24 | ... as ... | +| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:24:55:24 | w2 | +| var_decls.swift:56:29:56:29 | $w3 | var_decls.swift:56:29:56:29 | ... as ... | +| var_decls.swift:56:29:56:29 | _w3 | var_decls.swift:56:29:56:29 | ... as ... | +| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | w3 | +| var_decls.swift:57:36:57:36 | $w4 | var_decls.swift:57:36:57:36 | ... as ... | +| var_decls.swift:57:36:57:36 | _w4 | var_decls.swift:57:36:57:36 | ... as ... | +| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | w4 | +| var_decls.swift:65:19:65:19 | case_variable | var_decls.swift:65:8:65:35 | .value(...) | +| var_decls.swift:67:22:67:22 | unused_case_variable | var_decls.swift:67:8:67:42 | .value(...) | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.ql new file mode 100644 index 000000000000..2fb533a5a697 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getParentPattern.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getParentPattern() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.expected new file mode 100644 index 000000000000..b32567e0cbba --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.expected @@ -0,0 +1,5 @@ +| var_decls.swift:24:15:24:15 | wrapped | var_decls.swift:24:15:24:15 | _wrapped | +| var_decls.swift:54:10:54:10 | w1 | var_decls.swift:54:10:54:10 | _w1 | +| var_decls.swift:55:24:55:24 | w2 | var_decls.swift:55:24:55:24 | _w2 | +| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | _w3 | +| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | _w4 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.ql new file mode 100644 index 000000000000..b57a2cd02b71 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperBackingVar() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.expected new file mode 100644 index 000000000000..d6069ccf602e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.expected @@ -0,0 +1,5 @@ +| var_decls.swift:24:15:24:15 | wrapped | file://:0:0:0:0 | var ... = ... | +| var_decls.swift:54:10:54:10 | w1 | file://:0:0:0:0 | var ... = ... | +| var_decls.swift:55:24:55:24 | w2 | file://:0:0:0:0 | var ... = ... | +| var_decls.swift:56:29:56:29 | w3 | file://:0:0:0:0 | var ... = ... | +| var_decls.swift:57:36:57:36 | w4 | file://:0:0:0:0 | var ... = ... | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.ql new file mode 100644 index 000000000000..27d1215c98ac --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperBackingVarBinding.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperBackingVarBinding() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.expected new file mode 100644 index 000000000000..720938bab9b4 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.expected @@ -0,0 +1,2 @@ +| var_decls.swift:56:29:56:29 | w3 | var_decls.swift:56:29:56:29 | $w3 | +| var_decls.swift:57:36:57:36 | w4 | var_decls.swift:57:36:57:36 | $w4 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.ql new file mode 100644 index 000000000000..6376fc809b50 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperProjectionVar() diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.expected b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.expected new file mode 100644 index 000000000000..cb47a922746d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.expected @@ -0,0 +1,2 @@ +| var_decls.swift:56:29:56:29 | w3 | file://:0:0:0:0 | var ... = ... | +| var_decls.swift:57:36:57:36 | w4 | file://:0:0:0:0 | var ... = ... | diff --git a/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.ql b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.ql new file mode 100644 index 000000000000..7e513c831a73 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ConcreteVarDecl/ConcreteVarDecl_getPropertyWrapperProjectionVarBinding.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConcreteVarDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperProjectionVarBinding() diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.expected index b6e400b30fa0..754ef2c4f19d 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.expected @@ -1,33 +1,12 @@ -instances -| enums.swift:2:5:2:18 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:3:5:3:26 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:8:5:8:18 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:9:5:9:26 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:13:5:13:22 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:14:5:14:21 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:15:5:15:35 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:19:5:19:10 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:20:5:20:16 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:24:5:24:25 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:25:5:25:24 | case ... | getModule: | file://:0:0:0:0 | enums | -| enums.swift:26:5:26:44 | case ... | getModule: | file://:0:0:0:0 | enums | -getMember -getElement -| enums.swift:2:5:2:18 | case ... | 0 | enums.swift:2:10:2:10 | value1 | -| enums.swift:2:5:2:18 | case ... | 1 | enums.swift:2:18:2:18 | value2 | -| enums.swift:3:5:3:26 | case ... | 0 | enums.swift:3:10:3:10 | value3 | -| enums.swift:3:5:3:26 | case ... | 1 | enums.swift:3:18:3:18 | value4 | -| enums.swift:3:5:3:26 | case ... | 2 | enums.swift:3:26:3:26 | value5 | -| enums.swift:8:5:8:18 | case ... | 0 | enums.swift:8:10:8:10 | value1 | -| enums.swift:8:5:8:18 | case ... | 1 | enums.swift:8:18:8:18 | value2 | -| enums.swift:9:5:9:26 | case ... | 0 | enums.swift:9:10:9:10 | value3 | -| enums.swift:9:5:9:26 | case ... | 1 | enums.swift:9:18:9:18 | value4 | -| enums.swift:9:5:9:26 | case ... | 2 | enums.swift:9:26:9:26 | value5 | -| enums.swift:13:5:13:22 | case ... | 0 | enums.swift:13:10:13:22 | nodata1 | -| enums.swift:14:5:14:21 | case ... | 0 | enums.swift:14:10:14:21 | intdata | -| enums.swift:15:5:15:35 | case ... | 0 | enums.swift:15:10:15:35 | tuple | -| enums.swift:19:5:19:10 | case ... | 0 | enums.swift:19:10:19:10 | none | -| enums.swift:20:5:20:16 | case ... | 0 | enums.swift:20:10:20:16 | some | -| enums.swift:24:5:24:25 | case ... | 0 | enums.swift:24:10:24:25 | nodata1 | -| enums.swift:25:5:25:24 | case ... | 0 | enums.swift:25:10:25:24 | intdata | -| enums.swift:26:5:26:44 | case ... | 0 | enums.swift:26:10:26:44 | tuple | +| enums.swift:2:5:2:18 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 2 | +| enums.swift:3:5:3:26 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 3 | +| enums.swift:8:5:8:18 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 2 | +| enums.swift:9:5:9:26 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 3 | +| enums.swift:13:5:13:22 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:14:5:14:21 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:15:5:15:35 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:19:5:19:10 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:20:5:20:16 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:24:5:24:25 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:25:5:25:24 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | +| enums.swift:26:5:26:44 | case ... | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getNumberOfElements: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql index fffe694415c5..b0cf267f6452 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl.ql @@ -2,17 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances(EnumCaseDecl x, string getModule__label, ModuleDecl getModule) { +from EnumCaseDecl x, ModuleDecl getModule, int getNumberOfMembers, int getNumberOfElements +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and - getModule = x.getModule() -} - -query predicate getMember(EnumCaseDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getElement(EnumCaseDecl x, int index, EnumElementDecl getElement) { - toBeTested(x) and not x.isUnknown() and getElement = x.getElement(index) -} + getModule = x.getModule() and + getNumberOfMembers = x.getNumberOfMembers() and + getNumberOfElements = x.getNumberOfElements() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, + "getNumberOfElements:", getNumberOfElements diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.expected new file mode 100644 index 000000000000..d5082606f664 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.expected @@ -0,0 +1,18 @@ +| enums.swift:2:5:2:18 | case ... | 0 | enums.swift:2:10:2:10 | value1 | +| enums.swift:2:5:2:18 | case ... | 1 | enums.swift:2:18:2:18 | value2 | +| enums.swift:3:5:3:26 | case ... | 0 | enums.swift:3:10:3:10 | value3 | +| enums.swift:3:5:3:26 | case ... | 1 | enums.swift:3:18:3:18 | value4 | +| enums.swift:3:5:3:26 | case ... | 2 | enums.swift:3:26:3:26 | value5 | +| enums.swift:8:5:8:18 | case ... | 0 | enums.swift:8:10:8:10 | value1 | +| enums.swift:8:5:8:18 | case ... | 1 | enums.swift:8:18:8:18 | value2 | +| enums.swift:9:5:9:26 | case ... | 0 | enums.swift:9:10:9:10 | value3 | +| enums.swift:9:5:9:26 | case ... | 1 | enums.swift:9:18:9:18 | value4 | +| enums.swift:9:5:9:26 | case ... | 2 | enums.swift:9:26:9:26 | value5 | +| enums.swift:13:5:13:22 | case ... | 0 | enums.swift:13:10:13:22 | nodata1 | +| enums.swift:14:5:14:21 | case ... | 0 | enums.swift:14:10:14:21 | intdata | +| enums.swift:15:5:15:35 | case ... | 0 | enums.swift:15:10:15:35 | tuple | +| enums.swift:19:5:19:10 | case ... | 0 | enums.swift:19:10:19:10 | none | +| enums.swift:20:5:20:16 | case ... | 0 | enums.swift:20:10:20:16 | some | +| enums.swift:24:5:24:25 | case ... | 0 | enums.swift:24:10:24:25 | nodata1 | +| enums.swift:25:5:25:24 | case ... | 0 | enums.swift:25:10:25:24 | intdata | +| enums.swift:26:5:26:44 | case ... | 0 | enums.swift:26:10:26:44 | tuple | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.ql new file mode 100644 index 000000000000..bbc22666cc00 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getElement.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumCaseDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getElement(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.ql new file mode 100644 index 000000000000..630e99f9f57e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumCaseDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumCaseDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.expected index 06c1789b3bcc..694cf7d10353 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.expected @@ -1,49 +1,5 @@ -instances -| enums.swift:1:1:4:1 | EnumValues | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | EnumValues.Type | getName: | EnumValues | getType: | EnumValues | -| enums.swift:7:1:10:1 | EnumValuesWithBase | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | EnumValuesWithBase.Type | getName: | EnumValuesWithBase | getType: | EnumValuesWithBase | -| enums.swift:12:1:16:1 | EnumWithParams | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | EnumWithParams.Type | getName: | EnumWithParams | getType: | EnumWithParams | -| enums.swift:18:1:21:1 | GenericEnum | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | GenericEnum.Type | getName: | GenericEnum | getType: | GenericEnum | -| enums.swift:23:1:27:1 | EnumWithNamedParams | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | EnumWithNamedParams.Type | getName: | EnumWithNamedParams | getType: | EnumWithNamedParams | -getGenericTypeParam -| enums.swift:18:1:21:1 | GenericEnum | 0 | enums.swift:18:18:18:18 | T | -getMember -| enums.swift:1:1:4:1 | EnumValues | 0 | enums.swift:2:5:2:18 | case ... | -| enums.swift:1:1:4:1 | EnumValues | 1 | enums.swift:2:10:2:10 | value1 | -| enums.swift:1:1:4:1 | EnumValues | 2 | enums.swift:2:18:2:18 | value2 | -| enums.swift:1:1:4:1 | EnumValues | 3 | enums.swift:3:5:3:26 | case ... | -| enums.swift:1:1:4:1 | EnumValues | 4 | enums.swift:3:10:3:10 | value3 | -| enums.swift:1:1:4:1 | EnumValues | 5 | enums.swift:3:18:3:18 | value4 | -| enums.swift:1:1:4:1 | EnumValues | 6 | enums.swift:3:26:3:26 | value5 | -| enums.swift:1:1:4:1 | EnumValues | 7 | file://:0:0:0:0 | __derived_enum_equals(_:_:) | -| enums.swift:1:1:4:1 | EnumValues | 8 | file://:0:0:0:0 | hashValue | -| enums.swift:1:1:4:1 | EnumValues | 9 | file://:0:0:0:0 | var ... = ... | -| enums.swift:1:1:4:1 | EnumValues | 10 | file://:0:0:0:0 | hash(into:) | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 0 | enums.swift:8:5:8:18 | case ... | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 1 | enums.swift:8:10:8:10 | value1 | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 2 | enums.swift:8:18:8:18 | value2 | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 3 | enums.swift:9:5:9:26 | case ... | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 4 | enums.swift:9:10:9:10 | value3 | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 5 | enums.swift:9:18:9:18 | value4 | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 6 | enums.swift:9:26:9:26 | value5 | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 7 | file://:0:0:0:0 | RawValue | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 8 | file://:0:0:0:0 | EnumValuesWithBase.init(rawValue:) | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 9 | file://:0:0:0:0 | rawValue | -| enums.swift:7:1:10:1 | EnumValuesWithBase | 10 | file://:0:0:0:0 | var ... = ... | -| enums.swift:12:1:16:1 | EnumWithParams | 0 | enums.swift:13:5:13:22 | case ... | -| enums.swift:12:1:16:1 | EnumWithParams | 1 | enums.swift:13:10:13:22 | nodata1 | -| enums.swift:12:1:16:1 | EnumWithParams | 2 | enums.swift:14:5:14:21 | case ... | -| enums.swift:12:1:16:1 | EnumWithParams | 3 | enums.swift:14:10:14:21 | intdata | -| enums.swift:12:1:16:1 | EnumWithParams | 4 | enums.swift:15:5:15:35 | case ... | -| enums.swift:12:1:16:1 | EnumWithParams | 5 | enums.swift:15:10:15:35 | tuple | -| enums.swift:18:1:21:1 | GenericEnum | 0 | enums.swift:19:5:19:10 | case ... | -| enums.swift:18:1:21:1 | GenericEnum | 1 | enums.swift:19:10:19:10 | none | -| enums.swift:18:1:21:1 | GenericEnum | 2 | enums.swift:20:5:20:16 | case ... | -| enums.swift:18:1:21:1 | GenericEnum | 3 | enums.swift:20:10:20:16 | some | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 0 | enums.swift:24:5:24:25 | case ... | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 1 | enums.swift:24:10:24:25 | nodata1 | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 2 | enums.swift:25:5:25:24 | case ... | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 3 | enums.swift:25:10:25:24 | intdata | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 4 | enums.swift:26:5:26:44 | case ... | -| enums.swift:23:1:27:1 | EnumWithNamedParams | 5 | enums.swift:26:10:26:44 | tuple | -getInheritedType -| enums.swift:7:1:10:1 | EnumValuesWithBase | 0 | Double | +| enums.swift:1:1:4:1 | EnumValues | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 11 | getInterfaceType: | EnumValues.Type | getName: | EnumValues | getNumberOfInheritedTypes: | 0 | getType: | EnumValues | +| enums.swift:7:1:10:1 | EnumValuesWithBase | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 11 | getInterfaceType: | EnumValuesWithBase.Type | getName: | EnumValuesWithBase | getNumberOfInheritedTypes: | 1 | getType: | EnumValuesWithBase | +| enums.swift:12:1:16:1 | EnumWithParams | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 6 | getInterfaceType: | EnumWithParams.Type | getName: | EnumWithParams | getNumberOfInheritedTypes: | 0 | getType: | EnumWithParams | +| enums.swift:18:1:21:1 | GenericEnum | getNumberOfGenericTypeParams: | 1 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 4 | getInterfaceType: | GenericEnum.Type | getName: | GenericEnum | getNumberOfInheritedTypes: | 0 | getType: | GenericEnum | +| enums.swift:23:1:27:1 | EnumWithNamedParams | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 6 | getInterfaceType: | EnumWithNamedParams.Type | getName: | EnumWithNamedParams | getNumberOfInheritedTypes: | 0 | getType: | EnumWithNamedParams | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql index dabf9078cea0..5a8d80276ef4 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl.ql @@ -2,30 +2,19 @@ import codeql.swift.elements import TestUtils -query predicate instances( - EnumDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string getType__label, Type getType -) { +from + EnumDecl x, int getNumberOfGenericTypeParams, ModuleDecl getModule, int getNumberOfMembers, + Type getInterfaceType, string getName, int getNumberOfInheritedTypes, Type getType +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and getName = x.getName() and - getType__label = "getType:" and + getNumberOfInheritedTypes = x.getNumberOfInheritedTypes() and getType = x.getType() -} - -query predicate getGenericTypeParam(EnumDecl x, int index, GenericTypeParamDecl getGenericTypeParam) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(EnumDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getInheritedType(EnumDecl x, int index, Type getInheritedType) { - toBeTested(x) and not x.isUnknown() and getInheritedType = x.getInheritedType(index) -} +select x, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "getName:", + getName, "getNumberOfInheritedTypes:", getNumberOfInheritedTypes, "getType:", getType diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.expected new file mode 100644 index 000000000000..47a6b335d76e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.expected @@ -0,0 +1 @@ +| enums.swift:18:1:21:1 | GenericEnum | 0 | enums.swift:18:18:18:18 | T | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql new file mode 100644 index 000000000000..02d75edf7b33 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.expected new file mode 100644 index 000000000000..764f6f21697f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.expected @@ -0,0 +1 @@ +| enums.swift:7:1:10:1 | EnumValuesWithBase | 0 | Double | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.ql new file mode 100644 index 000000000000..2ea47f737f88 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getInheritedType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getInheritedType(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.expected new file mode 100644 index 000000000000..8d4ba0c5e728 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.expected @@ -0,0 +1,38 @@ +| enums.swift:1:1:4:1 | EnumValues | 0 | enums.swift:2:5:2:18 | case ... | +| enums.swift:1:1:4:1 | EnumValues | 1 | enums.swift:2:10:2:10 | value1 | +| enums.swift:1:1:4:1 | EnumValues | 2 | enums.swift:2:18:2:18 | value2 | +| enums.swift:1:1:4:1 | EnumValues | 3 | enums.swift:3:5:3:26 | case ... | +| enums.swift:1:1:4:1 | EnumValues | 4 | enums.swift:3:10:3:10 | value3 | +| enums.swift:1:1:4:1 | EnumValues | 5 | enums.swift:3:18:3:18 | value4 | +| enums.swift:1:1:4:1 | EnumValues | 6 | enums.swift:3:26:3:26 | value5 | +| enums.swift:1:1:4:1 | EnumValues | 7 | file://:0:0:0:0 | __derived_enum_equals(_:_:) | +| enums.swift:1:1:4:1 | EnumValues | 8 | file://:0:0:0:0 | hashValue | +| enums.swift:1:1:4:1 | EnumValues | 9 | file://:0:0:0:0 | var ... = ... | +| enums.swift:1:1:4:1 | EnumValues | 10 | file://:0:0:0:0 | hash(into:) | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 0 | enums.swift:8:5:8:18 | case ... | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 1 | enums.swift:8:10:8:10 | value1 | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 2 | enums.swift:8:18:8:18 | value2 | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 3 | enums.swift:9:5:9:26 | case ... | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 4 | enums.swift:9:10:9:10 | value3 | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 5 | enums.swift:9:18:9:18 | value4 | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 6 | enums.swift:9:26:9:26 | value5 | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 7 | file://:0:0:0:0 | RawValue | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 8 | file://:0:0:0:0 | EnumValuesWithBase.init(rawValue:) | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 9 | file://:0:0:0:0 | rawValue | +| enums.swift:7:1:10:1 | EnumValuesWithBase | 10 | file://:0:0:0:0 | var ... = ... | +| enums.swift:12:1:16:1 | EnumWithParams | 0 | enums.swift:13:5:13:22 | case ... | +| enums.swift:12:1:16:1 | EnumWithParams | 1 | enums.swift:13:10:13:22 | nodata1 | +| enums.swift:12:1:16:1 | EnumWithParams | 2 | enums.swift:14:5:14:21 | case ... | +| enums.swift:12:1:16:1 | EnumWithParams | 3 | enums.swift:14:10:14:21 | intdata | +| enums.swift:12:1:16:1 | EnumWithParams | 4 | enums.swift:15:5:15:35 | case ... | +| enums.swift:12:1:16:1 | EnumWithParams | 5 | enums.swift:15:10:15:35 | tuple | +| enums.swift:18:1:21:1 | GenericEnum | 0 | enums.swift:19:5:19:10 | case ... | +| enums.swift:18:1:21:1 | GenericEnum | 1 | enums.swift:19:10:19:10 | none | +| enums.swift:18:1:21:1 | GenericEnum | 2 | enums.swift:20:5:20:16 | case ... | +| enums.swift:18:1:21:1 | GenericEnum | 3 | enums.swift:20:10:20:16 | some | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 0 | enums.swift:24:5:24:25 | case ... | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 1 | enums.swift:24:10:24:25 | nodata1 | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 2 | enums.swift:25:5:25:24 | case ... | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 3 | enums.swift:25:10:25:24 | intdata | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 4 | enums.swift:26:5:26:44 | case ... | +| enums.swift:23:1:27:1 | EnumWithNamedParams | 5 | enums.swift:26:10:26:44 | tuple | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql new file mode 100644 index 000000000000..28b99b8dc960 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.expected index 70601a44e2ab..76a4a1191539 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.expected @@ -1,32 +1,18 @@ -instances -| enums.swift:2:10:2:10 | value1 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value1 | -| enums.swift:2:18:2:18 | value2 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value2 | -| enums.swift:3:10:3:10 | value3 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value3 | -| enums.swift:3:18:3:18 | value4 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value4 | -| enums.swift:3:26:3:26 | value5 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value5 | -| enums.swift:8:10:8:10 | value1 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value1 | -| enums.swift:8:18:8:18 | value2 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value2 | -| enums.swift:9:10:9:10 | value3 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value3 | -| enums.swift:9:18:9:18 | value4 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value4 | -| enums.swift:9:26:9:26 | value5 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value5 | -| enums.swift:13:10:13:22 | nodata1 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithParams.Type) -> (Void) -> EnumWithParams | getName: | nodata1 | -| enums.swift:14:10:14:21 | intdata | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithParams.Type) -> (Int) -> EnumWithParams | getName: | intdata | -| enums.swift:15:10:15:35 | tuple | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithParams.Type) -> (Int, String, Double) -> EnumWithParams | getName: | tuple | -| enums.swift:19:10:19:10 | none | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (GenericEnum.Type) -> GenericEnum | getName: | none | -| enums.swift:20:10:20:16 | some | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (GenericEnum.Type) -> (T) -> GenericEnum | getName: | some | -| enums.swift:24:10:24:25 | nodata1 | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithNamedParams.Type) -> (Void) -> EnumWithNamedParams | getName: | nodata1 | -| enums.swift:25:10:25:24 | intdata | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithNamedParams.Type) -> (Int) -> EnumWithNamedParams | getName: | intdata | -| enums.swift:26:10:26:44 | tuple | getModule: | file://:0:0:0:0 | enums | getInterfaceType: | (EnumWithNamedParams.Type) -> (Int, String, Double) -> EnumWithNamedParams | getName: | tuple | -getMember -getParam -| enums.swift:13:10:13:22 | nodata1 | 0 | enums.swift:13:18:13:18 | _ | -| enums.swift:14:10:14:21 | intdata | 0 | enums.swift:14:18:14:18 | _ | -| enums.swift:15:10:15:35 | tuple | 0 | enums.swift:15:16:15:16 | _ | -| enums.swift:15:10:15:35 | tuple | 1 | enums.swift:15:21:15:21 | _ | -| enums.swift:15:10:15:35 | tuple | 2 | enums.swift:15:29:15:29 | _ | -| enums.swift:20:10:20:16 | some | 0 | enums.swift:20:15:20:15 | _ | -| enums.swift:24:10:24:25 | nodata1 | 0 | enums.swift:24:18:24:21 | v | -| enums.swift:25:10:25:24 | intdata | 0 | enums.swift:25:18:25:21 | i | -| enums.swift:26:10:26:44 | tuple | 0 | enums.swift:26:16:26:19 | i | -| enums.swift:26:10:26:44 | tuple | 1 | enums.swift:26:24:26:27 | s | -| enums.swift:26:10:26:44 | tuple | 2 | enums.swift:26:35:26:38 | d | +| enums.swift:2:10:2:10 | value1 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value1 | getNumberOfParams: | 0 | +| enums.swift:2:18:2:18 | value2 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value2 | getNumberOfParams: | 0 | +| enums.swift:3:10:3:10 | value3 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value3 | getNumberOfParams: | 0 | +| enums.swift:3:18:3:18 | value4 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value4 | getNumberOfParams: | 0 | +| enums.swift:3:26:3:26 | value5 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValues.Type) -> EnumValues | getName: | value5 | getNumberOfParams: | 0 | +| enums.swift:8:10:8:10 | value1 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value1 | getNumberOfParams: | 0 | +| enums.swift:8:18:8:18 | value2 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value2 | getNumberOfParams: | 0 | +| enums.swift:9:10:9:10 | value3 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value3 | getNumberOfParams: | 0 | +| enums.swift:9:18:9:18 | value4 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value4 | getNumberOfParams: | 0 | +| enums.swift:9:26:9:26 | value5 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumValuesWithBase.Type) -> EnumValuesWithBase | getName: | value5 | getNumberOfParams: | 0 | +| enums.swift:13:10:13:22 | nodata1 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithParams.Type) -> (Void) -> EnumWithParams | getName: | nodata1 | getNumberOfParams: | 1 | +| enums.swift:14:10:14:21 | intdata | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithParams.Type) -> (Int) -> EnumWithParams | getName: | intdata | getNumberOfParams: | 1 | +| enums.swift:15:10:15:35 | tuple | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithParams.Type) -> (Int, String, Double) -> EnumWithParams | getName: | tuple | getNumberOfParams: | 3 | +| enums.swift:19:10:19:10 | none | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (GenericEnum.Type) -> GenericEnum | getName: | none | getNumberOfParams: | 0 | +| enums.swift:20:10:20:16 | some | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (GenericEnum.Type) -> (T) -> GenericEnum | getName: | some | getNumberOfParams: | 1 | +| enums.swift:24:10:24:25 | nodata1 | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithNamedParams.Type) -> (Void) -> EnumWithNamedParams | getName: | nodata1 | getNumberOfParams: | 1 | +| enums.swift:25:10:25:24 | intdata | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithNamedParams.Type) -> (Int) -> EnumWithNamedParams | getName: | intdata | getNumberOfParams: | 1 | +| enums.swift:26:10:26:44 | tuple | getModule: | file://:0:0:0:0 | enums | getNumberOfMembers: | 0 | getInterfaceType: | (EnumWithNamedParams.Type) -> (Int, String, Double) -> EnumWithNamedParams | getName: | tuple | getNumberOfParams: | 3 | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql index 23f6fdd8e723..1ff638217b0c 100644 --- a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - EnumElementDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName -) { +from + EnumElementDecl x, ModuleDecl getModule, int getNumberOfMembers, Type getInterfaceType, + string getName, int getNumberOfParams +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and - getName = x.getName() -} - -query predicate getMember(EnumElementDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getParam(EnumElementDecl x, int index, ParamDecl getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} + getName = x.getName() and + getNumberOfParams = x.getNumberOfParams() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", + getInterfaceType, "getName:", getName, "getNumberOfParams:", getNumberOfParams diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.ql new file mode 100644 index 000000000000..2a500be3149d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumElementDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.expected b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.expected new file mode 100644 index 000000000000..15e0149f5955 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.expected @@ -0,0 +1,11 @@ +| enums.swift:13:10:13:22 | nodata1 | 0 | enums.swift:13:18:13:18 | _ | +| enums.swift:14:10:14:21 | intdata | 0 | enums.swift:14:18:14:18 | _ | +| enums.swift:15:10:15:35 | tuple | 0 | enums.swift:15:16:15:16 | _ | +| enums.swift:15:10:15:35 | tuple | 1 | enums.swift:15:21:15:21 | _ | +| enums.swift:15:10:15:35 | tuple | 2 | enums.swift:15:29:15:29 | _ | +| enums.swift:20:10:20:16 | some | 0 | enums.swift:20:15:20:15 | _ | +| enums.swift:24:10:24:25 | nodata1 | 0 | enums.swift:24:18:24:21 | v | +| enums.swift:25:10:25:24 | intdata | 0 | enums.swift:25:18:25:21 | i | +| enums.swift:26:10:26:44 | tuple | 0 | enums.swift:26:16:26:19 | i | +| enums.swift:26:10:26:44 | tuple | 1 | enums.swift:26:24:26:27 | s | +| enums.swift:26:10:26:44 | tuple | 2 | enums.swift:26:35:26:38 | d | diff --git a/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.ql b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.ql new file mode 100644 index 000000000000..80621f6d6fa5 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/EnumDecl/EnumElementDecl_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumElementDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.expected index 1dd2c0c4695c..bd70109bed0c 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.expected @@ -1,19 +1,4 @@ -instances -| extensions.swift:5:1:9:1 | extension of S | getModule: | file://:0:0:0:0 | extensions | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | -| extensions.swift:11:1:15:1 | extension of C | getModule: | file://:0:0:0:0 | extensions | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | -| extensions.swift:21:1:23:1 | extension of S | getModule: | file://:0:0:0:0 | extensions | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | -| extensions.swift:27:1:29:1 | extension of C | getModule: | file://:0:0:0:0 | extensions | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | -getGenericTypeParam -getMember -| extensions.swift:5:1:9:1 | extension of S | 0 | extensions.swift:6:5:6:37 | var ... = ... | -| extensions.swift:5:1:9:1 | extension of S | 1 | extensions.swift:6:9:6:9 | x | -| extensions.swift:5:1:9:1 | extension of S | 2 | extensions.swift:8:5:8:17 | foo() | -| extensions.swift:11:1:15:1 | extension of C | 0 | extensions.swift:12:5:12:38 | var ... = ... | -| extensions.swift:11:1:15:1 | extension of C | 1 | extensions.swift:12:9:12:9 | y | -| extensions.swift:11:1:15:1 | extension of C | 2 | extensions.swift:14:5:14:17 | bar() | -| extensions.swift:21:1:23:1 | extension of S | 0 | extensions.swift:22:5:22:17 | baz() | -| extensions.swift:27:1:29:1 | extension of C | 0 | extensions.swift:28:5:28:17 | baz() | -getProtocol -| extensions.swift:21:1:23:1 | extension of S | 0 | extensions.swift:17:1:19:1 | P1 | -| extensions.swift:27:1:29:1 | extension of C | 0 | extensions.swift:17:1:19:1 | P1 | -| extensions.swift:27:1:29:1 | extension of C | 1 | extensions.swift:25:1:25:14 | P2 | +| extensions.swift:5:1:9:1 | extension of S | getModule: | file://:0:0:0:0 | extensions | getNumberOfMembers: | 3 | getNumberOfGenericTypeParams: | 0 | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | getNumberOfProtocols: | 0 | +| extensions.swift:11:1:15:1 | extension of C | getModule: | file://:0:0:0:0 | extensions | getNumberOfMembers: | 3 | getNumberOfGenericTypeParams: | 0 | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | getNumberOfProtocols: | 0 | +| extensions.swift:21:1:23:1 | extension of S | getModule: | file://:0:0:0:0 | extensions | getNumberOfMembers: | 1 | getNumberOfGenericTypeParams: | 0 | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | getNumberOfProtocols: | 1 | +| extensions.swift:27:1:29:1 | extension of C | getModule: | file://:0:0:0:0 | extensions | getNumberOfMembers: | 1 | getNumberOfGenericTypeParams: | 0 | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql index 3e4f6ddaddc8..725a9082047b 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql @@ -2,28 +2,17 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ExtensionDecl x, string getModule__label, ModuleDecl getModule, string getExtendedTypeDecl__label, - NominalTypeDecl getExtendedTypeDecl -) { +from + ExtensionDecl x, ModuleDecl getModule, int getNumberOfMembers, int getNumberOfGenericTypeParams, + NominalTypeDecl getExtendedTypeDecl, int getNumberOfProtocols +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getExtendedTypeDecl__label = "getExtendedTypeDecl:" and - getExtendedTypeDecl = x.getExtendedTypeDecl() -} - -query predicate getGenericTypeParam( - ExtensionDecl x, int index, GenericTypeParamDecl getGenericTypeParam -) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(ExtensionDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getProtocol(ExtensionDecl x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} + getNumberOfMembers = x.getNumberOfMembers() and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and + getExtendedTypeDecl = x.getExtendedTypeDecl() and + getNumberOfProtocols = x.getNumberOfProtocols() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, + "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getExtendedTypeDecl:", + getExtendedTypeDecl, "getNumberOfProtocols:", getNumberOfProtocols diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql new file mode 100644 index 000000000000..4f67a7edefcb --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ExtensionDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.expected new file mode 100644 index 000000000000..0d89d932b428 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.expected @@ -0,0 +1,8 @@ +| extensions.swift:5:1:9:1 | extension of S | 0 | extensions.swift:6:5:6:37 | var ... = ... | +| extensions.swift:5:1:9:1 | extension of S | 1 | extensions.swift:6:9:6:9 | x | +| extensions.swift:5:1:9:1 | extension of S | 2 | extensions.swift:8:5:8:17 | foo() | +| extensions.swift:11:1:15:1 | extension of C | 0 | extensions.swift:12:5:12:38 | var ... = ... | +| extensions.swift:11:1:15:1 | extension of C | 1 | extensions.swift:12:9:12:9 | y | +| extensions.swift:11:1:15:1 | extension of C | 2 | extensions.swift:14:5:14:17 | bar() | +| extensions.swift:21:1:23:1 | extension of S | 0 | extensions.swift:22:5:22:17 | baz() | +| extensions.swift:27:1:29:1 | extension of C | 0 | extensions.swift:28:5:28:17 | baz() | diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql new file mode 100644 index 000000000000..7025173bb21a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ExtensionDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.expected b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.expected new file mode 100644 index 000000000000..9a8915164b41 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.expected @@ -0,0 +1,3 @@ +| extensions.swift:21:1:23:1 | extension of S | 0 | extensions.swift:17:1:19:1 | P1 | +| extensions.swift:27:1:29:1 | extension of C | 0 | extensions.swift:17:1:19:1 | P1 | +| extensions.swift:27:1:29:1 | extension of C | 1 | extensions.swift:25:1:25:14 | P2 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql new file mode 100644 index 000000000000..9983f602e8bf --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ExtensionDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.expected b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.expected index c7826fe6321c..e69de29bb2d1 100644 --- a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.expected @@ -1,3 +0,0 @@ -instances -getMember -getActiveElement diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql index b9948cf8d489..2bb062dbb8fb 100644 --- a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql @@ -2,17 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances(IfConfigDecl x, string getModule__label, ModuleDecl getModule) { +from IfConfigDecl x, ModuleDecl getModule, int getNumberOfMembers, int getNumberOfActiveElements +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and - getModule = x.getModule() -} - -query predicate getMember(IfConfigDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getActiveElement(IfConfigDecl x, int index, AstNode getActiveElement) { - toBeTested(x) and not x.isUnknown() and getActiveElement = x.getActiveElement(index) -} + getModule = x.getModule() and + getNumberOfMembers = x.getNumberOfMembers() and + getNumberOfActiveElements = x.getNumberOfActiveElements() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, + "getNumberOfActiveElements:", getNumberOfActiveElements diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.expected b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql new file mode 100644 index 000000000000..d1613f30389a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from IfConfigDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getActiveElement(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.ql new file mode 100644 index 000000000000..d2b1b6961a32 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from IfConfigDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.expected index 0e4b0b1d19a1..2b781c5e3593 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.expected @@ -1,19 +1,5 @@ -instances -| import.swift:1:1:1:8 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no | -| import.swift:2:1:2:24 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no | -| import.swift:3:12:3:32 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | yes | -| import.swift:4:1:4:19 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no | -| import.swift:5:1:5:23 | import ... | getModule: | file://:0:0:0:0 | import | isExported: | no | -getMember -getImportedModule -| import.swift:1:1:1:8 | import ... | file://:0:0:0:0 | Swift | -| import.swift:2:1:2:24 | import ... | file://:0:0:0:0 | Swift | -| import.swift:3:12:3:32 | import ... | file://:0:0:0:0 | Swift | -| import.swift:4:1:4:19 | import ... | file://:0:0:0:0 | Swift | -| import.swift:5:1:5:23 | import ... | file://:0:0:0:0 | Swift | -getDeclaration -| import.swift:2:1:2:24 | import ... | 0 | file://:0:0:0:0 | Int | -| import.swift:3:12:3:32 | import ... | 0 | file://:0:0:0:0 | Double | -| import.swift:4:1:4:19 | import ... | 0 | file://:0:0:0:0 | print(_:separator:terminator:) | -| import.swift:4:1:4:19 | import ... | 1 | file://:0:0:0:0 | print(_:separator:terminator:to:) | -| import.swift:5:1:5:23 | import ... | 0 | file://:0:0:0:0 | Hashable | +| import.swift:1:1:1:8 | import ... | getModule: | file://:0:0:0:0 | import | getNumberOfMembers: | 0 | isExported: | no | hasImportedModule: | yes | getNumberOfDeclarations: | 0 | +| import.swift:2:1:2:24 | import ... | getModule: | file://:0:0:0:0 | import | getNumberOfMembers: | 0 | isExported: | no | hasImportedModule: | yes | getNumberOfDeclarations: | 1 | +| import.swift:3:12:3:32 | import ... | getModule: | file://:0:0:0:0 | import | getNumberOfMembers: | 0 | isExported: | yes | hasImportedModule: | yes | getNumberOfDeclarations: | 1 | +| import.swift:4:1:4:19 | import ... | getModule: | file://:0:0:0:0 | import | getNumberOfMembers: | 0 | isExported: | no | hasImportedModule: | yes | getNumberOfDeclarations: | 2 | +| import.swift:5:1:5:23 | import ... | getModule: | file://:0:0:0:0 | import | getNumberOfMembers: | 0 | isExported: | no | hasImportedModule: | yes | getNumberOfDeclarations: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql index 505c5f820a7f..c773f2890a5e 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl.ql @@ -2,26 +2,17 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ImportDecl x, string getModule__label, ModuleDecl getModule, string isExported__label, - string isExported -) { +from + ImportDecl x, ModuleDecl getModule, int getNumberOfMembers, string isExported, + string hasImportedModule, int getNumberOfDeclarations +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - isExported__label = "isExported:" and - if x.isExported() then isExported = "yes" else isExported = "no" -} - -query predicate getMember(ImportDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getImportedModule(ImportDecl x, ModuleDecl getImportedModule) { - toBeTested(x) and not x.isUnknown() and getImportedModule = x.getImportedModule() -} - -query predicate getDeclaration(ImportDecl x, int index, ValueDecl getDeclaration) { - toBeTested(x) and not x.isUnknown() and getDeclaration = x.getDeclaration(index) -} + getNumberOfMembers = x.getNumberOfMembers() and + (if x.isExported() then isExported = "yes" else isExported = "no") and + (if x.hasImportedModule() then hasImportedModule = "yes" else hasImportedModule = "no") and + getNumberOfDeclarations = x.getNumberOfDeclarations() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "isExported:", + isExported, "hasImportedModule:", hasImportedModule, "getNumberOfDeclarations:", + getNumberOfDeclarations diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.expected b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.expected new file mode 100644 index 000000000000..b877b113bc69 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.expected @@ -0,0 +1,5 @@ +| import.swift:2:1:2:24 | import ... | 0 | file://:0:0:0:0 | Int | +| import.swift:3:12:3:32 | import ... | 0 | file://:0:0:0:0 | Double | +| import.swift:4:1:4:19 | import ... | 0 | file://:0:0:0:0 | print(_:separator:terminator:) | +| import.swift:4:1:4:19 | import ... | 1 | file://:0:0:0:0 | print(_:separator:terminator:to:) | +| import.swift:5:1:5:23 | import ... | 0 | file://:0:0:0:0 | Hashable | diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.ql b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.ql new file mode 100644 index 000000000000..0c9b586186b5 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getDeclaration.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ImportDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getDeclaration(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.expected b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.expected new file mode 100644 index 000000000000..8d064a707449 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.expected @@ -0,0 +1,5 @@ +| import.swift:1:1:1:8 | import ... | file://:0:0:0:0 | Swift | +| import.swift:2:1:2:24 | import ... | file://:0:0:0:0 | Swift | +| import.swift:3:12:3:32 | import ... | file://:0:0:0:0 | Swift | +| import.swift:4:1:4:19 | import ... | file://:0:0:0:0 | Swift | +| import.swift:5:1:5:23 | import ... | file://:0:0:0:0 | Swift | diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql new file mode 100644 index 000000000000..9fe8acad96e2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ImportDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getImportedModule() diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql new file mode 100644 index 000000000000..2aa0c828947b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ImportDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.expected index add8617f94f6..65bec16eea0d 100644 --- a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.expected @@ -1,12 +1,3 @@ -instances -| test.swift:2:1:2:50 | MacroDecl | getModule: | file://:0:0:0:0 | test | getInterfaceType: | () -> () | getName: | A() | -| test.swift:4:1:4:15 | MacroDecl | getModule: | file://:0:0:0:0 | test | getInterfaceType: | () -> () | getName: | B() | -| test.swift:7:1:7:15 | MacroDecl | getModule: | file://:0:0:0:0 | test | getInterfaceType: | () -> () | getName: | C() | -getGenericTypeParam -getMember -getParameter -getRole -| test.swift:2:1:2:50 | MacroDecl | 0 | test.swift:1:2:1:26 | #freestanding(declaration) | -| test.swift:4:1:4:15 | MacroDecl | 0 | test.swift:3:2:3:25 | #freestanding(expression) | -| test.swift:7:1:7:15 | MacroDecl | 0 | test.swift:6:2:6:20 | @attached(extension) | -| test.swift:7:1:7:15 | MacroDecl | 1 | test.swift:5:2:5:17 | @attached(member) | +| test.swift:2:1:2:50 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | A() | getNumberOfParameters: | 0 | getNumberOfRoles: | 1 | +| test.swift:4:1:4:15 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | B() | getNumberOfParameters: | 0 | getNumberOfRoles: | 1 | +| test.swift:7:1:7:15 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | C() | getNumberOfParameters: | 0 | getNumberOfRoles: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql index 2a675c609101..4d8c6e77aae0 100644 --- a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql @@ -2,32 +2,19 @@ import codeql.swift.elements import TestUtils -query predicate instances( - MacroDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName -) { +from + MacroDecl x, int getNumberOfGenericTypeParams, ModuleDecl getModule, int getNumberOfMembers, + Type getInterfaceType, string getName, int getNumberOfParameters, int getNumberOfRoles +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and - getName = x.getName() -} - -query predicate getGenericTypeParam(MacroDecl x, int index, GenericTypeParamDecl getGenericTypeParam) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(MacroDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getParameter(MacroDecl x, int index, ParamDecl getParameter) { - toBeTested(x) and not x.isUnknown() and getParameter = x.getParameter(index) -} - -query predicate getRole(MacroDecl x, int index, MacroRole getRole) { - toBeTested(x) and not x.isUnknown() and getRole = x.getRole(index) -} + getName = x.getName() and + getNumberOfParameters = x.getNumberOfParameters() and + getNumberOfRoles = x.getNumberOfRoles() +select x, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "getName:", + getName, "getNumberOfParameters:", getNumberOfParameters, "getNumberOfRoles:", getNumberOfRoles diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql new file mode 100644 index 000000000000..c74a66c6b062 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql new file mode 100644 index 000000000000..1de9c7f24933 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql new file mode 100644 index 000000000000..1e4c8754e34a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParameter(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.expected new file mode 100644 index 000000000000..faa0a6256a60 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.expected @@ -0,0 +1,4 @@ +| test.swift:2:1:2:50 | MacroDecl | 0 | test.swift:1:2:1:26 | #freestanding(declaration) | +| test.swift:4:1:4:15 | MacroDecl | 0 | test.swift:3:2:3:25 | #freestanding(expression) | +| test.swift:7:1:7:15 | MacroDecl | 0 | test.swift:6:2:6:20 | @attached(extension) | +| test.swift:7:1:7:15 | MacroDecl | 1 | test.swift:5:2:5:17 | @attached(member) | diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql new file mode 100644 index 000000000000..cce29824f2a2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getRole(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.expected index eca30375b243..036d4f7ff6e6 100644 --- a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.expected +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.expected @@ -1,25 +1,20 @@ -instances -| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| file://:0:0:0:0 | @attached(accessor) | getKind: | 4 | getMacroSyntax: | 1 | -| file://:0:0:0:0 | @attached(member) | getKind: | 16 | getMacroSyntax: | 1 | -| file://:0:0:0:0 | @attached(memberAttribute) | getKind: | 8 | getMacroSyntax: | 1 | -| file://:0:0:0:0 | @attached(peer) | getKind: | 32 | getMacroSyntax: | 1 | -| file://:0:0:0:0 | @attached(peer) | getKind: | 32 | getMacroSyntax: | 1 | -| test.swift:1:2:1:26 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | -| test.swift:3:2:3:25 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | -| test.swift:5:2:5:17 | @attached(member) | getKind: | 16 | getMacroSyntax: | 1 | -| test.swift:6:2:6:20 | @attached(extension) | getKind: | 256 | getMacroSyntax: | 1 | -getConformance -getName -| file://:0:0:0:0 | @attached(peer) | 0 | $() | -| file://:0:0:0:0 | @attached(peer) | 0 | _lldb_summary() | +| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | @attached(accessor) | getKind: | 4 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | @attached(member) | getKind: | 16 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | @attached(memberAttribute) | getKind: | 8 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| file://:0:0:0:0 | @attached(peer) | getKind: | 32 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 1 | +| file://:0:0:0:0 | @attached(peer) | getKind: | 32 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 1 | +| test.swift:1:2:1:26 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| test.swift:3:2:3:25 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| test.swift:5:2:5:17 | @attached(member) | getKind: | 16 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | +| test.swift:6:2:6:20 | @attached(extension) | getKind: | 256 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 | diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql index 5edff519fb80..fb72920ffa48 100644 --- a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql @@ -2,21 +2,13 @@ import codeql.swift.elements import TestUtils -query predicate instances( - MacroRole x, string getKind__label, int getKind, string getMacroSyntax__label, int getMacroSyntax -) { +from MacroRole x, int getKind, int getMacroSyntax, int getNumberOfConformances, int getNumberOfNames +where toBeTested(x) and not x.isUnknown() and - getKind__label = "getKind:" and getKind = x.getKind() and - getMacroSyntax__label = "getMacroSyntax:" and - getMacroSyntax = x.getMacroSyntax() -} - -query predicate getConformance(MacroRole x, int index, Expr getConformance) { - toBeTested(x) and not x.isUnknown() and getConformance = x.getConformance(index) -} - -query predicate getName(MacroRole x, int index, string getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName(index) -} + getMacroSyntax = x.getMacroSyntax() and + getNumberOfConformances = x.getNumberOfConformances() and + getNumberOfNames = x.getNumberOfNames() +select x, "getKind:", getKind, "getMacroSyntax:", getMacroSyntax, "getNumberOfConformances:", + getNumberOfConformances, "getNumberOfNames:", getNumberOfNames diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql new file mode 100644 index 000000000000..c3b8627010ee --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroRole x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getConformance(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.expected b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.expected new file mode 100644 index 000000000000..0c42bfc46014 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.expected @@ -0,0 +1,2 @@ +| file://:0:0:0:0 | @attached(peer) | 0 | $() | +| file://:0:0:0:0 | @attached(peer) | 0 | _lldb_summary() | diff --git a/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql new file mode 100644 index 000000000000..296037f35c5a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MacroRole x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getName(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.expected index 42d051d0a4ff..37ee373dc835 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.expected @@ -1,20 +1,3 @@ -instances -| file://:0:0:0:0 | Foo | getModule: | file://:0:0:0:0 | Foo | getInterfaceType: | module | getName: | Foo | isBuiltinModule: | no | isSystemModule: | no | -| file://:0:0:0:0 | __ObjC | getModule: | file://:0:0:0:0 | __ObjC | getInterfaceType: | module<__ObjC> | getName: | __ObjC | isBuiltinModule: | no | isSystemModule: | no | -| file://:0:0:0:0 | default_module_name | getModule: | file://:0:0:0:0 | default_module_name | getInterfaceType: | module | getName: | default_module_name | isBuiltinModule: | no | isSystemModule: | no | -getMember -getInheritedType -getAnImportedModule -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | Swift | -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | SwiftOnoneSupport | -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _Concurrency | -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _StringProcessing | -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _SwiftConcurrencyShims | -| file://:0:0:0:0 | __ObjC | file://:0:0:0:0 | Swift | -| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | Swift | -| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | SwiftOnoneSupport | -| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _Concurrency | -| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _StringProcessing | -| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _SwiftConcurrencyShims | -getAnExportedModule -| file://:0:0:0:0 | Foo | file://:0:0:0:0 | Swift | +| file://:0:0:0:0 | Foo | getModule: | file://:0:0:0:0 | Foo | getNumberOfMembers: | 0 | getInterfaceType: | module | getName: | Foo | getNumberOfInheritedTypes: | 0 | isBuiltinModule: | no | isSystemModule: | no | getNumberOfImportedModules: | 5 | getNumberOfExportedModules: | 1 | +| file://:0:0:0:0 | __ObjC | getModule: | file://:0:0:0:0 | __ObjC | getNumberOfMembers: | 0 | getInterfaceType: | module<__ObjC> | getName: | __ObjC | getNumberOfInheritedTypes: | 0 | isBuiltinModule: | no | isSystemModule: | no | getNumberOfImportedModules: | 1 | getNumberOfExportedModules: | 0 | +| file://:0:0:0:0 | default_module_name | getModule: | file://:0:0:0:0 | default_module_name | getNumberOfMembers: | 0 | getInterfaceType: | module | getName: | default_module_name | getNumberOfInheritedTypes: | 0 | isBuiltinModule: | no | isSystemModule: | no | getNumberOfImportedModules: | 5 | getNumberOfExportedModules: | 0 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql index 911474839d40..f48c8ae976cc 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql @@ -2,37 +2,24 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ModuleDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string isBuiltinModule__label, - string isBuiltinModule, string isSystemModule__label, string isSystemModule -) { +from + ModuleDecl x, ModuleDecl getModule, int getNumberOfMembers, Type getInterfaceType, string getName, + int getNumberOfInheritedTypes, string isBuiltinModule, string isSystemModule, + int getNumberOfImportedModules, int getNumberOfExportedModules +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and getName = x.getName() and - isBuiltinModule__label = "isBuiltinModule:" and + getNumberOfInheritedTypes = x.getNumberOfInheritedTypes() and (if x.isBuiltinModule() then isBuiltinModule = "yes" else isBuiltinModule = "no") and - isSystemModule__label = "isSystemModule:" and - if x.isSystemModule() then isSystemModule = "yes" else isSystemModule = "no" -} - -query predicate getMember(ModuleDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getInheritedType(ModuleDecl x, int index, Type getInheritedType) { - toBeTested(x) and not x.isUnknown() and getInheritedType = x.getInheritedType(index) -} - -query predicate getAnImportedModule(ModuleDecl x, ModuleDecl getAnImportedModule) { - toBeTested(x) and not x.isUnknown() and getAnImportedModule = x.getAnImportedModule() -} - -query predicate getAnExportedModule(ModuleDecl x, ModuleDecl getAnExportedModule) { - toBeTested(x) and not x.isUnknown() and getAnExportedModule = x.getAnExportedModule() -} + (if x.isSystemModule() then isSystemModule = "yes" else isSystemModule = "no") and + getNumberOfImportedModules = x.getNumberOfImportedModules() and + getNumberOfExportedModules = x.getNumberOfExportedModules() +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", + getInterfaceType, "getName:", getName, "getNumberOfInheritedTypes:", getNumberOfInheritedTypes, + "isBuiltinModule:", isBuiltinModule, "isSystemModule:", isSystemModule, + "getNumberOfImportedModules:", getNumberOfImportedModules, "getNumberOfExportedModules:", + getNumberOfExportedModules diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.expected b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.expected new file mode 100644 index 000000000000..271c68f34fdf --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.expected @@ -0,0 +1 @@ +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | Swift | diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql new file mode 100644 index 000000000000..1a0476fb6585 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ModuleDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAnExportedModule() diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.expected b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.expected new file mode 100644 index 000000000000..57f89e195bce --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.expected @@ -0,0 +1,11 @@ +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | Swift | +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | SwiftOnoneSupport | +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _Concurrency | +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _StringProcessing | +| file://:0:0:0:0 | Foo | file://:0:0:0:0 | _SwiftConcurrencyShims | +| file://:0:0:0:0 | __ObjC | file://:0:0:0:0 | Swift | +| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | Swift | +| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | SwiftOnoneSupport | +| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _Concurrency | +| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _StringProcessing | +| file://:0:0:0:0 | default_module_name | file://:0:0:0:0 | _SwiftConcurrencyShims | diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql new file mode 100644 index 000000000000..fa399bef4328 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ModuleDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAnImportedModule() diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.expected b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.ql b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.ql new file mode 100644 index 000000000000..1a1446596374 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getInheritedType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ModuleDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getInheritedType(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.ql new file mode 100644 index 000000000000..1510213d2872 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ModuleDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.expected index 41cad53c61cd..975da0933216 100644 --- a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.expected +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.expected @@ -1,31 +1,5 @@ -instances -| functions.swift:1:1:3:1 | foo() | getModule: | file://:0:0:0:0 | functions | getInterfaceType: | () -> Int | -| functions.swift:5:1:7:1 | bar(_:d:) | getModule: | file://:0:0:0:0 | functions | getInterfaceType: | (Int, Double) -> Int | -| functions.swift:10:5:10:28 | noBody(x:) | getModule: | file://:0:0:0:0 | functions | getInterfaceType: | (Self) -> (Int) -> Int | -| functions.swift:13:1:15:1 | variadic(_:) | getModule: | file://:0:0:0:0 | functions | getInterfaceType: | (Int...) -> () | -| functions.swift:17:1:19:1 | generic(x:y:) | getModule: | file://:0:0:0:0 | functions | getInterfaceType: | (X, Y) -> () | -getGenericTypeParam -| functions.swift:17:1:19:1 | generic(x:y:) | 0 | functions.swift:17:14:17:14 | X | -| functions.swift:17:1:19:1 | generic(x:y:) | 1 | functions.swift:17:17:17:17 | Y | -getMember -getName -| functions.swift:1:1:3:1 | foo() | foo() | -| functions.swift:5:1:7:1 | bar(_:d:) | bar(_:d:) | -| functions.swift:10:5:10:28 | noBody(x:) | noBody(x:) | -| functions.swift:13:1:15:1 | variadic(_:) | variadic(_:) | -| functions.swift:17:1:19:1 | generic(x:y:) | generic(x:y:) | -getSelfParam -| functions.swift:10:5:10:28 | noBody(x:) | functions.swift:10:10:10:10 | self | -getParam -| functions.swift:5:1:7:1 | bar(_:d:) | 0 | functions.swift:5:10:5:15 | x | -| functions.swift:5:1:7:1 | bar(_:d:) | 1 | functions.swift:5:20:5:25 | y | -| functions.swift:10:5:10:28 | noBody(x:) | 0 | functions.swift:10:17:10:20 | x | -| functions.swift:13:1:15:1 | variadic(_:) | 0 | functions.swift:13:15:13:26 | ints | -| functions.swift:17:1:19:1 | generic(x:y:) | 0 | functions.swift:17:20:17:23 | x | -| functions.swift:17:1:19:1 | generic(x:y:) | 1 | functions.swift:17:26:17:29 | y | -getBody -| functions.swift:1:1:3:1 | foo() | functions.swift:1:19:3:1 | { ... } | -| functions.swift:5:1:7:1 | bar(_:d:) | functions.swift:5:40:7:1 | { ... } | -| functions.swift:13:1:15:1 | variadic(_:) | functions.swift:13:31:15:1 | { ... } | -| functions.swift:17:1:19:1 | generic(x:y:) | functions.swift:17:32:19:1 | { ... } | -getCapture +| functions.swift:1:1:3:1 | foo() | hasName: | yes | hasSelfParam: | no | getNumberOfParams: | 0 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | functions | getNumberOfMembers: | 0 | getInterfaceType: | () -> Int | +| functions.swift:5:1:7:1 | bar(_:d:) | hasName: | yes | hasSelfParam: | no | getNumberOfParams: | 2 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | functions | getNumberOfMembers: | 0 | getInterfaceType: | (Int, Double) -> Int | +| functions.swift:10:5:10:28 | noBody(x:) | hasName: | yes | hasSelfParam: | yes | getNumberOfParams: | 1 | hasBody: | no | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | functions | getNumberOfMembers: | 0 | getInterfaceType: | (Self) -> (Int) -> Int | +| functions.swift:13:1:15:1 | variadic(_:) | hasName: | yes | hasSelfParam: | no | getNumberOfParams: | 1 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | functions | getNumberOfMembers: | 0 | getInterfaceType: | (Int...) -> () | +| functions.swift:17:1:19:1 | generic(x:y:) | hasName: | yes | hasSelfParam: | no | getNumberOfParams: | 2 | hasBody: | yes | getNumberOfCaptures: | 0 | getNumberOfGenericTypeParams: | 2 | getModule: | file://:0:0:0:0 | functions | getNumberOfMembers: | 0 | getInterfaceType: | (X, Y) -> () | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql index 5ecf5d80417c..b040631d9b09 100644 --- a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction.ql @@ -2,44 +2,23 @@ import codeql.swift.elements import TestUtils -query predicate instances( - NamedFunction x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType -) { +from + NamedFunction x, string hasName, string hasSelfParam, int getNumberOfParams, string hasBody, + int getNumberOfCaptures, int getNumberOfGenericTypeParams, ModuleDecl getModule, + int getNumberOfMembers, Type getInterfaceType +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + (if x.hasName() then hasName = "yes" else hasName = "no") and + (if x.hasSelfParam() then hasSelfParam = "yes" else hasSelfParam = "no") and + getNumberOfParams = x.getNumberOfParams() and + (if x.hasBody() then hasBody = "yes" else hasBody = "no") and + getNumberOfCaptures = x.getNumberOfCaptures() and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() -} - -query predicate getGenericTypeParam( - NamedFunction x, int index, GenericTypeParamDecl getGenericTypeParam -) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(NamedFunction x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getName(NamedFunction x, string getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName() -} - -query predicate getSelfParam(NamedFunction x, ParamDecl getSelfParam) { - toBeTested(x) and not x.isUnknown() and getSelfParam = x.getSelfParam() -} - -query predicate getParam(NamedFunction x, int index, ParamDecl getParam) { - toBeTested(x) and not x.isUnknown() and getParam = x.getParam(index) -} - -query predicate getBody(NamedFunction x, BraceStmt getBody) { - toBeTested(x) and not x.isUnknown() and getBody = x.getBody() -} - -query predicate getCapture(NamedFunction x, int index, CapturedDecl getCapture) { - toBeTested(x) and not x.isUnknown() and getCapture = x.getCapture(index) -} +select x, "hasName:", hasName, "hasSelfParam:", hasSelfParam, "getNumberOfParams:", + getNumberOfParams, "hasBody:", hasBody, "getNumberOfCaptures:", getNumberOfCaptures, + "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.expected new file mode 100644 index 000000000000..54fddb5c57c1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.expected @@ -0,0 +1,4 @@ +| functions.swift:1:1:3:1 | foo() | functions.swift:1:19:3:1 | { ... } | +| functions.swift:5:1:7:1 | bar(_:d:) | functions.swift:5:40:7:1 | { ... } | +| functions.swift:13:1:15:1 | variadic(_:) | functions.swift:13:31:15:1 | { ... } | +| functions.swift:17:1:19:1 | generic(x:y:) | functions.swift:17:32:19:1 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.ql new file mode 100644 index 000000000000..8f02d92b3d7f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getBody.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x +where toBeTested(x) and not x.isUnknown() +select x, x.getBody() diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.ql new file mode 100644 index 000000000000..ebb3474649b6 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getCapture.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getCapture(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.expected new file mode 100644 index 000000000000..0b0d62753ce2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.expected @@ -0,0 +1,2 @@ +| functions.swift:17:1:19:1 | generic(x:y:) | 0 | functions.swift:17:14:17:14 | X | +| functions.swift:17:1:19:1 | generic(x:y:) | 1 | functions.swift:17:17:17:17 | Y | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.ql new file mode 100644 index 000000000000..031102432568 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.ql new file mode 100644 index 000000000000..ec7c7476c685 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.expected new file mode 100644 index 000000000000..2cca221fe4d3 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.expected @@ -0,0 +1,5 @@ +| functions.swift:1:1:3:1 | foo() | foo() | +| functions.swift:5:1:7:1 | bar(_:d:) | bar(_:d:) | +| functions.swift:10:5:10:28 | noBody(x:) | noBody(x:) | +| functions.swift:13:1:15:1 | variadic(_:) | variadic(_:) | +| functions.swift:17:1:19:1 | generic(x:y:) | generic(x:y:) | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.ql new file mode 100644 index 000000000000..553f3a3292d6 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x +where toBeTested(x) and not x.isUnknown() +select x, x.getName() diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.expected new file mode 100644 index 000000000000..f549b8615ad0 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.expected @@ -0,0 +1,6 @@ +| functions.swift:5:1:7:1 | bar(_:d:) | 0 | functions.swift:5:10:5:15 | x | +| functions.swift:5:1:7:1 | bar(_:d:) | 1 | functions.swift:5:20:5:25 | y | +| functions.swift:10:5:10:28 | noBody(x:) | 0 | functions.swift:10:17:10:20 | x | +| functions.swift:13:1:15:1 | variadic(_:) | 0 | functions.swift:13:15:13:26 | ints | +| functions.swift:17:1:19:1 | generic(x:y:) | 0 | functions.swift:17:20:17:23 | x | +| functions.swift:17:1:19:1 | generic(x:y:) | 1 | functions.swift:17:26:17:29 | y | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.ql new file mode 100644 index 000000000000..1755058ad729 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.expected b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.expected new file mode 100644 index 000000000000..fb6370f56e84 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.expected @@ -0,0 +1 @@ +| functions.swift:10:5:10:28 | noBody(x:) | functions.swift:10:10:10:10 | self | diff --git a/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.ql b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.ql new file mode 100644 index 000000000000..11a4563f6f1b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/NamedFunction/NamedFunction_getSelfParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from NamedFunction x +where toBeTested(x) and not x.isUnknown() +select x, x.getSelfParam() diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.expected b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.expected index 8a5d39063f54..c93a86b2164b 100644 --- a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.expected @@ -1,13 +1,4 @@ -instances -| file://:0:0:0:0 | _ | getModule: | file://:0:0:0:0 | opaque_types | getInterfaceType: | (some Base).Type | getName: | _ | getNamingDeclaration: | opaque_types.swift:9:1:9:51 | baz(_:) | -| file://:0:0:0:0 | _ | getModule: | file://:0:0:0:0 | opaque_types | getInterfaceType: | (some P).Type | getName: | _ | getNamingDeclaration: | opaque_types.swift:5:1:5:45 | bar(_:) | -| file://:0:0:0:0 | _ | getModule: | file://:0:0:0:0 | opaque_types | getInterfaceType: | (some P).Type | getName: | _ | getNamingDeclaration: | opaque_types.swift:13:1:13:59 | bazz() | -| file://:0:0:0:0 | _ | getModule: | file://:0:0:0:0 | opaque_types | getInterfaceType: | (some SignedInteger).Type | getName: | _ | getNamingDeclaration: | opaque_types.swift:1:1:1:45 | foo() | -getGenericTypeParam -getMember -getInheritedType -getOpaqueGenericParam -| file://:0:0:0:0 | _ | 0 | \u03c4_0_0 | -| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | -| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | -| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | +| file://:0:0:0:0 | _ | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | opaque_types | getNumberOfMembers: | 0 | getInterfaceType: | (some Base).Type | getName: | _ | getNumberOfInheritedTypes: | 0 | getNamingDeclaration: | opaque_types.swift:9:1:9:51 | baz(_:) | getNumberOfOpaqueGenericParams: | 1 | +| file://:0:0:0:0 | _ | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | opaque_types | getNumberOfMembers: | 0 | getInterfaceType: | (some P).Type | getName: | _ | getNumberOfInheritedTypes: | 0 | getNamingDeclaration: | opaque_types.swift:5:1:5:45 | bar(_:) | getNumberOfOpaqueGenericParams: | 1 | +| file://:0:0:0:0 | _ | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | opaque_types | getNumberOfMembers: | 0 | getInterfaceType: | (some P).Type | getName: | _ | getNumberOfInheritedTypes: | 0 | getNamingDeclaration: | opaque_types.swift:13:1:13:59 | bazz() | getNumberOfOpaqueGenericParams: | 1 | +| file://:0:0:0:0 | _ | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | opaque_types | getNumberOfMembers: | 0 | getInterfaceType: | (some SignedInteger).Type | getName: | _ | getNumberOfInheritedTypes: | 0 | getNamingDeclaration: | opaque_types.swift:1:1:1:45 | foo() | getNumberOfOpaqueGenericParams: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql index 64b9149c1d00..c81a2adc2935 100644 --- a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl.ql @@ -2,39 +2,22 @@ import codeql.swift.elements import TestUtils -query predicate instances( - OpaqueTypeDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string getNamingDeclaration__label, - ValueDecl getNamingDeclaration -) { +from + OpaqueTypeDecl x, int getNumberOfGenericTypeParams, ModuleDecl getModule, int getNumberOfMembers, + Type getInterfaceType, string getName, int getNumberOfInheritedTypes, + ValueDecl getNamingDeclaration, int getNumberOfOpaqueGenericParams +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and + getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and getName = x.getName() and - getNamingDeclaration__label = "getNamingDeclaration:" and - getNamingDeclaration = x.getNamingDeclaration() -} - -query predicate getGenericTypeParam( - OpaqueTypeDecl x, int index, GenericTypeParamDecl getGenericTypeParam -) { - toBeTested(x) and not x.isUnknown() and getGenericTypeParam = x.getGenericTypeParam(index) -} - -query predicate getMember(OpaqueTypeDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getInheritedType(OpaqueTypeDecl x, int index, Type getInheritedType) { - toBeTested(x) and not x.isUnknown() and getInheritedType = x.getInheritedType(index) -} - -query predicate getOpaqueGenericParam( - OpaqueTypeDecl x, int index, GenericTypeParamType getOpaqueGenericParam -) { - toBeTested(x) and not x.isUnknown() and getOpaqueGenericParam = x.getOpaqueGenericParam(index) -} + getNumberOfInheritedTypes = x.getNumberOfInheritedTypes() and + getNamingDeclaration = x.getNamingDeclaration() and + getNumberOfOpaqueGenericParams = x.getNumberOfOpaqueGenericParams() +select x, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule, + "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "getName:", + getName, "getNumberOfInheritedTypes:", getNumberOfInheritedTypes, "getNamingDeclaration:", + getNamingDeclaration, "getNumberOfOpaqueGenericParams:", getNumberOfOpaqueGenericParams diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.expected b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.ql b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.ql new file mode 100644 index 000000000000..68e19d5d16c1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getGenericTypeParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getGenericTypeParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.expected b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.ql b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.ql new file mode 100644 index 000000000000..dd9f8245b208 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getInheritedType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getInheritedType(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.ql new file mode 100644 index 000000000000..a1962a41c808 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.expected b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.expected new file mode 100644 index 000000000000..922da8a9c1ad --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.expected @@ -0,0 +1,4 @@ +| file://:0:0:0:0 | _ | 0 | \u03c4_0_0 | +| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | +| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | +| file://:0:0:0:0 | _ | 0 | \u03c4_1_0 | diff --git a/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.ql b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.ql new file mode 100644 index 000000000000..aca25644dbbd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/OpaqueTypeDecl/OpaqueTypeDecl_getOpaqueGenericParam.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getOpaqueGenericParam(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.expected index f67d25dc31b0..ffb1fa020723 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.expected @@ -1,79 +1,59 @@ -instances -| file://:0:0:0:0 | x | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | x | getType: | Int | isInout: | no | -| file://:0:0:0:0 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | y | getType: | Int | isInout: | no | -| param_decls.swift:1:10:1:13 | _ | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | _ | getType: | Int | isInout: | no | -| param_decls.swift:1:18:1:29 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Double | getName: | y | getType: | Double | isInout: | yes | -| param_decls.swift:2:10:2:13 | _ | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | _ | getType: | Int | isInout: | no | -| param_decls.swift:2:18:2:29 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Double | getName: | y | getType: | Double | isInout: | yes | -| param_decls.swift:4:8:4:8 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | S | getName: | self | getType: | S | isInout: | yes | -| param_decls.swift:5:5:5:5 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | S | getName: | self | getType: | S | isInout: | yes | -| param_decls.swift:5:15:5:15 | x | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | x | getType: | Int | isInout: | no | -| param_decls.swift:5:15:5:15 | x | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | x | getType: | Int | isInout: | no | -| param_decls.swift:5:15:5:18 | x | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | x | getType: | Int | isInout: | no | -| param_decls.swift:5:23:5:23 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | y | getType: | Int | isInout: | no | -| param_decls.swift:5:23:5:23 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | y | getType: | Int | isInout: | no | -| param_decls.swift:5:23:5:26 | y | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | y | getType: | Int | isInout: | no | -| param_decls.swift:6:9:6:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | S | getName: | self | getType: | S | isInout: | no | -| param_decls.swift:7:9:7:9 | newValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int? | getName: | newValue | getType: | Int? | isInout: | no | -| param_decls.swift:7:9:7:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | S | getName: | self | getType: | S | isInout: | yes | -| param_decls.swift:12:13:12:22 | s | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | String | getName: | s | getType: | String | isInout: | yes | -| param_decls.swift:13:13:13:22 | s | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | String | getName: | s | getType: | String | isInout: | yes | -| param_decls.swift:14:26:14:26 | $0 | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | $0 | getType: | Int | isInout: | no | -| param_decls.swift:17:25:17:25 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Wrapper | getName: | self | getType: | Wrapper | isInout: | yes | -| param_decls.swift:17:25:17:25 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Wrapper | getName: | self | getType: | Wrapper | isInout: | yes | -| param_decls.swift:17:25:17:25 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | isInout: | no | -| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Wrapper | getName: | self | getType: | Wrapper | isInout: | no | -| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Wrapper | getName: | self | getType: | Wrapper | isInout: | yes | -| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Wrapper | getName: | self | getType: | Wrapper | isInout: | yes | -| param_decls.swift:18:9:18:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | value | getType: | Int | isInout: | no | -| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithInit | getName: | self | getType: | WrapperWithInit | isInout: | no | -| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithInit | getName: | self | getType: | WrapperWithInit | isInout: | yes | -| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithInit | getName: | self | getType: | WrapperWithInit | isInout: | yes | -| param_decls.swift:22:9:22:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | value | getType: | Int | isInout: | no | -| param_decls.swift:24:5:24:5 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithInit | getName: | self | getType: | WrapperWithInit | isInout: | yes | -| param_decls.swift:24:10:24:24 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | isInout: | no | -| param_decls.swift:27:25:27:25 | projectedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Bool | getName: | projectedValue | getType: | Bool | isInout: | no | -| param_decls.swift:27:25:27:25 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:27:25:27:25 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:27:25:27:25 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | isInout: | no | -| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | no | -| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:28:9:28:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | value | getType: | Int | isInout: | no | -| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | no | -| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjected | getName: | self | getType: | WrapperWithProjected | isInout: | yes | -| param_decls.swift:29:9:29:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Bool | getName: | value | getType: | Bool | isInout: | no | -| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | no | -| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:33:9:33:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | value | getType: | Int | isInout: | no | -| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | no | -| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:34:9:34:9 | value | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Bool | getName: | value | getType: | Bool | isInout: | no | -| param_decls.swift:36:5:36:5 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:36:10:36:24 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | wrappedValue | getType: | Int | isInout: | no | -| param_decls.swift:41:5:41:5 | self | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | WrapperWithProjectedAndInit | getName: | self | getType: | WrapperWithProjectedAndInit | isInout: | yes | -| param_decls.swift:41:10:41:26 | projectedValue | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Bool | getName: | projectedValue | getType: | Bool | isInout: | no | -| param_decls.swift:48:18:48:22 | p1 | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | p1 | getType: | Int | isInout: | no | -| param_decls.swift:49:26:49:30 | p2 | getModule: | file://:0:0:0:0 | param_decls | getInterfaceType: | Int | getName: | p2 | getType: | Int | isInout: | no | -getMember -getAccessor -getAttachedPropertyWrapperType -| param_decls.swift:48:18:48:22 | p1 | Wrapper | -| param_decls.swift:49:26:49:30 | p2 | WrapperWithInit | -getParentPattern -getParentInitializer -getPropertyWrapperBackingVarBinding -| param_decls.swift:48:18:48:22 | p1 | file://:0:0:0:0 | var ... = ... | -| param_decls.swift:49:26:49:30 | p2 | file://:0:0:0:0 | var ... = ... | -getPropertyWrapperBackingVar -| param_decls.swift:48:18:48:22 | p1 | param_decls.swift:48:18:48:18 | _p1 | -| param_decls.swift:49:26:49:30 | p2 | param_decls.swift:49:26:49:26 | _p2 | -getPropertyWrapperProjectionVarBinding -getPropertyWrapperProjectionVar -getPropertyWrapperLocalWrappedVarBinding -getPropertyWrapperLocalWrappedVar -| param_decls.swift:48:18:48:22 | p1 | param_decls.swift:48:18:48:18 | p1 | -| param_decls.swift:49:26:49:30 | p2 | param_decls.swift:49:26:49:26 | p2 | +| file://:0:0:0:0 | x | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | x | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| file://:0:0:0:0 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | y | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:1:10:1:13 | _ | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | _ | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:1:18:1:29 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Double | getNumberOfAccessors: | 0 | getName: | y | getType: | Double | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:2:10:2:13 | _ | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | _ | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:2:18:2:29 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Double | getNumberOfAccessors: | 0 | getName: | y | getType: | Double | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:4:8:4:8 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | S | getNumberOfAccessors: | 0 | getName: | self | getType: | S | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:5:5:5 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | S | getNumberOfAccessors: | 0 | getName: | self | getType: | S | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:15:5:15 | x | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | x | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:15:5:15 | x | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | x | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:15:5:18 | x | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | x | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:23:5:23 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | y | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:23:5:23 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | y | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:5:23:5:26 | y | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | y | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:6:9:6:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | S | getNumberOfAccessors: | 0 | getName: | self | getType: | S | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:7:9:7:9 | newValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int? | getNumberOfAccessors: | 0 | getName: | newValue | getType: | Int? | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:7:9:7:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | S | getNumberOfAccessors: | 0 | getName: | self | getType: | S | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:12:13:12:22 | s | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | String | getNumberOfAccessors: | 0 | getName: | s | getType: | String | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:13:13:13:22 | s | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | String | getNumberOfAccessors: | 0 | getName: | s | getType: | String | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:14:26:14:26 | $0 | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | $0 | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:17:25:17:25 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Wrapper | getNumberOfAccessors: | 0 | getName: | self | getType: | Wrapper | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:17:25:17:25 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Wrapper | getNumberOfAccessors: | 0 | getName: | self | getType: | Wrapper | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:17:25:17:25 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Wrapper | getNumberOfAccessors: | 0 | getName: | self | getType: | Wrapper | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Wrapper | getNumberOfAccessors: | 0 | getName: | self | getType: | Wrapper | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:18:9:18:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Wrapper | getNumberOfAccessors: | 0 | getName: | self | getType: | Wrapper | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:18:9:18:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | value | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:22:9:22:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:22:9:22:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | value | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:24:5:24:5 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:24:10:24:24 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:27:25:27:25 | projectedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 0 | getName: | projectedValue | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:27:25:27:25 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:27:25:27:25 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:27:25:27:25 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:28:9:28:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:28:9:28:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | value | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:29:9:29:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjected | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjected | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:29:9:29:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 0 | getName: | value | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:33:9:33:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:33:9:33:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | value | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:34:9:34:9 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:34:9:34:9 | value | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 0 | getName: | value | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:36:5:36:5 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:36:10:36:24 | wrappedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | wrappedValue | getType: | Int | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:41:5:41:5 | self | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | WrapperWithProjectedAndInit | getNumberOfAccessors: | 0 | getName: | self | getType: | WrapperWithProjectedAndInit | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | yes | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:41:10:41:26 | projectedValue | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Bool | getNumberOfAccessors: | 0 | getName: | projectedValue | getType: | Bool | hasAttachedPropertyWrapperType: | no | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | no | hasPropertyWrapperBackingVar: | no | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | no | +| param_decls.swift:48:18:48:22 | p1 | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | p1 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | yes | +| param_decls.swift:49:26:49:30 | p2 | getModule: | file://:0:0:0:0 | param_decls | getNumberOfMembers: | 0 | getInterfaceType: | Int | getNumberOfAccessors: | 0 | getName: | p2 | getType: | Int | hasAttachedPropertyWrapperType: | yes | hasParentPattern: | no | hasParentInitializer: | no | hasPropertyWrapperBackingVarBinding: | yes | hasPropertyWrapperBackingVar: | yes | hasPropertyWrapperProjectionVarBinding: | no | hasPropertyWrapperProjectionVar: | no | isInout: | no | hasPropertyWrapperLocalWrappedVarBinding: | no | hasPropertyWrapperLocalWrappedVar: | yes | diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql index 1af06c1a464a..eed0fb15c3e6 100644 --- a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl.ql @@ -2,87 +2,65 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ParamDecl x, string getModule__label, ModuleDecl getModule, string getInterfaceType__label, - Type getInterfaceType, string getName__label, string getName, string getType__label, Type getType, - string isInout__label, string isInout -) { +from + ParamDecl x, ModuleDecl getModule, int getNumberOfMembers, Type getInterfaceType, + int getNumberOfAccessors, string getName, Type getType, string hasAttachedPropertyWrapperType, + string hasParentPattern, string hasParentInitializer, string hasPropertyWrapperBackingVarBinding, + string hasPropertyWrapperBackingVar, string hasPropertyWrapperProjectionVarBinding, + string hasPropertyWrapperProjectionVar, string isInout, + string hasPropertyWrapperLocalWrappedVarBinding, string hasPropertyWrapperLocalWrappedVar +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getInterfaceType__label = "getInterfaceType:" and + getNumberOfMembers = x.getNumberOfMembers() and getInterfaceType = x.getInterfaceType() and - getName__label = "getName:" and + getNumberOfAccessors = x.getNumberOfAccessors() and getName = x.getName() and - getType__label = "getType:" and getType = x.getType() and - isInout__label = "isInout:" and - if x.isInout() then isInout = "yes" else isInout = "no" -} - -query predicate getMember(ParamDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} - -query predicate getAccessor(ParamDecl x, int index, Accessor getAccessor) { - toBeTested(x) and not x.isUnknown() and getAccessor = x.getAccessor(index) -} - -query predicate getAttachedPropertyWrapperType(ParamDecl x, Type getAttachedPropertyWrapperType) { - toBeTested(x) and - not x.isUnknown() and - getAttachedPropertyWrapperType = x.getAttachedPropertyWrapperType() -} - -query predicate getParentPattern(ParamDecl x, Pattern getParentPattern) { - toBeTested(x) and not x.isUnknown() and getParentPattern = x.getParentPattern() -} - -query predicate getParentInitializer(ParamDecl x, Expr getParentInitializer) { - toBeTested(x) and not x.isUnknown() and getParentInitializer = x.getParentInitializer() -} - -query predicate getPropertyWrapperBackingVarBinding( - ParamDecl x, PatternBindingDecl getPropertyWrapperBackingVarBinding -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperBackingVarBinding = x.getPropertyWrapperBackingVarBinding() -} - -query predicate getPropertyWrapperBackingVar(ParamDecl x, VarDecl getPropertyWrapperBackingVar) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperBackingVar = x.getPropertyWrapperBackingVar() -} - -query predicate getPropertyWrapperProjectionVarBinding( - ParamDecl x, PatternBindingDecl getPropertyWrapperProjectionVarBinding -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperProjectionVarBinding = x.getPropertyWrapperProjectionVarBinding() -} - -query predicate getPropertyWrapperProjectionVar(ParamDecl x, VarDecl getPropertyWrapperProjectionVar) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperProjectionVar = x.getPropertyWrapperProjectionVar() -} - -query predicate getPropertyWrapperLocalWrappedVarBinding( - ParamDecl x, PatternBindingDecl getPropertyWrapperLocalWrappedVarBinding -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperLocalWrappedVarBinding = x.getPropertyWrapperLocalWrappedVarBinding() -} - -query predicate getPropertyWrapperLocalWrappedVar( - ParamDecl x, VarDecl getPropertyWrapperLocalWrappedVar -) { - toBeTested(x) and - not x.isUnknown() and - getPropertyWrapperLocalWrappedVar = x.getPropertyWrapperLocalWrappedVar() -} + ( + if x.hasAttachedPropertyWrapperType() + then hasAttachedPropertyWrapperType = "yes" + else hasAttachedPropertyWrapperType = "no" + ) and + (if x.hasParentPattern() then hasParentPattern = "yes" else hasParentPattern = "no") and + (if x.hasParentInitializer() then hasParentInitializer = "yes" else hasParentInitializer = "no") and + ( + if x.hasPropertyWrapperBackingVarBinding() + then hasPropertyWrapperBackingVarBinding = "yes" + else hasPropertyWrapperBackingVarBinding = "no" + ) and + ( + if x.hasPropertyWrapperBackingVar() + then hasPropertyWrapperBackingVar = "yes" + else hasPropertyWrapperBackingVar = "no" + ) and + ( + if x.hasPropertyWrapperProjectionVarBinding() + then hasPropertyWrapperProjectionVarBinding = "yes" + else hasPropertyWrapperProjectionVarBinding = "no" + ) and + ( + if x.hasPropertyWrapperProjectionVar() + then hasPropertyWrapperProjectionVar = "yes" + else hasPropertyWrapperProjectionVar = "no" + ) and + (if x.isInout() then isInout = "yes" else isInout = "no") and + ( + if x.hasPropertyWrapperLocalWrappedVarBinding() + then hasPropertyWrapperLocalWrappedVarBinding = "yes" + else hasPropertyWrapperLocalWrappedVarBinding = "no" + ) and + if x.hasPropertyWrapperLocalWrappedVar() + then hasPropertyWrapperLocalWrappedVar = "yes" + else hasPropertyWrapperLocalWrappedVar = "no" +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", + getInterfaceType, "getNumberOfAccessors:", getNumberOfAccessors, "getName:", getName, "getType:", + getType, "hasAttachedPropertyWrapperType:", hasAttachedPropertyWrapperType, "hasParentPattern:", + hasParentPattern, "hasParentInitializer:", hasParentInitializer, + "hasPropertyWrapperBackingVarBinding:", hasPropertyWrapperBackingVarBinding, + "hasPropertyWrapperBackingVar:", hasPropertyWrapperBackingVar, + "hasPropertyWrapperProjectionVarBinding:", hasPropertyWrapperProjectionVarBinding, + "hasPropertyWrapperProjectionVar:", hasPropertyWrapperProjectionVar, "isInout:", isInout, + "hasPropertyWrapperLocalWrappedVarBinding:", hasPropertyWrapperLocalWrappedVarBinding, + "hasPropertyWrapperLocalWrappedVar:", hasPropertyWrapperLocalWrappedVar diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.ql new file mode 100644 index 000000000000..e6e886f9cb8c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAccessor.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getAccessor(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.expected new file mode 100644 index 000000000000..b8a99db3f8fd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.expected @@ -0,0 +1,2 @@ +| param_decls.swift:48:18:48:22 | p1 | Wrapper | +| param_decls.swift:49:26:49:30 | p2 | WrapperWithInit | diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.ql new file mode 100644 index 000000000000..fb67e3687aef --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getAttachedPropertyWrapperType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getAttachedPropertyWrapperType() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.ql new file mode 100644 index 000000000000..a313de883905 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.ql new file mode 100644 index 000000000000..fb122e5676ed --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentInitializer.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getParentInitializer() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.ql new file mode 100644 index 000000000000..7f32c32313e7 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getParentPattern.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getParentPattern() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.expected new file mode 100644 index 000000000000..5a58e14fe486 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.expected @@ -0,0 +1,2 @@ +| param_decls.swift:48:18:48:22 | p1 | param_decls.swift:48:18:48:18 | _p1 | +| param_decls.swift:49:26:49:30 | p2 | param_decls.swift:49:26:49:26 | _p2 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.ql new file mode 100644 index 000000000000..a75d4ace3fac --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperBackingVar() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.expected new file mode 100644 index 000000000000..b3dc664e1db3 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.expected @@ -0,0 +1,2 @@ +| param_decls.swift:48:18:48:22 | p1 | file://:0:0:0:0 | var ... = ... | +| param_decls.swift:49:26:49:30 | p2 | file://:0:0:0:0 | var ... = ... | diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.ql new file mode 100644 index 000000000000..2db7190cb952 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperBackingVarBinding.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperBackingVarBinding() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.expected new file mode 100644 index 000000000000..e1b555437d39 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.expected @@ -0,0 +1,2 @@ +| param_decls.swift:48:18:48:22 | p1 | param_decls.swift:48:18:48:18 | p1 | +| param_decls.swift:49:26:49:30 | p2 | param_decls.swift:49:26:49:26 | p2 | diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.ql new file mode 100644 index 000000000000..9ebb3df90f04 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperLocalWrappedVar() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.ql new file mode 100644 index 000000000000..4a33cbcb2681 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperLocalWrappedVarBinding.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperLocalWrappedVarBinding() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.ql new file mode 100644 index 000000000000..e919653b36b0 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperProjectionVar() diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.expected b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.ql b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.ql new file mode 100644 index 000000000000..47643738f7f7 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/ParamDecl/ParamDecl_getPropertyWrapperProjectionVarBinding.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParamDecl x +where toBeTested(x) and not x.isUnknown() +select x, x.getPropertyWrapperProjectionVarBinding() diff --git a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.expected b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.expected index aaa3b31e23e9..af19c86dec2b 100644 --- a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.expected +++ b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.expected @@ -1,4 +1,2 @@ -instances -| diagnostics.swift:2:1:2:25 | #warning(...) | getModule: | file://:0:0:0:0 | diagnostics | getKind: | 2 | getMessage: | diagnostics.swift:2:10:2:10 | I'm a warning | -| diagnostics.swift:3:1:3:26 | #error(...) | getModule: | file://:0:0:0:0 | diagnostics | getKind: | 1 | getMessage: | diagnostics.swift:3:8:3:8 | And I'm an error | -getMember +| diagnostics.swift:2:1:2:25 | #warning(...) | getModule: | file://:0:0:0:0 | diagnostics | getNumberOfMembers: | 0 | getKind: | 2 | getMessage: | diagnostics.swift:2:10:2:10 | I'm a warning | +| diagnostics.swift:3:1:3:26 | #error(...) | getModule: | file://:0:0:0:0 | diagnostics | getNumberOfMembers: | 0 | getKind: | 1 | getMessage: | diagnostics.swift:3:8:3:8 | And I'm an error | diff --git a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql index acfb7f037da7..4b4b1a2c132c 100644 --- a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql +++ b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl.ql @@ -2,20 +2,15 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PoundDiagnosticDecl x, string getModule__label, ModuleDecl getModule, string getKind__label, - int getKind, string getMessage__label, StringLiteralExpr getMessage -) { +from + PoundDiagnosticDecl x, ModuleDecl getModule, int getNumberOfMembers, int getKind, + StringLiteralExpr getMessage +where toBeTested(x) and not x.isUnknown() and - getModule__label = "getModule:" and getModule = x.getModule() and - getKind__label = "getKind:" and + getNumberOfMembers = x.getNumberOfMembers() and getKind = x.getKind() and - getMessage__label = "getMessage:" and getMessage = x.getMessage() -} - -query predicate getMember(PoundDiagnosticDecl x, int index, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} +select x, "getModule:", getModule, "getNumberOfMembers:", getNumberOfMembers, "getKind:", getKind, + "getMessage:", getMessage diff --git a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.expected b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.ql b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.ql new file mode 100644 index 000000000000..9cae7c9ded0f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/decl/PoundDiagnosticDecl/PoundDiagnosticDecl_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PoundDiagnosticDecl x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.expected b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.expected index 26ca47278ce7..e69de29bb2d1 100644 --- a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.expected @@ -1,2 +0,0 @@ -instances -getType diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql index 863c0dfe6471..4e14ce4e2f51 100644 --- a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr.ql @@ -2,20 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - AppliedPropertyWrapperExpr x, string getKind__label, int getKind, string getValue__label, - Expr getValue, string getParam__label, ParamDecl getParam -) { +from AppliedPropertyWrapperExpr x, string hasType, int getKind, Expr getValue, ParamDecl getParam +where toBeTested(x) and not x.isUnknown() and - getKind__label = "getKind:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getKind = x.getKind() and - getValue__label = "getValue:" and getValue = x.getValue() and - getParam__label = "getParam:" and getParam = x.getParam() -} - -query predicate getType(AppliedPropertyWrapperExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getKind:", getKind, "getValue:", getValue, "getParam:", getParam diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getParam.expected b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getParam.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.ql new file mode 100644 index 000000000000..925625421305 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from AppliedPropertyWrapperExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getValue.expected b/swift/ql/test/extractor-tests/generated/expr/AppliedPropertyWrapperExpr/AppliedPropertyWrapperExpr_getValue.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.expected b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.expected index 6d51478c433c..d9a7b040f1a8 100644 --- a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.expected @@ -1,4 +1 @@ -instances -| move_semantics.swift:5:9:5:17 | ConsumeExpr | getSubExpr: | move_semantics.swift:5:17:5:17 | x | -getType -| move_semantics.swift:5:9:5:17 | ConsumeExpr | Int | +| move_semantics.swift:5:9:5:17 | ConsumeExpr | hasType: | yes | getSubExpr: | move_semantics.swift:5:17:5:17 | x | diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql index 1521b525991c..8ff10e1d4302 100644 --- a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(ConsumeExpr x, string getSubExpr__label, Expr getSubExpr) { +from ConsumeExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(ConsumeExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.expected new file mode 100644 index 000000000000..7935a7393d6d --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.expected @@ -0,0 +1 @@ +| move_semantics.swift:5:9:5:17 | ConsumeExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql new file mode 100644 index 000000000000..af4c8fe91157 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/ConsumeExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ConsumeExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.expected b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.expected index 79797b15ae61..fe6116b6ba0b 100644 --- a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.expected @@ -1,4 +1 @@ -instances -| move_semantics.swift:4:9:4:14 | CopyExpr | getSubExpr: | move_semantics.swift:4:14:4:14 | x | -getType -| move_semantics.swift:4:9:4:14 | CopyExpr | Int | +| move_semantics.swift:4:9:4:14 | CopyExpr | hasType: | yes | getSubExpr: | move_semantics.swift:4:14:4:14 | x | diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql index ab58e99444ea..63145b175ba6 100644 --- a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(CopyExpr x, string getSubExpr__label, Expr getSubExpr) { +from CopyExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(CopyExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.expected new file mode 100644 index 000000000000..bd5fe619f05c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.expected @@ -0,0 +1 @@ +| move_semantics.swift:4:9:4:14 | CopyExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql new file mode 100644 index 000000000000..f5d74cb8a087 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/CopyExpr/CopyExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from CopyExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.expected b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.expected index 3f78b481a7a1..e69de29bb2d1 100644 --- a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.expected @@ -1,3 +0,0 @@ -instances -getType -getArgument diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql index 276fa0a9aef4..37eb9989db3d 100644 --- a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr.ql @@ -2,22 +2,13 @@ import codeql.swift.elements import TestUtils -query predicate instances( - DotSyntaxCallExpr x, string getFunction__label, Expr getFunction, string getBase__label, - Expr getBase -) { +from DotSyntaxCallExpr x, string hasType, Expr getFunction, int getNumberOfArguments, Expr getBase +where toBeTested(x) and not x.isUnknown() and - getFunction__label = "getFunction:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getFunction = x.getFunction() and - getBase__label = "getBase:" and + getNumberOfArguments = x.getNumberOfArguments() and getBase = x.getBase() -} - -query predicate getType(DotSyntaxCallExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getArgument(DotSyntaxCallExpr x, int index, Argument getArgument) { - toBeTested(x) and not x.isUnknown() and getArgument = x.getArgument(index) -} +select x, "hasType:", hasType, "getFunction:", getFunction, "getNumberOfArguments:", + getNumberOfArguments, "getBase:", getBase diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.expected b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.ql b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.ql new file mode 100644 index 000000000000..69ca0a32f8ab --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from DotSyntaxCallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArgument(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.ql new file mode 100644 index 000000000000..985d4935a2ec --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DotSyntaxCallExpr/DotSyntaxCallExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from DotSyntaxCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.expected b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.expected index 2460a1e34fd0..e188be2275fa 100644 --- a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.expected @@ -1,9 +1,2 @@ -instances -| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | DynamicMemberRefExpr | getBase: | dynamic_lookup.swift:15:1:15:1 | OpaqueValueExpr | -| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | DynamicSubscriptExpr | getBase: | dynamic_lookup.swift:16:5:16:5 | OpaqueValueExpr | -getType -| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | ((Int) -> ())? | -| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | Int? | -getMember -| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | dynamic_lookup.swift:6:9:6:28 | foo(_:) | -| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | dynamic_lookup.swift:7:9:9:3 | subscript ... | +| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | DynamicMemberRefExpr | hasType: | yes | getBase: | dynamic_lookup.swift:15:1:15:1 | OpaqueValueExpr | hasMember: | yes | +| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | DynamicSubscriptExpr | hasType: | yes | getBase: | dynamic_lookup.swift:16:5:16:5 | OpaqueValueExpr | hasMember: | yes | diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql index 79480f25f1eb..c32568da04e6 100644 --- a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr.ql @@ -2,20 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - DynamicLookupExpr x, string primaryQlClasses, string getBase__label, Expr getBase -) { +from DynamicLookupExpr x, string hasType, Expr getBase, string hasMember +where toBeTested(x) and not x.isUnknown() and - primaryQlClasses = x.getPrimaryQlClasses() and - getBase__label = "getBase:" and - getBase = x.getBase() -} - -query predicate getType(DynamicLookupExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getMember(DynamicLookupExpr x, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember() -} + (if x.hasType() then hasType = "yes" else hasType = "no") and + getBase = x.getBase() and + if x.hasMember() then hasMember = "yes" else hasMember = "no" +select x, x.getPrimaryQlClasses(), "hasType:", hasType, "getBase:", getBase, "hasMember:", hasMember diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.expected b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.expected new file mode 100644 index 000000000000..3752eb753d2c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.expected @@ -0,0 +1,2 @@ +| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | dynamic_lookup.swift:6:9:6:28 | foo(_:) | +| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | dynamic_lookup.swift:7:9:9:3 | subscript ... | diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.ql b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.ql new file mode 100644 index 000000000000..aa38b203636c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from DynamicLookupExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMember() diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.expected new file mode 100644 index 000000000000..981d75caf986 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.expected @@ -0,0 +1,2 @@ +| dynamic_lookup.swift:15:1:15:3 | .foo(_:) | ((Int) -> ())? | +| dynamic_lookup.swift:16:5:16:9 | subscript ...[...] | Int? | diff --git a/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.ql new file mode 100644 index 000000000000..18ac781cd1f9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/DynamicLookupExpr/DynamicLookupExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from DynamicLookupExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.expected b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.expected index 55e4538dc280..b40ec4fe41dd 100644 --- a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.expected @@ -1,22 +1,10 @@ -instances -| enum_is_case.swift:4:1:4:17 | ... is some | getSubExpr: | enum_is_case.swift:4:1:4:17 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:5:1:5:32 | ... is some | getSubExpr: | enum_is_case.swift:5:1:5:32 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:6:1:6:1 | ... is some | getSubExpr: | enum_is_case.swift:6:1:6:1 | 42 | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:7:1:7:1 | ... is some | getSubExpr: | enum_is_case.swift:7:1:7:1 | 42 | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:9:1:9:19 | ... is some | getSubExpr: | enum_is_case.swift:9:1:9:19 | [...] | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:19:1:19:18 | ... is some | getSubExpr: | enum_is_case.swift:19:1:19:18 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:21:1:21:5 | ... is some | getSubExpr: | enum_is_case.swift:21:1:21:5 | [...] | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:22:1:22:10 | ... is some | getSubExpr: | enum_is_case.swift:22:1:22:10 | [...] | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:23:1:23:10 | ... is some | getSubExpr: | enum_is_case.swift:23:1:23:10 | [...] | getElement: | file://:0:0:0:0 | some | -| enum_is_case.swift:24:1:24:8 | ... is some | getSubExpr: | enum_is_case.swift:24:1:24:8 | call to Set.init() | getElement: | file://:0:0:0:0 | some | -getType -| enum_is_case.swift:4:1:4:17 | ... is some | Bool | -| enum_is_case.swift:5:1:5:32 | ... is some | Bool | -| enum_is_case.swift:6:1:6:1 | ... is some | Bool | -| enum_is_case.swift:7:1:7:1 | ... is some | Bool | -| enum_is_case.swift:9:1:9:19 | ... is some | Bool | -| enum_is_case.swift:19:1:19:18 | ... is some | Bool | -| enum_is_case.swift:21:1:21:5 | ... is some | Bool | -| enum_is_case.swift:22:1:22:10 | ... is some | Bool | -| enum_is_case.swift:23:1:23:10 | ... is some | Bool | -| enum_is_case.swift:24:1:24:8 | ... is some | Bool | +| enum_is_case.swift:4:1:4:17 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:4:1:4:17 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:5:1:5:32 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:5:1:5:32 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:6:1:6:1 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:6:1:6:1 | 42 | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:7:1:7:1 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:7:1:7:1 | 42 | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:9:1:9:19 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:9:1:9:19 | [...] | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:19:1:19:18 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:19:1:19:18 | OptionalEvaluationExpr | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:21:1:21:5 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:21:1:21:5 | [...] | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:22:1:22:10 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:22:1:22:10 | [...] | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:23:1:23:10 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:23:1:23:10 | [...] | getElement: | file://:0:0:0:0 | some | +| enum_is_case.swift:24:1:24:8 | ... is some | hasType: | yes | getSubExpr: | enum_is_case.swift:24:1:24:8 | call to Set.init() | getElement: | file://:0:0:0:0 | some | diff --git a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql index b60785e57cc6..5c232456192a 100644 --- a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr.ql @@ -2,18 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - EnumIsCaseExpr x, string getSubExpr__label, Expr getSubExpr, string getElement__label, - EnumElementDecl getElement -) { +from EnumIsCaseExpr x, string hasType, Expr getSubExpr, EnumElementDecl getElement +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() and - getElement__label = "getElement:" and getElement = x.getElement() -} - -query predicate getType(EnumIsCaseExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr, "getElement:", getElement diff --git a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.expected new file mode 100644 index 000000000000..f1a8bd34fda7 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.expected @@ -0,0 +1,10 @@ +| enum_is_case.swift:4:1:4:17 | ... is some | Bool | +| enum_is_case.swift:5:1:5:32 | ... is some | Bool | +| enum_is_case.swift:6:1:6:1 | ... is some | Bool | +| enum_is_case.swift:7:1:7:1 | ... is some | Bool | +| enum_is_case.swift:9:1:9:19 | ... is some | Bool | +| enum_is_case.swift:19:1:19:18 | ... is some | Bool | +| enum_is_case.swift:21:1:21:5 | ... is some | Bool | +| enum_is_case.swift:22:1:22:10 | ... is some | Bool | +| enum_is_case.swift:23:1:23:10 | ... is some | Bool | +| enum_is_case.swift:24:1:24:8 | ... is some | Bool | diff --git a/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.ql new file mode 100644 index 000000000000..33154f7aa0fe --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/EnumIsCaseExpr/EnumIsCaseExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from EnumIsCaseExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.expected b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.expected index ebd8475067db..aabc59fac994 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.expected @@ -1,4 +1 @@ -instances -| extract_function_isolation.swift:2:21:2:23 | ExtractFunctionIsolationExpr | getFunctionExpr: | extract_function_isolation.swift:2:21:2:21 | x | -getType -| extract_function_isolation.swift:2:21:2:23 | ExtractFunctionIsolationExpr | (any Actor)? | +| extract_function_isolation.swift:2:21:2:23 | ExtractFunctionIsolationExpr | hasType: | yes | getFunctionExpr: | extract_function_isolation.swift:2:21:2:21 | x | diff --git a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql index 6e434d297c36..f133b61f9b67 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr.ql @@ -2,15 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ExtractFunctionIsolationExpr x, string getFunctionExpr__label, Expr getFunctionExpr -) { +from ExtractFunctionIsolationExpr x, string hasType, Expr getFunctionExpr +where toBeTested(x) and not x.isUnknown() and - getFunctionExpr__label = "getFunctionExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getFunctionExpr = x.getFunctionExpr() -} - -query predicate getType(ExtractFunctionIsolationExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getFunctionExpr:", getFunctionExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.expected new file mode 100644 index 000000000000..2c6a32f914c0 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.expected @@ -0,0 +1 @@ +| extract_function_isolation.swift:2:21:2:23 | ExtractFunctionIsolationExpr | (any Actor)? | diff --git a/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.ql new file mode 100644 index 000000000000..b7e9c6a7ba0c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ExtractFunctionIsolationExpr/ExtractFunctionIsolationExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ExtractFunctionIsolationExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.expected b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.expected index 8eb957d6089c..9f489226544e 100644 --- a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.expected @@ -1,20 +1,9 @@ -instances -| identity_expressions.swift:5:9:5:14 | .self | DotSelfExpr | getSubExpr: | identity_expressions.swift:5:9:5:9 | self | -| identity_expressions.swift:5:9:5:21 | .self | DotSelfExpr | getSubExpr: | identity_expressions.swift:5:9:5:19 | .x | -| identity_expressions.swift:5:28:5:31 | (...) | ParenExpr | getSubExpr: | identity_expressions.swift:5:29:5:29 | 42 | -| identity_expressions.swift:9:5:9:9 | (...) | ParenExpr | getSubExpr: | identity_expressions.swift:9:6:9:8 | call to A.init() | -| identity_expressions.swift:12:28:12:43 | (...) | ParenExpr | getSubExpr: | identity_expressions.swift:12:29:12:42 | await ... | -| identity_expressions.swift:12:29:12:42 | await ... | AwaitExpr | getSubExpr: | identity_expressions.swift:12:35:12:42 | call to create() | -| identity_expressions.swift:15:5:15:21 | await ... | AwaitExpr | getSubExpr: | identity_expressions.swift:15:11:15:21 | call to process() | -| identity_expressions.swift:15:11:15:19 | (...) | ParenExpr | getSubExpr: | identity_expressions.swift:15:12:15:12 | process() | -| identity_expressions.swift:18:9:18:17 | BorrowExpr | BorrowExpr | getSubExpr: | identity_expressions.swift:18:17:18:17 | x | -getType -| identity_expressions.swift:5:9:5:14 | .self | A | -| identity_expressions.swift:5:9:5:21 | .self | @lvalue Int | -| identity_expressions.swift:5:28:5:31 | (...) | Int | -| identity_expressions.swift:9:5:9:9 | (...) | A | -| identity_expressions.swift:12:28:12:43 | (...) | A | -| identity_expressions.swift:12:29:12:42 | await ... | A | -| identity_expressions.swift:15:5:15:21 | await ... | () | -| identity_expressions.swift:15:11:15:19 | (...) | () async -> () | -| identity_expressions.swift:18:9:18:17 | BorrowExpr | Int | +| identity_expressions.swift:5:9:5:14 | .self | DotSelfExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:5:9:5:9 | self | +| identity_expressions.swift:5:9:5:21 | .self | DotSelfExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:5:9:5:19 | .x | +| identity_expressions.swift:5:28:5:31 | (...) | ParenExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:5:29:5:29 | 42 | +| identity_expressions.swift:9:5:9:9 | (...) | ParenExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:9:6:9:8 | call to A.init() | +| identity_expressions.swift:12:28:12:43 | (...) | ParenExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:12:29:12:42 | await ... | +| identity_expressions.swift:12:29:12:42 | await ... | AwaitExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:12:35:12:42 | call to create() | +| identity_expressions.swift:15:5:15:21 | await ... | AwaitExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:15:11:15:21 | call to process() | +| identity_expressions.swift:15:11:15:19 | (...) | ParenExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:15:12:15:12 | process() | +| identity_expressions.swift:18:9:18:17 | BorrowExpr | BorrowExpr | hasType: | yes | getSubExpr: | identity_expressions.swift:18:17:18:17 | x | diff --git a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql index 67a23147b3b4..c21556e9736c 100644 --- a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr.ql @@ -2,16 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - IdentityExpr x, string primaryQlClasses, string getSubExpr__label, Expr getSubExpr -) { +from IdentityExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - primaryQlClasses = x.getPrimaryQlClasses() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(IdentityExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, x.getPrimaryQlClasses(), "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.expected new file mode 100644 index 000000000000..7922f8fdeedb --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.expected @@ -0,0 +1,9 @@ +| identity_expressions.swift:5:9:5:14 | .self | A | +| identity_expressions.swift:5:9:5:21 | .self | @lvalue Int | +| identity_expressions.swift:5:28:5:31 | (...) | Int | +| identity_expressions.swift:9:5:9:9 | (...) | A | +| identity_expressions.swift:12:28:12:43 | (...) | A | +| identity_expressions.swift:12:29:12:42 | await ... | A | +| identity_expressions.swift:15:5:15:21 | await ... | () | +| identity_expressions.swift:15:11:15:19 | (...) | () async -> () | +| identity_expressions.swift:18:9:18:17 | BorrowExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.ql new file mode 100644 index 000000000000..d682c3be3d0f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/IdentityExpr/IdentityExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from IdentityExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected index 23713cba5cd3..ac122e39f9f7 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.expected @@ -1,16 +1,7 @@ -instances -| implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | StringToPointerExpr | getSubExpr: | implicit_conversions.swift:2:3:2:3 | Hello | -| implicit_conversions.swift:4:16:4:16 | (Int?) ... | InjectIntoOptionalExpr | getSubExpr: | implicit_conversions.swift:4:16:4:16 | 42 | -| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | ErasureExpr | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | -| implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | AbiSafeConversionExpr | getSubExpr: | implicit_conversions.swift:12:3:12:5 | .b | -| implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | InjectIntoOptionalExpr | getSubExpr: | implicit_conversions.swift:12:9:12:10 | { ... } | -| implicit_conversions.swift:24:3:24:5 | (Array) ... | UnsafeCastExpr | getSubExpr: | implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | -| implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | LoadExpr | getSubExpr: | implicit_conversions.swift:24:3:24:5 | .a | -getType -| implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | UnsafePointer | -| implicit_conversions.swift:4:16:4:16 | (Int?) ... | Int? | -| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | any Equatable | -| implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | @lvalue (() -> Void)? | -| implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | (() -> Void)? | -| implicit_conversions.swift:24:3:24:5 | (Array) ... | Array | -| implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | [any Sendable] | +| implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | StringToPointerExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:2:3:2:3 | Hello | +| implicit_conversions.swift:4:16:4:16 | (Int?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:4:16:4:16 | 42 | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | ErasureExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:5:25:5:25 | 42 | +| implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | AbiSafeConversionExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:3:12:5 | .b | +| implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | InjectIntoOptionalExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:12:9:12:10 | { ... } | +| implicit_conversions.swift:24:3:24:5 | (Array) ... | UnsafeCastExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | +| implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | LoadExpr | hasType: | yes | getSubExpr: | implicit_conversions.swift:24:3:24:5 | .a | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql index 5861080be05d..3e197676bb8e 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr.ql @@ -2,16 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ImplicitConversionExpr x, string primaryQlClasses, string getSubExpr__label, Expr getSubExpr -) { +from ImplicitConversionExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - primaryQlClasses = x.getPrimaryQlClasses() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(ImplicitConversionExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, x.getPrimaryQlClasses(), "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected new file mode 100644 index 000000000000..8254ef3cc8a7 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.expected @@ -0,0 +1,7 @@ +| implicit_conversions.swift:2:3:2:3 | (UnsafePointer) ... | UnsafePointer | +| implicit_conversions.swift:4:16:4:16 | (Int?) ... | Int? | +| implicit_conversions.swift:5:25:5:25 | (any Equatable) ... | any Equatable | +| implicit_conversions.swift:12:3:12:5 | (@lvalue (() -> Void)?) ... | @lvalue (() -> Void)? | +| implicit_conversions.swift:12:9:12:10 | ((() -> Void)?) ... | (() -> Void)? | +| implicit_conversions.swift:24:3:24:5 | (Array) ... | Array | +| implicit_conversions.swift:24:3:24:5 | ([any Sendable]) ... | [any Sendable] | diff --git a/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.ql new file mode 100644 index 000000000000..6e9053dca6aa --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ImplicitConversionExpr/ImplicitConversionExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ImplicitConversionExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.expected b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.expected index 3f78b481a7a1..e69de29bb2d1 100644 --- a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.expected @@ -1,3 +0,0 @@ -instances -getType -getArgument diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql index 190b919a498c..117eb37809b6 100644 --- a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr.ql @@ -2,22 +2,14 @@ import codeql.swift.elements import TestUtils -query predicate instances( - InitializerRefCallExpr x, string getFunction__label, Expr getFunction, string getBase__label, - Expr getBase -) { +from + InitializerRefCallExpr x, string hasType, Expr getFunction, int getNumberOfArguments, Expr getBase +where toBeTested(x) and not x.isUnknown() and - getFunction__label = "getFunction:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getFunction = x.getFunction() and - getBase__label = "getBase:" and + getNumberOfArguments = x.getNumberOfArguments() and getBase = x.getBase() -} - -query predicate getType(InitializerRefCallExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getArgument(InitializerRefCallExpr x, int index, Argument getArgument) { - toBeTested(x) and not x.isUnknown() and getArgument = x.getArgument(index) -} +select x, "hasType:", hasType, "getFunction:", getFunction, "getNumberOfArguments:", + getNumberOfArguments, "getBase:", getBase diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.expected b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.ql b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.ql new file mode 100644 index 000000000000..91382b53caeb --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from InitializerRefCallExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArgument(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.ql new file mode 100644 index 000000000000..70db9dde340f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/InitializerRefCallExpr/InitializerRefCallExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from InitializerRefCallExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.expected b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.expected index 69318676c730..68e4a6ed34dd 100644 --- a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.expected @@ -1,42 +1,8 @@ -instances -| key_path_expr.swift:11:12:11:17 | #keyPath(...) | -| key_path_expr.swift:12:18:12:26 | #keyPath(...) | -| key_path_expr.swift:13:19:13:38 | #keyPath(...) | -| key_path_expr.swift:14:16:14:35 | #keyPath(...) | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | -| key_path_expr.swift:17:11:17:16 | #keyPath(...) | -| key_path_expr.swift:18:20:18:32 | #keyPath(...) | -getType -| key_path_expr.swift:11:12:11:17 | #keyPath(...) | WritableKeyPath | -| key_path_expr.swift:12:18:12:26 | #keyPath(...) | WritableKeyPath<[Int], Int> | -| key_path_expr.swift:13:19:13:38 | #keyPath(...) | WritableKeyPath<[String : Int], Int?> | -| key_path_expr.swift:14:16:14:35 | #keyPath(...) | WritableKeyPath, Int> | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | KeyPath | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | KeyPath | -| key_path_expr.swift:17:11:17:16 | #keyPath(...) | WritableKeyPath | -| key_path_expr.swift:18:20:18:32 | #keyPath(...) | WritableKeyPath<(Int, Int), Int> | -getRoot -| key_path_expr.swift:11:12:11:17 | #keyPath(...) | key_path_expr.swift:11:13:11:13 | Foo | -| key_path_expr.swift:12:18:12:26 | #keyPath(...) | key_path_expr.swift:12:19:12:23 | [Int] | -| key_path_expr.swift:13:19:13:38 | #keyPath(...) | key_path_expr.swift:13:20:13:33 | [String : Int] | -| key_path_expr.swift:14:16:14:35 | #keyPath(...) | key_path_expr.swift:14:17:14:29 | Optional | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | key_path_expr.swift:15:17:15:17 | Foo | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | key_path_expr.swift:16:21:16:21 | Foo | -| key_path_expr.swift:17:11:17:16 | #keyPath(...) | key_path_expr.swift:17:12:17:12 | Int | -| key_path_expr.swift:18:20:18:32 | #keyPath(...) | key_path_expr.swift:18:21:18:30 | (Int, Int) | -getComponent -| key_path_expr.swift:11:12:11:17 | #keyPath(...) | 0 | key_path_expr.swift:11:17:11:17 | KeyPathComponent | -| key_path_expr.swift:12:18:12:26 | #keyPath(...) | 0 | key_path_expr.swift:12:24:12:26 | KeyPathComponent | -| key_path_expr.swift:13:19:13:38 | #keyPath(...) | 0 | key_path_expr.swift:13:34:13:38 | KeyPathComponent | -| key_path_expr.swift:14:16:14:35 | #keyPath(...) | 0 | key_path_expr.swift:14:31:14:31 | KeyPathComponent | -| key_path_expr.swift:14:16:14:35 | #keyPath(...) | 1 | key_path_expr.swift:14:31:14:31 | KeyPathComponent | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 0 | key_path_expr.swift:15:21:15:21 | KeyPathComponent | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 1 | key_path_expr.swift:15:24:15:24 | KeyPathComponent | -| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 2 | key_path_expr.swift:15:26:15:26 | KeyPathComponent | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 0 | key_path_expr.swift:16:25:16:25 | KeyPathComponent | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 1 | key_path_expr.swift:16:28:16:28 | KeyPathComponent | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 2 | key_path_expr.swift:16:30:16:30 | KeyPathComponent | -| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 3 | file://:0:0:0:0 | KeyPathComponent | -| key_path_expr.swift:17:11:17:16 | #keyPath(...) | 0 | key_path_expr.swift:17:16:17:16 | KeyPathComponent | -| key_path_expr.swift:18:20:18:32 | #keyPath(...) | 0 | key_path_expr.swift:18:32:18:32 | KeyPathComponent | +| key_path_expr.swift:11:12:11:17 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 1 | +| key_path_expr.swift:12:18:12:26 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 1 | +| key_path_expr.swift:13:19:13:38 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 1 | +| key_path_expr.swift:14:16:14:35 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 2 | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 3 | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 4 | +| key_path_expr.swift:17:11:17:16 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 1 | +| key_path_expr.swift:18:20:18:32 | #keyPath(...) | hasType: | yes | hasRoot: | yes | getNumberOfComponents: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql index 67ca30250cf4..627e5b130db4 100644 --- a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr.ql @@ -2,16 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances(KeyPathExpr x) { toBeTested(x) and not x.isUnknown() } - -query predicate getType(KeyPathExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getRoot(KeyPathExpr x, TypeRepr getRoot) { - toBeTested(x) and not x.isUnknown() and getRoot = x.getRoot() -} - -query predicate getComponent(KeyPathExpr x, int index, KeyPathComponent getComponent) { - toBeTested(x) and not x.isUnknown() and getComponent = x.getComponent(index) -} +from KeyPathExpr x, string hasType, string hasRoot, int getNumberOfComponents +where + toBeTested(x) and + not x.isUnknown() and + (if x.hasType() then hasType = "yes" else hasType = "no") and + (if x.hasRoot() then hasRoot = "yes" else hasRoot = "no") and + getNumberOfComponents = x.getNumberOfComponents() +select x, "hasType:", hasType, "hasRoot:", hasRoot, "getNumberOfComponents:", getNumberOfComponents diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.expected b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.expected new file mode 100644 index 000000000000..673c01e775f1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.expected @@ -0,0 +1,14 @@ +| key_path_expr.swift:11:12:11:17 | #keyPath(...) | 0 | key_path_expr.swift:11:17:11:17 | KeyPathComponent | +| key_path_expr.swift:12:18:12:26 | #keyPath(...) | 0 | key_path_expr.swift:12:24:12:26 | KeyPathComponent | +| key_path_expr.swift:13:19:13:38 | #keyPath(...) | 0 | key_path_expr.swift:13:34:13:38 | KeyPathComponent | +| key_path_expr.swift:14:16:14:35 | #keyPath(...) | 0 | key_path_expr.swift:14:31:14:31 | KeyPathComponent | +| key_path_expr.swift:14:16:14:35 | #keyPath(...) | 1 | key_path_expr.swift:14:31:14:31 | KeyPathComponent | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 0 | key_path_expr.swift:15:21:15:21 | KeyPathComponent | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 1 | key_path_expr.swift:15:24:15:24 | KeyPathComponent | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | 2 | key_path_expr.swift:15:26:15:26 | KeyPathComponent | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 0 | key_path_expr.swift:16:25:16:25 | KeyPathComponent | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 1 | key_path_expr.swift:16:28:16:28 | KeyPathComponent | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 2 | key_path_expr.swift:16:30:16:30 | KeyPathComponent | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | 3 | file://:0:0:0:0 | KeyPathComponent | +| key_path_expr.swift:17:11:17:16 | #keyPath(...) | 0 | key_path_expr.swift:17:16:17:16 | KeyPathComponent | +| key_path_expr.swift:18:20:18:32 | #keyPath(...) | 0 | key_path_expr.swift:18:32:18:32 | KeyPathComponent | diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.ql b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.ql new file mode 100644 index 000000000000..dc7eda149488 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getComponent.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getComponent(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.expected b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.expected new file mode 100644 index 000000000000..4106b8b42fad --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.expected @@ -0,0 +1,8 @@ +| key_path_expr.swift:11:12:11:17 | #keyPath(...) | key_path_expr.swift:11:13:11:13 | Foo | +| key_path_expr.swift:12:18:12:26 | #keyPath(...) | key_path_expr.swift:12:19:12:23 | [Int] | +| key_path_expr.swift:13:19:13:38 | #keyPath(...) | key_path_expr.swift:13:20:13:33 | [String : Int] | +| key_path_expr.swift:14:16:14:35 | #keyPath(...) | key_path_expr.swift:14:17:14:29 | Optional | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | key_path_expr.swift:15:17:15:17 | Foo | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | key_path_expr.swift:16:21:16:21 | Foo | +| key_path_expr.swift:17:11:17:16 | #keyPath(...) | key_path_expr.swift:17:12:17:12 | Int | +| key_path_expr.swift:18:20:18:32 | #keyPath(...) | key_path_expr.swift:18:21:18:30 | (Int, Int) | diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.ql b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.ql new file mode 100644 index 000000000000..10d5ee29d43b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getRoot.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getRoot() diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.expected new file mode 100644 index 000000000000..de0945572cf2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.expected @@ -0,0 +1,8 @@ +| key_path_expr.swift:11:12:11:17 | #keyPath(...) | WritableKeyPath | +| key_path_expr.swift:12:18:12:26 | #keyPath(...) | WritableKeyPath<[Int], Int> | +| key_path_expr.swift:13:19:13:38 | #keyPath(...) | WritableKeyPath<[String : Int], Int?> | +| key_path_expr.swift:14:16:14:35 | #keyPath(...) | WritableKeyPath, Int> | +| key_path_expr.swift:15:16:15:26 | #keyPath(...) | KeyPath | +| key_path_expr.swift:16:20:16:30 | #keyPath(...) | KeyPath | +| key_path_expr.swift:17:11:17:16 | #keyPath(...) | WritableKeyPath | +| key_path_expr.swift:18:20:18:32 | #keyPath(...) | WritableKeyPath<(Int, Int), Int> | diff --git a/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.ql new file mode 100644 index 000000000000..84c2a6c37d87 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/KeyPathExpr/KeyPathExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from KeyPathExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.expected b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.expected index 66837f972f29..8e528ff32a24 100644 --- a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.expected @@ -1,85 +1,29 @@ -instances -| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | getBase: | file://:0:0:0:0 | UnownedSerialExecutor.Type | getMethodRef: | file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | -| method_lookups.swift:7:13:7:13 | (no string representation) | getBase: | method_lookups.swift:7:13:7:13 | self | getMethodRef: | method_lookups.swift:7:13:7:13 | { ... } | -| method_lookups.swift:7:13:7:13 | .baz(_:) | getBase: | file://:0:0:0:0 | self | getMethodRef: | method_lookups.swift:7:13:7:13 | baz(_:) | -| method_lookups.swift:16:13:16:13 | (no string representation) | getBase: | method_lookups.swift:16:13:16:13 | self | getMethodRef: | method_lookups.swift:16:13:16:13 | { ... } | -| method_lookups.swift:16:13:16:13 | .baz(_:) | getBase: | file://:0:0:0:0 | self | getMethodRef: | method_lookups.swift:16:13:16:13 | baz(_:) | -| method_lookups.swift:27:13:27:13 | (no string representation) | getBase: | method_lookups.swift:27:13:27:13 | self | getMethodRef: | method_lookups.swift:27:13:27:13 | { ... } | -| method_lookups.swift:27:13:27:13 | .baz(_:) | getBase: | file://:0:0:0:0 | self | getMethodRef: | method_lookups.swift:27:13:27:13 | baz(_:) | -| method_lookups.swift:32:3:32:5 | .foo(_:_:) | getBase: | method_lookups.swift:32:3:32:3 | X.Type | getMethodRef: | method_lookups.swift:32:5:32:5 | foo(_:_:) | -| method_lookups.swift:33:3:33:5 | .bar() | getBase: | method_lookups.swift:33:3:33:3 | X.Type | getMethodRef: | method_lookups.swift:33:5:33:5 | bar() | -| method_lookups.swift:34:3:34:3 | X.init() | getBase: | method_lookups.swift:34:3:34:3 | X.Type | getMethodRef: | method_lookups.swift:34:3:34:3 | X.init() | -| method_lookups.swift:34:3:34:7 | .baz(_:) | getBase: | method_lookups.swift:34:3:34:5 | call to X.init() | getMethodRef: | method_lookups.swift:34:7:34:7 | baz(_:) | -| method_lookups.swift:36:11:36:13 | .bar() | getBase: | method_lookups.swift:36:11:36:11 | X.Type | getMethodRef: | method_lookups.swift:36:13:36:13 | bar() | -| method_lookups.swift:37:11:37:11 | X.init() | getBase: | method_lookups.swift:37:11:37:11 | X.Type | getMethodRef: | method_lookups.swift:37:11:37:11 | X.init() | -| method_lookups.swift:37:11:37:15 | (no string representation) | getBase: | method_lookups.swift:37:11:37:13 | call to X.init() | getMethodRef: | method_lookups.swift:37:15:37:15 | { ... } | -| method_lookups.swift:37:15:37:15 | .baz(_:) | getBase: | file://:0:0:0:0 | self | getMethodRef: | method_lookups.swift:37:15:37:15 | baz(_:) | -| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | getBase: | method_lookups.swift:40:1:40:1 | Task<(), Never>.Type | getMethodRef: | method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | -| method_lookups.swift:41:3:41:5 | .foo(_:_:) | getBase: | method_lookups.swift:41:3:41:3 | Y.Type | getMethodRef: | method_lookups.swift:41:5:41:5 | foo(_:_:) | -| method_lookups.swift:42:9:42:9 | Y.init() | getBase: | method_lookups.swift:42:9:42:9 | Y.Type | getMethodRef: | method_lookups.swift:42:9:42:9 | Y.init() | -| method_lookups.swift:42:9:42:13 | .baz(_:) | getBase: | method_lookups.swift:42:9:42:11 | call to Y.init() | getMethodRef: | method_lookups.swift:42:13:42:13 | baz(_:) | -| method_lookups.swift:44:11:44:13 | .foo(_:_:) | getBase: | method_lookups.swift:44:11:44:11 | Y.Type | getMethodRef: | method_lookups.swift:44:13:44:13 | foo(_:_:) | -| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | getBase: | method_lookups.swift:47:1:47:1 | Task<(), Never>.Type | getMethodRef: | method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | -| method_lookups.swift:48:9:48:11 | .foo(_:_:) | getBase: | method_lookups.swift:48:9:48:9 | Z.Type | getMethodRef: | method_lookups.swift:48:11:48:11 | foo(_:_:) | -| method_lookups.swift:49:9:49:11 | .bar() | getBase: | method_lookups.swift:49:9:49:9 | Z.Type | getMethodRef: | method_lookups.swift:49:11:49:11 | bar() | -| method_lookups.swift:50:9:50:9 | Z.init() | getBase: | method_lookups.swift:50:9:50:9 | Z.Type | getMethodRef: | method_lookups.swift:50:9:50:9 | Z.init() | -| method_lookups.swift:50:9:50:13 | .baz(_:) | getBase: | method_lookups.swift:50:9:50:11 | call to Z.init() | getMethodRef: | method_lookups.swift:50:13:50:13 | baz(_:) | -| method_lookups.swift:52:11:52:13 | .bar() | getBase: | method_lookups.swift:52:11:52:11 | Z.Type | getMethodRef: | method_lookups.swift:52:13:52:13 | bar() | -| method_lookups.swift:53:11:53:23 | (no string representation) | getBase: | method_lookups.swift:53:18:53:20 | call to Z.init() | getMethodRef: | method_lookups.swift:53:23:53:23 | { ... } | -| method_lookups.swift:53:18:53:18 | Z.init() | getBase: | method_lookups.swift:53:18:53:18 | Z.Type | getMethodRef: | method_lookups.swift:53:18:53:18 | Z.init() | -| method_lookups.swift:53:23:53:23 | .baz(_:) | getBase: | file://:0:0:0:0 | self | getMethodRef: | method_lookups.swift:53:23:53:23 | baz(_:) | -getType -| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | (Builtin.Executor) -> UnownedSerialExecutor | -| method_lookups.swift:7:13:7:13 | (no string representation) | (Int) -> () | -| method_lookups.swift:7:13:7:13 | .baz(_:) | (Int) -> () | -| method_lookups.swift:16:13:16:13 | (no string representation) | (Int) -> () | -| method_lookups.swift:16:13:16:13 | .baz(_:) | (Int) -> () | -| method_lookups.swift:27:13:27:13 | (no string representation) | @MainActor (Int) -> () | -| method_lookups.swift:27:13:27:13 | .baz(_:) | (Int) -> () | -| method_lookups.swift:32:3:32:5 | .foo(_:_:) | (Int, Int) -> () | -| method_lookups.swift:33:3:33:5 | .bar() | () -> () | -| method_lookups.swift:34:3:34:3 | X.init() | () -> X | -| method_lookups.swift:34:3:34:7 | .baz(_:) | (Int) -> () | -| method_lookups.swift:36:11:36:13 | .bar() | () -> () | -| method_lookups.swift:37:11:37:11 | X.init() | () -> X | -| method_lookups.swift:37:11:37:15 | (no string representation) | (Int) -> () | -| method_lookups.swift:37:15:37:15 | .baz(_:) | (Int) -> () | -| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | (TaskPriority?, sending @escaping @isolated(any) () async -> ()) -> Task<(), Never> | -| method_lookups.swift:41:3:41:5 | .foo(_:_:) | (Int, Int) -> () | -| method_lookups.swift:42:9:42:9 | Y.init() | () -> Y | -| method_lookups.swift:42:9:42:13 | .baz(_:) | (Int) -> () | -| method_lookups.swift:44:11:44:13 | .foo(_:_:) | (Int, Int) -> () | -| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | (TaskPriority?, sending @escaping @isolated(any) () async -> ()) -> Task<(), Never> | -| method_lookups.swift:48:9:48:11 | .foo(_:_:) | @MainActor (Int, Int) -> () | -| method_lookups.swift:49:9:49:11 | .bar() | () -> () | -| method_lookups.swift:50:9:50:9 | Z.init() | @MainActor () -> Z | -| method_lookups.swift:50:9:50:13 | .baz(_:) | @MainActor (Int) -> () | -| method_lookups.swift:52:11:52:13 | .bar() | () -> () | -| method_lookups.swift:53:11:53:23 | (no string representation) | @MainActor (Int) -> () | -| method_lookups.swift:53:18:53:18 | Z.init() | @MainActor () -> Z | -| method_lookups.swift:53:23:53:23 | .baz(_:) | (Int) -> () | -getMember -| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | -| method_lookups.swift:7:13:7:13 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | -| method_lookups.swift:16:13:16:13 | .baz(_:) | method_lookups.swift:13:3:13:21 | baz(_:) | -| method_lookups.swift:27:13:27:13 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | -| method_lookups.swift:32:3:32:5 | .foo(_:_:) | method_lookups.swift:2:3:2:35 | foo(_:_:) | -| method_lookups.swift:33:3:33:5 | .bar() | method_lookups.swift:3:3:3:21 | bar() | -| method_lookups.swift:34:3:34:3 | X.init() | method_lookups.swift:6:3:8:3 | X.init() | -| method_lookups.swift:34:3:34:7 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | -| method_lookups.swift:36:11:36:13 | .bar() | method_lookups.swift:3:3:3:21 | bar() | -| method_lookups.swift:37:11:37:11 | X.init() | method_lookups.swift:6:3:8:3 | X.init() | -| method_lookups.swift:37:15:37:15 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | -| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | file://:0:0:0:0 | Task.init(priority:operation:) | -| method_lookups.swift:41:3:41:5 | .foo(_:_:) | method_lookups.swift:12:3:12:35 | foo(_:_:) | -| method_lookups.swift:42:9:42:9 | Y.init() | method_lookups.swift:15:3:17:3 | Y.init() | -| method_lookups.swift:42:9:42:13 | .baz(_:) | method_lookups.swift:13:3:13:21 | baz(_:) | -| method_lookups.swift:44:11:44:13 | .foo(_:_:) | method_lookups.swift:12:3:12:35 | foo(_:_:) | -| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | file://:0:0:0:0 | Task.init(priority:operation:) | -| method_lookups.swift:48:9:48:11 | .foo(_:_:) | method_lookups.swift:22:3:22:35 | foo(_:_:) | -| method_lookups.swift:49:9:49:11 | .bar() | method_lookups.swift:23:15:23:33 | bar() | -| method_lookups.swift:50:9:50:9 | Z.init() | method_lookups.swift:26:3:28:3 | Z.init() | -| method_lookups.swift:50:9:50:13 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | -| method_lookups.swift:52:11:52:13 | .bar() | method_lookups.swift:23:15:23:33 | bar() | -| method_lookups.swift:53:18:53:18 | Z.init() | method_lookups.swift:26:3:28:3 | Z.init() | -| method_lookups.swift:53:23:53:23 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | +| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | UnownedSerialExecutor.Type | hasMember: | yes | getMethodRef: | file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | +| method_lookups.swift:7:13:7:13 | (no string representation) | hasType: | yes | getBase: | method_lookups.swift:7:13:7:13 | self | hasMember: | no | getMethodRef: | method_lookups.swift:7:13:7:13 | { ... } | +| method_lookups.swift:7:13:7:13 | .baz(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | self | hasMember: | yes | getMethodRef: | method_lookups.swift:7:13:7:13 | baz(_:) | +| method_lookups.swift:16:13:16:13 | (no string representation) | hasType: | yes | getBase: | method_lookups.swift:16:13:16:13 | self | hasMember: | no | getMethodRef: | method_lookups.swift:16:13:16:13 | { ... } | +| method_lookups.swift:16:13:16:13 | .baz(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | self | hasMember: | yes | getMethodRef: | method_lookups.swift:16:13:16:13 | baz(_:) | +| method_lookups.swift:27:13:27:13 | (no string representation) | hasType: | yes | getBase: | method_lookups.swift:27:13:27:13 | self | hasMember: | no | getMethodRef: | method_lookups.swift:27:13:27:13 | { ... } | +| method_lookups.swift:27:13:27:13 | .baz(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | self | hasMember: | yes | getMethodRef: | method_lookups.swift:27:13:27:13 | baz(_:) | +| method_lookups.swift:32:3:32:5 | .foo(_:_:) | hasType: | yes | getBase: | method_lookups.swift:32:3:32:3 | X.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:32:5:32:5 | foo(_:_:) | +| method_lookups.swift:33:3:33:5 | .bar() | hasType: | yes | getBase: | method_lookups.swift:33:3:33:3 | X.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:33:5:33:5 | bar() | +| method_lookups.swift:34:3:34:3 | X.init() | hasType: | yes | getBase: | method_lookups.swift:34:3:34:3 | X.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:34:3:34:3 | X.init() | +| method_lookups.swift:34:3:34:7 | .baz(_:) | hasType: | yes | getBase: | method_lookups.swift:34:3:34:5 | call to X.init() | hasMember: | yes | getMethodRef: | method_lookups.swift:34:7:34:7 | baz(_:) | +| method_lookups.swift:36:11:36:13 | .bar() | hasType: | yes | getBase: | method_lookups.swift:36:11:36:11 | X.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:36:13:36:13 | bar() | +| method_lookups.swift:37:11:37:11 | X.init() | hasType: | yes | getBase: | method_lookups.swift:37:11:37:11 | X.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:37:11:37:11 | X.init() | +| method_lookups.swift:37:11:37:15 | (no string representation) | hasType: | yes | getBase: | method_lookups.swift:37:11:37:13 | call to X.init() | hasMember: | no | getMethodRef: | method_lookups.swift:37:15:37:15 | { ... } | +| method_lookups.swift:37:15:37:15 | .baz(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | self | hasMember: | yes | getMethodRef: | method_lookups.swift:37:15:37:15 | baz(_:) | +| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | hasType: | yes | getBase: | method_lookups.swift:40:1:40:1 | Task<(), Never>.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | +| method_lookups.swift:41:3:41:5 | .foo(_:_:) | hasType: | yes | getBase: | method_lookups.swift:41:3:41:3 | Y.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:41:5:41:5 | foo(_:_:) | +| method_lookups.swift:42:9:42:9 | Y.init() | hasType: | yes | getBase: | method_lookups.swift:42:9:42:9 | Y.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:42:9:42:9 | Y.init() | +| method_lookups.swift:42:9:42:13 | .baz(_:) | hasType: | yes | getBase: | method_lookups.swift:42:9:42:11 | call to Y.init() | hasMember: | yes | getMethodRef: | method_lookups.swift:42:13:42:13 | baz(_:) | +| method_lookups.swift:44:11:44:13 | .foo(_:_:) | hasType: | yes | getBase: | method_lookups.swift:44:11:44:11 | Y.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:44:13:44:13 | foo(_:_:) | +| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | hasType: | yes | getBase: | method_lookups.swift:47:1:47:1 | Task<(), Never>.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | +| method_lookups.swift:48:9:48:11 | .foo(_:_:) | hasType: | yes | getBase: | method_lookups.swift:48:9:48:9 | Z.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:48:11:48:11 | foo(_:_:) | +| method_lookups.swift:49:9:49:11 | .bar() | hasType: | yes | getBase: | method_lookups.swift:49:9:49:9 | Z.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:49:11:49:11 | bar() | +| method_lookups.swift:50:9:50:9 | Z.init() | hasType: | yes | getBase: | method_lookups.swift:50:9:50:9 | Z.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:50:9:50:9 | Z.init() | +| method_lookups.swift:50:9:50:13 | .baz(_:) | hasType: | yes | getBase: | method_lookups.swift:50:9:50:11 | call to Z.init() | hasMember: | yes | getMethodRef: | method_lookups.swift:50:13:50:13 | baz(_:) | +| method_lookups.swift:52:11:52:13 | .bar() | hasType: | yes | getBase: | method_lookups.swift:52:11:52:11 | Z.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:52:13:52:13 | bar() | +| method_lookups.swift:53:11:53:23 | (no string representation) | hasType: | yes | getBase: | method_lookups.swift:53:18:53:20 | call to Z.init() | hasMember: | no | getMethodRef: | method_lookups.swift:53:23:53:23 | { ... } | +| method_lookups.swift:53:18:53:18 | Z.init() | hasType: | yes | getBase: | method_lookups.swift:53:18:53:18 | Z.Type | hasMember: | yes | getMethodRef: | method_lookups.swift:53:18:53:18 | Z.init() | +| method_lookups.swift:53:23:53:23 | .baz(_:) | hasType: | yes | getBase: | file://:0:0:0:0 | self | hasMember: | yes | getMethodRef: | method_lookups.swift:53:23:53:23 | baz(_:) | diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql index d2006d3bc819..74a45c0bad31 100644 --- a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr.ql @@ -2,22 +2,13 @@ import codeql.swift.elements import TestUtils -query predicate instances( - MethodLookupExpr x, string getBase__label, Expr getBase, string getMethodRef__label, - Expr getMethodRef -) { +from MethodLookupExpr x, string hasType, Expr getBase, string hasMember, Expr getMethodRef +where toBeTested(x) and not x.isUnknown() and - getBase__label = "getBase:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getBase = x.getBase() and - getMethodRef__label = "getMethodRef:" and + (if x.hasMember() then hasMember = "yes" else hasMember = "no") and getMethodRef = x.getMethodRef() -} - -query predicate getType(MethodLookupExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getMember(MethodLookupExpr x, Decl getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember() -} +select x, "hasType:", hasType, "getBase:", getBase, "hasMember:", hasMember, "getMethodRef:", + getMethodRef diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.expected b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.expected new file mode 100644 index 000000000000..a272e0da941f --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.expected @@ -0,0 +1,24 @@ +| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | +| method_lookups.swift:7:13:7:13 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | +| method_lookups.swift:16:13:16:13 | .baz(_:) | method_lookups.swift:13:3:13:21 | baz(_:) | +| method_lookups.swift:27:13:27:13 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | +| method_lookups.swift:32:3:32:5 | .foo(_:_:) | method_lookups.swift:2:3:2:35 | foo(_:_:) | +| method_lookups.swift:33:3:33:5 | .bar() | method_lookups.swift:3:3:3:21 | bar() | +| method_lookups.swift:34:3:34:3 | X.init() | method_lookups.swift:6:3:8:3 | X.init() | +| method_lookups.swift:34:3:34:7 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | +| method_lookups.swift:36:11:36:13 | .bar() | method_lookups.swift:3:3:3:21 | bar() | +| method_lookups.swift:37:11:37:11 | X.init() | method_lookups.swift:6:3:8:3 | X.init() | +| method_lookups.swift:37:15:37:15 | .baz(_:) | method_lookups.swift:4:3:4:21 | baz(_:) | +| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | file://:0:0:0:0 | Task.init(priority:operation:) | +| method_lookups.swift:41:3:41:5 | .foo(_:_:) | method_lookups.swift:12:3:12:35 | foo(_:_:) | +| method_lookups.swift:42:9:42:9 | Y.init() | method_lookups.swift:15:3:17:3 | Y.init() | +| method_lookups.swift:42:9:42:13 | .baz(_:) | method_lookups.swift:13:3:13:21 | baz(_:) | +| method_lookups.swift:44:11:44:13 | .foo(_:_:) | method_lookups.swift:12:3:12:35 | foo(_:_:) | +| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | file://:0:0:0:0 | Task.init(priority:operation:) | +| method_lookups.swift:48:9:48:11 | .foo(_:_:) | method_lookups.swift:22:3:22:35 | foo(_:_:) | +| method_lookups.swift:49:9:49:11 | .bar() | method_lookups.swift:23:15:23:33 | bar() | +| method_lookups.swift:50:9:50:9 | Z.init() | method_lookups.swift:26:3:28:3 | Z.init() | +| method_lookups.swift:50:9:50:13 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | +| method_lookups.swift:52:11:52:13 | .bar() | method_lookups.swift:23:15:23:33 | bar() | +| method_lookups.swift:53:18:53:18 | Z.init() | method_lookups.swift:26:3:28:3 | Z.init() | +| method_lookups.swift:53:23:53:23 | .baz(_:) | method_lookups.swift:24:3:24:21 | baz(_:) | diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.ql b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.ql new file mode 100644 index 000000000000..5ac3ed350025 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MethodLookupExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getMember() diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.expected new file mode 100644 index 000000000000..7ea638a186ca --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.expected @@ -0,0 +1,29 @@ +| file://:0:0:0:0 | UnownedSerialExecutor.init(_:) | (Builtin.Executor) -> UnownedSerialExecutor | +| method_lookups.swift:7:13:7:13 | (no string representation) | (Int) -> () | +| method_lookups.swift:7:13:7:13 | .baz(_:) | (Int) -> () | +| method_lookups.swift:16:13:16:13 | (no string representation) | (Int) -> () | +| method_lookups.swift:16:13:16:13 | .baz(_:) | (Int) -> () | +| method_lookups.swift:27:13:27:13 | (no string representation) | @MainActor (Int) -> () | +| method_lookups.swift:27:13:27:13 | .baz(_:) | (Int) -> () | +| method_lookups.swift:32:3:32:5 | .foo(_:_:) | (Int, Int) -> () | +| method_lookups.swift:33:3:33:5 | .bar() | () -> () | +| method_lookups.swift:34:3:34:3 | X.init() | () -> X | +| method_lookups.swift:34:3:34:7 | .baz(_:) | (Int) -> () | +| method_lookups.swift:36:11:36:13 | .bar() | () -> () | +| method_lookups.swift:37:11:37:11 | X.init() | () -> X | +| method_lookups.swift:37:11:37:15 | (no string representation) | (Int) -> () | +| method_lookups.swift:37:15:37:15 | .baz(_:) | (Int) -> () | +| method_lookups.swift:40:1:40:1 | Task.init(priority:operation:) | (TaskPriority?, sending @escaping @isolated(any) () async -> ()) -> Task<(), Never> | +| method_lookups.swift:41:3:41:5 | .foo(_:_:) | (Int, Int) -> () | +| method_lookups.swift:42:9:42:9 | Y.init() | () -> Y | +| method_lookups.swift:42:9:42:13 | .baz(_:) | (Int) -> () | +| method_lookups.swift:44:11:44:13 | .foo(_:_:) | (Int, Int) -> () | +| method_lookups.swift:47:1:47:1 | Task.init(priority:operation:) | (TaskPriority?, sending @escaping @isolated(any) () async -> ()) -> Task<(), Never> | +| method_lookups.swift:48:9:48:11 | .foo(_:_:) | @MainActor (Int, Int) -> () | +| method_lookups.swift:49:9:49:11 | .bar() | () -> () | +| method_lookups.swift:50:9:50:9 | Z.init() | @MainActor () -> Z | +| method_lookups.swift:50:9:50:13 | .baz(_:) | @MainActor (Int) -> () | +| method_lookups.swift:52:11:52:13 | .bar() | () -> () | +| method_lookups.swift:53:11:53:23 | (no string representation) | @MainActor (Int) -> () | +| method_lookups.swift:53:18:53:18 | Z.init() | @MainActor () -> Z | +| method_lookups.swift:53:23:53:23 | .baz(_:) | (Int) -> () | diff --git a/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.ql new file mode 100644 index 000000000000..63641a8fc5f8 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/MethodLookupExpr/MethodLookupExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MethodLookupExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.expected b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.expected index abf317e5a3b9..46cfc6b8a790 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.expected @@ -1,15 +1,3 @@ -instances -| object_literals.swift:5:5:5:42 | #fileLiteral(...) | getKind: | 0 | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | getKind: | 2 | -| object_literals.swift:7:5:7:44 | #imageLiteral(...) | getKind: | 1 | -getType -| object_literals.swift:5:5:5:42 | #fileLiteral(...) | <> | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | <> | -| object_literals.swift:7:5:7:44 | #imageLiteral(...) | <> | -getArgument -| object_literals.swift:5:5:5:42 | #fileLiteral(...) | 0 | object_literals.swift:5:18:5:32 | resourceName: file.txt | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 0 | object_literals.swift:6:19:6:24 | red: 255 | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 1 | object_literals.swift:6:29:6:36 | green: 255 | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 2 | object_literals.swift:6:41:6:47 | blue: 255 | -| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 3 | object_literals.swift:6:52:6:59 | alpha: 50 | -| object_literals.swift:7:5:7:44 | #imageLiteral(...) | 0 | object_literals.swift:7:19:7:33 | resourceName: image.gif | +| object_literals.swift:5:5:5:42 | #fileLiteral(...) | hasType: | yes | getKind: | 0 | getNumberOfArguments: | 1 | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | hasType: | yes | getKind: | 2 | getNumberOfArguments: | 4 | +| object_literals.swift:7:5:7:44 | #imageLiteral(...) | hasType: | yes | getKind: | 1 | getNumberOfArguments: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql index f84367ab3bb1..229da3ff942b 100644 --- a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr.ql @@ -2,17 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances(ObjectLiteralExpr x, string getKind__label, int getKind) { +from ObjectLiteralExpr x, string hasType, int getKind, int getNumberOfArguments +where toBeTested(x) and not x.isUnknown() and - getKind__label = "getKind:" and - getKind = x.getKind() -} - -query predicate getType(ObjectLiteralExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getArgument(ObjectLiteralExpr x, int index, Argument getArgument) { - toBeTested(x) and not x.isUnknown() and getArgument = x.getArgument(index) -} + (if x.hasType() then hasType = "yes" else hasType = "no") and + getKind = x.getKind() and + getNumberOfArguments = x.getNumberOfArguments() +select x, "hasType:", hasType, "getKind:", getKind, "getNumberOfArguments:", getNumberOfArguments diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.expected b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.expected new file mode 100644 index 000000000000..aa581dfdd817 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.expected @@ -0,0 +1,6 @@ +| object_literals.swift:5:5:5:42 | #fileLiteral(...) | 0 | object_literals.swift:5:18:5:32 | resourceName: file.txt | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 0 | object_literals.swift:6:19:6:24 | red: 255 | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 1 | object_literals.swift:6:29:6:36 | green: 255 | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 2 | object_literals.swift:6:41:6:47 | blue: 255 | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | 3 | object_literals.swift:6:52:6:59 | alpha: 50 | +| object_literals.swift:7:5:7:44 | #imageLiteral(...) | 0 | object_literals.swift:7:19:7:33 | resourceName: image.gif | diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.ql b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.ql new file mode 100644 index 000000000000..ee6d74c73f05 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ObjectLiteralExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArgument(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.expected new file mode 100644 index 000000000000..49fcd7db593a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.expected @@ -0,0 +1,3 @@ +| object_literals.swift:5:5:5:42 | #fileLiteral(...) | <> | +| object_literals.swift:6:5:6:61 | #colorLiteral(...) | <> | +| object_literals.swift:7:5:7:44 | #imageLiteral(...) | <> | diff --git a/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.ql new file mode 100644 index 000000000000..98378261fd0e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/ObjectLiteralExpr/ObjectLiteralExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ObjectLiteralExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.expected b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.expected index 14fd43b8fd53..4d2e4f05c6e8 100644 --- a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.expected @@ -1,4 +1 @@ -instances -| open_existentials.swift:14:5:14:19 | OpenExistentialExpr | getSubExpr: | open_existentials.swift:14:5:14:19 | call to foo() | getExistential: | open_existentials.swift:14:5:14:13 | call to createP() | getOpaqueExpr: | open_existentials.swift:14:5:14:13 | OpaqueValueExpr | -getType -| open_existentials.swift:14:5:14:19 | OpenExistentialExpr | () | +| open_existentials.swift:14:5:14:19 | OpenExistentialExpr | hasType: | yes | getSubExpr: | open_existentials.swift:14:5:14:19 | call to foo() | getExistential: | open_existentials.swift:14:5:14:13 | call to createP() | getOpaqueExpr: | open_existentials.swift:14:5:14:13 | OpaqueValueExpr | diff --git a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql index c94f907c4e92..86e0c4888728 100644 --- a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr.ql @@ -2,20 +2,15 @@ import codeql.swift.elements import TestUtils -query predicate instances( - OpenExistentialExpr x, string getSubExpr__label, Expr getSubExpr, string getExistential__label, - Expr getExistential, string getOpaqueExpr__label, OpaqueValueExpr getOpaqueExpr -) { +from + OpenExistentialExpr x, string hasType, Expr getSubExpr, Expr getExistential, + OpaqueValueExpr getOpaqueExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() and - getExistential__label = "getExistential:" and getExistential = x.getExistential() and - getOpaqueExpr__label = "getOpaqueExpr:" and getOpaqueExpr = x.getOpaqueExpr() -} - -query predicate getType(OpenExistentialExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr, "getExistential:", getExistential, + "getOpaqueExpr:", getOpaqueExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.expected new file mode 100644 index 000000000000..2103b3448956 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.expected @@ -0,0 +1 @@ +| open_existentials.swift:14:5:14:19 | OpenExistentialExpr | () | diff --git a/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.ql new file mode 100644 index 000000000000..3e6f5ad9700a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/OpenExistentialExpr/OpenExistentialExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpenExistentialExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.expected index 26ca47278ce7..e69de29bb2d1 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.expected @@ -1,2 +0,0 @@ -instances -getType diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql index 1863b6090b92..190e40098935 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(MaterializePackExpr x, string getSubExpr__label, Expr getSubExpr) { +from MaterializePackExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(MaterializePackExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.ql new file mode 100644 index 000000000000..e1c8ad68ca45 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/MaterializePackExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from MaterializePackExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.expected index d970fe079442..da55509ca554 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.expected @@ -1,4 +1 @@ -instances -| test.swift:2:18:2:23 | PackElementExpr | getSubExpr: | test.swift:2:23:2:23 | t | -getType -| test.swift:2:18:2:23 | PackElementExpr | \u03c4_1_0 | +| test.swift:2:18:2:23 | PackElementExpr | hasType: | yes | getSubExpr: | test.swift:2:23:2:23 | t | diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql index a9f6532242ff..c86c6235de8e 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(PackElementExpr x, string getSubExpr__label, Expr getSubExpr) { +from PackElementExpr x, string hasType, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getSubExpr = x.getSubExpr() -} - -query predicate getType(PackElementExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.expected new file mode 100644 index 000000000000..b2a455ec7f3a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.expected @@ -0,0 +1 @@ +| test.swift:2:18:2:23 | PackElementExpr | \u03c4_1_0 | diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.ql new file mode 100644 index 000000000000..7e43978e2b21 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackElementExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PackElementExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.expected index 9815b9396c74..071187d27461 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.expected @@ -1,4 +1 @@ -instances -| test.swift:2:11:2:23 | PackExpansionExpr | getPatternExpr: | test.swift:2:18:2:23 | PackElementExpr | -getType -| test.swift:2:11:2:23 | PackExpansionExpr | repeat each T | +| test.swift:2:11:2:23 | PackExpansionExpr | hasType: | yes | getPatternExpr: | test.swift:2:18:2:23 | PackElementExpr | diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql index 2ef41d1f2446..a7a19b30b9eb 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(PackExpansionExpr x, string getPatternExpr__label, Expr getPatternExpr) { +from PackExpansionExpr x, string hasType, Expr getPatternExpr +where toBeTested(x) and not x.isUnknown() and - getPatternExpr__label = "getPatternExpr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getPatternExpr = x.getPatternExpr() -} - -query predicate getType(PackExpansionExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getPatternExpr:", getPatternExpr diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.expected new file mode 100644 index 000000000000..c391c2081184 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.expected @@ -0,0 +1 @@ +| test.swift:2:11:2:23 | PackExpansionExpr | repeat each T | diff --git a/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.ql new file mode 100644 index 000000000000..a7d8aec2bf33 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PackExpansionExpr/PackExpansionExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PackExpansionExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.expected b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.expected index 33f826100391..4207559e85ea 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.expected @@ -1,9 +1,2 @@ -instances -| postfix.swift:1:5:1:6 | call to ...(_:) | getFunction: | postfix.swift:1:6:1:6 | ....(_:) | -| postfix.swift:7:1:7:2 | call to **(_:) | getFunction: | postfix.swift:7:2:7:2 | **(_:) | -getType -| postfix.swift:1:5:1:6 | call to ...(_:) | PartialRangeFrom | -| postfix.swift:7:1:7:2 | call to **(_:) | () | -getArgument -| postfix.swift:1:5:1:6 | call to ...(_:) | 0 | postfix.swift:1:5:1:5 | : 3 | -| postfix.swift:7:1:7:2 | call to **(_:) | 0 | postfix.swift:7:1:7:1 | : 3 | +| postfix.swift:1:5:1:6 | call to ...(_:) | hasType: | yes | getFunction: | postfix.swift:1:6:1:6 | ....(_:) | getNumberOfArguments: | 1 | +| postfix.swift:7:1:7:2 | call to **(_:) | hasType: | yes | getFunction: | postfix.swift:7:2:7:2 | **(_:) | getNumberOfArguments: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql index 101048cb5c1f..cbdd281f5d65 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr.ql @@ -2,17 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances(PostfixUnaryExpr x, string getFunction__label, Expr getFunction) { +from PostfixUnaryExpr x, string hasType, Expr getFunction, int getNumberOfArguments +where toBeTested(x) and not x.isUnknown() and - getFunction__label = "getFunction:" and - getFunction = x.getFunction() -} - -query predicate getType(PostfixUnaryExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getArgument(PostfixUnaryExpr x, int index, Argument getArgument) { - toBeTested(x) and not x.isUnknown() and getArgument = x.getArgument(index) -} + (if x.hasType() then hasType = "yes" else hasType = "no") and + getFunction = x.getFunction() and + getNumberOfArguments = x.getNumberOfArguments() +select x, "hasType:", hasType, "getFunction:", getFunction, "getNumberOfArguments:", + getNumberOfArguments diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.expected b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.expected new file mode 100644 index 000000000000..8529faaf7a41 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.expected @@ -0,0 +1,2 @@ +| postfix.swift:1:5:1:6 | call to ...(_:) | 0 | postfix.swift:1:5:1:5 | : 3 | +| postfix.swift:7:1:7:2 | call to **(_:) | 0 | postfix.swift:7:1:7:1 | : 3 | diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.ql b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.ql new file mode 100644 index 000000000000..f8d2dbc0b8f2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getArgument.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PostfixUnaryExpr x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArgument(index) diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.expected new file mode 100644 index 000000000000..caa5cc7f158c --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.expected @@ -0,0 +1,2 @@ +| postfix.swift:1:5:1:6 | call to ...(_:) | PartialRangeFrom | +| postfix.swift:7:1:7:2 | call to **(_:) | () | diff --git a/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.ql new file mode 100644 index 000000000000..175b51cc516b --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PostfixUnaryExpr/PostfixUnaryExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PostfixUnaryExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.expected b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.expected index 9276038c719c..9fda9feadafd 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.expected @@ -1,6 +1 @@ -instances -| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | getPlaceholder: | property_wrapper_value_placeholder.swift:12:26:12:26 | OpaqueValueExpr | -getType -| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | Int | -getWrappedValue -| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | property_wrapper_value_placeholder.swift:12:26:12:26 | 42 | +| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | hasType: | yes | hasWrappedValue: | yes | getPlaceholder: | property_wrapper_value_placeholder.swift:12:26:12:26 | OpaqueValueExpr | diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql index bdd44df47b67..7d385ce8430c 100644 --- a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr.ql @@ -2,20 +2,14 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PropertyWrapperValuePlaceholderExpr x, string getPlaceholder__label, +from + PropertyWrapperValuePlaceholderExpr x, string hasType, string hasWrappedValue, OpaqueValueExpr getPlaceholder -) { +where toBeTested(x) and not x.isUnknown() and - getPlaceholder__label = "getPlaceholder:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and + (if x.hasWrappedValue() then hasWrappedValue = "yes" else hasWrappedValue = "no") and getPlaceholder = x.getPlaceholder() -} - -query predicate getType(PropertyWrapperValuePlaceholderExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} - -query predicate getWrappedValue(PropertyWrapperValuePlaceholderExpr x, Expr getWrappedValue) { - toBeTested(x) and not x.isUnknown() and getWrappedValue = x.getWrappedValue() -} +select x, "hasType:", hasType, "hasWrappedValue:", hasWrappedValue, "getPlaceholder:", + getPlaceholder diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.expected new file mode 100644 index 000000000000..c8ac89e28442 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.expected @@ -0,0 +1 @@ +| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.ql new file mode 100644 index 000000000000..530cbc872830 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PropertyWrapperValuePlaceholderExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.expected b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.expected new file mode 100644 index 000000000000..042308c9ea38 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.expected @@ -0,0 +1 @@ +| property_wrapper_value_placeholder.swift:12:26:12:26 | PropertyWrapperValuePlaceholderExpr | property_wrapper_value_placeholder.swift:12:26:12:26 | 42 | diff --git a/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.ql b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.ql new file mode 100644 index 000000000000..028c492631b9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/PropertyWrapperValuePlaceholderExpr/PropertyWrapperValuePlaceholderExpr_getWrappedValue.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PropertyWrapperValuePlaceholderExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getWrappedValue() diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected index a76ec56151d7..336aca667eea 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.expected @@ -1,6 +1,2 @@ -instances -| test.swift:2:3:7:3 | SingleValueStmtExpr | getStmt: | test.swift:2:3:7:3 | switch x { ... } | -| test.swift:11:3:11:30 | SingleValueStmtExpr | getStmt: | test.swift:11:3:11:30 | if ... then { ... } else { ... } | -getType -| test.swift:2:3:7:3 | SingleValueStmtExpr | Int | -| test.swift:11:3:11:30 | SingleValueStmtExpr | Int | +| test.swift:2:3:7:3 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:2:3:7:3 | switch x { ... } | +| test.swift:11:3:11:30 | SingleValueStmtExpr | hasType: | yes | getStmt: | test.swift:11:3:11:30 | if ... then { ... } else { ... } | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql index a6093558118c..79e304da1d7e 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(SingleValueStmtExpr x, string getStmt__label, Stmt getStmt) { +from SingleValueStmtExpr x, string hasType, Stmt getStmt +where toBeTested(x) and not x.isUnknown() and - getStmt__label = "getStmt:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getStmt = x.getStmt() -} - -query predicate getType(SingleValueStmtExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getStmt:", getStmt diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected new file mode 100644 index 000000000000..9d533e94cda1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.expected @@ -0,0 +1,2 @@ +| test.swift:2:3:7:3 | SingleValueStmtExpr | Int | +| test.swift:11:3:11:30 | SingleValueStmtExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql new file mode 100644 index 000000000000..bd8354df61d9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/SingleValueStmtExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from SingleValueStmtExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql index d98b8553bd16..a03b5a6b9ae0 100644 --- a/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql +++ b/swift/ql/test/extractor-tests/generated/expr/SingleValueStmtExpr/ThenStmt.ql @@ -2,9 +2,9 @@ import codeql.swift.elements import TestUtils -query predicate instances(ThenStmt x, string getResult__label, Expr getResult) { +from ThenStmt x, Expr getResult +where toBeTested(x) and not x.isUnknown() and - getResult__label = "getResult:" and getResult = x.getResult() -} +select x, "getResult:", getResult diff --git a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.expected b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.expected index a495d6d72d82..685ff810fcfa 100644 --- a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.expected +++ b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.expected @@ -1,6 +1,2 @@ -instances -| type_value_exprs.swift:4:13:4:13 | TypeValueExpr | getTypeRepr: | type_value_exprs.swift:4:13:4:13 | N | -| type_value_exprs.swift:5:13:5:13 | TypeValueExpr | getTypeRepr: | type_value_exprs.swift:5:13:5:13 | N | -getType -| type_value_exprs.swift:4:13:4:13 | TypeValueExpr | Int | -| type_value_exprs.swift:5:13:5:13 | TypeValueExpr | Int | +| type_value_exprs.swift:4:13:4:13 | TypeValueExpr | hasType: | yes | getTypeRepr: | type_value_exprs.swift:4:13:4:13 | N | +| type_value_exprs.swift:5:13:5:13 | TypeValueExpr | hasType: | yes | getTypeRepr: | type_value_exprs.swift:5:13:5:13 | N | diff --git a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql index a8f3d7163fd5..d434781d1527 100644 --- a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql +++ b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(TypeValueExpr x, string getTypeRepr__label, TypeRepr getTypeRepr) { +from TypeValueExpr x, string hasType, TypeRepr getTypeRepr +where toBeTested(x) and not x.isUnknown() and - getTypeRepr__label = "getTypeRepr:" and + (if x.hasType() then hasType = "yes" else hasType = "no") and getTypeRepr = x.getTypeRepr() -} - -query predicate getType(TypeValueExpr x, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType() -} +select x, "hasType:", hasType, "getTypeRepr:", getTypeRepr diff --git a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.expected b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.expected new file mode 100644 index 000000000000..43e481417906 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.expected @@ -0,0 +1,2 @@ +| type_value_exprs.swift:4:13:4:13 | TypeValueExpr | Int | +| type_value_exprs.swift:5:13:5:13 | TypeValueExpr | Int | diff --git a/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.ql b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.ql new file mode 100644 index 000000000000..3c08a5c76d44 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/expr/TypeValueExpr/TypeValueExpr_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from TypeValueExpr x +where toBeTested(x) and not x.isUnknown() +select x, x.getType() diff --git a/swift/ql/test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql index 9837c935851a..6d8807ea0639 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/DiscardStmt/DiscardStmt.ql @@ -2,9 +2,9 @@ import codeql.swift.elements import TestUtils -query predicate instances(DiscardStmt x, string getSubExpr__label, Expr getSubExpr) { +from DiscardStmt x, Expr getSubExpr +where toBeTested(x) and not x.isUnknown() and - getSubExpr__label = "getSubExpr:" and getSubExpr = x.getSubExpr() -} +select x, "getSubExpr:", getSubExpr diff --git a/swift/ql/test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql index b66674e3cd42..94e0f1180921 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/FailStmt/FailStmt.ql @@ -2,4 +2,6 @@ import codeql.swift.elements import TestUtils -query predicate instances(FailStmt x) { toBeTested(x) and not x.isUnknown() } +from FailStmt x +where toBeTested(x) and not x.isUnknown() +select x diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.expected index 55fc86a8fdbd..2fd2e5d318e6 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.expected +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.expected @@ -1,19 +1,3 @@ -instances -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | getPattern: | for.swift:4:9:4:9 | x | getBody: | for.swift:4:32:6:5 | { ... } | -| for.swift:7:5:9:5 | for ... in ... { ... } | getPattern: | for.swift:7:9:7:9 | s | getBody: | for.swift:7:23:9:5 | { ... } | -| for.swift:13:5:17:5 | for ... in ... { ... } | getPattern: | for.swift:13:9:13:9 | x | getBody: | for.swift:13:32:17:5 | { ... } | -getLabel -getVariable -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | 0 | for.swift:4:9:4:9 | x | -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | 1 | for.swift:4:14:4:14 | $x$generator | -| for.swift:7:5:9:5 | for ... in ... { ... } | 0 | for.swift:7:9:7:9 | s | -| for.swift:7:5:9:5 | for ... in ... { ... } | 1 | for.swift:7:14:7:14 | $s$generator | -| for.swift:13:5:17:5 | for ... in ... { ... } | 0 | for.swift:13:9:13:9 | x | -getWhere -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | for.swift:4:25:4:30 | ... .!=(_:_:) ... | -getIteratorVar -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | file://:0:0:0:0 | var ... = ... | -| for.swift:7:5:9:5 | for ... in ... { ... } | file://:0:0:0:0 | var ... = ... | -getNextCall -| for.swift:4:5:6:5 | for ... in ... where ... { ... } | for.swift:4:5:4:5 | call to next() | -| for.swift:7:5:9:5 | for ... in ... { ... } | for.swift:7:5:7:5 | call to next() | +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | hasLabel: | no | getNumberOfVariables: | 2 | getPattern: | for.swift:4:9:4:9 | x | hasWhere: | yes | hasIteratorVar: | yes | hasNextCall: | yes | getBody: | for.swift:4:32:6:5 | { ... } | +| for.swift:7:5:9:5 | for ... in ... { ... } | hasLabel: | no | getNumberOfVariables: | 2 | getPattern: | for.swift:7:9:7:9 | s | hasWhere: | no | hasIteratorVar: | yes | hasNextCall: | yes | getBody: | for.swift:7:23:9:5 | { ... } | +| for.swift:13:5:17:5 | for ... in ... { ... } | hasLabel: | no | getNumberOfVariables: | 1 | getPattern: | for.swift:13:9:13:9 | x | hasWhere: | no | hasIteratorVar: | no | hasNextCall: | no | getBody: | for.swift:13:32:17:5 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql index 8b9bcabc8165..bb659c7855ae 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt.ql @@ -2,34 +2,19 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ForEachStmt x, string getPattern__label, Pattern getPattern, string getBody__label, - BraceStmt getBody -) { +from + ForEachStmt x, string hasLabel, int getNumberOfVariables, Pattern getPattern, string hasWhere, + string hasIteratorVar, string hasNextCall, BraceStmt getBody +where toBeTested(x) and not x.isUnknown() and - getPattern__label = "getPattern:" and + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + getNumberOfVariables = x.getNumberOfVariables() and getPattern = x.getPattern() and - getBody__label = "getBody:" and + (if x.hasWhere() then hasWhere = "yes" else hasWhere = "no") and + (if x.hasIteratorVar() then hasIteratorVar = "yes" else hasIteratorVar = "no") and + (if x.hasNextCall() then hasNextCall = "yes" else hasNextCall = "no") and getBody = x.getBody() -} - -query predicate getLabel(ForEachStmt x, string getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getVariable(ForEachStmt x, int index, VarDecl getVariable) { - toBeTested(x) and not x.isUnknown() and getVariable = x.getVariable(index) -} - -query predicate getWhere(ForEachStmt x, Expr getWhere) { - toBeTested(x) and not x.isUnknown() and getWhere = x.getWhere() -} - -query predicate getIteratorVar(ForEachStmt x, PatternBindingDecl getIteratorVar) { - toBeTested(x) and not x.isUnknown() and getIteratorVar = x.getIteratorVar() -} - -query predicate getNextCall(ForEachStmt x, Expr getNextCall) { - toBeTested(x) and not x.isUnknown() and getNextCall = x.getNextCall() -} +select x, "hasLabel:", hasLabel, "getNumberOfVariables:", getNumberOfVariables, "getPattern:", + getPattern, "hasWhere:", hasWhere, "hasIteratorVar:", hasIteratorVar, "hasNextCall:", hasNextCall, + "getBody:", getBody diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.expected new file mode 100644 index 000000000000..72e969cbaa41 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.expected @@ -0,0 +1,2 @@ +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | file://:0:0:0:0 | var ... = ... | +| for.swift:7:5:9:5 | for ... in ... { ... } | file://:0:0:0:0 | var ... = ... | diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.ql new file mode 100644 index 000000000000..76c004d4e562 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getIteratorVar.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ForEachStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getIteratorVar() diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.ql new file mode 100644 index 000000000000..218668c2e280 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ForEachStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.expected new file mode 100644 index 000000000000..191a8f2196b4 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.expected @@ -0,0 +1,2 @@ +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | for.swift:4:5:4:5 | call to next() | +| for.swift:7:5:9:5 | for ... in ... { ... } | for.swift:7:5:7:5 | call to next() | diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.ql new file mode 100644 index 000000000000..1b52342b92cd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getNextCall.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ForEachStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getNextCall() diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.expected new file mode 100644 index 000000000000..9762122d43dd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.expected @@ -0,0 +1,5 @@ +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | 0 | for.swift:4:9:4:9 | x | +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | 1 | for.swift:4:14:4:14 | $x$generator | +| for.swift:7:5:9:5 | for ... in ... { ... } | 0 | for.swift:7:9:7:9 | s | +| for.swift:7:5:9:5 | for ... in ... { ... } | 1 | for.swift:7:14:7:14 | $s$generator | +| for.swift:13:5:17:5 | for ... in ... { ... } | 0 | for.swift:13:9:13:9 | x | diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.ql new file mode 100644 index 000000000000..9981a03570ad --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getVariable.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ForEachStmt x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getVariable(index) diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.expected b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.expected new file mode 100644 index 000000000000..991ace80dd34 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.expected @@ -0,0 +1 @@ +| for.swift:4:5:6:5 | for ... in ... where ... { ... } | for.swift:4:25:4:30 | ... .!=(_:_:) ... | diff --git a/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.ql b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.ql new file mode 100644 index 000000000000..176846c278c4 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/ForEachStmt/ForEachStmt_getWhere.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ForEachStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getWhere() diff --git a/swift/ql/test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql index cafb34acd4c0..b87fecd5d030 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/PoundAssertStmt/PoundAssertStmt.ql @@ -2,14 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PoundAssertStmt x, string getCondition__label, Expr getCondition, string getMessage__label, - string getMessage -) { +from PoundAssertStmt x, Expr getCondition, string getMessage +where toBeTested(x) and not x.isUnknown() and - getCondition__label = "getCondition:" and getCondition = x.getCondition() and - getMessage__label = "getMessage:" and getMessage = x.getMessage() -} +select x, "getCondition:", getCondition, "getMessage:", getMessage diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.expected index 981203c520dd..0254cddd8e09 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.expected +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.expected @@ -1,17 +1,13 @@ -instances -| switch.swift:3:9:3:9 | =~ ... | getPattern: | switch.swift:3:9:3:9 | =~ ... | -| switch.swift:6:9:6:9 | =~ ... | getPattern: | switch.swift:6:9:6:9 | =~ ... | -| switch.swift:6:12:6:12 | =~ ... | getPattern: | switch.swift:6:12:6:12 | =~ ... | -| switch.swift:8:9:8:26 | x where ... | getPattern: | switch.swift:8:13:8:13 | x | -| switch.swift:10:4:10:4 | _ | getPattern: | switch.swift:10:4:10:4 | _ | -| switch.swift:22:8:22:9 | .one | getPattern: | switch.swift:22:8:22:9 | .one | -| switch.swift:24:8:24:40 | .two(...) where ... | getPattern: | switch.swift:24:8:24:25 | .two(...) | -| switch.swift:26:8:26:25 | .two(...) | getPattern: | switch.swift:26:8:26:25 | .two(...) | -| switch.swift:28:8:28:23 | .three(...) | getPattern: | switch.swift:28:8:28:23 | .three(...) | -| switch.swift:33:8:33:21 | .two(...) | getPattern: | switch.swift:33:8:33:21 | .two(...) | -| switch.swift:35:13:35:13 | =~ ... | getPattern: | switch.swift:35:13:35:13 | =~ ... | -| switch.swift:37:8:37:8 | _ | getPattern: | switch.swift:37:8:37:8 | _ | -| switch.swift:40:3:40:3 | _ | getPattern: | switch.swift:40:3:40:3 | _ | -getGuard -| switch.swift:8:9:8:26 | x where ... | switch.swift:8:21:8:26 | ... .>=(_:_:) ... | -| switch.swift:24:8:24:40 | .two(...) where ... | switch.swift:24:33:24:40 | ... .==(_:_:) ... | +| switch.swift:3:9:3:9 | =~ ... | getPattern: | switch.swift:3:9:3:9 | =~ ... | hasGuard: | no | +| switch.swift:6:9:6:9 | =~ ... | getPattern: | switch.swift:6:9:6:9 | =~ ... | hasGuard: | no | +| switch.swift:6:12:6:12 | =~ ... | getPattern: | switch.swift:6:12:6:12 | =~ ... | hasGuard: | no | +| switch.swift:8:9:8:26 | x where ... | getPattern: | switch.swift:8:13:8:13 | x | hasGuard: | yes | +| switch.swift:10:4:10:4 | _ | getPattern: | switch.swift:10:4:10:4 | _ | hasGuard: | no | +| switch.swift:22:8:22:9 | .one | getPattern: | switch.swift:22:8:22:9 | .one | hasGuard: | no | +| switch.swift:24:8:24:40 | .two(...) where ... | getPattern: | switch.swift:24:8:24:25 | .two(...) | hasGuard: | yes | +| switch.swift:26:8:26:25 | .two(...) | getPattern: | switch.swift:26:8:26:25 | .two(...) | hasGuard: | no | +| switch.swift:28:8:28:23 | .three(...) | getPattern: | switch.swift:28:8:28:23 | .three(...) | hasGuard: | no | +| switch.swift:33:8:33:21 | .two(...) | getPattern: | switch.swift:33:8:33:21 | .two(...) | hasGuard: | no | +| switch.swift:35:13:35:13 | =~ ... | getPattern: | switch.swift:35:13:35:13 | =~ ... | hasGuard: | no | +| switch.swift:37:8:37:8 | _ | getPattern: | switch.swift:37:8:37:8 | _ | hasGuard: | no | +| switch.swift:40:3:40:3 | _ | getPattern: | switch.swift:40:3:40:3 | _ | hasGuard: | no | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql index 6838d62dbaec..9808b8ab7d0d 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem.ql @@ -2,13 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances(CaseLabelItem x, string getPattern__label, Pattern getPattern) { +from CaseLabelItem x, Pattern getPattern, string hasGuard +where toBeTested(x) and not x.isUnknown() and - getPattern__label = "getPattern:" and - getPattern = x.getPattern() -} - -query predicate getGuard(CaseLabelItem x, Expr getGuard) { - toBeTested(x) and not x.isUnknown() and getGuard = x.getGuard() -} + getPattern = x.getPattern() and + if x.hasGuard() then hasGuard = "yes" else hasGuard = "no" +select x, "getPattern:", getPattern, "hasGuard:", hasGuard diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.expected new file mode 100644 index 000000000000..347668754636 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.expected @@ -0,0 +1,2 @@ +| switch.swift:8:9:8:26 | x where ... | switch.swift:8:21:8:26 | ... .>=(_:_:) ... | +| switch.swift:24:8:24:40 | .two(...) where ... | switch.swift:24:33:24:40 | ... .==(_:_:) ... | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.ql new file mode 100644 index 000000000000..08e9260bc8e3 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseLabelItem_getGuard.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from CaseLabelItem x +where toBeTested(x) and not x.isUnknown() +select x, x.getGuard() diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.expected index 52dd5204487b..ed701018d38c 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.expected +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.expected @@ -1,35 +1,12 @@ -instances -| switch.swift:3:4:5:7 | case ... | getBody: | switch.swift:4:7:5:7 | { ... } | -| switch.swift:6:4:7:20 | case ... | getBody: | switch.swift:7:7:7:20 | { ... } | -| switch.swift:8:4:9:18 | case ... | getBody: | switch.swift:9:7:9:18 | { ... } | -| switch.swift:10:4:11:22 | case ... | getBody: | switch.swift:11:7:11:22 | { ... } | -| switch.swift:22:3:23:5 | case ... | getBody: | switch.swift:23:5:23:5 | { ... } | -| switch.swift:24:3:25:5 | case ... | getBody: | switch.swift:25:5:25:5 | { ... } | -| switch.swift:26:3:27:5 | case ... | getBody: | switch.swift:27:5:27:5 | { ... } | -| switch.swift:28:3:29:5 | case ... | getBody: | switch.swift:29:5:29:5 | { ... } | -| switch.swift:33:3:39:5 | case ... | getBody: | switch.swift:34:5:39:5 | { ... } | -| switch.swift:35:8:36:16 | case ... | getBody: | switch.swift:36:10:36:16 | { ... } | -| switch.swift:37:8:38:16 | case ... | getBody: | switch.swift:38:10:38:16 | { ... } | -| switch.swift:40:3:41:5 | case ... | getBody: | switch.swift:41:5:41:5 | { ... } | -getLabel -| switch.swift:3:4:5:7 | case ... | 0 | switch.swift:3:9:3:9 | =~ ... | -| switch.swift:6:4:7:20 | case ... | 0 | switch.swift:6:9:6:9 | =~ ... | -| switch.swift:6:4:7:20 | case ... | 1 | switch.swift:6:12:6:12 | =~ ... | -| switch.swift:8:4:9:18 | case ... | 0 | switch.swift:8:9:8:26 | x where ... | -| switch.swift:10:4:11:22 | case ... | 0 | switch.swift:10:4:10:4 | _ | -| switch.swift:22:3:23:5 | case ... | 0 | switch.swift:22:8:22:9 | .one | -| switch.swift:24:3:25:5 | case ... | 0 | switch.swift:24:8:24:40 | .two(...) where ... | -| switch.swift:26:3:27:5 | case ... | 0 | switch.swift:26:8:26:25 | .two(...) | -| switch.swift:28:3:29:5 | case ... | 0 | switch.swift:28:8:28:23 | .three(...) | -| switch.swift:33:3:39:5 | case ... | 0 | switch.swift:33:8:33:21 | .two(...) | -| switch.swift:35:8:36:16 | case ... | 0 | switch.swift:35:13:35:13 | =~ ... | -| switch.swift:37:8:38:16 | case ... | 0 | switch.swift:37:8:37:8 | _ | -| switch.swift:40:3:41:5 | case ... | 0 | switch.swift:40:3:40:3 | _ | -getVariable -| switch.swift:8:4:9:18 | case ... | 0 | switch.swift:8:13:8:13 | x | -| switch.swift:24:3:25:5 | case ... | 0 | switch.swift:24:17:24:17 | a | -| switch.swift:24:3:25:5 | case ... | 1 | switch.swift:24:24:24:24 | b | -| switch.swift:26:3:27:5 | case ... | 0 | switch.swift:26:17:26:17 | c | -| switch.swift:26:3:27:5 | case ... | 1 | switch.swift:26:24:26:24 | d | -| switch.swift:28:3:29:5 | case ... | 0 | switch.swift:28:22:28:22 | e | -| switch.swift:33:3:39:5 | case ... | 0 | switch.swift:33:17:33:17 | a | +| switch.swift:3:4:5:7 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:4:7:5:7 | { ... } | +| switch.swift:6:4:7:20 | case ... | getNumberOfLabels: | 2 | getNumberOfVariables: | 0 | getBody: | switch.swift:7:7:7:20 | { ... } | +| switch.swift:8:4:9:18 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 1 | getBody: | switch.swift:9:7:9:18 | { ... } | +| switch.swift:10:4:11:22 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:11:7:11:22 | { ... } | +| switch.swift:22:3:23:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:23:5:23:5 | { ... } | +| switch.swift:24:3:25:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 2 | getBody: | switch.swift:25:5:25:5 | { ... } | +| switch.swift:26:3:27:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 2 | getBody: | switch.swift:27:5:27:5 | { ... } | +| switch.swift:28:3:29:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 1 | getBody: | switch.swift:29:5:29:5 | { ... } | +| switch.swift:33:3:39:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 1 | getBody: | switch.swift:34:5:39:5 | { ... } | +| switch.swift:35:8:36:16 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:36:10:36:16 | { ... } | +| switch.swift:37:8:38:16 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:38:10:38:16 | { ... } | +| switch.swift:40:3:41:5 | case ... | getNumberOfLabels: | 1 | getNumberOfVariables: | 0 | getBody: | switch.swift:41:5:41:5 | { ... } | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql index b248ecf38402..8951cdb1cb8b 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt.ql @@ -2,17 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances(CaseStmt x, string getBody__label, Stmt getBody) { +from CaseStmt x, int getNumberOfLabels, int getNumberOfVariables, Stmt getBody +where toBeTested(x) and not x.isUnknown() and - getBody__label = "getBody:" and + getNumberOfLabels = x.getNumberOfLabels() and + getNumberOfVariables = x.getNumberOfVariables() and getBody = x.getBody() -} - -query predicate getLabel(CaseStmt x, int index, CaseLabelItem getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel(index) -} - -query predicate getVariable(CaseStmt x, int index, VarDecl getVariable) { - toBeTested(x) and not x.isUnknown() and getVariable = x.getVariable(index) -} +select x, "getNumberOfLabels:", getNumberOfLabels, "getNumberOfVariables:", getNumberOfVariables, + "getBody:", getBody diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.expected new file mode 100644 index 000000000000..240872c9ece0 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.expected @@ -0,0 +1,13 @@ +| switch.swift:3:4:5:7 | case ... | 0 | switch.swift:3:9:3:9 | =~ ... | +| switch.swift:6:4:7:20 | case ... | 0 | switch.swift:6:9:6:9 | =~ ... | +| switch.swift:6:4:7:20 | case ... | 1 | switch.swift:6:12:6:12 | =~ ... | +| switch.swift:8:4:9:18 | case ... | 0 | switch.swift:8:9:8:26 | x where ... | +| switch.swift:10:4:11:22 | case ... | 0 | switch.swift:10:4:10:4 | _ | +| switch.swift:22:3:23:5 | case ... | 0 | switch.swift:22:8:22:9 | .one | +| switch.swift:24:3:25:5 | case ... | 0 | switch.swift:24:8:24:40 | .two(...) where ... | +| switch.swift:26:3:27:5 | case ... | 0 | switch.swift:26:8:26:25 | .two(...) | +| switch.swift:28:3:29:5 | case ... | 0 | switch.swift:28:8:28:23 | .three(...) | +| switch.swift:33:3:39:5 | case ... | 0 | switch.swift:33:8:33:21 | .two(...) | +| switch.swift:35:8:36:16 | case ... | 0 | switch.swift:35:13:35:13 | =~ ... | +| switch.swift:37:8:38:16 | case ... | 0 | switch.swift:37:8:37:8 | _ | +| switch.swift:40:3:41:5 | case ... | 0 | switch.swift:40:3:40:3 | _ | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.ql new file mode 100644 index 000000000000..a40470354576 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from CaseStmt x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getLabel(index) diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.expected new file mode 100644 index 000000000000..6e1b31a48091 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.expected @@ -0,0 +1,7 @@ +| switch.swift:8:4:9:18 | case ... | 0 | switch.swift:8:13:8:13 | x | +| switch.swift:24:3:25:5 | case ... | 0 | switch.swift:24:17:24:17 | a | +| switch.swift:24:3:25:5 | case ... | 1 | switch.swift:24:24:24:24 | b | +| switch.swift:26:3:27:5 | case ... | 0 | switch.swift:26:17:26:17 | c | +| switch.swift:26:3:27:5 | case ... | 1 | switch.swift:26:24:26:24 | d | +| switch.swift:28:3:29:5 | case ... | 0 | switch.swift:28:22:28:22 | e | +| switch.swift:33:3:39:5 | case ... | 0 | switch.swift:33:17:33:17 | a | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.ql new file mode 100644 index 000000000000..14d32d18ddf3 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/CaseStmt_getVariable.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from CaseStmt x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getVariable(index) diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.expected index ad4fed60062f..e7258f337dac 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.expected +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.expected @@ -1,21 +1,4 @@ -instances -| switch.swift:2:1:12:1 | switch index { ... } | getExpr: | switch.swift:2:8:2:8 | index | -| switch.swift:21:1:30:1 | switch x { ... } | getExpr: | switch.swift:21:8:21:8 | x | -| switch.swift:32:1:42:1 | switch x { ... } | getExpr: | switch.swift:32:15:32:15 | x | -| switch.swift:34:5:39:5 | switch a { ... } | getExpr: | switch.swift:34:19:34:19 | a | -getLabel -| switch.swift:32:1:42:1 | switch x { ... } | outer | -| switch.swift:34:5:39:5 | switch a { ... } | inner | -getCase -| switch.swift:2:1:12:1 | switch index { ... } | 0 | switch.swift:3:4:5:7 | case ... | -| switch.swift:2:1:12:1 | switch index { ... } | 1 | switch.swift:6:4:7:20 | case ... | -| switch.swift:2:1:12:1 | switch index { ... } | 2 | switch.swift:8:4:9:18 | case ... | -| switch.swift:2:1:12:1 | switch index { ... } | 3 | switch.swift:10:4:11:22 | case ... | -| switch.swift:21:1:30:1 | switch x { ... } | 0 | switch.swift:22:3:23:5 | case ... | -| switch.swift:21:1:30:1 | switch x { ... } | 1 | switch.swift:24:3:25:5 | case ... | -| switch.swift:21:1:30:1 | switch x { ... } | 2 | switch.swift:26:3:27:5 | case ... | -| switch.swift:21:1:30:1 | switch x { ... } | 3 | switch.swift:28:3:29:5 | case ... | -| switch.swift:32:1:42:1 | switch x { ... } | 0 | switch.swift:33:3:39:5 | case ... | -| switch.swift:32:1:42:1 | switch x { ... } | 1 | switch.swift:40:3:41:5 | case ... | -| switch.swift:34:5:39:5 | switch a { ... } | 0 | switch.swift:35:8:36:16 | case ... | -| switch.swift:34:5:39:5 | switch a { ... } | 1 | switch.swift:37:8:38:16 | case ... | +| switch.swift:2:1:12:1 | switch index { ... } | hasLabel: | no | getExpr: | switch.swift:2:8:2:8 | index | getNumberOfCases: | 4 | +| switch.swift:21:1:30:1 | switch x { ... } | hasLabel: | no | getExpr: | switch.swift:21:8:21:8 | x | getNumberOfCases: | 4 | +| switch.swift:32:1:42:1 | switch x { ... } | hasLabel: | yes | getExpr: | switch.swift:32:15:32:15 | x | getNumberOfCases: | 2 | +| switch.swift:34:5:39:5 | switch a { ... } | hasLabel: | yes | getExpr: | switch.swift:34:19:34:19 | a | getNumberOfCases: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql index bd817bcb416f..2844d4ebd903 100644 --- a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt.ql @@ -2,17 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances(SwitchStmt x, string getExpr__label, Expr getExpr) { +from SwitchStmt x, string hasLabel, Expr getExpr, int getNumberOfCases +where toBeTested(x) and not x.isUnknown() and - getExpr__label = "getExpr:" and - getExpr = x.getExpr() -} - -query predicate getLabel(SwitchStmt x, string getLabel) { - toBeTested(x) and not x.isUnknown() and getLabel = x.getLabel() -} - -query predicate getCase(SwitchStmt x, int index, CaseStmt getCase) { - toBeTested(x) and not x.isUnknown() and getCase = x.getCase(index) -} + (if x.hasLabel() then hasLabel = "yes" else hasLabel = "no") and + getExpr = x.getExpr() and + getNumberOfCases = x.getNumberOfCases() +select x, "hasLabel:", hasLabel, "getExpr:", getExpr, "getNumberOfCases:", getNumberOfCases diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.expected new file mode 100644 index 000000000000..93c4db76adc1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.expected @@ -0,0 +1,12 @@ +| switch.swift:2:1:12:1 | switch index { ... } | 0 | switch.swift:3:4:5:7 | case ... | +| switch.swift:2:1:12:1 | switch index { ... } | 1 | switch.swift:6:4:7:20 | case ... | +| switch.swift:2:1:12:1 | switch index { ... } | 2 | switch.swift:8:4:9:18 | case ... | +| switch.swift:2:1:12:1 | switch index { ... } | 3 | switch.swift:10:4:11:22 | case ... | +| switch.swift:21:1:30:1 | switch x { ... } | 0 | switch.swift:22:3:23:5 | case ... | +| switch.swift:21:1:30:1 | switch x { ... } | 1 | switch.swift:24:3:25:5 | case ... | +| switch.swift:21:1:30:1 | switch x { ... } | 2 | switch.swift:26:3:27:5 | case ... | +| switch.swift:21:1:30:1 | switch x { ... } | 3 | switch.swift:28:3:29:5 | case ... | +| switch.swift:32:1:42:1 | switch x { ... } | 0 | switch.swift:33:3:39:5 | case ... | +| switch.swift:32:1:42:1 | switch x { ... } | 1 | switch.swift:40:3:41:5 | case ... | +| switch.swift:34:5:39:5 | switch a { ... } | 0 | switch.swift:35:8:36:16 | case ... | +| switch.swift:34:5:39:5 | switch a { ... } | 1 | switch.swift:37:8:38:16 | case ... | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.ql new file mode 100644 index 000000000000..c9f55f3b1d20 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getCase.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from SwitchStmt x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getCase(index) diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.expected b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.expected new file mode 100644 index 000000000000..99df95b02495 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.expected @@ -0,0 +1,2 @@ +| switch.swift:32:1:42:1 | switch x { ... } | outer | +| switch.swift:34:5:39:5 | switch a { ... } | inner | diff --git a/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.ql b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.ql new file mode 100644 index 000000000000..2d9aaf458453 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/stmt/SwitchStmt/SwitchStmt_getLabel.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from SwitchStmt x +where toBeTested(x) and not x.isUnknown() +select x, x.getLabel() diff --git a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.expected b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.expected index 7bc36b2f4e00..d57e72a708b0 100644 --- a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.expected +++ b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.expected @@ -1,11 +1,5 @@ -instances -| Builtin.Int8 | getName: | Int8 | getCanonicalType: | Builtin.Int8 | -| Builtin.Int16 | getName: | Int16 | getCanonicalType: | Builtin.Int16 | -| Builtin.Int32 | getName: | Int32 | getCanonicalType: | Builtin.Int32 | -| Builtin.Int64 | getName: | Int64 | getCanonicalType: | Builtin.Int64 | -| Builtin.Word | getName: | Word | getCanonicalType: | Builtin.Word | -getWidth -| Builtin.Int8 | 8 | -| Builtin.Int16 | 16 | -| Builtin.Int32 | 32 | -| Builtin.Int64 | 64 | +| Builtin.Int8 | getName: | Int8 | getCanonicalType: | Builtin.Int8 | hasWidth: | yes | +| Builtin.Int16 | getName: | Int16 | getCanonicalType: | Builtin.Int16 | hasWidth: | yes | +| Builtin.Int32 | getName: | Int32 | getCanonicalType: | Builtin.Int32 | hasWidth: | yes | +| Builtin.Int64 | getName: | Int64 | getCanonicalType: | Builtin.Int64 | hasWidth: | yes | +| Builtin.Word | getName: | Word | getCanonicalType: | Builtin.Word | hasWidth: | no | diff --git a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql index 47e8d4cfe5ca..ea32bf91d748 100644 --- a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql +++ b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType.ql @@ -2,18 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - BuiltinIntegerType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType -) { +from BuiltinIntegerType x, string getName, Type getCanonicalType, string hasWidth +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and - getCanonicalType = x.getCanonicalType() -} - -query predicate getWidth(BuiltinIntegerType x, int getWidth) { - toBeTested(x) and not x.isUnknown() and getWidth = x.getWidth() -} + getCanonicalType = x.getCanonicalType() and + if x.hasWidth() then hasWidth = "yes" else hasWidth = "no" +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "hasWidth:", hasWidth diff --git a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.expected b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.expected new file mode 100644 index 000000000000..350ab9ee53a9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.expected @@ -0,0 +1,4 @@ +| Builtin.Int8 | 8 | +| Builtin.Int16 | 16 | +| Builtin.Int32 | 32 | +| Builtin.Int64 | 64 | diff --git a/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.ql b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.ql new file mode 100644 index 000000000000..15fcefae59f1 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/BuiltinIntegerType/BuiltinIntegerType_getWidth.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from BuiltinIntegerType x +where toBeTested(x) and not x.isUnknown() +select x, x.getWidth() diff --git a/swift/ql/test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql b/swift/ql/test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql index 984542fc0028..6488c2a30658 100644 --- a/swift/ql/test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql +++ b/swift/ql/test/extractor-tests/generated/type/BuiltinType/BuiltinType.ql @@ -2,15 +2,10 @@ import codeql.swift.elements import TestUtils -query predicate instances( - BuiltinType x, string primaryQlClasses, string getName__label, string getName, - string getCanonicalType__label, Type getCanonicalType -) { +from BuiltinType x, string getName, Type getCanonicalType +where toBeTested(x) and not x.isUnknown() and - primaryQlClasses = x.getPrimaryQlClasses() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() -} +select x, x.getPrimaryQlClasses(), "getName:", getName, "getCanonicalType:", getCanonicalType diff --git a/swift/ql/test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql b/swift/ql/test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql index 1883c35ca75b..24849d7c8dfc 100644 --- a/swift/ql/test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql +++ b/swift/ql/test/extractor-tests/generated/type/DynamicSelfType/DynamicSelfType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - DynamicSelfType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getStaticSelfType__label, Type getStaticSelfType -) { +from DynamicSelfType x, string getName, Type getCanonicalType, Type getStaticSelfType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getStaticSelfType__label = "getStaticSelfType:" and getStaticSelfType = x.getStaticSelfType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getStaticSelfType:", + getStaticSelfType diff --git a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql index 96200b1f27c9..84eb1eeef21f 100644 --- a/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql +++ b/swift/ql/test/extractor-tests/generated/type/ExistentialType/ExistentialType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ExistentialType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getConstraint__label, Type getConstraint -) { +from ExistentialType x, string getName, Type getCanonicalType, Type getConstraint +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getConstraint__label = "getConstraint:" and getConstraint = x.getConstraint() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getConstraint:", + getConstraint diff --git a/swift/ql/test/extractor-tests/generated/type/InOutType/InOutType.ql b/swift/ql/test/extractor-tests/generated/type/InOutType/InOutType.ql index 59ae14054a41..9cb466a5dbf5 100644 --- a/swift/ql/test/extractor-tests/generated/type/InOutType/InOutType.ql +++ b/swift/ql/test/extractor-tests/generated/type/InOutType/InOutType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - InOutType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getObjectType__label, Type getObjectType -) { +from InOutType x, string getName, Type getCanonicalType, Type getObjectType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getObjectType__label = "getObjectType:" and getObjectType = x.getObjectType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getObjectType:", + getObjectType diff --git a/swift/ql/test/extractor-tests/generated/type/IntegerType/IntegerType.ql b/swift/ql/test/extractor-tests/generated/type/IntegerType/IntegerType.ql index 31f187e8ad24..dea3771c7c5d 100644 --- a/swift/ql/test/extractor-tests/generated/type/IntegerType/IntegerType.ql +++ b/swift/ql/test/extractor-tests/generated/type/IntegerType/IntegerType.ql @@ -2,16 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - IntegerType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getValue__label, string getValue -) { +from IntegerType x, string getName, Type getCanonicalType, string getValue +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getValue__label = "getValue:" and getValue = x.getValue() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getValue:", getValue diff --git a/swift/ql/test/extractor-tests/generated/type/ModuleType/ModuleType.ql b/swift/ql/test/extractor-tests/generated/type/ModuleType/ModuleType.ql index b9988d0f44b1..b02c0ae4ee7a 100644 --- a/swift/ql/test/extractor-tests/generated/type/ModuleType/ModuleType.ql +++ b/swift/ql/test/extractor-tests/generated/type/ModuleType/ModuleType.ql @@ -2,16 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ModuleType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getModule__label, ModuleDecl getModule -) { +from ModuleType x, string getName, Type getCanonicalType, ModuleDecl getModule +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getModule__label = "getModule:" and getModule = x.getModule() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getModule:", getModule diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.expected index 27dbc0ef445e..2b14e261f28d 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.expected @@ -1,11 +1,4 @@ -instances -| some Base | getName: | some Base | getCanonicalType: | some Base | getInterfaceType: | \u03c4_1_0 | getDeclaration: | file://:0:0:0:0 | _ | -| some P | getName: | some P | getCanonicalType: | some P | getInterfaceType: | \u03c4_1_0 | getDeclaration: | file://:0:0:0:0 | _ | -| some P | getName: | some P | getCanonicalType: | some P | getInterfaceType: | \u03c4_1_0 | getDeclaration: | file://:0:0:0:0 | _ | -| some SignedInteger | getName: | some SignedInteger | getCanonicalType: | some SignedInteger | getInterfaceType: | \u03c4_0_0 | getDeclaration: | file://:0:0:0:0 | _ | -getSuperclass -| some Base | Base | -getProtocol -| some P | 0 | opaque_types.swift:3:1:3:13 | P | -| some P | 0 | opaque_types.swift:3:1:3:13 | P | -| some SignedInteger | 0 | file://:0:0:0:0 | SignedInteger | +| some Base | getName: | some Base | getCanonicalType: | some Base | getInterfaceType: | \u03c4_1_0 | hasSuperclass: | yes | getNumberOfProtocols: | 0 | getDeclaration: | file://:0:0:0:0 | _ | +| some P | getName: | some P | getCanonicalType: | some P | getInterfaceType: | \u03c4_1_0 | hasSuperclass: | no | getNumberOfProtocols: | 1 | getDeclaration: | file://:0:0:0:0 | _ | +| some P | getName: | some P | getCanonicalType: | some P | getInterfaceType: | \u03c4_1_0 | hasSuperclass: | no | getNumberOfProtocols: | 1 | getDeclaration: | file://:0:0:0:0 | _ | +| some SignedInteger | getName: | some SignedInteger | getCanonicalType: | some SignedInteger | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | no | getNumberOfProtocols: | 1 | getDeclaration: | file://:0:0:0:0 | _ | diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql index a3a9f5f84110..fab7fccc357d 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType.ql @@ -2,27 +2,18 @@ import codeql.swift.elements import TestUtils -query predicate instances( - OpaqueTypeArchetypeType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getInterfaceType__label, Type getInterfaceType, - string getDeclaration__label, OpaqueTypeDecl getDeclaration -) { +from + OpaqueTypeArchetypeType x, string getName, Type getCanonicalType, Type getInterfaceType, + string hasSuperclass, int getNumberOfProtocols, OpaqueTypeDecl getDeclaration +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getInterfaceType__label = "getInterfaceType:" and getInterfaceType = x.getInterfaceType() and - getDeclaration__label = "getDeclaration:" and + (if x.hasSuperclass() then hasSuperclass = "yes" else hasSuperclass = "no") and + getNumberOfProtocols = x.getNumberOfProtocols() and getDeclaration = x.getDeclaration() -} - -query predicate getSuperclass(OpaqueTypeArchetypeType x, Type getSuperclass) { - toBeTested(x) and not x.isUnknown() and getSuperclass = x.getSuperclass() -} - -query predicate getProtocol(OpaqueTypeArchetypeType x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getInterfaceType:", + getInterfaceType, "hasSuperclass:", hasSuperclass, "getNumberOfProtocols:", getNumberOfProtocols, + "getDeclaration:", getDeclaration diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.expected new file mode 100644 index 000000000000..1ca3b350aeb9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.expected @@ -0,0 +1,3 @@ +| some P | 0 | opaque_types.swift:3:1:3:13 | P | +| some P | 0 | opaque_types.swift:3:1:3:13 | P | +| some SignedInteger | 0 | file://:0:0:0:0 | SignedInteger | diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.ql b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.ql new file mode 100644 index 000000000000..ac3498c699ad --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeArchetypeType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.expected new file mode 100644 index 000000000000..d8f0ecac66b7 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.expected @@ -0,0 +1 @@ +| some Base | Base | diff --git a/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.ql b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.ql new file mode 100644 index 000000000000..e32a97a7ceef --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpaqueTypeArchetypeType/OpaqueTypeArchetypeType_getSuperclass.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpaqueTypeArchetypeType x +where toBeTested(x) and not x.isUnknown() +select x, x.getSuperclass() diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected index 3400ffa5fdcf..24471c96e6c7 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.expected @@ -1,7 +1 @@ -instances -| any C & P1 & P2 | getName: | any C & P1 & P2 | getCanonicalType: | any C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | -getSuperclass -| any C & P1 & P2 | C | -getProtocol -| any C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | -| any C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | +| any C & P1 & P2 | getName: | any C & P1 & P2 | getCanonicalType: | any C & P1 & P2 | getInterfaceType: | \u03c4_0_0 | hasSuperclass: | yes | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql index 2d5f19580a76..418367b34daa 100644 --- a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - OpenedArchetypeType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getInterfaceType__label, Type getInterfaceType -) { +from + OpenedArchetypeType x, string getName, Type getCanonicalType, Type getInterfaceType, + string hasSuperclass, int getNumberOfProtocols +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getInterfaceType__label = "getInterfaceType:" and - getInterfaceType = x.getInterfaceType() -} - -query predicate getSuperclass(OpenedArchetypeType x, Type getSuperclass) { - toBeTested(x) and not x.isUnknown() and getSuperclass = x.getSuperclass() -} - -query predicate getProtocol(OpenedArchetypeType x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} + getInterfaceType = x.getInterfaceType() and + (if x.hasSuperclass() then hasSuperclass = "yes" else hasSuperclass = "no") and + getNumberOfProtocols = x.getNumberOfProtocols() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getInterfaceType:", + getInterfaceType, "hasSuperclass:", hasSuperclass, "getNumberOfProtocols:", getNumberOfProtocols diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected new file mode 100644 index 000000000000..691608328bb2 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.expected @@ -0,0 +1,2 @@ +| any C & P1 & P2 | 0 | opened_archetypes.swift:3:1:3:14 | P1 | +| any C & P1 & P2 | 1 | opened_archetypes.swift:9:1:9:14 | P2 | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.ql b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.ql new file mode 100644 index 000000000000..e3408e77e8f4 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpenedArchetypeType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected new file mode 100644 index 000000000000..dffe6bf270a6 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.expected @@ -0,0 +1 @@ +| any C & P1 & P2 | C | diff --git a/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.ql b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.ql new file mode 100644 index 000000000000..6dcddb59c265 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/OpenedArchetypeType/OpenedArchetypeType_getSuperclass.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from OpenedArchetypeType x +where toBeTested(x) and not x.isUnknown() +select x, x.getSuperclass() diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.expected index de765f970816..5bfa71a34816 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.expected @@ -1,6 +1 @@ -instances -| \u03c4_1_0 | getName: | \u03c4_1_0 | getCanonicalType: | \u03c4_1_0 | getInterfaceType: | \u03c4_1_0 | -getSuperclass -getProtocol -| \u03c4_1_0 | 0 | file://:0:0:0:0 | Copyable | -| \u03c4_1_0 | 1 | file://:0:0:0:0 | Escapable | +| \u03c4_1_0 | getName: | \u03c4_1_0 | getCanonicalType: | \u03c4_1_0 | getInterfaceType: | \u03c4_1_0 | hasSuperclass: | no | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql index fb8b5e0f02ee..3b1e13580ed8 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ElementArchetypeType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getInterfaceType__label, Type getInterfaceType -) { +from + ElementArchetypeType x, string getName, Type getCanonicalType, Type getInterfaceType, + string hasSuperclass, int getNumberOfProtocols +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getInterfaceType__label = "getInterfaceType:" and - getInterfaceType = x.getInterfaceType() -} - -query predicate getSuperclass(ElementArchetypeType x, Type getSuperclass) { - toBeTested(x) and not x.isUnknown() and getSuperclass = x.getSuperclass() -} - -query predicate getProtocol(ElementArchetypeType x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} + getInterfaceType = x.getInterfaceType() and + (if x.hasSuperclass() then hasSuperclass = "yes" else hasSuperclass = "no") and + getNumberOfProtocols = x.getNumberOfProtocols() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getInterfaceType:", + getInterfaceType, "hasSuperclass:", hasSuperclass, "getNumberOfProtocols:", getNumberOfProtocols diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.expected new file mode 100644 index 000000000000..f6d6dae2dc59 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.expected @@ -0,0 +1,2 @@ +| \u03c4_1_0 | 0 | file://:0:0:0:0 | Copyable | +| \u03c4_1_0 | 1 | file://:0:0:0:0 | Escapable | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.ql b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.ql new file mode 100644 index 000000000000..57385c7695f9 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ElementArchetypeType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.ql b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.ql new file mode 100644 index 000000000000..01204fdd0596 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/ElementArchetypeType_getSuperclass.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ElementArchetypeType x +where toBeTested(x) and not x.isUnknown() +select x, x.getSuperclass() diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.expected index 564700dd68d8..c53f468dc52f 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.expected @@ -1,9 +1,2 @@ -instances -| each Arg | getName: | each Arg | getCanonicalType: | each Arg | getInterfaceType: | each Arg | -| each T | getName: | each T | getCanonicalType: | each T | getInterfaceType: | each T | -getSuperclass -getProtocol -| each Arg | 0 | file://:0:0:0:0 | Copyable | -| each Arg | 1 | file://:0:0:0:0 | Escapable | -| each T | 0 | file://:0:0:0:0 | Copyable | -| each T | 1 | file://:0:0:0:0 | Escapable | +| each Arg | getName: | each Arg | getCanonicalType: | each Arg | getInterfaceType: | each Arg | hasSuperclass: | no | getNumberOfProtocols: | 2 | +| each T | getName: | each T | getCanonicalType: | each T | getInterfaceType: | each T | hasSuperclass: | no | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.ql index e66b73e0f774..4f98b8a7e4e0 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PackArchetypeType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getInterfaceType__label, Type getInterfaceType -) { +from + PackArchetypeType x, string getName, Type getCanonicalType, Type getInterfaceType, + string hasSuperclass, int getNumberOfProtocols +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getInterfaceType__label = "getInterfaceType:" and - getInterfaceType = x.getInterfaceType() -} - -query predicate getSuperclass(PackArchetypeType x, Type getSuperclass) { - toBeTested(x) and not x.isUnknown() and getSuperclass = x.getSuperclass() -} - -query predicate getProtocol(PackArchetypeType x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} + getInterfaceType = x.getInterfaceType() and + (if x.hasSuperclass() then hasSuperclass = "yes" else hasSuperclass = "no") and + getNumberOfProtocols = x.getNumberOfProtocols() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getInterfaceType:", + getInterfaceType, "hasSuperclass:", hasSuperclass, "getNumberOfProtocols:", getNumberOfProtocols diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.expected new file mode 100644 index 000000000000..7ba05a259c88 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.expected @@ -0,0 +1,4 @@ +| each Arg | 0 | file://:0:0:0:0 | Copyable | +| each Arg | 1 | file://:0:0:0:0 | Escapable | +| each T | 0 | file://:0:0:0:0 | Copyable | +| each T | 1 | file://:0:0:0:0 | Escapable | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.ql new file mode 100644 index 000000000000..653fe7b7371e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PackArchetypeType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.expected new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.ql new file mode 100644 index 000000000000..b22b1750eb40 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackArchetypeType_getSuperclass.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PackArchetypeType x +where toBeTested(x) and not x.isUnknown() +select x, x.getSuperclass() diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackElementType.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackElementType.ql index 2a8864b3a723..af95548518af 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackElementType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackElementType.ql @@ -2,16 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PackElementType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getPackType__label, Type getPackType -) { +from PackElementType x, string getName, Type getCanonicalType, Type getPackType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getPackType__label = "getPackType:" and getPackType = x.getPackType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getPackType:", getPackType diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackExpansionType.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackExpansionType.ql index 886238890544..d429b165a6c3 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackExpansionType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackExpansionType.ql @@ -2,19 +2,14 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PackExpansionType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getPatternType__label, Type getPatternType, - string getCountType__label, Type getCountType -) { +from + PackExpansionType x, string getName, Type getCanonicalType, Type getPatternType, Type getCountType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getPatternType__label = "getPatternType:" and getPatternType = x.getPatternType() and - getCountType__label = "getCountType:" and getCountType = x.getCountType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getPatternType:", + getPatternType, "getCountType:", getCountType diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackType.expected b/swift/ql/test/extractor-tests/generated/type/PackType/PackType.expected index 96fc0c165bb8..d9c928366b25 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackType.expected +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackType.expected @@ -1,5 +1 @@ -instances -| Pack{String, Int} | getName: | Pack{String, Int} | getCanonicalType: | Pack{String, Int} | -getElement -| Pack{String, Int} | 0 | String | -| Pack{String, Int} | 1 | Int | +| Pack{String, Int} | getName: | Pack{String, Int} | getCanonicalType: | Pack{String, Int} | getNumberOfElements: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackType.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackType.ql index bbdd989ed594..1843314a0524 100644 --- a/swift/ql/test/extractor-tests/generated/type/PackType/PackType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackType.ql @@ -2,18 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PackType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType -) { +from PackType x, string getName, Type getCanonicalType, int getNumberOfElements +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and - getCanonicalType = x.getCanonicalType() -} - -query predicate getElement(PackType x, int index, Type getElement) { - toBeTested(x) and not x.isUnknown() and getElement = x.getElement(index) -} + getCanonicalType = x.getCanonicalType() and + getNumberOfElements = x.getNumberOfElements() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getNumberOfElements:", + getNumberOfElements diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.expected b/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.expected new file mode 100644 index 000000000000..bf46cc6a812e --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.expected @@ -0,0 +1,2 @@ +| Pack{String, Int} | 0 | String | +| Pack{String, Int} | 1 | Int | diff --git a/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.ql b/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.ql new file mode 100644 index 000000000000..efd27f799012 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PackType/PackType_getElement.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PackType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getElement(index) diff --git a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.expected b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.expected index 71292b2a41d6..309665f809f6 100644 --- a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.expected +++ b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.expected @@ -1,37 +1,17 @@ -instances -| P | getName: | P | getCanonicalType: | P | getBase: | P | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | -getArg -| P | 0 | Int | -| P | 1 | String | -| RawRepresentable | 0 | Bool | -| RawRepresentable | 0 | Double | -| RawRepresentable | 0 | Float | -| RawRepresentable | 0 | Int8 | -| RawRepresentable | 0 | Int16 | -| RawRepresentable | 0 | Int32 | -| RawRepresentable | 0 | Int64 | -| RawRepresentable | 0 | Int128 | -| RawRepresentable | 0 | Int | -| RawRepresentable | 0 | String | -| RawRepresentable | 0 | UInt8 | -| RawRepresentable | 0 | UInt16 | -| RawRepresentable | 0 | UInt32 | -| RawRepresentable | 0 | UInt64 | -| RawRepresentable | 0 | UInt128 | -| RawRepresentable | 0 | UInt | +| P | getName: | P | getCanonicalType: | P | getBase: | P | getNumberOfArgs: | 2 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | +| RawRepresentable | getName: | RawRepresentable | getCanonicalType: | RawRepresentable | getBase: | RawRepresentable | getNumberOfArgs: | 1 | diff --git a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql index 839b1aa9c92d..f01ab88af8ee 100644 --- a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql +++ b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType.ql @@ -2,20 +2,15 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ParameterizedProtocolType x, string getName__label, string getName, - string getCanonicalType__label, Type getCanonicalType, string getBase__label, ProtocolType getBase -) { +from + ParameterizedProtocolType x, string getName, Type getCanonicalType, ProtocolType getBase, + int getNumberOfArgs +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getBase__label = "getBase:" and - getBase = x.getBase() -} - -query predicate getArg(ParameterizedProtocolType x, int index, Type getArg) { - toBeTested(x) and not x.isUnknown() and getArg = x.getArg(index) -} + getBase = x.getBase() and + getNumberOfArgs = x.getNumberOfArgs() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getBase:", getBase, + "getNumberOfArgs:", getNumberOfArgs diff --git a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.expected b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.expected new file mode 100644 index 000000000000..2762281ade28 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.expected @@ -0,0 +1,18 @@ +| P | 0 | Int | +| P | 1 | String | +| RawRepresentable | 0 | Bool | +| RawRepresentable | 0 | Double | +| RawRepresentable | 0 | Float | +| RawRepresentable | 0 | Int8 | +| RawRepresentable | 0 | Int16 | +| RawRepresentable | 0 | Int32 | +| RawRepresentable | 0 | Int64 | +| RawRepresentable | 0 | Int128 | +| RawRepresentable | 0 | Int | +| RawRepresentable | 0 | String | +| RawRepresentable | 0 | UInt8 | +| RawRepresentable | 0 | UInt16 | +| RawRepresentable | 0 | UInt32 | +| RawRepresentable | 0 | UInt64 | +| RawRepresentable | 0 | UInt128 | +| RawRepresentable | 0 | UInt | diff --git a/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.ql b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.ql new file mode 100644 index 000000000000..7ec2d6a6ca60 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/ParameterizedProtocolType/ParameterizedProtocolType_getArg.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ParameterizedProtocolType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getArg(index) diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.expected b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.expected index 6874035ae54a..2ea99b1e2277 100644 --- a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.expected +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.expected @@ -1,23 +1,8 @@ -instances -| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | -| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | -| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | -| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | -| Param | getName: | Param | getCanonicalType: | Param | getInterfaceType: | Param | -| ParamWithProtocols | getName: | ParamWithProtocols | getCanonicalType: | ParamWithProtocols | getInterfaceType: | ParamWithProtocols | -| ParamWithSuperclass | getName: | ParamWithSuperclass | getCanonicalType: | ParamWithSuperclass | getInterfaceType: | ParamWithSuperclass | -| ParamWithSuperclassAndProtocols | getName: | ParamWithSuperclassAndProtocols | getCanonicalType: | ParamWithSuperclassAndProtocols | getInterfaceType: | ParamWithSuperclassAndProtocols | -getSuperclass -| Base | S | -| Base | S2 | -| ParamWithSuperclass | S | -| ParamWithSuperclassAndProtocols | S | -getProtocol -| Base | 0 | primary_archetypes.swift:4:1:4:13 | P | -| Base | 0 | primary_archetypes.swift:5:1:5:14 | P2 | -| Param | 0 | file://:0:0:0:0 | Copyable | -| Param | 1 | file://:0:0:0:0 | Escapable | -| ParamWithProtocols | 0 | file://:0:0:0:0 | Equatable | -| ParamWithProtocols | 1 | primary_archetypes.swift:4:1:4:13 | P | -| ParamWithSuperclassAndProtocols | 0 | file://:0:0:0:0 | Equatable | -| ParamWithSuperclassAndProtocols | 1 | primary_archetypes.swift:4:1:4:13 | P | +| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | hasSuperclass: | no | getNumberOfProtocols: | 1 | +| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | hasSuperclass: | no | getNumberOfProtocols: | 1 | +| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | hasSuperclass: | yes | getNumberOfProtocols: | 0 | +| Base | getName: | Base | getCanonicalType: | Base | getInterfaceType: | Base | hasSuperclass: | yes | getNumberOfProtocols: | 0 | +| Param | getName: | Param | getCanonicalType: | Param | getInterfaceType: | Param | hasSuperclass: | no | getNumberOfProtocols: | 2 | +| ParamWithProtocols | getName: | ParamWithProtocols | getCanonicalType: | ParamWithProtocols | getInterfaceType: | ParamWithProtocols | hasSuperclass: | no | getNumberOfProtocols: | 2 | +| ParamWithSuperclass | getName: | ParamWithSuperclass | getCanonicalType: | ParamWithSuperclass | getInterfaceType: | ParamWithSuperclass | hasSuperclass: | yes | getNumberOfProtocols: | 0 | +| ParamWithSuperclassAndProtocols | getName: | ParamWithSuperclassAndProtocols | getCanonicalType: | ParamWithSuperclassAndProtocols | getInterfaceType: | ParamWithSuperclassAndProtocols | hasSuperclass: | yes | getNumberOfProtocols: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql index 4d9ff951f791..009b17a3eb51 100644 --- a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType.ql @@ -2,24 +2,16 @@ import codeql.swift.elements import TestUtils -query predicate instances( - PrimaryArchetypeType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getInterfaceType__label, Type getInterfaceType -) { +from + PrimaryArchetypeType x, string getName, Type getCanonicalType, Type getInterfaceType, + string hasSuperclass, int getNumberOfProtocols +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getInterfaceType__label = "getInterfaceType:" and - getInterfaceType = x.getInterfaceType() -} - -query predicate getSuperclass(PrimaryArchetypeType x, Type getSuperclass) { - toBeTested(x) and not x.isUnknown() and getSuperclass = x.getSuperclass() -} - -query predicate getProtocol(PrimaryArchetypeType x, int index, ProtocolDecl getProtocol) { - toBeTested(x) and not x.isUnknown() and getProtocol = x.getProtocol(index) -} + getInterfaceType = x.getInterfaceType() and + (if x.hasSuperclass() then hasSuperclass = "yes" else hasSuperclass = "no") and + getNumberOfProtocols = x.getNumberOfProtocols() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getInterfaceType:", + getInterfaceType, "hasSuperclass:", hasSuperclass, "getNumberOfProtocols:", getNumberOfProtocols diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.expected b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.expected new file mode 100644 index 000000000000..3c0810fd7c27 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.expected @@ -0,0 +1,8 @@ +| Base | 0 | primary_archetypes.swift:4:1:4:13 | P | +| Base | 0 | primary_archetypes.swift:5:1:5:14 | P2 | +| Param | 0 | file://:0:0:0:0 | Copyable | +| Param | 1 | file://:0:0:0:0 | Escapable | +| ParamWithProtocols | 0 | file://:0:0:0:0 | Equatable | +| ParamWithProtocols | 1 | primary_archetypes.swift:4:1:4:13 | P | +| ParamWithSuperclassAndProtocols | 0 | file://:0:0:0:0 | Equatable | +| ParamWithSuperclassAndProtocols | 1 | primary_archetypes.swift:4:1:4:13 | P | diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.ql b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.ql new file mode 100644 index 000000000000..1f3a116e24f0 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getProtocol.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PrimaryArchetypeType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getProtocol(index) diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.expected b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.expected new file mode 100644 index 000000000000..35f9793baaad --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.expected @@ -0,0 +1,4 @@ +| Base | S | +| Base | S2 | +| ParamWithSuperclass | S | +| ParamWithSuperclassAndProtocols | S | diff --git a/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.ql b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.ql new file mode 100644 index 000000000000..821aea038298 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/PrimaryArchetypeType/PrimaryArchetypeType_getSuperclass.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from PrimaryArchetypeType x +where toBeTested(x) and not x.isUnknown() +select x, x.getSuperclass() diff --git a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.expected b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.expected index 869e4caeb26d..f8278a6bae96 100644 --- a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.expected +++ b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.expected @@ -1,12 +1,3 @@ -instances -| P1 & P2 & P3 | getName: | P1 & P2 & P3 | getCanonicalType: | P1 & P2 & P3 | -| P1 & P23 | getName: | P1 & P23 | getCanonicalType: | P1 & P2 & P3 | -| P2 & P4 | getName: | P2 & P4 | getCanonicalType: | P2 & P4 | -getMember -| P1 & P2 & P3 | 0 | P1 | -| P1 & P2 & P3 | 1 | P2 | -| P1 & P2 & P3 | 2 | P3 | -| P1 & P23 | 0 | P1 | -| P1 & P23 | 1 | P23 | -| P2 & P4 | 0 | P2 | -| P2 & P4 | 1 | P4 | +| P1 & P2 & P3 | getName: | P1 & P2 & P3 | getCanonicalType: | P1 & P2 & P3 | getNumberOfMembers: | 3 | +| P1 & P23 | getName: | P1 & P23 | getCanonicalType: | P1 & P2 & P3 | getNumberOfMembers: | 2 | +| P2 & P4 | getName: | P2 & P4 | getCanonicalType: | P2 & P4 | getNumberOfMembers: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql index 6e27ea1d9a14..c681ba747890 100644 --- a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql +++ b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType.ql @@ -2,18 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - ProtocolCompositionType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType -) { +from ProtocolCompositionType x, string getName, Type getCanonicalType, int getNumberOfMembers +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and - getCanonicalType = x.getCanonicalType() -} - -query predicate getMember(ProtocolCompositionType x, int index, Type getMember) { - toBeTested(x) and not x.isUnknown() and getMember = x.getMember(index) -} + getCanonicalType = x.getCanonicalType() and + getNumberOfMembers = x.getNumberOfMembers() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getNumberOfMembers:", + getNumberOfMembers diff --git a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.expected b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.expected new file mode 100644 index 000000000000..40aa86c2da19 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.expected @@ -0,0 +1,7 @@ +| P1 & P2 & P3 | 0 | P1 | +| P1 & P2 & P3 | 1 | P2 | +| P1 & P2 & P3 | 2 | P3 | +| P1 & P23 | 0 | P1 | +| P1 & P23 | 1 | P23 | +| P2 & P4 | 0 | P2 | +| P2 & P4 | 1 | P4 | diff --git a/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.ql b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.ql new file mode 100644 index 000000000000..5eb99395660a --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/ProtocolCompositionType/ProtocolCompositionType_getMember.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from ProtocolCompositionType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getMember(index) diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.expected b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.expected index 1e2b58f226d7..9649b1f618e8 100644 --- a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.expected +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.expected @@ -1,29 +1,6 @@ -instances -| (Builtin.IntLiteral, Builtin.IntLiteral) | getName: | (IntLiteral, IntLiteral) | getCanonicalType: | (Builtin.IntLiteral, Builtin.IntLiteral) | -| (Builtin.IntLiteral, Builtin.IntLiteral) | getName: | (IntLiteral, IntLiteral) | getCanonicalType: | (Builtin.IntLiteral, Builtin.IntLiteral) | -| (Int, Int, Int, Int, Int) | getName: | (Int, Int, Int, Int, Int) | getCanonicalType: | (Int, Int, Int, Int, Int) | -| (Int, String, Double) | getName: | (Int, String, Double) | getCanonicalType: | (Int, String, Double) | -| (Int, s: String, Double) | getName: | (Int, s: String, Double) | getCanonicalType: | (Int, s: String, Double) | -| (x: Int, y: Int) | getName: | (x: Int, y: Int) | getCanonicalType: | (x: Int, y: Int) | -getType -| (Builtin.IntLiteral, Builtin.IntLiteral) | 0 | Builtin.IntLiteral | -| (Builtin.IntLiteral, Builtin.IntLiteral) | 0 | Builtin.IntLiteral | -| (Builtin.IntLiteral, Builtin.IntLiteral) | 1 | Builtin.IntLiteral | -| (Builtin.IntLiteral, Builtin.IntLiteral) | 1 | Builtin.IntLiteral | -| (Int, Int, Int, Int, Int) | 0 | Int | -| (Int, Int, Int, Int, Int) | 1 | Int | -| (Int, Int, Int, Int, Int) | 2 | Int | -| (Int, Int, Int, Int, Int) | 3 | Int | -| (Int, Int, Int, Int, Int) | 4 | Int | -| (Int, String, Double) | 0 | Int | -| (Int, String, Double) | 1 | String | -| (Int, String, Double) | 2 | Double | -| (Int, s: String, Double) | 0 | Int | -| (Int, s: String, Double) | 1 | String | -| (Int, s: String, Double) | 2 | Double | -| (x: Int, y: Int) | 0 | Int | -| (x: Int, y: Int) | 1 | Int | -getName -| (Int, s: String, Double) | 1 | s | -| (x: Int, y: Int) | 0 | x | -| (x: Int, y: Int) | 1 | y | +| (Builtin.IntLiteral, Builtin.IntLiteral) | getName: | (IntLiteral, IntLiteral) | getCanonicalType: | (Builtin.IntLiteral, Builtin.IntLiteral) | getNumberOfTypes: | 2 | +| (Builtin.IntLiteral, Builtin.IntLiteral) | getName: | (IntLiteral, IntLiteral) | getCanonicalType: | (Builtin.IntLiteral, Builtin.IntLiteral) | getNumberOfTypes: | 2 | +| (Int, Int, Int, Int, Int) | getName: | (Int, Int, Int, Int, Int) | getCanonicalType: | (Int, Int, Int, Int, Int) | getNumberOfTypes: | 5 | +| (Int, String, Double) | getName: | (Int, String, Double) | getCanonicalType: | (Int, String, Double) | getNumberOfTypes: | 3 | +| (Int, s: String, Double) | getName: | (Int, s: String, Double) | getCanonicalType: | (Int, s: String, Double) | getNumberOfTypes: | 3 | +| (x: Int, y: Int) | getName: | (x: Int, y: Int) | getCanonicalType: | (x: Int, y: Int) | getNumberOfTypes: | 2 | diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.ql b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.ql index 9d301e217a4a..a14cf6786ccb 100644 --- a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.ql +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType.ql @@ -2,22 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - TupleType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType -) { +from TupleType x, string getName, Type getCanonicalType, int getNumberOfTypes +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and - getCanonicalType = x.getCanonicalType() -} - -query predicate getType(TupleType x, int index, Type getType) { - toBeTested(x) and not x.isUnknown() and getType = x.getType(index) -} - -query predicate getName(TupleType x, int index, string getName) { - toBeTested(x) and not x.isUnknown() and getName = x.getName(index) -} + getCanonicalType = x.getCanonicalType() and + getNumberOfTypes = x.getNumberOfTypes() +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getNumberOfTypes:", + getNumberOfTypes diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.expected b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.expected new file mode 100644 index 000000000000..327e8795d7fd --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.expected @@ -0,0 +1,3 @@ +| (Int, s: String, Double) | 1 | s | +| (x: Int, y: Int) | 0 | x | +| (x: Int, y: Int) | 1 | y | diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.ql b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.ql new file mode 100644 index 000000000000..f71ab6709d65 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getName.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from TupleType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getName(index) diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.expected b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.expected new file mode 100644 index 000000000000..926411dedfa6 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.expected @@ -0,0 +1,17 @@ +| (Builtin.IntLiteral, Builtin.IntLiteral) | 0 | Builtin.IntLiteral | +| (Builtin.IntLiteral, Builtin.IntLiteral) | 0 | Builtin.IntLiteral | +| (Builtin.IntLiteral, Builtin.IntLiteral) | 1 | Builtin.IntLiteral | +| (Builtin.IntLiteral, Builtin.IntLiteral) | 1 | Builtin.IntLiteral | +| (Int, Int, Int, Int, Int) | 0 | Int | +| (Int, Int, Int, Int, Int) | 1 | Int | +| (Int, Int, Int, Int, Int) | 2 | Int | +| (Int, Int, Int, Int, Int) | 3 | Int | +| (Int, Int, Int, Int, Int) | 4 | Int | +| (Int, String, Double) | 0 | Int | +| (Int, String, Double) | 1 | String | +| (Int, String, Double) | 2 | Double | +| (Int, s: String, Double) | 0 | Int | +| (Int, s: String, Double) | 1 | String | +| (Int, s: String, Double) | 2 | Double | +| (x: Int, y: Int) | 0 | Int | +| (x: Int, y: Int) | 1 | Int | diff --git a/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.ql b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.ql new file mode 100644 index 000000000000..431aefc42f16 --- /dev/null +++ b/swift/ql/test/extractor-tests/generated/type/TupleType/TupleType_getType.ql @@ -0,0 +1,7 @@ +// generated by codegen/codegen.py, do not edit +import codeql.swift.elements +import TestUtils + +from TupleType x, int index +where toBeTested(x) and not x.isUnknown() +select x, index, x.getType(index) diff --git a/swift/ql/test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql b/swift/ql/test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql index b10012dfad6e..a69efd504925 100644 --- a/swift/ql/test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql +++ b/swift/ql/test/extractor-tests/generated/type/UnmanagedStorageType/UnmanagedStorageType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - UnmanagedStorageType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getReferentType__label, Type getReferentType -) { +from UnmanagedStorageType x, string getName, Type getCanonicalType, Type getReferentType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getReferentType__label = "getReferentType:" and getReferentType = x.getReferentType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getReferentType:", + getReferentType diff --git a/swift/ql/test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql b/swift/ql/test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql index e0370d0b948f..b08407203f7b 100644 --- a/swift/ql/test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql +++ b/swift/ql/test/extractor-tests/generated/type/UnownedStorageType/UnownedStorageType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - UnownedStorageType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getReferentType__label, Type getReferentType -) { +from UnownedStorageType x, string getName, Type getCanonicalType, Type getReferentType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getReferentType__label = "getReferentType:" and getReferentType = x.getReferentType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getReferentType:", + getReferentType diff --git a/swift/ql/test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql b/swift/ql/test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql index d90026250310..d87743fc4f41 100644 --- a/swift/ql/test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql +++ b/swift/ql/test/extractor-tests/generated/type/VariadicSequenceType/VariadicSequenceType.ql @@ -2,16 +2,11 @@ import codeql.swift.elements import TestUtils -query predicate instances( - VariadicSequenceType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getBaseType__label, Type getBaseType -) { +from VariadicSequenceType x, string getName, Type getCanonicalType, Type getBaseType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getBaseType__label = "getBaseType:" and getBaseType = x.getBaseType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getBaseType:", getBaseType diff --git a/swift/ql/test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql b/swift/ql/test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql index fe1c2537fbc4..8cbe22fd154a 100644 --- a/swift/ql/test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql +++ b/swift/ql/test/extractor-tests/generated/type/WeakStorageType/WeakStorageType.ql @@ -2,16 +2,12 @@ import codeql.swift.elements import TestUtils -query predicate instances( - WeakStorageType x, string getName__label, string getName, string getCanonicalType__label, - Type getCanonicalType, string getReferentType__label, Type getReferentType -) { +from WeakStorageType x, string getName, Type getCanonicalType, Type getReferentType +where toBeTested(x) and not x.isUnknown() and - getName__label = "getName:" and getName = x.getName() and - getCanonicalType__label = "getCanonicalType:" and getCanonicalType = x.getCanonicalType() and - getReferentType__label = "getReferentType:" and getReferentType = x.getReferentType() -} +select x, "getName:", getName, "getCanonicalType:", getCanonicalType, "getReferentType:", + getReferentType diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected index c6be4599c2ae..e69de29bb2d1 100644 --- a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected +++ b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.expected @@ -1,415 +0,0 @@ -#select -| file://:0:0:0:0 | [post] self | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | file://:0:0:0:0 | [post] self | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| file://:0:0:0:0 | [post] self | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | file://:0:0:0:0 | [post] self | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:295:24:295:24 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:295:24:295:24 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:298:30:298:30 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:298:30:298:30 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:299:22:299:22 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:299:22:299:22 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:300:34:300:34 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:300:34:300:34 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:301:26:301:26 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:301:26:301:26 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:304:40:304:40 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:304:40:304:40 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:305:44:305:44 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:305:44:305:44 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:306:31:306:31 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:306:31:306:31 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:307:35:307:35 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:307:35:307:35 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:308:44:308:44 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:308:44:308:44 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:309:33:309:33 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:309:33:309:33 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:310:28:310:28 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:310:28:310:28 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:311:40:311:40 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:311:40:311:40 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:312:35:312:35 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:312:35:312:35 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:313:23:313:23 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:313:23:313:23 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:314:27:314:27 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:314:27:314:27 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:315:22:315:22 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:315:22:315:22 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:316:30:316:30 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:316:30:316:30 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:317:51:317:51 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:317:51:317:51 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:318:24:318:24 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:318:24:318:24 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:319:45:319:45 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:319:45:319:45 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:320:21:320:21 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:320:21:320:21 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:321:34:321:34 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:321:34:321:34 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:322:25:322:25 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:322:25:322:25 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:323:37:323:37 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:323:37:323:37 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:324:21:324:21 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:324:21:324:21 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:325:34:325:34 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:325:34:325:34 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:326:25:326:25 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:326:25:326:25 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:327:37:327:37 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:327:37:327:37 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:328:31:328:31 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:328:31:328:31 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:329:60:329:60 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:329:60:329:60 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:330:35:330:35 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:330:35:330:35 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:331:60:331:60 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:331:60:331:60 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:332:21:332:21 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:332:21:332:21 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:333:34:333:34 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:333:34:333:34 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:334:25:334:25 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:334:25:334:25 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:335:37:335:37 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:335:37:335:37 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:336:50:336:50 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:336:50:336:50 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:337:35:337:35 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:337:35:337:35 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:338:35:338:35 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:338:35:338:35 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:339:41:339:41 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:339:41:339:41 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:340:33:340:33 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:340:33:340:33 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:341:38:341:38 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:341:38:341:38 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:342:51:342:51 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:342:51:342:51 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:343:43:343:43 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:343:43:343:43 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:344:34:344:34 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:344:34:344:34 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:346:50:346:50 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:346:50:346:50 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:347:42:347:42 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:347:42:347:42 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:348:40:348:40 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:348:40:348:40 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:349:43:349:43 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:349:43:349:43 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:350:60:350:60 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:350:60:350:60 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:351:50:351:50 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:351:50:351:50 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:352:50:352:50 | remoteNsUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:352:50:352:50 | remoteNsUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:353:76:353:76 | remoteNsUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:353:76:353:76 | remoteNsUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:356:41:356:41 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:356:41:356:41 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:357:41:357:41 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:357:41:357:41 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:358:41:358:41 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:358:41:358:41 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:360:43:360:43 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:360:43:360:43 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:361:43:361:43 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:361:43:361:43 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:362:26:362:26 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:362:26:362:26 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:363:30:363:30 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:363:30:363:30 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:365:59:365:59 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:365:59:365:59 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:366:46:366:46 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:366:46:366:46 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:367:42:367:42 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:367:42:367:42 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:368:48:368:84 | call to FilePath.init(stringLiteral:) | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:368:48:368:84 | call to FilePath.init(stringLiteral:) | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:369:44:369:80 | call to FilePath.init(stringLiteral:) | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:369:44:369:80 | call to FilePath.init(stringLiteral:) | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:370:25:370:25 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:370:25:370:25 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:371:26:371:26 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:371:26:371:26 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:375:28:375:28 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:375:28:375:28 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:377:32:377:32 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:377:32:377:32 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:379:33:379:33 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:379:33:379:33 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:381:40:381:40 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:381:40:381:40 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:383:38:383:38 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:383:38:383:38 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:385:38:385:38 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:385:38:385:38 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:387:38:387:38 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:387:38:387:38 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:389:38:389:38 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:389:38:389:38 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:395:35:395:35 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:395:35:395:35 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:397:40:397:40 | remoteUrl | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:397:40:397:40 | remoteUrl | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:401:2:401:2 | [post] config | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:401:2:401:2 | [post] config | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:403:2:403:2 | [post] config | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:403:2:403:2 | [post] config | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:414:22:414:22 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:414:22:414:22 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:416:24:416:24 | buffer2 | testPathInjection.swift:409:22:409:87 | call to Data.init(contentsOf:options:) | testPathInjection.swift:416:24:416:24 | buffer2 | This path depends on a $@. | testPathInjection.swift:409:22:409:87 | call to Data.init(contentsOf:options:) | user-provided value | -| testPathInjection.swift:418:25:418:25 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:418:25:418:25 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:427:49:427:49 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:427:49:427:49 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:429:25:429:25 | remoteString | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:429:25:429:25 | remoteString | This path depends on a $@. | testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:441:33:441:33 | remoteString | testPathInjection.swift:433:24:433:78 | call to String.init(contentsOf:) | testPathInjection.swift:441:33:441:33 | remoteString | This path depends on a $@. | testPathInjection.swift:433:24:433:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:450:28:450:66 | call to appendingPathComponent(_:) | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:450:28:450:66 | call to appendingPathComponent(_:) | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:451:28:451:93 | call to appendingPathComponent(_:) | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:451:28:451:93 | call to appendingPathComponent(_:) | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:453:28:453:28 | u1 | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:453:28:453:28 | u1 | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:455:28:455:28 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:455:28:455:28 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:456:28:456:28 | u2 | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:456:28:456:28 | u2 | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:461:24:461:63 | ...! | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:461:24:461:63 | ...! | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:464:24:464:38 | ...! | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:464:24:464:38 | ...! | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:465:24:465:53 | ...! | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:465:24:465:53 | ...! | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:467:32:467:32 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:467:32:467:32 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:468:38:468:38 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:468:38:468:38 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:469:45:469:45 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:469:45:469:45 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:473:32:473:35 | .pointee | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:473:32:473:35 | .pointee | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:482:32:482:36 | ...[...] | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:482:32:482:36 | ...[...] | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:484:35:484:35 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:484:35:484:35 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:485:41:485:41 | remoteString | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:485:41:485:41 | remoteString | This path depends on a $@. | testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:507:25:507:25 | remoteString | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:507:25:507:25 | remoteString | This path depends on a $@. | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:508:17:508:17 | remoteString | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:508:17:508:17 | remoteString | This path depends on a $@. | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:509:41:509:41 | remoteString | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:509:41:509:41 | remoteString | This path depends on a $@. | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:511:38:511:38 | remoteString | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:511:38:511:38 | remoteString | This path depends on a $@. | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | user-provided value | -| testPathInjection.swift:513:22:513:22 | remoteString | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:513:22:513:22 | remoteString | This path depends on a $@. | testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | user-provided value | -edges -| file://:0:0:0:0 | [post] self [fileURL] | testPathInjection.swift:248:7:248:7 | self [Return] [fileURL] | provenance | | -| file://:0:0:0:0 | [post] self [seedFilePath] | testPathInjection.swift:249:13:249:13 | self [Return] [seedFilePath] | provenance | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self | provenance | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [fileURL] | provenance | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [seedFilePath] | provenance | | -| testPathInjection.swift:248:7:248:7 | value | file://:0:0:0:0 | value | provenance | | -| testPathInjection.swift:249:13:249:13 | value | file://:0:0:0:0 | value | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:290:33:290:33 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:291:37:291:37 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:300:34:300:34 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:301:26:301:26 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:305:44:305:44 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:307:35:307:35 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:308:44:308:44 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:309:33:309:33 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:311:40:311:40 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:312:35:312:35 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:314:27:314:27 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:322:25:322:25 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:323:37:323:37 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:326:25:326:25 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:327:37:327:37 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:330:35:330:35 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:331:60:331:60 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:334:25:334:25 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:335:37:335:37 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:336:50:336:50 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:337:35:337:35 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:338:35:338:35 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:339:41:339:41 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:340:33:340:33 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:341:38:341:38 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:342:51:342:51 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:343:43:343:43 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:346:50:346:50 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:347:42:347:42 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:348:40:348:40 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:349:43:349:43 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:350:60:350:60 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:351:50:351:50 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:356:41:356:41 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:357:41:357:41 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:358:41:358:41 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:360:43:360:43 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:361:43:361:43 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:363:30:363:30 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:365:59:365:59 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:366:46:366:46 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:367:42:367:42 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:368:72:368:72 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:369:68:369:68 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:371:26:371:26 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:375:28:375:28 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:377:32:377:32 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:379:33:379:33 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:381:40:381:40 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:383:38:383:38 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:385:38:385:38 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:387:38:387:38 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:389:38:389:38 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:414:22:414:22 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:418:25:418:25 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:427:49:427:49 | remoteString | provenance | | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | testPathInjection.swift:429:25:429:25 | remoteString | provenance | | -| testPathInjection.swift:290:21:290:45 | call to URL.init(string:) [some:0] | testPathInjection.swift:290:21:290:46 | ...! | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:295:24:295:24 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:298:30:298:30 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:299:22:299:22 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:304:40:304:40 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:306:31:306:31 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:310:28:310:28 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:313:23:313:23 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:315:22:315:22 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:316:30:316:30 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:317:51:317:51 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:318:24:318:24 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:319:45:319:45 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:320:21:320:21 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:321:34:321:34 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:324:21:324:21 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:325:34:325:34 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:328:31:328:31 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:329:60:329:60 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:332:21:332:21 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:333:34:333:34 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:344:34:344:34 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:362:26:362:26 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:370:25:370:25 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:395:35:395:35 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:397:40:397:40 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:401:19:401:19 | remoteUrl | provenance | | -| testPathInjection.swift:290:21:290:46 | ...! | testPathInjection.swift:403:24:403:24 | remoteUrl | provenance | | -| testPathInjection.swift:290:33:290:33 | remoteString | testPathInjection.swift:290:21:290:45 | call to URL.init(string:) [some:0] | provenance | | -| testPathInjection.swift:291:23:291:49 | call to NSURL.init(string:) [some:0] | testPathInjection.swift:291:23:291:50 | ...! | provenance | | -| testPathInjection.swift:291:23:291:50 | ...! | testPathInjection.swift:352:50:352:50 | remoteNsUrl | provenance | | -| testPathInjection.swift:291:23:291:50 | ...! | testPathInjection.swift:353:76:353:76 | remoteNsUrl | provenance | | -| testPathInjection.swift:291:37:291:37 | remoteString | testPathInjection.swift:291:23:291:49 | call to NSURL.init(string:) [some:0] | provenance | | -| testPathInjection.swift:368:72:368:72 | remoteString | testPathInjection.swift:368:48:368:84 | call to FilePath.init(stringLiteral:) | provenance | | -| testPathInjection.swift:369:68:369:68 | remoteString | testPathInjection.swift:369:44:369:80 | call to FilePath.init(stringLiteral:) | provenance | | -| testPathInjection.swift:401:19:401:19 | remoteUrl | testPathInjection.swift:248:7:248:7 | value | provenance | | -| testPathInjection.swift:401:19:401:19 | remoteUrl | testPathInjection.swift:401:2:401:2 | [post] config | provenance | | -| testPathInjection.swift:403:24:403:24 | remoteUrl | testPathInjection.swift:249:13:249:13 | value | provenance | | -| testPathInjection.swift:403:24:403:24 | remoteUrl | testPathInjection.swift:403:2:403:2 | [post] config | provenance | | -| testPathInjection.swift:409:22:409:87 | call to Data.init(contentsOf:options:) | testPathInjection.swift:411:5:411:5 | remoteData | provenance | | -| testPathInjection.swift:411:5:411:5 | remoteData | testPathInjection.swift:411:30:411:30 | [post] buffer2 | provenance | | -| testPathInjection.swift:411:30:411:30 | [post] buffer2 | testPathInjection.swift:416:24:416:24 | buffer2 | provenance | | -| testPathInjection.swift:433:24:433:78 | call to String.init(contentsOf:) | testPathInjection.swift:441:33:441:33 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:450:54:450:54 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:451:54:451:54 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:452:28:452:28 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:455:28:455:28 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:455:28:455:28 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:461:50:461:50 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:463:28:463:28 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:467:32:467:32 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:468:38:468:38 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:469:45:469:45 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:472:18:472:18 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:480:9:480:9 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:484:35:484:35 | remoteString | provenance | | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | testPathInjection.swift:485:41:485:41 | remoteString | provenance | | -| testPathInjection.swift:450:54:450:54 | remoteString | testPathInjection.swift:450:28:450:66 | call to appendingPathComponent(_:) | provenance | | -| testPathInjection.swift:451:28:451:66 | call to appendingPathComponent(_:) | testPathInjection.swift:451:28:451:93 | call to appendingPathComponent(_:) | provenance | | -| testPathInjection.swift:451:54:451:54 | remoteString | testPathInjection.swift:451:28:451:66 | call to appendingPathComponent(_:) | provenance | | -| testPathInjection.swift:452:5:452:5 | [post] u1 | testPathInjection.swift:453:28:453:28 | u1 | provenance | | -| testPathInjection.swift:452:28:452:28 | remoteString | testPathInjection.swift:452:5:452:5 | [post] u1 | provenance | | -| testPathInjection.swift:455:14:455:40 | call to URL.init(filePath:directoryHint:relativeTo:) | testPathInjection.swift:456:28:456:28 | u2 | provenance | | -| testPathInjection.swift:455:28:455:28 | remoteString | testPathInjection.swift:455:14:455:40 | call to URL.init(filePath:directoryHint:relativeTo:) | provenance | | -| testPathInjection.swift:461:24:461:62 | call to appendingPathComponent(_:) | testPathInjection.swift:461:24:461:63 | ...! | provenance | | -| testPathInjection.swift:461:50:461:50 | remoteString | testPathInjection.swift:461:24:461:62 | call to appendingPathComponent(_:) | provenance | | -| testPathInjection.swift:463:14:463:40 | call to NSURL.init(string:) [some:0] | testPathInjection.swift:463:14:463:41 | ...! | provenance | | -| testPathInjection.swift:463:14:463:41 | ...! | testPathInjection.swift:464:24:464:38 | ...! | provenance | | -| testPathInjection.swift:463:14:463:41 | ...! | testPathInjection.swift:465:24:465:24 | u4 | provenance | | -| testPathInjection.swift:463:28:463:28 | remoteString | testPathInjection.swift:463:14:463:40 | call to NSURL.init(string:) [some:0] | provenance | | -| testPathInjection.swift:465:24:465:24 | u4 | testPathInjection.swift:465:24:465:52 | call to appendingPathComponent(_:) | provenance | | -| testPathInjection.swift:465:24:465:52 | call to appendingPathComponent(_:) | testPathInjection.swift:465:24:465:53 | ...! | provenance | | -| testPathInjection.swift:472:5:472:5 | [post] s1 [pointee] | testPathInjection.swift:473:32:473:32 | s1 [pointee] | provenance | | -| testPathInjection.swift:472:18:472:18 | remoteString | testPathInjection.swift:472:5:472:5 | [post] s1 [pointee] | provenance | | -| testPathInjection.swift:473:32:473:32 | s1 [pointee] | testPathInjection.swift:473:32:473:35 | .pointee | provenance | | -| testPathInjection.swift:480:9:480:9 | remoteString | testPathInjection.swift:480:41:480:41 | [post] s3 [Collection element] | provenance | | -| testPathInjection.swift:480:41:480:41 | [post] s3 [Collection element] | testPathInjection.swift:482:32:482:32 | s3 [Collection element] | provenance | | -| testPathInjection.swift:482:32:482:32 | s3 [Collection element] | testPathInjection.swift:482:32:482:36 | ...[...] | provenance | | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:507:25:507:25 | remoteString | provenance | | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:508:17:508:17 | remoteString | provenance | | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:509:41:509:41 | remoteString | provenance | | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:511:38:511:38 | remoteString | provenance | | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | testPathInjection.swift:513:22:513:22 | remoteString | provenance | | -nodes -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self | semmle.label | [post] self | -| file://:0:0:0:0 | [post] self [fileURL] | semmle.label | [post] self [fileURL] | -| file://:0:0:0:0 | [post] self [seedFilePath] | semmle.label | [post] self [seedFilePath] | -| file://:0:0:0:0 | value | semmle.label | value | -| file://:0:0:0:0 | value | semmle.label | value | -| testPathInjection.swift:248:7:248:7 | self [Return] [fileURL] | semmle.label | self [Return] [fileURL] | -| testPathInjection.swift:248:7:248:7 | value | semmle.label | value | -| testPathInjection.swift:249:13:249:13 | self [Return] [seedFilePath] | semmle.label | self [Return] [seedFilePath] | -| testPathInjection.swift:249:13:249:13 | value | semmle.label | value | -| testPathInjection.swift:289:24:289:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testPathInjection.swift:290:21:290:45 | call to URL.init(string:) [some:0] | semmle.label | call to URL.init(string:) [some:0] | -| testPathInjection.swift:290:21:290:46 | ...! | semmle.label | ...! | -| testPathInjection.swift:290:33:290:33 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:291:23:291:49 | call to NSURL.init(string:) [some:0] | semmle.label | call to NSURL.init(string:) [some:0] | -| testPathInjection.swift:291:23:291:50 | ...! | semmle.label | ...! | -| testPathInjection.swift:291:37:291:37 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:295:24:295:24 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:298:30:298:30 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:299:22:299:22 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:300:34:300:34 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:301:26:301:26 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:304:40:304:40 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:305:44:305:44 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:306:31:306:31 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:307:35:307:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:308:44:308:44 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:309:33:309:33 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:310:28:310:28 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:311:40:311:40 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:312:35:312:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:313:23:313:23 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:314:27:314:27 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:315:22:315:22 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:316:30:316:30 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:317:51:317:51 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:318:24:318:24 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:319:45:319:45 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:320:21:320:21 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:321:34:321:34 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:322:25:322:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:323:37:323:37 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:324:21:324:21 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:325:34:325:34 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:326:25:326:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:327:37:327:37 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:328:31:328:31 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:329:60:329:60 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:330:35:330:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:331:60:331:60 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:332:21:332:21 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:333:34:333:34 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:334:25:334:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:335:37:335:37 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:336:50:336:50 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:337:35:337:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:338:35:338:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:339:41:339:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:340:33:340:33 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:341:38:341:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:342:51:342:51 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:343:43:343:43 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:344:34:344:34 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:346:50:346:50 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:347:42:347:42 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:348:40:348:40 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:349:43:349:43 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:350:60:350:60 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:351:50:351:50 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:352:50:352:50 | remoteNsUrl | semmle.label | remoteNsUrl | -| testPathInjection.swift:353:76:353:76 | remoteNsUrl | semmle.label | remoteNsUrl | -| testPathInjection.swift:356:41:356:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:357:41:357:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:358:41:358:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:360:43:360:43 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:361:43:361:43 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:362:26:362:26 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:363:30:363:30 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:365:59:365:59 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:366:46:366:46 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:367:42:367:42 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:368:48:368:84 | call to FilePath.init(stringLiteral:) | semmle.label | call to FilePath.init(stringLiteral:) | -| testPathInjection.swift:368:72:368:72 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:369:44:369:80 | call to FilePath.init(stringLiteral:) | semmle.label | call to FilePath.init(stringLiteral:) | -| testPathInjection.swift:369:68:369:68 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:370:25:370:25 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:371:26:371:26 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:375:28:375:28 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:377:32:377:32 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:379:33:379:33 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:381:40:381:40 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:383:38:383:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:385:38:385:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:387:38:387:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:389:38:389:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:395:35:395:35 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:397:40:397:40 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:401:2:401:2 | [post] config | semmle.label | [post] config | -| testPathInjection.swift:401:19:401:19 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:403:2:403:2 | [post] config | semmle.label | [post] config | -| testPathInjection.swift:403:24:403:24 | remoteUrl | semmle.label | remoteUrl | -| testPathInjection.swift:409:22:409:87 | call to Data.init(contentsOf:options:) | semmle.label | call to Data.init(contentsOf:options:) | -| testPathInjection.swift:411:5:411:5 | remoteData | semmle.label | remoteData | -| testPathInjection.swift:411:30:411:30 | [post] buffer2 | semmle.label | [post] buffer2 | -| testPathInjection.swift:414:22:414:22 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:416:24:416:24 | buffer2 | semmle.label | buffer2 | -| testPathInjection.swift:418:25:418:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:427:49:427:49 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:429:25:429:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:433:24:433:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testPathInjection.swift:441:33:441:33 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:445:24:445:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testPathInjection.swift:450:28:450:66 | call to appendingPathComponent(_:) | semmle.label | call to appendingPathComponent(_:) | -| testPathInjection.swift:450:54:450:54 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:451:28:451:66 | call to appendingPathComponent(_:) | semmle.label | call to appendingPathComponent(_:) | -| testPathInjection.swift:451:28:451:93 | call to appendingPathComponent(_:) | semmle.label | call to appendingPathComponent(_:) | -| testPathInjection.swift:451:54:451:54 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:452:5:452:5 | [post] u1 | semmle.label | [post] u1 | -| testPathInjection.swift:452:28:452:28 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:453:28:453:28 | u1 | semmle.label | u1 | -| testPathInjection.swift:455:14:455:40 | call to URL.init(filePath:directoryHint:relativeTo:) | semmle.label | call to URL.init(filePath:directoryHint:relativeTo:) | -| testPathInjection.swift:455:28:455:28 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:455:28:455:28 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:456:28:456:28 | u2 | semmle.label | u2 | -| testPathInjection.swift:461:24:461:62 | call to appendingPathComponent(_:) | semmle.label | call to appendingPathComponent(_:) | -| testPathInjection.swift:461:24:461:63 | ...! | semmle.label | ...! | -| testPathInjection.swift:461:50:461:50 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:463:14:463:40 | call to NSURL.init(string:) [some:0] | semmle.label | call to NSURL.init(string:) [some:0] | -| testPathInjection.swift:463:14:463:41 | ...! | semmle.label | ...! | -| testPathInjection.swift:463:28:463:28 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:464:24:464:38 | ...! | semmle.label | ...! | -| testPathInjection.swift:465:24:465:24 | u4 | semmle.label | u4 | -| testPathInjection.swift:465:24:465:52 | call to appendingPathComponent(_:) | semmle.label | call to appendingPathComponent(_:) | -| testPathInjection.swift:465:24:465:53 | ...! | semmle.label | ...! | -| testPathInjection.swift:467:32:467:32 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:468:38:468:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:469:45:469:45 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:472:5:472:5 | [post] s1 [pointee] | semmle.label | [post] s1 [pointee] | -| testPathInjection.swift:472:18:472:18 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:473:32:473:32 | s1 [pointee] | semmle.label | s1 [pointee] | -| testPathInjection.swift:473:32:473:35 | .pointee | semmle.label | .pointee | -| testPathInjection.swift:480:9:480:9 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:480:41:480:41 | [post] s3 [Collection element] | semmle.label | [post] s3 [Collection element] | -| testPathInjection.swift:482:32:482:32 | s3 [Collection element] | semmle.label | s3 [Collection element] | -| testPathInjection.swift:482:32:482:36 | ...[...] | semmle.label | ...[...] | -| testPathInjection.swift:484:35:484:35 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:485:41:485:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:505:24:505:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testPathInjection.swift:507:25:507:25 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:508:17:508:17 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:509:41:509:41 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:511:38:511:38 | remoteString | semmle.label | remoteString | -| testPathInjection.swift:513:22:513:22 | remoteString | semmle.label | remoteString | -subpaths -| testPathInjection.swift:401:19:401:19 | remoteUrl | testPathInjection.swift:248:7:248:7 | value | testPathInjection.swift:248:7:248:7 | self [Return] [fileURL] | testPathInjection.swift:401:2:401:2 | [post] config | -| testPathInjection.swift:403:24:403:24 | remoteUrl | testPathInjection.swift:249:13:249:13 | value | testPathInjection.swift:249:13:249:13 | self [Return] [seedFilePath] | testPathInjection.swift:403:2:403:2 | [post] config | diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.ql b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.ql new file mode 100644 index 000000000000..a32f9c56ee90 --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.ql @@ -0,0 +1,22 @@ +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.dataflow.FlowSources +import codeql.swift.security.PathInjectionQuery +import utils.test.InlineExpectationsTest + +module PathInjectionTest implements TestSig { + string getARelevantTag() { result = "hasPathInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node source, DataFlow::Node sink | + PathInjectionFlow::flow(source, sink) and + location = sink.getLocation() and + element = sink.toString() and + tag = "hasPathInjection" and + location.getFile().getName() != "" and + value = source.asExpr().getLocation().getStartLine().toString() + ) + } +} + +import MakeTest diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.qlref b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.qlref deleted file mode 100644 index 6269075fd961..000000000000 --- a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/PathInjectionTest.qlref +++ /dev/null @@ -1,3 +0,0 @@ -query: queries/Security/CWE-022/PathInjection.ql -postprocess: - - utils/test/InlineExpectationsTestQuery.ql diff --git a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift index c7c26085225d..2d9b6d88c393 100644 --- a/swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift +++ b/swift/ql/test/query-tests/Security/CWE-022/PathInjection/testPathInjection.swift @@ -286,151 +286,151 @@ class Connection { // --- tests --- func test(buffer1: UnsafeMutablePointer, buffer2: UnsafeMutablePointer) { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteUrl = URL(string: remoteString)! let remoteNsUrl = NSURL(string: remoteString)! let safeUrl = URL(string: "")! let safeNsUrl = NSURL(string: "")! - Data("").write(to: remoteUrl, options: []) // $ Alert + Data("").write(to: remoteUrl, options: []) // $ hasPathInjection=289 let nsData = NSData() - let _ = nsData.write(to: remoteUrl, atomically: false) // $ Alert - nsData.write(to: remoteUrl, options: []) // $ Alert - let _ = nsData.write(toFile: remoteString, atomically: false) // $ Alert - nsData.write(toFile: remoteString, options: []) // $ Alert + let _ = nsData.write(to: remoteUrl, atomically: false) // $ hasPathInjection=289 + nsData.write(to: remoteUrl, options: []) // $ hasPathInjection=289 + let _ = nsData.write(toFile: remoteString, atomically: false) // $ hasPathInjection=289 + nsData.write(toFile: remoteString, options: []) // $ hasPathInjection=289 let fm = FileManager() - let _ = fm.contentsOfDirectory(at: remoteUrl, includingPropertiesForKeys: [], options: []) // $ Alert - let _ = fm.contentsOfDirectory(atPath: remoteString) // $ Alert - let _ = fm.enumerator(at: remoteUrl, includingPropertiesForKeys: [], options: [], errorHandler: nil) // $ Alert - let _ = fm.enumerator(atPath: remoteString) // $ Alert - let _ = fm.subpathsOfDirectory(atPath: remoteString) // $ Alert - let _ = fm.subpaths(atPath: remoteString) // $ Alert - fm.createDirectory(at: remoteUrl, withIntermediateDirectories: false, attributes: [:]) // $ Alert - let _ = fm.createDirectory(atPath: remoteString, attributes: [:]) // $ Alert - let _ = fm.createFile(atPath: remoteString, contents: nil, attributes: [:]) // $ Alert - fm.removeItem(at: remoteUrl) // $ Alert - fm.removeItem(atPath: remoteString) // $ Alert - fm.trashItem(at: remoteUrl, resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ Alert - let _ = fm.replaceItemAt(remoteUrl, withItemAt: safeUrl, backupItemName: nil, options: []) // $ Alert - let _ = fm.replaceItemAt(safeUrl, withItemAt: remoteUrl, backupItemName: nil, options: []) // $ Alert - fm.replaceItem(at: remoteUrl, withItemAt: safeUrl, backupItemName: nil, options: [], resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ Alert - fm.replaceItem(at: safeUrl, withItemAt: remoteUrl, backupItemName: nil, options: [], resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ Alert - fm.copyItem(at: remoteUrl, to: safeUrl) // $ Alert - fm.copyItem(at: safeUrl, to: remoteUrl) // $ Alert - fm.copyItem(atPath: remoteString, toPath: "") // $ Alert - fm.copyItem(atPath: "", toPath: remoteString) // $ Alert - fm.moveItem(at: remoteUrl, to: safeUrl) // $ Alert - fm.moveItem(at: safeUrl, to: remoteUrl) // $ Alert - fm.moveItem(atPath: remoteString, toPath: "") // $ Alert - fm.moveItem(atPath: "", toPath: remoteString) // $ Alert - fm.createSymbolicLink(at: remoteUrl, withDestinationURL: safeUrl) // $ Alert - fm.createSymbolicLink(at: safeUrl, withDestinationURL: remoteUrl) // $ Alert - fm.createSymbolicLink(atPath: remoteString, withDestinationPath: "") // $ Alert - fm.createSymbolicLink(atPath: "", withDestinationPath: remoteString) // $ Alert - fm.linkItem(at: remoteUrl, to: safeUrl) // $ Alert - fm.linkItem(at: safeUrl, to: remoteUrl) // $ Alert - fm.linkItem(atPath: remoteString, toPath: "") // $ Alert - fm.linkItem(atPath: "", toPath: remoteString) // $ Alert - let _ = fm.destinationOfSymbolicLink(atPath: remoteString) // $ Alert - let _ = fm.fileExists(atPath: remoteString) // $ Alert - let _ = fm.fileExists(atPath: remoteString, isDirectory: UnsafeMutablePointer.init(bitPattern: 0)) // $ Alert - fm.setAttributes([:], ofItemAtPath: remoteString) // $ Alert - let _ = fm.contents(atPath: remoteString) // $ Alert - let _ = fm.contentsEqual(atPath: remoteString, andPath: "") // $ Alert - let _ = fm.contentsEqual(atPath: "", andPath: remoteString) // $ Alert - let _ = fm.changeCurrentDirectoryPath(remoteString) // $ Alert - let _ = fm.unmountVolume(at: remoteUrl, options: [], completionHandler: { _ in }) // $ Alert + let _ = fm.contentsOfDirectory(at: remoteUrl, includingPropertiesForKeys: [], options: []) // $ hasPathInjection=289 + let _ = fm.contentsOfDirectory(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.enumerator(at: remoteUrl, includingPropertiesForKeys: [], options: [], errorHandler: nil) // $ hasPathInjection=289 + let _ = fm.enumerator(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.subpathsOfDirectory(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.subpaths(atPath: remoteString) // $ hasPathInjection=289 + fm.createDirectory(at: remoteUrl, withIntermediateDirectories: false, attributes: [:]) // $ hasPathInjection=289 + let _ = fm.createDirectory(atPath: remoteString, attributes: [:]) // $ hasPathInjection=289 + let _ = fm.createFile(atPath: remoteString, contents: nil, attributes: [:]) // $ hasPathInjection=289 + fm.removeItem(at: remoteUrl) // $ hasPathInjection=289 + fm.removeItem(atPath: remoteString) // $ hasPathInjection=289 + fm.trashItem(at: remoteUrl, resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ hasPathInjection=289 + let _ = fm.replaceItemAt(remoteUrl, withItemAt: safeUrl, backupItemName: nil, options: []) // $ hasPathInjection=289 + let _ = fm.replaceItemAt(safeUrl, withItemAt: remoteUrl, backupItemName: nil, options: []) // $ hasPathInjection=289 + fm.replaceItem(at: remoteUrl, withItemAt: safeUrl, backupItemName: nil, options: [], resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ hasPathInjection=289 + fm.replaceItem(at: safeUrl, withItemAt: remoteUrl, backupItemName: nil, options: [], resultingItemURL: AutoreleasingUnsafeMutablePointer()) // $ hasPathInjection=289 + fm.copyItem(at: remoteUrl, to: safeUrl) // $ hasPathInjection=289 + fm.copyItem(at: safeUrl, to: remoteUrl) // $ hasPathInjection=289 + fm.copyItem(atPath: remoteString, toPath: "") // $ hasPathInjection=289 + fm.copyItem(atPath: "", toPath: remoteString) // $ hasPathInjection=289 + fm.moveItem(at: remoteUrl, to: safeUrl) // $ hasPathInjection=289 + fm.moveItem(at: safeUrl, to: remoteUrl) // $ hasPathInjection=289 + fm.moveItem(atPath: remoteString, toPath: "") // $ hasPathInjection=289 + fm.moveItem(atPath: "", toPath: remoteString) // $ hasPathInjection=289 + fm.createSymbolicLink(at: remoteUrl, withDestinationURL: safeUrl) // $ hasPathInjection=289 + fm.createSymbolicLink(at: safeUrl, withDestinationURL: remoteUrl) // $ hasPathInjection=289 + fm.createSymbolicLink(atPath: remoteString, withDestinationPath: "") // $ hasPathInjection=289 + fm.createSymbolicLink(atPath: "", withDestinationPath: remoteString) // $ hasPathInjection=289 + fm.linkItem(at: remoteUrl, to: safeUrl) // $ hasPathInjection=289 + fm.linkItem(at: safeUrl, to: remoteUrl) // $ hasPathInjection=289 + fm.linkItem(atPath: remoteString, toPath: "") // $ hasPathInjection=289 + fm.linkItem(atPath: "", toPath: remoteString) // $ hasPathInjection=289 + let _ = fm.destinationOfSymbolicLink(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.fileExists(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.fileExists(atPath: remoteString, isDirectory: UnsafeMutablePointer.init(bitPattern: 0)) // $ hasPathInjection=289 + fm.setAttributes([:], ofItemAtPath: remoteString) // $ hasPathInjection=289 + let _ = fm.contents(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.contentsEqual(atPath: remoteString, andPath: "") // $ hasPathInjection=289 + let _ = fm.contentsEqual(atPath: "", andPath: remoteString) // $ hasPathInjection=289 + let _ = fm.changeCurrentDirectoryPath(remoteString) // $ hasPathInjection=289 + let _ = fm.unmountVolume(at: remoteUrl, options: [], completionHandler: { _ in }) // $ hasPathInjection=289 // Deprecated methods - let _ = fm.changeFileAttributes([:], atPath: remoteString) // $ Alert - let _ = fm.directoryContents(atPath: remoteString) // $ Alert - let _ = fm.createDirectory(atPath: remoteString, attributes: [:]) // $ Alert - let _ = fm.createSymbolicLink(atPath: remoteString, pathContent: "") // $ Alert - let _ = fm.createSymbolicLink(atPath: "", pathContent: remoteString) // $ Alert - let _ = fm.pathContentOfSymbolicLink(atPath: remoteString) // $ Alert - let _ = fm.replaceItemAtURL(originalItemURL: remoteNsUrl, withItemAtURL: safeNsUrl, backupItemName: nil, options: []) // $ Alert - let _ = fm.replaceItemAtURL(originalItemURL: safeNsUrl, withItemAtURL: remoteNsUrl, backupItemName: nil, options: []) // $ Alert + let _ = fm.changeFileAttributes([:], atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.directoryContents(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.createDirectory(atPath: remoteString, attributes: [:]) // $ hasPathInjection=289 + let _ = fm.createSymbolicLink(atPath: remoteString, pathContent: "") // $ hasPathInjection=289 + let _ = fm.createSymbolicLink(atPath: "", pathContent: remoteString) // $ hasPathInjection=289 + let _ = fm.pathContentOfSymbolicLink(atPath: remoteString) // $ hasPathInjection=289 + let _ = fm.replaceItemAtURL(originalItemURL: remoteNsUrl, withItemAtURL: safeNsUrl, backupItemName: nil, options: []) // $ hasPathInjection=289 + let _ = fm.replaceItemAtURL(originalItemURL: safeNsUrl, withItemAtURL: remoteNsUrl, backupItemName: nil, options: []) // $ hasPathInjection=289 var encoding = String.Encoding.utf8 - let _ = try! String(contentsOfFile: remoteString) // $ Alert - let _ = try! String(contentsOfFile: remoteString, encoding: String.Encoding.utf8) // $ Alert - let _ = try! String(contentsOfFile: remoteString, usedEncoding: &encoding) // $ Alert - - let _ = try! NSString(contentsOfFile: remoteString, encoding: 0) // $ Alert - let _ = try! NSString(contentsOfFile: remoteString, usedEncoding: nil) // $ Alert - NSString().write(to: remoteUrl, atomically: true, encoding: 0) // $ Alert - NSString().write(toFile: remoteString, atomically: true, encoding: 0) // $ Alert - - let _ = NSKeyedUnarchiver().unarchiveObject(withFile: remoteString) // $ Alert - let _ = ArchiveByteStream.fileStream(fd: remoteString as! FileDescriptor, automaticClose: true) // $ Alert - ArchiveByteStream.withFileStream(fd: remoteString as! FileDescriptor, automaticClose: true) { _ in } // $ Alert - let _ = ArchiveByteStream.fileStream(path: FilePath(stringLiteral: remoteString), mode: .readOnly, options: .append, permissions: .ownerRead) // $ Alert - ArchiveByteStream.withFileStream(path: FilePath(stringLiteral: remoteString), mode: .readOnly, options: .append, permissions: .ownerRead) { _ in } // $ Alert - let _ = Bundle(url: remoteUrl) // $ Alert - let _ = Bundle(path: remoteString) // $ Alert + let _ = try! String(contentsOfFile: remoteString) // $ hasPathInjection=289 + let _ = try! String(contentsOfFile: remoteString, encoding: String.Encoding.utf8) // $ hasPathInjection=289 + let _ = try! String(contentsOfFile: remoteString, usedEncoding: &encoding) // $ hasPathInjection=289 + + let _ = try! NSString(contentsOfFile: remoteString, encoding: 0) // $ hasPathInjection=289 + let _ = try! NSString(contentsOfFile: remoteString, usedEncoding: nil) // $ hasPathInjection=289 + NSString().write(to: remoteUrl, atomically: true, encoding: 0) // $ hasPathInjection=289 + NSString().write(toFile: remoteString, atomically: true, encoding: 0) // $ hasPathInjection=289 + + let _ = NSKeyedUnarchiver().unarchiveObject(withFile: remoteString) // $ hasPathInjection=289 + let _ = ArchiveByteStream.fileStream(fd: remoteString as! FileDescriptor, automaticClose: true) // $ hasPathInjection=289 + ArchiveByteStream.withFileStream(fd: remoteString as! FileDescriptor, automaticClose: true) { _ in } // $ hasPathInjection=289 + let _ = ArchiveByteStream.fileStream(path: FilePath(stringLiteral: remoteString), mode: .readOnly, options: .append, permissions: .ownerRead) // $ hasPathInjection=289 + ArchiveByteStream.withFileStream(path: FilePath(stringLiteral: remoteString), mode: .readOnly, options: .append, permissions: .ownerRead) { _ in } // $ hasPathInjection=289 + let _ = Bundle(url: remoteUrl) // $ hasPathInjection=289 + let _ = Bundle(path: remoteString) // $ hasPathInjection=289 // GRDB - let _ = Database(path: remoteString, description: "", configuration: Configuration()) // $ Alert + let _ = Database(path: remoteString, description: "", configuration: Configuration()) // $ hasPathInjection=289 let _ = Database(path: "", description: "", configuration: Configuration()) // Safe - let _ = DatabasePool(path: remoteString, configuration: Configuration()) // $ Alert + let _ = DatabasePool(path: remoteString, configuration: Configuration()) // $ hasPathInjection=289 let _ = DatabasePool(path: "", configuration: Configuration()) // Safe - let _ = DatabaseQueue(path: remoteString, configuration: Configuration()) // $ Alert + let _ = DatabaseQueue(path: remoteString, configuration: Configuration()) // $ hasPathInjection=289 let _ = DatabaseQueue(path: "", configuration: Configuration()) // Safe - let _ = DatabaseSnapshotPool(path: remoteString, configuration: Configuration()) // $ Alert + let _ = DatabaseSnapshotPool(path: remoteString, configuration: Configuration()) // $ hasPathInjection=289 let _ = DatabaseSnapshotPool(path: "", configuration: Configuration()) // Safe - let _ = SerializedDatabase(path: remoteString, defaultLabel: "") // $ Alert + let _ = SerializedDatabase(path: remoteString, defaultLabel: "") // $ hasPathInjection=289 let _ = SerializedDatabase(path: "", defaultLabel: "") // Safe - let _ = SerializedDatabase(path: remoteString, defaultLabel: "", purpose: nil) // $ Alert + let _ = SerializedDatabase(path: remoteString, defaultLabel: "", purpose: nil) // $ hasPathInjection=289 let _ = SerializedDatabase(path: "", defaultLabel: "", purpose: nil) // Safe - let _ = SerializedDatabase(path: remoteString, configuration: Configuration(), defaultLabel: "") // $ Alert + let _ = SerializedDatabase(path: remoteString, configuration: Configuration(), defaultLabel: "") // $ hasPathInjection=289 let _ = SerializedDatabase(path: "", configuration: Configuration(), defaultLabel: "") // Safe - let _ = SerializedDatabase(path: remoteString, configuration: Configuration(), defaultLabel: "", purpose: nil) // $ Alert + let _ = SerializedDatabase(path: remoteString, configuration: Configuration(), defaultLabel: "", purpose: nil) // $ hasPathInjection=289 let _ = SerializedDatabase(path: "", configuration: Configuration(), defaultLabel: "", purpose: nil) // Safe // Realm _ = Realm.Configuration(fileURL: safeUrl) // GOOD - _ = Realm.Configuration(fileURL: remoteUrl) // $ Alert + _ = Realm.Configuration(fileURL: remoteUrl) // $ hasPathInjection=289 _ = Realm.Configuration(seedFilePath: safeUrl) // GOOD - _ = Realm.Configuration(seedFilePath: remoteUrl) // $ Alert + _ = Realm.Configuration(seedFilePath: remoteUrl) // $ hasPathInjection=289 var config = Realm.Configuration() // GOOD config.fileURL = safeUrl // GOOD - config.fileURL = remoteUrl // $ Alert + config.fileURL = remoteUrl // $ hasPathInjection=289 config.seedFilePath = safeUrl // GOOD - config.seedFilePath = remoteUrl // $ Alert + config.seedFilePath = remoteUrl // $ hasPathInjection=289 // sqlite3 var db: OpaquePointer? let localData = Data(0) - let remoteData = Data(contentsOf: URL(string: "http://example.com/")!, options: []) // $ Source + let remoteData = Data(contentsOf: URL(string: "http://example.com/")!, options: []) localData.copyBytes(to: buffer1, count: localData.count) remoteData.copyBytes(to: buffer2, count: remoteData.count) _ = sqlite3_open("myFile.sqlite3", &db) // GOOD - _ = sqlite3_open(remoteString, &db) // $ Alert + _ = sqlite3_open(remoteString, &db) // $ hasPathInjection=289 _ = sqlite3_open16(buffer1, &db) // GOOD - _ = sqlite3_open16(buffer2, &db) // $ Alert + _ = sqlite3_open16(buffer2, &db) // $ hasPathInjection=409 _ = sqlite3_open_v2("myFile.sqlite3", &db, 0, nil) // GOOD - _ = sqlite3_open_v2(remoteString, &db, 0, nil) // $ Alert + _ = sqlite3_open_v2(remoteString, &db, 0, nil) // $ hasPathInjection=289 sqlite3_temp_directory = UnsafeMutablePointer(mutating: NSString(string: "myFile.sqlite3").utf8String) // GOOD - sqlite3_temp_directory = UnsafeMutablePointer(mutating: NSString(string: remoteString).utf8String) // $ MISSING: Alert + sqlite3_temp_directory = UnsafeMutablePointer(mutating: NSString(string: remoteString).utf8String) // $ MISSING: hasPathInjection=289 // SQLite.swift try! _ = Connection() try! _ = Connection(Connection.Location.uri("myFile.sqlite3")) // GOOD - try! _ = Connection(Connection.Location.uri(remoteString)) // $ Alert + try! _ = Connection(Connection.Location.uri(remoteString)) // $ hasPathInjection=289 try! _ = Connection("myFile.sqlite3") // GOOD - try! _ = Connection(remoteString) // $ Alert + try! _ = Connection(remoteString) // $ hasPathInjection=289 } func testBarriers() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let fm = FileManager() @@ -438,51 +438,51 @@ func testBarriers() { if (filePath.lexicallyNormalized().starts(with: "/safe")) { let _ = fm.contents(atPath: remoteString) // Safe } - let _ = fm.contents(atPath: remoteString) // $ Alert + let _ = fm.contents(atPath: remoteString) // $ hasPathInjection=433 } func testPathInjection2(s1: UnsafeMutablePointer, s2: UnsafeMutablePointer, s3: UnsafeMutablePointer, fm: FileManager) throws { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) var u1 = URL(filePath: "") _ = NSData(contentsOf: u1) _ = NSData(contentsOf: u1.appendingPathComponent("")) - _ = NSData(contentsOf: u1.appendingPathComponent(remoteString)) // $ Alert - _ = NSData(contentsOf: u1.appendingPathComponent(remoteString).appendingPathComponent("")) // $ Alert + _ = NSData(contentsOf: u1.appendingPathComponent(remoteString)) // $ hasPathInjection=445 + _ = NSData(contentsOf: u1.appendingPathComponent(remoteString).appendingPathComponent("")) // $ hasPathInjection=445 u1.appendPathComponent(remoteString) - _ = NSData(contentsOf: u1) // $ Alert + _ = NSData(contentsOf: u1) // $ hasPathInjection=445 - let u2 = URL(filePath: remoteString) // $ Alert - _ = NSData(contentsOf: u2) // $ Alert + let u2 = URL(filePath: remoteString) // $ hasPathInjection=445 + _ = NSData(contentsOf: u2) // $ hasPathInjection=445 let u3 = NSURL(string: "")! Data("").write(to: u3.filePathURL!, options: []) Data("").write(to: u3.appendingPathComponent("")!, options: []) - Data("").write(to: u3.appendingPathComponent(remoteString)!, options: []) // $ Alert + Data("").write(to: u3.appendingPathComponent(remoteString)!, options: []) // $ hasPathInjection=445 let u4 = NSURL(string: remoteString)! - Data("").write(to: u4.filePathURL!, options: []) // $ Alert - Data("").write(to: u4.appendingPathComponent("")!, options: []) // $ Alert + Data("").write(to: u4.filePathURL!, options: []) // $ hasPathInjection=445 + Data("").write(to: u4.appendingPathComponent("")!, options: []) // $ hasPathInjection=445 - _ = NSData(contentsOfFile: remoteString)! // $ Alert - _ = NSData(contentsOfMappedFile: remoteString)! // $ Alert - _ = NSData.dataWithContentsOfMappedFile(remoteString)! // $ Alert + _ = NSData(contentsOfFile: remoteString)! // $ hasPathInjection=445 + _ = NSData(contentsOfMappedFile: remoteString)! // $ hasPathInjection=445 + _ = NSData.dataWithContentsOfMappedFile(remoteString)! // $ hasPathInjection=445 _ = NSData().write(toFile: s1.pointee, atomically: true) s1.pointee = remoteString - _ = NSData().write(toFile: s1.pointee, atomically: true) // $ Alert - _ = NSData().write(toFile: s1[0], atomically: true) // $ MISSING: Alert + _ = NSData().write(toFile: s1.pointee, atomically: true) // $ hasPathInjection=445 + _ = NSData().write(toFile: s1[0], atomically: true) // $ MISSING: hasPathInjection=445 _ = "".completePath(into: s2, caseSensitive: false, matchesInto: nil, filterTypes: nil) _ = NSData().write(toFile: s2.pointee, atomically: true) _ = NSData().write(toFile: s2[0], atomically: true) _ = remoteString.completePath(into: s3, caseSensitive: false, matchesInto: nil, filterTypes: nil) - _ = NSData().write(toFile: s3.pointee, atomically: true) // $ MISSING: Alert - _ = NSData().write(toFile: s3[0], atomically: true) // $ Alert + _ = NSData().write(toFile: s3.pointee, atomically: true) // $ MISSING: hasPathInjection=445 + _ = NSData().write(toFile: s3[0], atomically: true) // $ hasPathInjection=445 - _ = fm.fileAttributes(atPath: remoteString, traverseLink: true) // $ Alert - _ = try fm.attributesOfItem(atPath: remoteString) // $ Alert + _ = fm.fileAttributes(atPath: remoteString, traverseLink: true) // $ hasPathInjection=445 + _ = try fm.attributesOfItem(atPath: remoteString) // $ hasPathInjection=445 } // --- @@ -502,18 +502,18 @@ class MyFile { } func testPathInjectionHeuristics() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) - myOpenFile1(atPath: remoteString) // $ Alert - myOpenFile2(remoteString) // $ Alert - myFindFiles(ofType: 0, inDirectory: remoteString) // $ Alert + myOpenFile1(atPath: remoteString) // $ hasPathInjection=505 + myOpenFile2(remoteString) // $ hasPathInjection=505 + myFindFiles(ofType: 0, inDirectory: remoteString) // $ hasPathInjection=505 - let mc = MyClass(contentsOfFile: remoteString) // $ Alert + let mc = MyClass(contentsOfFile: remoteString) // $ hasPathInjection=505 mc.doSomething(keyPath: remoteString) // good - not a path - mc.write(toFile: remoteString) // $ Alert + mc.write(toFile: remoteString) // $ hasPathInjection=505 let mf1 = MyFile(path: "") - let mf2 = MyFile(path: remoteString) // $ MISSING: Alert + let mf2 = MyFile(path: remoteString) // $ MISSING: hasPathInjection= _ = NSSortDescriptor(key: remoteString, ascending: true) // good - not a path _ = NSSortDescriptor(keyPath: remoteString as! KeyPath, ascending: true) // good - not a path diff --git a/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.expected b/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.expected index 397e4d8a05bb..e69de29bb2d1 100644 --- a/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.expected +++ b/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.expected @@ -1,297 +0,0 @@ -#select -| cleartextLoggingTest.swift:167:11:167:11 | [...] | cleartextLoggingTest.swift:167:11:167:11 | password | cleartextLoggingTest.swift:167:11:167:11 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:167:11:167:11 | password | password | -| cleartextLoggingTest.swift:168:11:168:11 | [...] | cleartextLoggingTest.swift:168:11:168:11 | password | cleartextLoggingTest.swift:168:11:168:11 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:168:11:168:11 | password | password | -| cleartextLoggingTest.swift:169:26:169:26 | password | cleartextLoggingTest.swift:169:26:169:26 | password | cleartextLoggingTest.swift:169:26:169:26 | password | This operation writes 'password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:169:26:169:26 | password | password | -| cleartextLoggingTest.swift:170:11:170:11 | [...] | cleartextLoggingTest.swift:170:11:170:11 | password | cleartextLoggingTest.swift:170:11:170:11 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:170:11:170:11 | password | password | -| cleartextLoggingTest.swift:171:26:171:26 | password | cleartextLoggingTest.swift:171:26:171:26 | password | cleartextLoggingTest.swift:171:26:171:26 | password | This operation writes 'password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:171:26:171:26 | password | password | -| cleartextLoggingTest.swift:172:42:172:42 | password | cleartextLoggingTest.swift:172:42:172:42 | password | cleartextLoggingTest.swift:172:42:172:42 | password | This operation writes 'password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:172:42:172:42 | password | password | -| cleartextLoggingTest.swift:175:16:175:16 | [...] | cleartextLoggingTest.swift:175:16:175:16 | password | cleartextLoggingTest.swift:175:16:175:16 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:175:16:175:16 | password | password | -| cleartextLoggingTest.swift:177:10:177:10 | password | cleartextLoggingTest.swift:177:10:177:10 | password | cleartextLoggingTest.swift:177:10:177:10 | password | This operation writes 'password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:177:10:177:10 | password | password | -| cleartextLoggingTest.swift:179:11:179:11 | password | cleartextLoggingTest.swift:179:11:179:11 | password | cleartextLoggingTest.swift:179:11:179:11 | password | This operation writes 'password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:179:11:179:11 | password | password | -| cleartextLoggingTest.swift:180:17:180:17 | [...] | cleartextLoggingTest.swift:180:17:180:17 | password | cleartextLoggingTest.swift:180:17:180:17 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:180:17:180:17 | password | password | -| cleartextLoggingTest.swift:181:20:181:24 | [...] | cleartextLoggingTest.swift:181:24:181:24 | password | cleartextLoggingTest.swift:181:20:181:24 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:181:24:181:24 | password | password | -| cleartextLoggingTest.swift:182:11:182:11 | "..." | cleartextLoggingTest.swift:182:14:182:14 | password | cleartextLoggingTest.swift:182:11:182:11 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:182:14:182:14 | password | password | -| cleartextLoggingTest.swift:183:18:183:38 | call to getVaList(_:) | cleartextLoggingTest.swift:183:29:183:29 | password | cleartextLoggingTest.swift:183:18:183:38 | call to getVaList(_:) | This operation writes 'call to getVaList(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:183:29:183:29 | password | password | -| cleartextLoggingTest.swift:184:21:184:45 | call to getVaList(_:) | cleartextLoggingTest.swift:184:36:184:36 | password | cleartextLoggingTest.swift:184:21:184:45 | call to getVaList(_:) | This operation writes 'call to getVaList(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:184:36:184:36 | password | password | -| cleartextLoggingTest.swift:220:11:220:11 | passphrase | cleartextLoggingTest.swift:220:11:220:11 | passphrase | cleartextLoggingTest.swift:220:11:220:11 | passphrase | This operation writes 'passphrase' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:220:11:220:11 | passphrase | passphrase | -| cleartextLoggingTest.swift:221:11:221:11 | pass_phrase | cleartextLoggingTest.swift:221:11:221:11 | pass_phrase | cleartextLoggingTest.swift:221:11:221:11 | pass_phrase | This operation writes 'pass_phrase' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:221:11:221:11 | pass_phrase | pass_phrase | -| cleartextLoggingTest.swift:224:49:224:49 | [...] | cleartextLoggingTest.swift:224:49:224:49 | password | cleartextLoggingTest.swift:224:49:224:49 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:224:49:224:49 | password | password | -| cleartextLoggingTest.swift:225:55:225:63 | [...] | cleartextLoggingTest.swift:225:63:225:63 | password | cleartextLoggingTest.swift:225:55:225:63 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:225:63:225:63 | password | password | -| cleartextLoggingTest.swift:241:8:241:8 | x | cleartextLoggingTest.swift:240:24:240:24 | x | cleartextLoggingTest.swift:241:8:241:8 | x | This operation writes 'x' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:240:24:240:24 | x | x | -| cleartextLoggingTest.swift:244:8:244:8 | y | cleartextLoggingTest.swift:243:10:243:22 | call to getPassword() | cleartextLoggingTest.swift:244:8:244:8 | y | This operation writes 'y' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:243:10:243:22 | call to getPassword() | call to getPassword() | -| cleartextLoggingTest.swift:248:8:248:10 | .password | cleartextLoggingTest.swift:248:8:248:10 | .password | cleartextLoggingTest.swift:248:8:248:10 | .password | This operation writes '.password' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:248:8:248:10 | .password | .password | -| cleartextLoggingTest.swift:263:8:263:20 | .value | cleartextLoggingTest.swift:263:8:263:11 | .password | cleartextLoggingTest.swift:263:8:263:20 | .value | This operation writes '.value' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:263:8:263:11 | .password | .password | -| cleartextLoggingTest.swift:287:8:287:8 | [...] | cleartextLoggingTest.swift:286:8:286:8 | password | cleartextLoggingTest.swift:287:8:287:8 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:286:8:286:8 | password | password | -| cleartextLoggingTest.swift:290:8:290:8 | [...] | cleartextLoggingTest.swift:289:18:289:18 | password | cleartextLoggingTest.swift:290:8:290:8 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:289:18:289:18 | password | password | -| cleartextLoggingTest.swift:296:13:296:13 | [...] | cleartextLoggingTest.swift:295:13:295:13 | password | cleartextLoggingTest.swift:296:13:296:13 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:295:13:295:13 | password | password | -| cleartextLoggingTest.swift:302:7:302:7 | myString7 | cleartextLoggingTest.swift:301:7:301:7 | password | cleartextLoggingTest.swift:302:7:302:7 | myString7 | This operation writes 'myString7' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:301:7:301:7 | password | password | -| cleartextLoggingTest.swift:308:8:308:8 | [...] | cleartextLoggingTest.swift:307:18:307:18 | password | cleartextLoggingTest.swift:308:8:308:8 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:307:18:307:18 | password | password | -| cleartextLoggingTest.swift:313:8:313:8 | [...] | cleartextLoggingTest.swift:311:19:311:19 | password | cleartextLoggingTest.swift:313:8:313:8 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:311:19:311:19 | password | password | -| cleartextLoggingTest.swift:319:8:319:8 | [...] | cleartextLoggingTest.swift:318:2:318:2 | password | cleartextLoggingTest.swift:319:8:319:8 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:318:2:318:2 | password | password | -| cleartextLoggingTest.swift:334:17:334:17 | { ... } | cleartextLoggingTest.swift:334:17:334:17 | password | cleartextLoggingTest.swift:334:17:334:17 | { ... } | This operation writes '{ ... }' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:334:17:334:17 | password | password | -| cleartextLoggingTest.swift:336:20:336:20 | { ... } | cleartextLoggingTest.swift:336:20:336:20 | password | cleartextLoggingTest.swift:336:20:336:20 | { ... } | This operation writes '{ ... }' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:336:20:336:20 | password | password | -| cleartextLoggingTest.swift:338:23:338:23 | { ... } | cleartextLoggingTest.swift:338:23:338:23 | password | cleartextLoggingTest.swift:338:23:338:23 | { ... } | This operation writes '{ ... }' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:338:23:338:23 | password | password | -| cleartextLoggingTest.swift:340:23:340:23 | { ... } | cleartextLoggingTest.swift:340:23:340:23 | password | cleartextLoggingTest.swift:340:23:340:23 | { ... } | This operation writes '{ ... }' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:340:23:340:23 | password | password | -| cleartextLoggingTest.swift:342:14:342:14 | { ... } | cleartextLoggingTest.swift:342:14:342:14 | password | cleartextLoggingTest.swift:342:14:342:14 | { ... } | This operation writes '{ ... }' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:342:14:342:14 | password | password | -| cleartextLoggingTest.swift:347:69:347:69 | "..." | cleartextLoggingTest.swift:347:72:347:72 | passwordString | cleartextLoggingTest.swift:347:69:347:69 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:347:72:347:72 | passwordString | passwordString | -| cleartextLoggingTest.swift:350:61:350:61 | "..." | cleartextLoggingTest.swift:350:64:350:64 | passwordString | cleartextLoggingTest.swift:350:61:350:61 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:350:64:350:64 | passwordString | passwordString | -| cleartextLoggingTest.swift:351:92:351:118 | call to getVaList(_:) | cleartextLoggingTest.swift:351:103:351:103 | passwordString | cleartextLoggingTest.swift:351:92:351:118 | call to getVaList(_:) | This operation writes 'call to getVaList(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:351:103:351:103 | passwordString | passwordString | -| cleartextLoggingTest.swift:353:20:353:20 | "..." | cleartextLoggingTest.swift:353:23:353:23 | passwordString | cleartextLoggingTest.swift:353:20:353:20 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:353:23:353:23 | passwordString | passwordString | -| cleartextLoggingTest.swift:354:40:354:40 | [...] | cleartextLoggingTest.swift:354:40:354:40 | passwordString | cleartextLoggingTest.swift:354:40:354:40 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:354:40:354:40 | passwordString | passwordString | -| cleartextLoggingTest.swift:355:44:355:51 | [...] | cleartextLoggingTest.swift:355:51:355:51 | passwordString | cleartextLoggingTest.swift:355:44:355:51 | [...] | This operation writes '[...]' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:355:51:355:51 | passwordString | passwordString | -| cleartextLoggingTest.swift:356:17:356:17 | "..." | cleartextLoggingTest.swift:356:20:356:20 | passwordString | cleartextLoggingTest.swift:356:17:356:17 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:356:20:356:20 | passwordString | passwordString | -| cleartextLoggingTest.swift:357:37:357:63 | call to getVaList(_:) | cleartextLoggingTest.swift:357:48:357:48 | passwordString | cleartextLoggingTest.swift:357:37:357:63 | call to getVaList(_:) | This operation writes 'call to getVaList(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:357:48:357:48 | passwordString | passwordString | -| cleartextLoggingTest.swift:358:23:358:23 | "..." | cleartextLoggingTest.swift:358:26:358:26 | passwordString | cleartextLoggingTest.swift:358:23:358:23 | "..." | This operation writes '"..."' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:358:26:358:26 | passwordString | passwordString | -| cleartextLoggingTest.swift:359:43:359:69 | call to getVaList(_:) | cleartextLoggingTest.swift:359:54:359:54 | passwordString | cleartextLoggingTest.swift:359:43:359:69 | call to getVaList(_:) | This operation writes 'call to getVaList(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:359:54:359:54 | passwordString | passwordString | -| cleartextLoggingTest.swift:365:18:365:18 | authKey | cleartextLoggingTest.swift:365:18:365:18 | authKey | cleartextLoggingTest.swift:365:18:365:18 | authKey | This operation writes 'authKey' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:365:18:365:18 | authKey | authKey | -| cleartextLoggingTest.swift:366:18:366:33 | call to String.init(_:) | cleartextLoggingTest.swift:366:25:366:25 | authKey2 | cleartextLoggingTest.swift:366:18:366:33 | call to String.init(_:) | This operation writes 'call to String.init(_:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:366:25:366:25 | authKey2 | authKey2 | -| cleartextLoggingTest.swift:369:16:369:40 | call to NSString.init(string:) | cleartextLoggingTest.swift:369:33:369:33 | authKey | cleartextLoggingTest.swift:369:16:369:40 | call to NSString.init(string:) | This operation writes 'call to NSString.init(string:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:369:33:369:33 | authKey | authKey | -| cleartextLoggingTest.swift:370:13:370:13 | authKey | cleartextLoggingTest.swift:370:13:370:13 | authKey | cleartextLoggingTest.swift:370:13:370:13 | authKey | This operation writes 'authKey' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:370:13:370:13 | authKey | authKey | -| cleartextLoggingTest.swift:371:24:371:24 | authKey | cleartextLoggingTest.swift:371:24:371:24 | authKey | cleartextLoggingTest.swift:371:24:371:24 | authKey | This operation writes 'authKey' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:371:24:371:24 | authKey | authKey | -| cleartextLoggingTest.swift:378:16:378:16 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:378:16:378:16 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:379:18:379:18 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:379:18:379:18 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:380:18:380:18 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:380:18:380:18 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:381:17:381:37 | call to NSString.init(string:) | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:381:17:381:37 | call to NSString.init(string:) | This operation writes 'call to NSString.init(string:)' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:382:19:382:19 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:382:19:382:19 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:383:20:383:20 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:383:20:383:20 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:384:18:384:18 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:384:18:384:18 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:385:21:385:21 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:385:21:385:21 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -| cleartextLoggingTest.swift:386:18:386:18 | msg | cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:386:18:386:18 | msg | This operation writes 'msg' to a log file. It may contain unencrypted sensitive data from $@. | cleartextLoggingTest.swift:377:29:377:29 | authKey | authKey | -edges -| cleartextLoggingTest.swift:167:11:167:11 | [...] [Collection element] | cleartextLoggingTest.swift:167:11:167:11 | [...] | provenance | | -| cleartextLoggingTest.swift:167:11:167:11 | password | cleartextLoggingTest.swift:167:11:167:11 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:168:11:168:11 | [...] [Collection element] | cleartextLoggingTest.swift:168:11:168:11 | [...] | provenance | | -| cleartextLoggingTest.swift:168:11:168:11 | password | cleartextLoggingTest.swift:168:11:168:11 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:170:11:170:11 | [...] [Collection element] | cleartextLoggingTest.swift:170:11:170:11 | [...] | provenance | | -| cleartextLoggingTest.swift:170:11:170:11 | password | cleartextLoggingTest.swift:170:11:170:11 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:175:16:175:16 | [...] [Collection element] | cleartextLoggingTest.swift:175:16:175:16 | [...] | provenance | | -| cleartextLoggingTest.swift:175:16:175:16 | password | cleartextLoggingTest.swift:175:16:175:16 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:180:17:180:17 | [...] [Collection element] | cleartextLoggingTest.swift:180:17:180:17 | [...] | provenance | | -| cleartextLoggingTest.swift:180:17:180:17 | password | cleartextLoggingTest.swift:180:17:180:17 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:181:20:181:24 | [...] [Collection element] | cleartextLoggingTest.swift:181:20:181:24 | [...] | provenance | | -| cleartextLoggingTest.swift:181:24:181:24 | password | cleartextLoggingTest.swift:181:20:181:24 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:182:14:182:14 | password | cleartextLoggingTest.swift:182:11:182:11 | "..." | provenance | | -| cleartextLoggingTest.swift:183:28:183:37 | [...] [Collection element] | cleartextLoggingTest.swift:183:18:183:38 | call to getVaList(_:) | provenance | | -| cleartextLoggingTest.swift:183:29:183:29 | password | cleartextLoggingTest.swift:183:28:183:37 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:184:31:184:44 | [...] [Collection element] | cleartextLoggingTest.swift:184:21:184:45 | call to getVaList(_:) | provenance | | -| cleartextLoggingTest.swift:184:36:184:36 | password | cleartextLoggingTest.swift:184:31:184:44 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:224:49:224:49 | [...] [Collection element] | cleartextLoggingTest.swift:224:49:224:49 | [...] | provenance | | -| cleartextLoggingTest.swift:224:49:224:49 | password | cleartextLoggingTest.swift:224:49:224:49 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:225:55:225:63 | [...] [Collection element] | cleartextLoggingTest.swift:225:55:225:63 | [...] | provenance | | -| cleartextLoggingTest.swift:225:63:225:63 | password | cleartextLoggingTest.swift:225:55:225:63 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:240:24:240:24 | x | cleartextLoggingTest.swift:241:8:241:8 | x | provenance | | -| cleartextLoggingTest.swift:243:10:243:22 | call to getPassword() | cleartextLoggingTest.swift:244:8:244:8 | y | provenance | | -| cleartextLoggingTest.swift:253:7:253:7 | self | file://:0:0:0:0 | self | provenance | | -| cleartextLoggingTest.swift:263:8:263:11 | .password | cleartextLoggingTest.swift:253:7:253:7 | self | provenance | | -| cleartextLoggingTest.swift:263:8:263:11 | .password | cleartextLoggingTest.swift:263:8:263:20 | .value | provenance | Config | -| cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | cleartextLoggingTest.swift:286:23:286:23 | [post] myString2 | provenance | | -| cleartextLoggingTest.swift:286:8:286:8 | password | cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:286:23:286:23 | [post] myString2 | cleartextLoggingTest.swift:287:8:287:8 | myString2 | provenance | | -| cleartextLoggingTest.swift:287:8:287:8 | [...] [Collection element] | cleartextLoggingTest.swift:287:8:287:8 | [...] | provenance | | -| cleartextLoggingTest.swift:287:8:287:8 | myString2 | cleartextLoggingTest.swift:287:8:287:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:289:8:289:18 | ... .+(_:_:) ... | cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | cleartextLoggingTest.swift:289:33:289:33 | [post] myString3 | provenance | | -| cleartextLoggingTest.swift:289:18:289:18 | password | cleartextLoggingTest.swift:289:8:289:18 | ... .+(_:_:) ... | provenance | | -| cleartextLoggingTest.swift:289:33:289:33 | [post] myString3 | cleartextLoggingTest.swift:290:8:290:8 | myString3 | provenance | | -| cleartextLoggingTest.swift:290:8:290:8 | [...] [Collection element] | cleartextLoggingTest.swift:290:8:290:8 | [...] | provenance | | -| cleartextLoggingTest.swift:290:8:290:8 | myString3 | cleartextLoggingTest.swift:290:8:290:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | cleartextLoggingTest.swift:295:28:295:28 | [post] myString5 | provenance | | -| cleartextLoggingTest.swift:295:13:295:13 | password | cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:295:28:295:28 | [post] myString5 | cleartextLoggingTest.swift:296:13:296:13 | myString5 | provenance | | -| cleartextLoggingTest.swift:296:13:296:13 | [...] [Collection element] | cleartextLoggingTest.swift:296:13:296:13 | [...] | provenance | | -| cleartextLoggingTest.swift:296:13:296:13 | myString5 | cleartextLoggingTest.swift:296:13:296:13 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:301:7:301:7 | password | cleartextLoggingTest.swift:301:22:301:22 | [post] myString7 | provenance | | -| cleartextLoggingTest.swift:301:22:301:22 | [post] myString7 | cleartextLoggingTest.swift:302:7:302:7 | myString7 | provenance | | -| cleartextLoggingTest.swift:307:2:307:2 | [post] myString9 | cleartextLoggingTest.swift:308:8:308:8 | myString9 | provenance | | -| cleartextLoggingTest.swift:307:18:307:18 | password | cleartextLoggingTest.swift:307:2:307:2 | [post] myString9 | provenance | | -| cleartextLoggingTest.swift:308:8:308:8 | [...] [Collection element] | cleartextLoggingTest.swift:308:8:308:8 | [...] | provenance | | -| cleartextLoggingTest.swift:308:8:308:8 | myString9 | cleartextLoggingTest.swift:308:8:308:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:311:2:311:2 | [post] myString10 | cleartextLoggingTest.swift:313:8:313:8 | myString10 | provenance | | -| cleartextLoggingTest.swift:311:19:311:19 | password | cleartextLoggingTest.swift:311:2:311:2 | [post] myString10 | provenance | | -| cleartextLoggingTest.swift:313:8:313:8 | [...] [Collection element] | cleartextLoggingTest.swift:313:8:313:8 | [...] | provenance | | -| cleartextLoggingTest.swift:313:8:313:8 | myString10 | cleartextLoggingTest.swift:313:8:313:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:318:2:318:2 | password | cleartextLoggingTest.swift:318:22:318:22 | [post] myString12 | provenance | | -| cleartextLoggingTest.swift:318:22:318:22 | [post] myString12 | cleartextLoggingTest.swift:319:8:319:8 | myString12 | provenance | | -| cleartextLoggingTest.swift:319:8:319:8 | [...] [Collection element] | cleartextLoggingTest.swift:319:8:319:8 | [...] | provenance | | -| cleartextLoggingTest.swift:319:8:319:8 | myString12 | cleartextLoggingTest.swift:319:8:319:8 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:334:17:334:17 | password | cleartextLoggingTest.swift:334:17:334:17 | { ... } | provenance | | -| cleartextLoggingTest.swift:336:20:336:20 | password | cleartextLoggingTest.swift:336:20:336:20 | { ... } | provenance | | -| cleartextLoggingTest.swift:338:23:338:23 | password | cleartextLoggingTest.swift:338:23:338:23 | { ... } | provenance | | -| cleartextLoggingTest.swift:340:23:340:23 | password | cleartextLoggingTest.swift:340:23:340:23 | { ... } | provenance | | -| cleartextLoggingTest.swift:342:14:342:14 | password | cleartextLoggingTest.swift:342:14:342:14 | { ... } | provenance | | -| cleartextLoggingTest.swift:347:72:347:72 | passwordString | cleartextLoggingTest.swift:347:69:347:69 | "..." | provenance | | -| cleartextLoggingTest.swift:350:64:350:64 | passwordString | cleartextLoggingTest.swift:350:61:350:61 | "..." | provenance | | -| cleartextLoggingTest.swift:351:102:351:117 | [...] [Collection element] | cleartextLoggingTest.swift:351:92:351:118 | call to getVaList(_:) | provenance | | -| cleartextLoggingTest.swift:351:103:351:103 | passwordString | cleartextLoggingTest.swift:351:102:351:117 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:353:23:353:23 | passwordString | cleartextLoggingTest.swift:353:20:353:20 | "..." | provenance | | -| cleartextLoggingTest.swift:354:40:354:40 | [...] [Collection element] | cleartextLoggingTest.swift:354:40:354:40 | [...] | provenance | | -| cleartextLoggingTest.swift:354:40:354:40 | passwordString | cleartextLoggingTest.swift:354:40:354:40 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:355:44:355:51 | [...] [Collection element] | cleartextLoggingTest.swift:355:44:355:51 | [...] | provenance | | -| cleartextLoggingTest.swift:355:51:355:51 | passwordString | cleartextLoggingTest.swift:355:44:355:51 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:356:20:356:20 | passwordString | cleartextLoggingTest.swift:356:17:356:17 | "..." | provenance | | -| cleartextLoggingTest.swift:357:47:357:62 | [...] [Collection element] | cleartextLoggingTest.swift:357:37:357:63 | call to getVaList(_:) | provenance | | -| cleartextLoggingTest.swift:357:48:357:48 | passwordString | cleartextLoggingTest.swift:357:47:357:62 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:358:26:358:26 | passwordString | cleartextLoggingTest.swift:358:23:358:23 | "..." | provenance | | -| cleartextLoggingTest.swift:359:53:359:68 | [...] [Collection element] | cleartextLoggingTest.swift:359:43:359:69 | call to getVaList(_:) | provenance | | -| cleartextLoggingTest.swift:359:54:359:54 | passwordString | cleartextLoggingTest.swift:359:53:359:68 | [...] [Collection element] | provenance | | -| cleartextLoggingTest.swift:366:25:366:25 | authKey2 | cleartextLoggingTest.swift:366:18:366:33 | call to String.init(_:) | provenance | | -| cleartextLoggingTest.swift:369:33:369:33 | authKey | cleartextLoggingTest.swift:369:16:369:40 | call to NSString.init(string:) | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:378:16:378:16 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:379:18:379:18 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:380:18:380:18 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:381:34:381:34 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:382:19:382:19 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:383:20:383:20 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:384:18:384:18 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:385:21:385:21 | msg | provenance | | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | cleartextLoggingTest.swift:386:18:386:18 | msg | provenance | | -| cleartextLoggingTest.swift:381:34:381:34 | msg | cleartextLoggingTest.swift:381:17:381:37 | call to NSString.init(string:) | provenance | | -| file://:0:0:0:0 | self | file://:0:0:0:0 | .value | provenance | Config | -nodes -| cleartextLoggingTest.swift:167:11:167:11 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:167:11:167:11 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:167:11:167:11 | password | semmle.label | password | -| cleartextLoggingTest.swift:168:11:168:11 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:168:11:168:11 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:168:11:168:11 | password | semmle.label | password | -| cleartextLoggingTest.swift:169:26:169:26 | password | semmle.label | password | -| cleartextLoggingTest.swift:170:11:170:11 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:170:11:170:11 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:170:11:170:11 | password | semmle.label | password | -| cleartextLoggingTest.swift:171:26:171:26 | password | semmle.label | password | -| cleartextLoggingTest.swift:172:42:172:42 | password | semmle.label | password | -| cleartextLoggingTest.swift:175:16:175:16 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:175:16:175:16 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:175:16:175:16 | password | semmle.label | password | -| cleartextLoggingTest.swift:177:10:177:10 | password | semmle.label | password | -| cleartextLoggingTest.swift:179:11:179:11 | password | semmle.label | password | -| cleartextLoggingTest.swift:180:17:180:17 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:180:17:180:17 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:180:17:180:17 | password | semmle.label | password | -| cleartextLoggingTest.swift:181:20:181:24 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:181:20:181:24 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:181:24:181:24 | password | semmle.label | password | -| cleartextLoggingTest.swift:182:11:182:11 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:182:14:182:14 | password | semmle.label | password | -| cleartextLoggingTest.swift:183:18:183:38 | call to getVaList(_:) | semmle.label | call to getVaList(_:) | -| cleartextLoggingTest.swift:183:28:183:37 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:183:29:183:29 | password | semmle.label | password | -| cleartextLoggingTest.swift:184:21:184:45 | call to getVaList(_:) | semmle.label | call to getVaList(_:) | -| cleartextLoggingTest.swift:184:31:184:44 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:184:36:184:36 | password | semmle.label | password | -| cleartextLoggingTest.swift:220:11:220:11 | passphrase | semmle.label | passphrase | -| cleartextLoggingTest.swift:221:11:221:11 | pass_phrase | semmle.label | pass_phrase | -| cleartextLoggingTest.swift:224:49:224:49 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:224:49:224:49 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:224:49:224:49 | password | semmle.label | password | -| cleartextLoggingTest.swift:225:55:225:63 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:225:55:225:63 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:225:63:225:63 | password | semmle.label | password | -| cleartextLoggingTest.swift:240:24:240:24 | x | semmle.label | x | -| cleartextLoggingTest.swift:241:8:241:8 | x | semmle.label | x | -| cleartextLoggingTest.swift:243:10:243:22 | call to getPassword() | semmle.label | call to getPassword() | -| cleartextLoggingTest.swift:244:8:244:8 | y | semmle.label | y | -| cleartextLoggingTest.swift:248:8:248:10 | .password | semmle.label | .password | -| cleartextLoggingTest.swift:253:7:253:7 | self | semmle.label | self | -| cleartextLoggingTest.swift:263:8:263:11 | .password | semmle.label | .password | -| cleartextLoggingTest.swift:263:8:263:20 | .value | semmle.label | .value | -| cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:286:8:286:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:286:8:286:8 | password | semmle.label | password | -| cleartextLoggingTest.swift:286:23:286:23 | [post] myString2 | semmle.label | [post] myString2 | -| cleartextLoggingTest.swift:287:8:287:8 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:287:8:287:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:287:8:287:8 | myString2 | semmle.label | myString2 | -| cleartextLoggingTest.swift:289:8:289:18 | ... .+(_:_:) ... | semmle.label | ... .+(_:_:) ... | -| cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:289:8:289:18 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:289:18:289:18 | password | semmle.label | password | -| cleartextLoggingTest.swift:289:33:289:33 | [post] myString3 | semmle.label | [post] myString3 | -| cleartextLoggingTest.swift:290:8:290:8 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:290:8:290:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:290:8:290:8 | myString3 | semmle.label | myString3 | -| cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:295:13:295:13 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:295:13:295:13 | password | semmle.label | password | -| cleartextLoggingTest.swift:295:28:295:28 | [post] myString5 | semmle.label | [post] myString5 | -| cleartextLoggingTest.swift:296:13:296:13 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:296:13:296:13 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:296:13:296:13 | myString5 | semmle.label | myString5 | -| cleartextLoggingTest.swift:301:7:301:7 | password | semmle.label | password | -| cleartextLoggingTest.swift:301:22:301:22 | [post] myString7 | semmle.label | [post] myString7 | -| cleartextLoggingTest.swift:302:7:302:7 | myString7 | semmle.label | myString7 | -| cleartextLoggingTest.swift:307:2:307:2 | [post] myString9 | semmle.label | [post] myString9 | -| cleartextLoggingTest.swift:307:18:307:18 | password | semmle.label | password | -| cleartextLoggingTest.swift:308:8:308:8 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:308:8:308:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:308:8:308:8 | myString9 | semmle.label | myString9 | -| cleartextLoggingTest.swift:311:2:311:2 | [post] myString10 | semmle.label | [post] myString10 | -| cleartextLoggingTest.swift:311:19:311:19 | password | semmle.label | password | -| cleartextLoggingTest.swift:313:8:313:8 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:313:8:313:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:313:8:313:8 | myString10 | semmle.label | myString10 | -| cleartextLoggingTest.swift:318:2:318:2 | password | semmle.label | password | -| cleartextLoggingTest.swift:318:22:318:22 | [post] myString12 | semmle.label | [post] myString12 | -| cleartextLoggingTest.swift:319:8:319:8 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:319:8:319:8 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:319:8:319:8 | myString12 | semmle.label | myString12 | -| cleartextLoggingTest.swift:334:17:334:17 | password | semmle.label | password | -| cleartextLoggingTest.swift:334:17:334:17 | { ... } | semmle.label | { ... } | -| cleartextLoggingTest.swift:336:20:336:20 | password | semmle.label | password | -| cleartextLoggingTest.swift:336:20:336:20 | { ... } | semmle.label | { ... } | -| cleartextLoggingTest.swift:338:23:338:23 | password | semmle.label | password | -| cleartextLoggingTest.swift:338:23:338:23 | { ... } | semmle.label | { ... } | -| cleartextLoggingTest.swift:340:23:340:23 | password | semmle.label | password | -| cleartextLoggingTest.swift:340:23:340:23 | { ... } | semmle.label | { ... } | -| cleartextLoggingTest.swift:342:14:342:14 | password | semmle.label | password | -| cleartextLoggingTest.swift:342:14:342:14 | { ... } | semmle.label | { ... } | -| cleartextLoggingTest.swift:347:69:347:69 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:347:72:347:72 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:350:61:350:61 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:350:64:350:64 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:351:92:351:118 | call to getVaList(_:) | semmle.label | call to getVaList(_:) | -| cleartextLoggingTest.swift:351:102:351:117 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:351:103:351:103 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:353:20:353:20 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:353:23:353:23 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:354:40:354:40 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:354:40:354:40 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:354:40:354:40 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:355:44:355:51 | [...] | semmle.label | [...] | -| cleartextLoggingTest.swift:355:44:355:51 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:355:51:355:51 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:356:17:356:17 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:356:20:356:20 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:357:37:357:63 | call to getVaList(_:) | semmle.label | call to getVaList(_:) | -| cleartextLoggingTest.swift:357:47:357:62 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:357:48:357:48 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:358:23:358:23 | "..." | semmle.label | "..." | -| cleartextLoggingTest.swift:358:26:358:26 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:359:43:359:69 | call to getVaList(_:) | semmle.label | call to getVaList(_:) | -| cleartextLoggingTest.swift:359:53:359:68 | [...] [Collection element] | semmle.label | [...] [Collection element] | -| cleartextLoggingTest.swift:359:54:359:54 | passwordString | semmle.label | passwordString | -| cleartextLoggingTest.swift:365:18:365:18 | authKey | semmle.label | authKey | -| cleartextLoggingTest.swift:366:18:366:33 | call to String.init(_:) | semmle.label | call to String.init(_:) | -| cleartextLoggingTest.swift:366:25:366:25 | authKey2 | semmle.label | authKey2 | -| cleartextLoggingTest.swift:369:16:369:40 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) | -| cleartextLoggingTest.swift:369:33:369:33 | authKey | semmle.label | authKey | -| cleartextLoggingTest.swift:370:13:370:13 | authKey | semmle.label | authKey | -| cleartextLoggingTest.swift:371:24:371:24 | authKey | semmle.label | authKey | -| cleartextLoggingTest.swift:377:29:377:29 | authKey | semmle.label | authKey | -| cleartextLoggingTest.swift:378:16:378:16 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:379:18:379:18 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:380:18:380:18 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:381:17:381:37 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) | -| cleartextLoggingTest.swift:381:34:381:34 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:382:19:382:19 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:383:20:383:20 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:384:18:384:18 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:385:21:385:21 | msg | semmle.label | msg | -| cleartextLoggingTest.swift:386:18:386:18 | msg | semmle.label | msg | -| file://:0:0:0:0 | .value | semmle.label | .value | -| file://:0:0:0:0 | self | semmle.label | self | -subpaths -| cleartextLoggingTest.swift:263:8:263:11 | .password | cleartextLoggingTest.swift:253:7:253:7 | self | file://:0:0:0:0 | .value | cleartextLoggingTest.swift:263:8:263:20 | .value | diff --git a/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.ql b/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.ql new file mode 100644 index 000000000000..e7371e9d7435 --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.ql @@ -0,0 +1,20 @@ +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.security.CleartextLoggingQuery +import utils.test.InlineExpectationsTest + +module CleartextLogging implements TestSig { + string getARelevantTag() { result = "hasCleartextLogging" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node source, DataFlow::Node sink | + CleartextLoggingFlow::flow(source, sink) and + location = sink.getLocation() and + element = sink.toString() and + tag = "hasCleartextLogging" and + value = source.asExpr().getLocation().getStartLine().toString() + ) + } +} + +import MakeTest diff --git a/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.qlref b/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.qlref deleted file mode 100644 index d277352353d1..000000000000 --- a/swift/ql/test/query-tests/Security/CWE-312/CleartextLoggingTest.qlref +++ /dev/null @@ -1,3 +0,0 @@ -query: queries/Security/CWE-312/CleartextLogging.ql -postprocess: - - utils/test/InlineExpectationsTestQuery.ql diff --git a/swift/ql/test/query-tests/Security/CWE-312/cleartextLoggingTest.swift b/swift/ql/test/query-tests/Security/CWE-312/cleartextLoggingTest.swift index 060d6c5041ef..c3f293785195 100644 --- a/swift/ql/test/query-tests/Security/CWE-312/cleartextLoggingTest.swift +++ b/swift/ql/test/query-tests/Security/CWE-312/cleartextLoggingTest.swift @@ -164,24 +164,24 @@ class MyRemoteLogger { // --- tests --- func test1(password: String, passwordHash : String, passphrase: String, pass_phrase: String) { - print(password) // $ Alert - print(password, separator: "") // $ Alert - print("", separator: password) // $ Alert - print(password, separator: "", terminator: "") // $ Alert - print("", separator: password, terminator: "") // $ Alert - print("", separator: "", terminator: password) // $ Alert + print(password) // $ hasCleartextLogging=167 + print(password, separator: "") // $ $ hasCleartextLogging=168 + print("", separator: password) // $ hasCleartextLogging=169 + print(password, separator: "", terminator: "") // $ hasCleartextLogging=170 + print("", separator: password, terminator: "") // $ hasCleartextLogging=171 + print("", separator: "", terminator: password) // $ hasCleartextLogging=172 print(passwordHash) // safe - debugPrint(password) // $ Alert + debugPrint(password) // $ hasCleartextLogging=175 - dump(password) // $ Alert + dump(password) // $ hasCleartextLogging=177 - NSLog(password) // $ Alert - NSLog("%@", password) // $ Alert - NSLog("%@ %@", "", password) // $ Alert - NSLog("\(password)") // $ Alert - NSLogv("%@", getVaList([password])) // $ Alert - NSLogv("%@ %@", getVaList(["", password])) // $ Alert + NSLog(password) // $ hasCleartextLogging=179 + NSLog("%@", password) // $ hasCleartextLogging=180 + NSLog("%@ %@", "", password) // $ hasCleartextLogging=181 + NSLog("\(password)") // $ hasCleartextLogging=182 + NSLogv("%@", getVaList([password])) // $ hasCleartextLogging=183 + NSLogv("%@ %@", getVaList(["", password])) // $ hasCleartextLogging=184 NSLog(passwordHash) // safe NSLogv("%@", getVaList([passwordHash])) // safe @@ -191,38 +191,38 @@ func test1(password: String, passwordHash : String, passphrase: String, pass_phr log.log("\(password)") // safe log.log("\(password, privacy: .auto)") // safe log.log("\(password, privacy: .private)") // safe - log.log("\(password, privacy: .public)") // $ MISSING: Alert + log.log("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=194 log.log("\(passwordHash, privacy: .public)") // safe log.log("\(password, privacy: .sensitive)") // safe - log.log("\(bankAccount)") // $ MISSING: Alert - log.log("\(bankAccount, privacy: .auto)") // $ MISSING: Alert + log.log("\(bankAccount)") // $ MISSING: hasCleartextLogging=197 + log.log("\(bankAccount, privacy: .auto)") // $ MISSING: hasCleartextLogging=198 log.log("\(bankAccount, privacy: .private)") // safe - log.log("\(bankAccount, privacy: .public)") // $ MISSING: Alert + log.log("\(bankAccount, privacy: .public)") // $ MISSING: hasCleartextLogging=200 log.log("\(bankAccount, privacy: .sensitive)") // safe - log.log(level: .default, "\(password, privacy: .public)") // $ MISSING: Alert - log.trace("\(password, privacy: .public)") // $ MISSING: Alert + log.log(level: .default, "\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=202 + log.trace("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=203 log.trace("\(passwordHash, privacy: .public)") // safe - log.debug("\(password, privacy: .public)") // $ MISSING: Alert + log.debug("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=205 log.debug("\(passwordHash, privacy: .public)") // safe - log.info("\(password, privacy: .public)") // $ MISSING: Alert + log.info("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=207 log.info("\(passwordHash, privacy: .public)") // safe - log.notice("\(password, privacy: .public)") // $ MISSING: Alert + log.notice("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=209 log.notice("\(passwordHash, privacy: .public)") // safe - log.warning("\(password, privacy: .public)") // $ MISSING: Alert + log.warning("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=211 log.warning("\(passwordHash, privacy: .public)") // safe - log.error("\(password, privacy: .public)") // $ MISSING: Alert + log.error("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=213 log.error("\(passwordHash, privacy: .public)") // safe - log.critical("\(password, privacy: .public)") // $ MISSING: Alert + log.critical("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=215 log.critical("\(passwordHash, privacy: .public)") // safe - log.fault("\(password, privacy: .public)") // $ MISSING: Alert + log.fault("\(password, privacy: .public)") // $ MISSING: hasCleartextLogging=217 log.fault("\(passwordHash, privacy: .public)") // safe - NSLog(passphrase) // $ Alert - NSLog(pass_phrase) // $ Alert + NSLog(passphrase) // $ hasCleartextLogging=220 + NSLog(pass_phrase) // $ hasCleartextLogging=221 os_log("%@", log: .default, type: .default, "") // safe - os_log("%@", log: .default, type: .default, password) // $ Alert - os_log("%@ %@ %@", log: .default, type: .default, "", "", password) // $ Alert + os_log("%@", log: .default, type: .default, password) // $ hasCleartextLogging=224 + os_log("%@ %@ %@", log: .default, type: .default, "", "", password) // $ hasCleartextLogging=225 } class MyClass { @@ -236,16 +236,16 @@ func doSomething(password: String) { } func test3(x: String) { // alternative evidence of sensitivity... - NSLog(x) // $ MISSING: Alert - doSomething(password: x); // $ Source - NSLog(x) // $ Alert + NSLog(x) // $ MISSING: hasCleartextLogging=240 + doSomething(password: x); + NSLog(x) // $ hasCleartextLogging=240 - let y = getPassword(); // $ Source - NSLog(y) // $ Alert + let y = getPassword(); + NSLog(y) // $ hasCleartextLogging=243 let z = MyClass() NSLog(z.harmless) // safe - NSLog(z.password) // $ Alert + NSLog(z.password) // $ hasCleartextLogging=248 } struct MyOuter { @@ -260,7 +260,7 @@ struct MyOuter { func test3(mo : MyOuter) { // struct members... - NSLog(mo.password.value) // $ Alert + NSLog(mo.password.value) // $ hasCleartextLogging=263 NSLog(mo.harmless.value) // safe } @@ -283,40 +283,40 @@ func test4(harmless: String, password: String) { print(harmless, to: &myString1) print(myString1) // safe - print(password, to: &myString2) // $ Source - print(myString2) // $ Alert + print(password, to: &myString2) + print(myString2) // $ hasCleartextLogging=286 - print("log: " + password, to: &myString3) // $ Source - print(myString3) // $ Alert + print("log: " + password, to: &myString3) + print(myString3) // $ hasCleartextLogging=289 debugPrint(harmless, to: &myString4) debugPrint(myString4) // safe - debugPrint(password, to: &myString5) // $ Source - debugPrint(myString5) // $ Alert + debugPrint(password, to: &myString5) + debugPrint(myString5) // $ hasCleartextLogging=295 dump(harmless, to: &myString6) dump(myString6) // safe - dump(password, to: &myString7) // $ Source - dump(myString7) // $ Alert + dump(password, to: &myString7) + dump(myString7) // $ hasCleartextLogging=301 myString8.write(harmless) print(myString8) - myString9.write(password) // $ Source - print(myString9) // $ Alert + myString9.write(password) + print(myString9) // $ hasCleartextLogging=307 myString10.write(harmless) - myString10.write(password) // $ Source + myString10.write(password) myString10.write(harmless) - print(myString10) // $ Alert + print(myString10) // $ hasCleartextLogging=311 harmless.write(to: &myString11) print(myString11) - password.write(to: &myString12) // $ Source - print(myString12) // $ Alert + password.write(to: &myString12) + print(myString12) // $ hasCleartextLogging=318 print(password, to: &myString13) // $ safe - only printed to another string debugPrint(password, to: &myString13) // $ safe - only printed to another string @@ -331,59 +331,59 @@ func test5(password: String, caseNum: Int) { switch caseNum { case 0: - assert(false, password) // $ Alert + assert(false, password) // $ hasCleartextLogging=334 case 1: - assertionFailure(password) // $ Alert + assertionFailure(password) // $ hasCleartextLogging=336 case 2: - precondition(false, password) // $ Alert + precondition(false, password) // $ hasCleartextLogging=338 case 3: - preconditionFailure(password) // $ Alert + preconditionFailure(password) // $ hasCleartextLogging=340 default: - fatalError(password) // $ Alert + fatalError(password) // $ hasCleartextLogging=342 } } func test6(passwordString: String) { - let e = NSException(name: NSExceptionName("exception"), reason: "\(passwordString) is incorrect!", userInfo: nil) // $ Alert + let e = NSException(name: NSExceptionName("exception"), reason: "\(passwordString) is incorrect!", userInfo: nil) // $ hasCleartextLogging=347 e.raise() - NSException.raise(NSExceptionName("exception"), format: "\(passwordString) is incorrect!", arguments: getVaList([])) // $ Alert - NSException.raise(NSExceptionName("exception"), format: "%s is incorrect!", arguments: getVaList([passwordString])) // $ Alert + NSException.raise(NSExceptionName("exception"), format: "\(passwordString) is incorrect!", arguments: getVaList([])) // $ hasCleartextLogging=350 + NSException.raise(NSExceptionName("exception"), format: "%s is incorrect!", arguments: getVaList([passwordString])) // $ hasCleartextLogging=351 - _ = dprintf(0, "\(passwordString) is incorrect!") // $ Alert - _ = dprintf(0, "%s is incorrect!", passwordString) // $ Alert - _ = dprintf(0, "%s: %s is incorrect!", "foo", passwordString) // $ Alert - _ = vprintf("\(passwordString) is incorrect!", getVaList([])) // $ Alert - _ = vprintf("%s is incorrect!", getVaList([passwordString])) // $ Alert - _ = vfprintf(nil, "\(passwordString) is incorrect!", getVaList([])) // $ Alert - _ = vfprintf(nil, "%s is incorrect!", getVaList([passwordString])) // $ Alert + _ = dprintf(0, "\(passwordString) is incorrect!") // $ hasCleartextLogging=353 + _ = dprintf(0, "%s is incorrect!", passwordString) // $ hasCleartextLogging=354 + _ = dprintf(0, "%s: %s is incorrect!", "foo", passwordString) // $ hasCleartextLogging=355 + _ = vprintf("\(passwordString) is incorrect!", getVaList([])) // $ hasCleartextLogging=356 + _ = vprintf("%s is incorrect!", getVaList([passwordString])) // $ hasCleartextLogging=357 + _ = vfprintf(nil, "\(passwordString) is incorrect!", getVaList([])) // $ hasCleartextLogging=358 + _ = vfprintf(nil, "%s is incorrect!", getVaList([passwordString])) // $ hasCleartextLogging=359 _ = vasprintf_l(nil, nil, "\(passwordString) is incorrect!", getVaList([])) // good (`sprintf` is not logging) _ = vasprintf_l(nil, nil, "%s is incorrect!", getVaList([passwordString])) // good (`sprintf` is not logging) } func test7(authKey: String, authKey2: Int, authKey3: Float, password: String, secret: String) { - log(message: authKey) // $ Alert - log(message: String(authKey2)) // $ Alert - logging(message: authKey) // $ MISSING: Alert - logfile(file: 0, message: authKey) // $ MISSING: Alert - logMessage(NSString(string: authKey)) // $ Alert - logInfo(authKey) // $ Alert - logError(errorMsg: authKey) // $ Alert + log(message: authKey) // $ hasCleartextLogging=365 + log(message: String(authKey2)) // $ hasCleartextLogging=366 + logging(message: authKey) // $ MISSING: hasCleartextLogging=367 + logfile(file: 0, message: authKey) // $ MISSING: hasCleartextLogging=368 + logMessage(NSString(string: authKey)) // $ hasCleartextLogging=369 + logInfo(authKey) // $ hasCleartextLogging=370 + logError(errorMsg: authKey) // $ hasCleartextLogging=371 harmless(authKey) // GOOD: not logging _ = logarithm(authKey3) // GOOD: not logging doLogin(login: authKey) // GOOD: not logging let logger = LogFile() - let msg = "authKey: " + authKey // $ Source - logger.log(msg) // $ Alert - logger.trace(msg) // $ Alert - logger.debug(msg) // $ Alert - logger.info(NSString(string: msg)) // $ Alert - logger.notice(msg) // $ Alert - logger.warning(msg) // $ Alert - logger.error(msg) // $ Alert - logger.critical(msg) // $ Alert - logger.fatal(msg) // $ Alert + let msg = "authKey: " + authKey + logger.log(msg) // $ hasCleartextLogging=377 + logger.trace(msg) // $ hasCleartextLogging=377 + logger.debug(msg) // $ hasCleartextLogging=377 + logger.info(NSString(string: msg)) // $ hasCleartextLogging=377 + logger.notice(msg) // $ hasCleartextLogging=377 + logger.warning(msg) // $ hasCleartextLogging=377 + logger.error(msg) // $ hasCleartextLogging=377 + logger.critical(msg) // $ hasCleartextLogging=377 + logger.fatal(msg) // $ hasCleartextLogging=377 let logic = Logic() logic.addInt(authKey2) // GOOD: not logging diff --git a/swift/ql/test/query-tests/Security/CWE-611/XXETest.expected b/swift/ql/test/query-tests/Security/CWE-611/XXETest.expected index 3f582702b1f9..e69de29bb2d1 100644 --- a/swift/ql/test/query-tests/Security/CWE-611/XXETest.expected +++ b/swift/ql/test/query-tests/Security/CWE-611/XXETest.expected @@ -1,85 +0,0 @@ -#select -| testAEXMLDocumentXXE.swift:51:32:51:32 | remoteString | testAEXMLDocumentXXE.swift:50:24:50:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:51:32:51:32 | remoteString | XML parsing depends on a $@ without guarding against external entity expansion. | testAEXMLDocumentXXE.swift:50:24:50:78 | call to String.init(contentsOf:) | user-provided value | -| testAEXMLDocumentXXE.swift:74:32:74:32 | remoteData | testAEXMLDocumentXXE.swift:70:24:70:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:74:32:74:32 | remoteData | XML parsing depends on a $@ without guarding against external entity expansion. | testAEXMLDocumentXXE.swift:70:24:70:78 | call to String.init(contentsOf:) | user-provided value | -| testAEXMLDocumentXXE.swift:99:17:99:17 | remoteData | testAEXMLDocumentXXE.swift:97:24:97:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:99:17:99:17 | remoteData | XML parsing depends on a $@ without guarding against external entity expansion. | testAEXMLDocumentXXE.swift:97:24:97:78 | call to String.init(contentsOf:) | user-provided value | -| testAEXMLDocumentXXE.swift:128:46:128:46 | remoteData | testAEXMLDocumentXXE.swift:126:24:126:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:128:46:128:46 | remoteData | XML parsing depends on a $@ without guarding against external entity expansion. | testAEXMLDocumentXXE.swift:126:24:126:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLDocumentXXE.swift:40:37:40:37 | remoteUrl | testXMLDocumentXXE.swift:38:24:38:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:40:37:40:37 | remoteUrl | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLDocumentXXE.swift:38:24:38:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLDocumentXXE.swift:58:31:58:31 | remoteData | testXMLDocumentXXE.swift:56:24:56:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:58:31:58:31 | remoteData | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLDocumentXXE.swift:56:24:56:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLDocumentXXE.swift:75:36:75:36 | remoteString | testXMLDocumentXXE.swift:74:24:74:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:75:36:75:36 | remoteString | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLDocumentXXE.swift:74:24:74:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLParserXXE.swift:34:34:34:34 | remoteData | testXMLParserXXE.swift:32:24:32:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:34:34:34:34 | remoteData | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLParserXXE.swift:32:24:32:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLParserXXE.swift:42:36:42:36 | remoteStream | testXMLParserXXE.swift:39:24:39:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:42:36:42:36 | remoteStream | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLParserXXE.swift:39:24:39:78 | call to String.init(contentsOf:) | user-provided value | -| testXMLParserXXE.swift:49:40:49:40 | remoteUrl | testXMLParserXXE.swift:47:24:47:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:49:40:49:40 | remoteUrl | XML parsing depends on a $@ without guarding against external entity expansion. | testXMLParserXXE.swift:47:24:47:78 | call to String.init(contentsOf:) | user-provided value | -edges -| testAEXMLDocumentXXE.swift:50:24:50:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:51:32:51:32 | remoteString | provenance | | -| testAEXMLDocumentXXE.swift:70:24:70:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:71:27:71:27 | remoteString | provenance | | -| testAEXMLDocumentXXE.swift:71:22:71:39 | call to Data.init(_:) | testAEXMLDocumentXXE.swift:74:32:74:32 | remoteData | provenance | | -| testAEXMLDocumentXXE.swift:71:27:71:27 | remoteString | testAEXMLDocumentXXE.swift:71:22:71:39 | call to Data.init(_:) | provenance | | -| testAEXMLDocumentXXE.swift:97:24:97:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:98:27:98:27 | remoteString | provenance | | -| testAEXMLDocumentXXE.swift:98:22:98:39 | call to Data.init(_:) | testAEXMLDocumentXXE.swift:99:17:99:17 | remoteData | provenance | | -| testAEXMLDocumentXXE.swift:98:27:98:27 | remoteString | testAEXMLDocumentXXE.swift:98:22:98:39 | call to Data.init(_:) | provenance | | -| testAEXMLDocumentXXE.swift:126:24:126:78 | call to String.init(contentsOf:) | testAEXMLDocumentXXE.swift:127:27:127:27 | remoteString | provenance | | -| testAEXMLDocumentXXE.swift:127:22:127:39 | call to Data.init(_:) | testAEXMLDocumentXXE.swift:128:46:128:46 | remoteData | provenance | | -| testAEXMLDocumentXXE.swift:127:27:127:27 | remoteString | testAEXMLDocumentXXE.swift:127:22:127:39 | call to Data.init(_:) | provenance | | -| testXMLDocumentXXE.swift:38:24:38:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:39:33:39:33 | remoteString | provenance | | -| testXMLDocumentXXE.swift:39:21:39:45 | call to URL.init(string:) [some:0] | testXMLDocumentXXE.swift:39:21:39:46 | ...! | provenance | | -| testXMLDocumentXXE.swift:39:21:39:46 | ...! | testXMLDocumentXXE.swift:40:37:40:37 | remoteUrl | provenance | | -| testXMLDocumentXXE.swift:39:33:39:33 | remoteString | testXMLDocumentXXE.swift:39:21:39:45 | call to URL.init(string:) [some:0] | provenance | | -| testXMLDocumentXXE.swift:56:24:56:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:57:27:57:27 | remoteString | provenance | | -| testXMLDocumentXXE.swift:57:22:57:39 | call to Data.init(_:) | testXMLDocumentXXE.swift:58:31:58:31 | remoteData | provenance | | -| testXMLDocumentXXE.swift:57:27:57:27 | remoteString | testXMLDocumentXXE.swift:57:22:57:39 | call to Data.init(_:) | provenance | | -| testXMLDocumentXXE.swift:74:24:74:78 | call to String.init(contentsOf:) | testXMLDocumentXXE.swift:75:36:75:36 | remoteString | provenance | | -| testXMLParserXXE.swift:32:24:32:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:33:27:33:27 | remoteString | provenance | | -| testXMLParserXXE.swift:33:22:33:39 | call to Data.init(_:) | testXMLParserXXE.swift:34:34:34:34 | remoteData | provenance | | -| testXMLParserXXE.swift:33:27:33:27 | remoteString | testXMLParserXXE.swift:33:22:33:39 | call to Data.init(_:) | provenance | | -| testXMLParserXXE.swift:39:24:39:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:40:27:40:27 | remoteString | provenance | | -| testXMLParserXXE.swift:40:22:40:39 | call to Data.init(_:) | testXMLParserXXE.swift:41:42:41:42 | remoteData | provenance | | -| testXMLParserXXE.swift:40:22:40:39 | call to Data.init(_:) | testXMLParserXXE.swift:42:36:42:36 | remoteStream | provenance | AdditionalTaintStep | -| testXMLParserXXE.swift:40:27:40:27 | remoteString | testXMLParserXXE.swift:40:22:40:39 | call to Data.init(_:) | provenance | | -| testXMLParserXXE.swift:41:24:41:52 | call to InputStream.init(data:) | testXMLParserXXE.swift:42:36:42:36 | remoteStream | provenance | | -| testXMLParserXXE.swift:41:42:41:42 | remoteData | testXMLParserXXE.swift:41:24:41:52 | call to InputStream.init(data:) | provenance | | -| testXMLParserXXE.swift:47:24:47:78 | call to String.init(contentsOf:) | testXMLParserXXE.swift:48:33:48:33 | remoteString | provenance | | -| testXMLParserXXE.swift:48:21:48:45 | call to URL.init(string:) [some:0] | testXMLParserXXE.swift:48:21:48:46 | ...! | provenance | | -| testXMLParserXXE.swift:48:21:48:46 | ...! | testXMLParserXXE.swift:49:40:49:40 | remoteUrl | provenance | | -| testXMLParserXXE.swift:48:33:48:33 | remoteString | testXMLParserXXE.swift:48:21:48:45 | call to URL.init(string:) [some:0] | provenance | | -nodes -| testAEXMLDocumentXXE.swift:50:24:50:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testAEXMLDocumentXXE.swift:51:32:51:32 | remoteString | semmle.label | remoteString | -| testAEXMLDocumentXXE.swift:70:24:70:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testAEXMLDocumentXXE.swift:71:22:71:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testAEXMLDocumentXXE.swift:71:27:71:27 | remoteString | semmle.label | remoteString | -| testAEXMLDocumentXXE.swift:74:32:74:32 | remoteData | semmle.label | remoteData | -| testAEXMLDocumentXXE.swift:97:24:97:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testAEXMLDocumentXXE.swift:98:22:98:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testAEXMLDocumentXXE.swift:98:27:98:27 | remoteString | semmle.label | remoteString | -| testAEXMLDocumentXXE.swift:99:17:99:17 | remoteData | semmle.label | remoteData | -| testAEXMLDocumentXXE.swift:126:24:126:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testAEXMLDocumentXXE.swift:127:22:127:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testAEXMLDocumentXXE.swift:127:27:127:27 | remoteString | semmle.label | remoteString | -| testAEXMLDocumentXXE.swift:128:46:128:46 | remoteData | semmle.label | remoteData | -| testXMLDocumentXXE.swift:38:24:38:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLDocumentXXE.swift:39:21:39:45 | call to URL.init(string:) [some:0] | semmle.label | call to URL.init(string:) [some:0] | -| testXMLDocumentXXE.swift:39:21:39:46 | ...! | semmle.label | ...! | -| testXMLDocumentXXE.swift:39:33:39:33 | remoteString | semmle.label | remoteString | -| testXMLDocumentXXE.swift:40:37:40:37 | remoteUrl | semmle.label | remoteUrl | -| testXMLDocumentXXE.swift:56:24:56:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLDocumentXXE.swift:57:22:57:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testXMLDocumentXXE.swift:57:27:57:27 | remoteString | semmle.label | remoteString | -| testXMLDocumentXXE.swift:58:31:58:31 | remoteData | semmle.label | remoteData | -| testXMLDocumentXXE.swift:74:24:74:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLDocumentXXE.swift:75:36:75:36 | remoteString | semmle.label | remoteString | -| testXMLParserXXE.swift:32:24:32:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLParserXXE.swift:33:22:33:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testXMLParserXXE.swift:33:27:33:27 | remoteString | semmle.label | remoteString | -| testXMLParserXXE.swift:34:34:34:34 | remoteData | semmle.label | remoteData | -| testXMLParserXXE.swift:39:24:39:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLParserXXE.swift:40:22:40:39 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | -| testXMLParserXXE.swift:40:27:40:27 | remoteString | semmle.label | remoteString | -| testXMLParserXXE.swift:41:24:41:52 | call to InputStream.init(data:) | semmle.label | call to InputStream.init(data:) | -| testXMLParserXXE.swift:41:42:41:42 | remoteData | semmle.label | remoteData | -| testXMLParserXXE.swift:42:36:42:36 | remoteStream | semmle.label | remoteStream | -| testXMLParserXXE.swift:47:24:47:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| testXMLParserXXE.swift:48:21:48:45 | call to URL.init(string:) [some:0] | semmle.label | call to URL.init(string:) [some:0] | -| testXMLParserXXE.swift:48:21:48:46 | ...! | semmle.label | ...! | -| testXMLParserXXE.swift:48:33:48:33 | remoteString | semmle.label | remoteString | -| testXMLParserXXE.swift:49:40:49:40 | remoteUrl | semmle.label | remoteUrl | -subpaths diff --git a/swift/ql/test/query-tests/Security/CWE-611/XXETest.ql b/swift/ql/test/query-tests/Security/CWE-611/XXETest.ql new file mode 100644 index 000000000000..64001151b442 --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-611/XXETest.ql @@ -0,0 +1,27 @@ +import swift +import codeql.swift.dataflow.FlowSources +import codeql.swift.security.XXEQuery +import utils.test.InlineExpectationsTest + +class TestRemoteSource extends RemoteFlowSource { + TestRemoteSource() { this.asExpr().(ApplyExpr).getStaticTarget().getName().matches("source%") } + + override string getSourceType() { result = "Test source" } +} + +module XxeTest implements TestSig { + string getARelevantTag() { result = "hasXXE" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node source, DataFlow::Node sink, Expr sinkExpr | + XxeFlow::flow(source, sink) and + sinkExpr = sink.asExpr() and + location = sinkExpr.getLocation() and + element = sinkExpr.toString() and + tag = "hasXXE" and + value = source.asExpr().getLocation().getStartLine().toString() + ) + } +} + +import MakeTest diff --git a/swift/ql/test/query-tests/Security/CWE-611/XXETest.qlref b/swift/ql/test/query-tests/Security/CWE-611/XXETest.qlref deleted file mode 100644 index 83154ac29d4d..000000000000 --- a/swift/ql/test/query-tests/Security/CWE-611/XXETest.qlref +++ /dev/null @@ -1,3 +0,0 @@ -query: queries/Security/CWE-611/XXE.ql -postprocess: - - utils/test/InlineExpectationsTestQuery.ql diff --git a/swift/ql/test/query-tests/Security/CWE-611/testAEXMLDocumentXXE.swift b/swift/ql/test/query-tests/Security/CWE-611/testAEXMLDocumentXXE.swift index c7501d4bcbdd..9f3370301580 100644 --- a/swift/ql/test/query-tests/Security/CWE-611/testAEXMLDocumentXXE.swift +++ b/swift/ql/test/query-tests/Security/CWE-611/testAEXMLDocumentXXE.swift @@ -47,8 +47,8 @@ func testString() { var options = AEXMLOptions() options.parserSettings.shouldResolveExternalEntities = true - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source - let _ = AEXMLDocument(xml: remoteString, encoding: String.Encoding.utf8, options: options) // $ Alert + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) + let _ = AEXMLDocument(xml: remoteString, encoding: String.Encoding.utf8, options: options) // $ hasXXE=50 } func testStringSafeImplicit() { @@ -67,11 +67,11 @@ func testStringSafeExplicit() { } func testData() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) var options = AEXMLOptions() options.parserSettings.shouldResolveExternalEntities = true - let _ = AEXMLDocument(xml: remoteData, options: options) // $ Alert + let _ = AEXMLDocument(xml: remoteData, options: options) // $ hasXXE=70 } func testDataSafeImplicit() { @@ -94,9 +94,9 @@ func testDataLoadXml() { options.parserSettings.shouldResolveExternalEntities = true let doc = AEXMLDocument(root: nil, options: options) - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) - doc.loadXML(remoteData) // $ Alert + doc.loadXML(remoteData) // $ hasXXE=97 } func testDataLoadXmlSafeImplicit() { @@ -123,9 +123,9 @@ func testParser() { options.parserSettings.shouldResolveExternalEntities = true let doc = AEXMLDocument(root: nil, options: options) - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) - let _ = AEXMLParser(document: doc, data: remoteData) // $ Alert + let _ = AEXMLParser(document: doc, data: remoteData) // $ hasXXE=126 } func testParserSafeImplicit() { @@ -145,4 +145,4 @@ func testParserSafeExplicit() { let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) let _ = AEXMLParser(document: doc, data: remoteData) // NO XXE -} +} \ No newline at end of file diff --git a/swift/ql/test/query-tests/Security/CWE-611/testXMLDocumentXXE.swift b/swift/ql/test/query-tests/Security/CWE-611/testXMLDocumentXXE.swift index 9cfa694839a2..07180301e727 100644 --- a/swift/ql/test/query-tests/Security/CWE-611/testXMLDocumentXXE.swift +++ b/swift/ql/test/query-tests/Security/CWE-611/testXMLDocumentXXE.swift @@ -35,9 +35,9 @@ class XMLDocument { // --- tests --- func testUrl() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteUrl = URL(string: remoteString)! - let _ = XMLDocument(contentsOf: remoteUrl, options: [.nodeLoadExternalEntitiesAlways]) // $ Alert + let _ = XMLDocument(contentsOf: remoteUrl, options: [.nodeLoadExternalEntitiesAlways]) // $ hasXXE=38 } func testUrlSafeImplicit() { @@ -53,9 +53,9 @@ func testUrlSafeExplicit() { } func testData() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) - let _ = XMLDocument(data: remoteData, options: [.nodeLoadExternalEntitiesAlways]) // $ Alert + let _ = XMLDocument(data: remoteData, options: [.nodeLoadExternalEntitiesAlways]) // $ hasXXE=56 } func testDataSafeImplicit() { @@ -71,8 +71,8 @@ func testDataSafeExplicit() { } func testString() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source - let _ = XMLDocument(xmlString: remoteString, options: [.nodeLoadExternalEntitiesAlways]) // $ Alert + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) + let _ = XMLDocument(xmlString: remoteString, options: [.nodeLoadExternalEntitiesAlways]) // $ hasXXE=74 } func testStringSafeImplicit() { diff --git a/swift/ql/test/query-tests/Security/CWE-611/testXMLParserXXE.swift b/swift/ql/test/query-tests/Security/CWE-611/testXMLParserXXE.swift index 3b679675b1a4..75538f014f9f 100644 --- a/swift/ql/test/query-tests/Security/CWE-611/testXMLParserXXE.swift +++ b/swift/ql/test/query-tests/Security/CWE-611/testXMLParserXXE.swift @@ -29,24 +29,24 @@ class XMLParser { // --- tests --- func testData() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) - let parser = XMLParser(data: remoteData) // $ Alert + let parser = XMLParser(data: remoteData) // $ hasXXE=32 parser.shouldResolveExternalEntities = true } func testInputStream() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteData = Data(remoteString) let remoteStream = InputStream(data: remoteData) - let parser = XMLParser(stream: remoteStream) // $ Alert + let parser = XMLParser(stream: remoteStream) // $ hasXXE=39 parser.shouldResolveExternalEntities = true } func testUrl() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let remoteUrl = URL(string: remoteString)! - let parser = XMLParser(contentsOf: remoteUrl) // $ Alert + let parser = XMLParser(contentsOf: remoteUrl) // $ hasXXE=47 parser?.shouldResolveExternalEntities = true } @@ -89,4 +89,4 @@ func testUrlSafeExplicit() { let remoteUrl = URL(string: remoteString)! let parser = XMLParser(contentsOf: remoteUrl) // NO XXE: parser disables external entities parser?.shouldResolveExternalEntities = false -} +} \ No newline at end of file diff --git a/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.expected b/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.expected index 4c1b0eb782ef..e69de29bb2d1 100644 --- a/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.expected +++ b/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.expected @@ -1,20 +0,0 @@ -#select -| predicateInjection.swift:26:25:26:25 | remoteString | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:26:25:26:25 | remoteString | This predicate depends on a $@. | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | user-provided value | -| predicateInjection.swift:29:25:29:25 | remoteString | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:29:25:29:25 | remoteString | This predicate depends on a $@. | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | user-provided value | -| predicateInjection.swift:31:25:31:25 | remoteString | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:31:25:31:25 | remoteString | This predicate depends on a $@. | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | user-provided value | -| predicateInjection.swift:33:25:33:25 | remoteString | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:33:25:33:25 | remoteString | This predicate depends on a $@. | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | user-provided value | -| predicateInjection.swift:36:42:36:42 | remoteString | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:36:42:36:42 | remoteString | This predicate depends on a $@. | predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | user-provided value | -edges -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:26:25:26:25 | remoteString | provenance | | -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:29:25:29:25 | remoteString | provenance | | -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:31:25:31:25 | remoteString | provenance | | -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:33:25:33:25 | remoteString | provenance | | -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | predicateInjection.swift:36:42:36:42 | remoteString | provenance | | -nodes -| predicateInjection.swift:23:24:23:78 | call to String.init(contentsOf:) | semmle.label | call to String.init(contentsOf:) | -| predicateInjection.swift:26:25:26:25 | remoteString | semmle.label | remoteString | -| predicateInjection.swift:29:25:29:25 | remoteString | semmle.label | remoteString | -| predicateInjection.swift:31:25:31:25 | remoteString | semmle.label | remoteString | -| predicateInjection.swift:33:25:33:25 | remoteString | semmle.label | remoteString | -| predicateInjection.swift:36:42:36:42 | remoteString | semmle.label | remoteString | -subpaths diff --git a/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.ql b/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.ql new file mode 100644 index 000000000000..202ca05ad43b --- /dev/null +++ b/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.ql @@ -0,0 +1,21 @@ +import swift +import codeql.swift.dataflow.DataFlow +import codeql.swift.security.PredicateInjectionQuery +import utils.test.InlineExpectationsTest + +module PredicateInjectionTest implements TestSig { + string getARelevantTag() { result = "hasPredicateInjection" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::Node source, DataFlow::Node sink, Expr sinkExpr | + PredicateInjectionFlow::flow(source, sink) and + sinkExpr = sink.asExpr() and + location = sinkExpr.getLocation() and + element = sinkExpr.toString() and + tag = "hasPredicateInjection" and + value = source.asExpr().getLocation().getStartLine().toString() + ) + } +} + +import MakeTest diff --git a/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.qlref b/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.qlref deleted file mode 100644 index f968b9a35259..000000000000 --- a/swift/ql/test/query-tests/Security/CWE-946/PredicateInjectionTest.qlref +++ /dev/null @@ -1,3 +0,0 @@ -query: queries/Security/CWE-943/PredicateInjection.ql -postprocess: - - utils/test/InlineExpectationsTestQuery.ql diff --git a/swift/ql/test/query-tests/Security/CWE-946/predicateInjection.swift b/swift/ql/test/query-tests/Security/CWE-946/predicateInjection.swift index 56ead0544d2a..1de6b50f4cf5 100644 --- a/swift/ql/test/query-tests/Security/CWE-946/predicateInjection.swift +++ b/swift/ql/test/query-tests/Security/CWE-946/predicateInjection.swift @@ -20,19 +20,19 @@ class NSPredicate { // --- tests --- func test() { - let remoteString = String(contentsOf: URL(string: "http://example.com/")!) // $ Source + let remoteString = String(contentsOf: URL(string: "http://example.com/")!) let safeString = "safe" - NSPredicate(format: remoteString, argumentArray: []) // $ Alert + NSPredicate(format: remoteString, argumentArray: []) // $ hasPredicateInjection=23 NSPredicate(format: safeString, argumentArray: []) // Safe NSPredicate(format: safeString, argumentArray: [remoteString]) // Safe - NSPredicate(format: remoteString, arguments: CVaListPointer(_fromUnsafeMutablePointer: UnsafeMutablePointer(bitPattern: 0)!)) // $ Alert + NSPredicate(format: remoteString, arguments: CVaListPointer(_fromUnsafeMutablePointer: UnsafeMutablePointer(bitPattern: 0)!)) // $ hasPredicateInjection=23 NSPredicate(format: safeString, arguments: CVaListPointer(_fromUnsafeMutablePointer: UnsafeMutablePointer(bitPattern: 0)!)) // Safe - NSPredicate(format: remoteString) // $ Alert + NSPredicate(format: remoteString) // $ hasPredicateInjection=23 NSPredicate(format: safeString) // Safe - NSPredicate(format: remoteString, "" as! CVarArg) // $ Alert + NSPredicate(format: remoteString, "" as! CVarArg) // $ hasPredicateInjection=23 NSPredicate(format: safeString, "" as! CVarArg) // Safe NSPredicate(format: safeString, remoteString as! CVarArg) // Safe - NSPredicate(fromMetadataQueryString: remoteString) // $ Alert + NSPredicate(fromMetadataQueryString: remoteString) // $ hasPredicateInjection=23 NSPredicate(fromMetadataQueryString: safeString) // Safe }